Uncategorized

This Blog Has Moved

Posted on September 4, 2012. Filed under: Uncategorized |

This blog has moved and is now at http://www.bbs-software.com.

Advertisements
Read Full Post | Make a Comment ( None so far )

Mailing Files Programmatically with GMail

Posted on July 25, 2012. Filed under: Uncategorized |

Recently I had the need to send someone multiple 1-2 MB files. Email was the best option, for reasons that are not very interesting, and outside the scope of this article.

I naturally turned to my favorite language, Ruby.  I did a little research into the various gems and their configuration, and offer this simple example (source code below) in the hope that it will save you a little time if you have the same need.

I’ve tried to trim out anything not relating to the actual sending of the mail so that you can more easily understand it and adapt it for your use.

– Keith

#!/usr/bin/env ruby
# Mails a file using GMail's SMTP Server.
# For illustrative purposes; error checking and testing intentionally omitted for brevity.
#
# Requirements: 
#   1) the 'mail' gem must be installed
#   2) a file named 'pw.txt' containing the Google password must be present
#      in the current directory.
#
# Ruby versions: tested on 1.9.3, 1.8.7, JRuby
#
# Keith Bennett

require 'rubygems' # Need this for Ruby 1.8
require 'mail'


ATTACHMENT_FILESPEC = 'attachment.txt'
File.open(ATTACHMENT_FILESPEC, 'w') do |file|
  file << "Sample attachment text file, sent #{Time.now}\n"
end


# Used for GMail authentication and the 'from' header field.
def my_gmail_address
  # Return your gmail address, e.g.:
  'me@gmail.com'
end


# Used for 'to' header field
def recipients
  # a single address or a comma separated list of email addresses, e.g.:
  'mom@aol.com,fred@people.com'
end


# GMail password for SMTP authentication.
# Create a file named 'pw.txt' and put your password there in plain text.
# Not the best way to do this!
def password
  File.read('pw.txt')
end


def body_text
  "This message contains the following attachment: #{ATTACHMENT_FILESPEC}.\nSent #{Time.now}"
end


def subject_text
  "Gmail-It Attached File: #{ATTACHMENT_FILESPEC}"
end


# This information could probably be put in the Mail.deliver block below,
# but it's here in case multiple mail calls are made.
Mail.defaults do
  delivery_method :smtp, { 
    :address              => "smtp.gmail.com",
    :port                 => 587,
    :domain               => 'gmail.com',
    :user_name            => my_gmail_address,
    :password             => password,
    :enable_starttls_auto => true  }
end
  
puts "Delivering file: #{ATTACHMENT_FILESPEC} to #{recipients}."

Mail.deliver do
  from     my_gmail_address
  to       recipients
  subject  subject_text
  body     body_text
  add_file ATTACHMENT_FILESPEC
end

puts "File #{ATTACHMENT_FILESPEC} sent."
puts "Check recipient email account(s) (#{recipients}) to verify success."  
Read Full Post | Make a Comment ( None so far )

class_eval, instance_eval, eval

Posted on January 28, 2012. Filed under: Uncategorized |

A couple of days ago I attended an interesting discussion of metaprogramming by Arild Shirazi at a meeting of the Northern Virginia Ruby User Group. Arild showed how he used metaprogramming (class_eval in particular) to generate functions whose names would only be known at runtime. His talk was very effective at reminding me that I don’t know as much about metaprogramming as I thought!

(more…)

Read Full Post | Make a Comment ( None so far )

Design by Contract, Ruby Style

Posted on June 15, 2011. Filed under: Uncategorized |

I recently encountered a situation in which I was writing data to a key/value data store. There was a code layer that insulated the business logic layer from the data store internals. I wanted to be able to unit test this business logic without needing access to the data store.

I could mock the data access layer, but I wanted something more functional — something that would behave like the data store layer, and possibly even be used to test it. I decided to write something mimicking the production data store layer that used a Ruby Hash for storage. How could I use the language to help me know that I had faithfully reproduced all the functions in the original object?
(more…)

Read Full Post | Make a Comment ( 2 so far )

Android GUI’s — The Case Against GUI Builders and Data Driven GUI Configuration

Posted on May 28, 2011. Filed under: Uncategorized |

GUI builders are great, but for building anything more than a trivial solitary application, without discipline and diligence, the duplication can create a productivity and quality quagmire. In addition, XML is a human-hostile configuration language.

Copy and Paste – Bad!

As the number of windows increases, the natural tendency is to copy and paste. For the same reasons copy and paste degrade the quality of source code, they do the same to user interface configurations.

Changing Project Wide Settings

On a Java Swing project on which I once worked, it was decided to follow the Java Look and Feel Design Guidelines, and to use some standard project-wide conventions. We had to change lots of windows and components, even down to the minutiae of border pixel widths. Fortunately, we had been creating our UI’s in source code, so with some refactoring, I was able to confine these common characteristics to a single shared place in the code.

Consider what would have happened, though, if our GUI configurations had been encoded in XML by a GUI builder. We would have had to painstakingly edit each window’s XML file and hope that the repetition and boredom did not numb us into introducing errors. Even if a smart developer automated the parsing, modifying, and regenerating of the XML, there would probably be errors because the way builders are usually used, there is no semantic information in them to communicate intentions…for example, a border width of twelve pixels in one instance might be there because absolute placement was necessary, whereas in another instance it was merely ‘whatever our standard border is’.

Even if the rework were done with a GUI builder it would have been a lot of repetitive work. Note too, that in all the cases above, the work involved to make a change does not decrease very much with each successive change. Because of the huge cost of change, the natural result is a fierce resistance to proposed improvements by developers and management alike.

Mitigating the Damage — Using Custom Components instead of Framework Components

However, this could work much better by assembling pre-built custom project components. These project components would configure and combine framework components and conform to the project-wide settings without the need for any attention by the developer that uses them.

The Android platform has some features that enable the developer to extract duplicated configuration in an application into shareable fragments.  In addition, across applications, it supports the creation of shared “libraries” containing both configuration and code that can be statically linked into an Android application’s .apk file. This enables the use of standard configurations across applications (or even across the paid and free version of the same application). See Marc Lester Tan’s excellent post about the available options here.

Creating a component could be done either by creating an XML file for it, or by creating a custom component class in the framework’s programming language (Java in our case) and making it available to the GUI builder.

While either approach would centralize the customized settings, creating the component in code would enable assigning meaningful names to option values (e.g. LookAndFeel.STANDARD_BORDER_WIDTH as opposed to 12). In addition, it would be possible to calculate values (for example, to accommodate different display device characteristics).

The Code / XML Disconnect

As the size of the UI grows, it’s almost inevitable that duplication will happen, and the resolving of that duplication by refactoring will lag. However, when development occurs both in source code and in XML (with or without a GUI builder), the distance and disconnect between the two would logically result in a greater lag. Lazy or high pressure projects that routinely trade long term debt for short term velocity may even give up resolving duplication entirely.

Why Not Just XML?

So, if using both code and XML present a problematic disconnect, why not use only XML? Because XML is a suitable language for computers, but a miserable language for humans. A wise man once said “XML is like lye; very useful to humans, but they should never touch it.”

While formatting and color coding XML code help make it a little more readable, it is nevertheless not very efficient at communicating. Consider, for example, a twenty line element repeated twenty times, where all elements vary only in the value of a single integer. Source code could easily communicate the similarities and differences, whereas XML would hide them.

Android — Java and XML

The Android development team encourages the use of XML rather than Java code for defining user interface elements. The Java language is verbose, rigid, and ceremonial, so defining the user interfaces in code is not that dramatic an improvement over XML.

In contrast, using a more flexible language (my choice would be Ruby) would make a better approach feasible. It would be possible to write a domain specific language (something like Ruby on Rails, but probably a lot smaller) that would simplify development and facilitate the creation of living (i.e. executable) configuration that is comprehensible, maintainable, and extensible. I think I’ll call it…Ruby on Roids. ;)

There are, of course, technical challenges to using Ruby on the Android platform. The most difficult one is probably the limited amount of memory on handheld Android devices. Languages like Ruby use more memory than Java. The JRuby team is working on Ruboto and Mirah, both of which are promising, but not quite there yet.

What About Our Designers?

If all design is implemented as code, then it would be more difficult to separate design work from programming work. However, a solution to this would be to have designers design mockups with XML, and then have developers implement them in code. Alternatively, the two could work together when designing.

What Can We Do Now?

I eagerly await the coming of age of Ruby alternatives for Android development. Until then, my plan is to use Java, and to write my UI’s in Java rather than XML as much as possible.

Personally, I’ve done very little work with GUI builders. For those of you who have, what was your experience? How did you handle duplication, maintainabilty, and extensibility? What were the challenges, and how did you overcome them?

Read Full Post | Make a Comment ( 4 so far )

Singapore and Its Red Dot RubyConf

Posted on May 10, 2011. Filed under: Uncategorized |

The Conference

On April 22-23, 2011 was the first ever regional Ruby Conference in Southeast Asia (http://reddotrubyconf.com, Twitter tag #reddotrubyconf). (Conference links and resources provided by @cheeaun are here). It was really cool seeing people from so many different countries in the region unite around their appreciation of the Ruby language.

In additional to the regional speakers and participants, Matz (the creator of the Ruby language, for those who don’t know) made the trip from Japan, as did Dave Thomas, Tom Preston-Warner, Gregg Pollack, Sarah Mei, and yours truly from the United States for this historic (in the Ruby world, anyway) occasion. Matz handles his celebrity well, and didn’t mind when a few of us asked him for photos with him.

Matz and Paolo Falcone from Friendster Philippines

Matz with Paolo Falcone from Friendster Philippines

Matz and Me (Keith Bennett)

Matz and Me (Keith Bennett)

SMU (Singapore Management University), RedDotRubyConf Site

SMU (Singapore Management University), RedDotRubyConf Site

The conference was held at SMU, Singapore Management University, on their beautiful campus in the middle of the city. It was a one track conference, with sessions held in a comfortable and spacious auditorium.

Pivotal Labs is, well, pivotal, in Singapore’s Ruby community. They’ve invested time and money in events such as the conference and provide a lot of technical expertise in the community. (Carl Coryell-Martin (http://pivotallabs.com/users/ccoryell/blog), head of Pivotal Labs Singapore, worked with Andy Croll of Anideo and Jason Ong to organize RedDotRubyConf.) Some of the Pivotal crew is working with Friendster in Manila for Friendster’s new makeover. Pivotal employs an intense but humane work style, with only rare exceptions to colocation and almost continuous pair programming. They say that while their work day is generally limited to eight hours, it can be an exhausting eight hours. The Pivotal folks, as everyone else, were friendly and welcoming (MINSWAN – Matz is Nice So We Are Nice).

They hosted an evening Rails installfest the night before Thursday’s Rails tutorial, and I stopped by to see if I could help. After sitting down, I turned to the person on my left, and it was Matz! I spared him the three bows and instead said a friendly hello.

Jason Ong

Keith Bennett (Me) with Jason Ong

Keith Bennett (Me) with Jason Ong

I had been corresponding with Jason Ong, one of the principal organizers, for a while before the conference and was happy to finally meet him in person. Jason runs a Rails consultancy and is also a musician. He’s quick to laugh, but thoughtful and serious too, caring a lot about Singapore and the world.

On one of my first days in Singapore, Jason brought me to a typical Singaporean Hainanese chicken joint. Hainanese chicken, he explained, is prepared by boiling the chicken and then immersing it in freezing cold water. This has a special effect on the fat that makes the chicken especially tender.

…and Andras Kristof

Andras Kristof of Viki.com

Andras Kristof of Viki.com

After dinner Jason and I went over to the Starbucks, where Andras Kristof happened to pass by. Andras is originally from Hungary, but has spent several years each in Japan and Singapore. The three of us chatted for a couple of hours. Andras is the Senior Director of Engineering for http://www.viki.com, a unique and awesome web site where movies can be viewed with subtitles contributed by the users themselves in many languages (including Klingon!). He had intended to work on his upcoming conference talk, but decided he’d enjoy chatting more.

My US mobile phone is a Verizon phone, CDMA, not GSM, and is therefore unusable almost everywhere in the world outside the US. I have an old and simple GSM phone I use for my travels, but I felt I needed an Android phone so I could stay in constant email contact, and wander the cities of my travels more intelligently with GPS and Google Maps. So I asked Andras where I could find a cheap used Android phone, and he offered to give me an old phone he was no longer using! (I tried to pay him for it, but he refused.) It’s a cute half size Motorola phone with a swing-out keyboard. The phone’s been a great help and has gotten a lot of compliments. (The coin below is included for size context; it’s a 10 Philippine peso coin and is about the size of a U.S. quarter.)

Andras' Motorola Android Phone, Closed

Andras' Motorola Android Phone, Closed

Andras' Motorola Android Phone, Opened

Andras' Motorola Android Phone, Opened

HackerspaceSG

While in Bangkok, I visited Bangkok Hackerspace (blog article at https://krbtech.wordpress.com/2010/03/02/bangspace-bangkok-hackerspace/), and learned that the Singapore Hackerspace (http://hackerspace.sg) was looked up to as a very cool space. As a result, I wanted to check it out, and finally, after the last day of the conference, Jay Fajardo and Jason Torres of http://www.proudcloud.net in the Philippines joined me on an urban trek to the space. We must have looked funny, stopping frequently to pore over the tiny phone to study the map and figure out where we were going. Well, ok, I must have looked funny.

Keith, Jay, and Jason at HackerspaceSG

Keith, Jay, and Jason at HackerspaceSG

HackerspaceSG Main Room

HackerspaceSG Main Room

We finally arrived in the Arab Quarter, where the hackerspace is located. The Hackerspace is on the second floor and is a homey set of rooms. There’s a main area that has chairs and tables for working and for holding meetings. There’s a kitchen and rest room in the back, and then there’s the more private area where there are working booths (something like a library’s quiet area). Here’s a photo of the three of us in the doorway of that section. Note the sign — although Singapore is a strict place, it’s not *that* strict, and they’re only kidding.

The next day I went back to Hackerspace and met Shara and Brian, a couple of Rails developers from KL (regional-speak for Kuala Lumpur), Malaysia. Also there was Ben Scherrey, American developer in Bangkok and owner of the building in which Bangkok’s Hackerspace has been housed. Ben is doing some interesting Android work, writing code in C++ using Android’s NDI.

Keith, Jason, Ben, Shara, Brian at HackerspaceSG

Keith, Jason, Ben, Shara, Brian at HackerspaceSG

Now for some things of tourist interest…

Durian Crepes Stand in Chinatown (yummy!)

Making the Durian Crepe

Making the Durian Crepe

Adding the Durian to the Crepe

Adding the Durian to the Crepe

Durian Crepe - The Finished Product

Durian Crepe - The Finished Product

The Awesome Singapore National Library Building

Singapore National Library

Singapore National Library

Inside the Hindu Temple in the Bugis Area

Inside the Hindu Temple at Bugis

Inside the Hindu Temple at Bugis

Goodbye, Singapore, until we meet again…

Read Full Post | Make a Comment ( None so far )

Sun Java Coding Conventions Revisited

Posted on March 6, 2010. Filed under: Uncategorized | Tags: , , , , , |

The Sun Java Code Conventions document, written in 1997, and available at http://java.sun.com/docs/codeconv/, continues to be a valuable resource for Java programmers. In addition to the nuts and bolts of formatting and the like, it includes some great wisdom, such as:

The frequency of comments sometimes reflects poor quality of code. When you feel compelled to add a comment, consider rewriting the code to make it clearer.

I’ve recently been asked to participate on a committee that will come up with a set of coding standards. These standards will be used by several teams, so it’s especially important that they be good and not overly restrictive. The Sun conventions are a reasonable place we may start. On the whole, I think they’re great, but I do have some reservations about a few points. Below are some notes regarding the Sun conventions, listed by section in the original document to which they refer. Quotes from the Sun document are indicated in italics, except for source code. I invite your feedback. This article may be modified based on your comments or my own “clearer thinking and better information”.

(more…)

Read Full Post | Make a Comment ( 3 so far )

Bangspace — Bangkok Hackerspace

Posted on March 2, 2010. Filed under: Uncategorized | Tags: , , |

One of the manifestations of community among IT professionals and enthusiasts is the hackerspace (see Wikipedia article at http://en.wikipedia.org/wiki/Hackerspace). A hackerspace is a place where hackers (in the loose sense of the word, that is, benevolent software and hardware enthusiasts) can meet to talk, learn, and work together.

A recent addition to the hackerspaces of the world is Bangspace in Bangkok, Thailand. Bangspace is a modest room on the fifth floor of a small walkup office building near the Ekkamai Skytrain station. The office building is occupied by Proteus Technologies (http://proteus-tech.com/), whose owner, Ben Scherrey, is an American member of Bangspace who has donated use of the space.

Bangspace Street View

Bangspace Street View

Bangspace Front Door

Bangspace Front Door

Bangspace is a bit of a pun; on the one hand, it is an abbreviation for Bangkok Hackerspace, and on the other hand, it describes a two character string containing bang (“!”) and space (“ “). Since a space is difficult to display (indeed, it is invisible), an underscore is sometimes used. So you might see Bangspace expressed as !_.

Meetings are usually 8:00 PM to midnight or so. Currently, Monday is Drupal night, Tuesday is Android night, and Wednesday is Hardware Hacking night. Every other week is Beercamp, which is a general social evening including, in addition to the human attendees, beer. Unfortunately for me, my time in Bangkok did not include one of these days, so I never got to experience Beercamp.

Bangspace has a membership fee of 500 baht (about $15 US) per month, but you don’t have to join to participate. Ben elaborates: “You don’t have to be a member to participate in !_ but you do have to have a member there willing to be “responsible” for you. Membership gets you a key and voting rights as to what to do when we decide money issues or other things requiring consensus. People join !_ because they want to support it.”

Getting to know the Bangspace folks was one of the major highlights of my stay in Bangkok. Others were:

The Bangspace folks are a diverse and friendly lot, including Thais, Germans, French, Japanese, South Africans, Indians, Americans, and others. They are software developers, graphic artists, entrepreneurs, and more.

Meetings are very informal, with people coming and going any time they feel like it. Sometimes the theme of the meeting is in name only – last night was Android night but we did very little that was Android-related. Nevertheless we all seemed to enjoy the evening. Jean Jordaan, a South African Python and Plone developer working on UN-funded project web sites, found out that he could install Python on his Android phone. Thirty seconds later, he showed me the Python shell on it. The geek in me got excited to see it and before I knew it a “Yeah baby!” leapt out of my mouth…to which Jean jokingly replied “That’ll impress the girls”…hmmm, I wonder if he was referring to the Python shell, or my exclamation. ;)

A few minutes later, Jean showed me a bug he encountered running Python on the phone. We looked into it further, and found that it was most likely a bug in the Android Scripting Environment. We didn’t find it in the issue tracker, so he’s going to submit it.

At last Tuesday’s Android session, Adam showed us the Android app he is working on while learning Android. Sugree then made a late appearance and stole the show, sharing with us his formidable expertise and experience with Android. Sugree (http://sugree.com/self) is rather famous in the Thailand technical community. He is an expert in many areas. After working with Android in his spare time for just a few months, he taught it like a pro. The next day I read an article in the Bangkok Post in which Sugree was quoted; obviously the press views him with similar respect. One of Sugree’s distinctions is that of the most prolific tweeter in Thailand, and probably in the world, with 544,111 tweets as of February 4, 2010.

Sugree teaching Android at Bangspace

Sugree teaching Android at Bangspace

Bangspace’s online discussions are in the !space Google group at http://groups.google.com/group/bangkok-space. Here’s an excerpt about Sugree:

—-

31o5: He [Sugree] is one of the most popular hacker and tweeple in Thailand I guess,
surprising that his tweets are not auto or bot, he is a human being :)

jfxberns: I think that’s an interesting hypothesis, Satoko. I suggest we do
tests on Sugree to see if he really is Human.

31o5: is actually sugree human? could be very well designed humanoid….
good for our electronics hacking.

—-

I wonder if Sugree will show up at electronics hacking night now…

* * * *

We also had a visit from Nicholas of Singapore who is an investor in technology companies. As I hear it, the Singapore hackerspace is the envy of developers throughout Asia. Perhaps someone can blog or add a comment to this article about it?

About 11:00 or so we started talking about workplace environments, contrasting those of Germany (represented by Jan) and Sweden (represented by Adam) with that of the United States (represented by me). They represent opposite extremes – employers in most U.S. states have a lot of power over their employees, whereas in their countries the employees reign. The problem with the latter is that it stifles entrepreneurship – many who would start businesses in the U.S. would not dare to in Germany or Sweden for fear of not being able to adjust their workforce (i.e. fire a problem or nonperforming worker) if necessary. We all agreed that the optimal solution is a balance of the two.

Jan at Bangspace

Jan at Bangspace

Amp and Adam at Bangspace

Amp and Adam at Bangspace

On Saturday I posted an invitation to collaborate on working with Android. Adam responded, and together we worked on refactoring an Android app he’s been writing. There was nobody around with a key to the Bangspace office, so Satoko, a Japanese entrepreneur doing graphic design work for clients in Japan and Thailand (see http://mozo.in.th/), invited us to join her at her office, which is at a convenient location near the Asok Skytrain station. It’s a comfortable office with air conditioning and Internet connectivity. Sweet! One of Satoko’s contributions to Bangspace is the all important responsibility of stocking the fridge with beer, soda, and bottled water, to enable us to endure the long hacking hours in a hydrated (or, alternatively, mildly inebriated) state. There’s a charge for the drinks that includes a modest profit; this helps support Bangspace.

What started as a casual invitation to get dinner together that evening turned into a great time. Satoko suggested a Chinese restaurant near her office that was awesome. She, Adam, Sajal and I are from four different countries on three different continents, and the conversation was truly enriched by that diversity. We stayed there for what seemed like hours, leaving only when the restaurant started closing.

After dinner, Satoko mentioned she was going to get a 100 baht ($3.00) one hour Thai massage, and agreed to let me tag along. It was the kind of place where you leave your shoes outside the door. After we left, I felt something strange in my shoe and figured I’d better stop and remove it. As soon as I took the shoe off and put it on the ground, a frog jumped out!

What do the dinner, the massage, and the frog have to do with Bangspace? Not very much, directly at least – but it does illustrate that the initial connections made from technical community are seeds from which other experiences can sprout and multiply. My time at Bangspace was less than two weeks, and even so, I have made friends and connections that will likely last a very long time. Put differently, although creating community requires time, energy, and sometimes money, we should never lose sight of the resulting benefits that make it a very wise investment.

I wish I could continue to hang out with the Bangspace folks, but other adventures beckon. I have returned to Chiang Mai today to continue massage school for another week before returning to the States next week.

– Keith Bennett

Keith with Tiger

Gratuitous photo of author with tiger. The tiger's name is Kao Nio (Sticky Rice) and lives at Tiger Kingdom in Mae Rim, Thailand.

Read Full Post | Make a Comment ( 5 so far )

GPartEd – Free and Open Source Disk Partitioner

Posted on July 1, 2009. Filed under: Uncategorized | Tags: , , , |

GPartEd Main Window

GPartEd (http://gparted.sourceforge.net) is a free and open source software tool that does disk partitioning like its commercial counterpart, PartitionMagic. Although GPartEd is cursed with a boring name, it is nevertheless a superstar product with both looks and brains. (For the looks, see http://gparted.sourceforge.net/screenshots.php.) The name GPartEd is an abbreviation for Gnome Partition Editor.

Although I have not done any thorough or systematic comparison of GPartEd and PartitionMagic, I can say that I have successfully used GPartEd for some nontrivial partition schemes, and it worked beautifully.

GPartEd runs natively on Linux, but if you are using other operating systems such as Windows or OS X, you can put it on a bootable medium such as a CD or USB drive and boot from that medium. More information on this is at http://gparted.sourceforge.net/livecd.php.

When the bootable medium starts up, it boots Linux, but you don’t need to care about that — it’s got an attractive and intuitive GUI. It’s aware of a multitude of partition types, including types used by Windows, OS X, Linux, and Solaris, so it’s not likely that the one you want will be missing. You can see all the supported partition types at http://gparted.sourceforge.net/features.php.

Using GPartEd to Add an Operating System to Your Drive

My recent need for GPartEd was to add Linux to a Windows laptop. The result is that I’m writing this on that laptop, running Ubuntu Linux 9.04. The laptop’s hard drive came with a single huge Windows partition and a small recovery partition. Using GPartEd, I shrunk the Windows partition and created several ext4 and swap partitions for the Linux install.

The Ubuntu installation writes the Grub boot loader to the boot sector of your drive. When your system starts up, Grub presents a menu, and you can select which operating system you would like to boot.

Although I used it to have Linux and Windows share the same drive, you could have any combination of operating systems. This could be a way to try out a new OS (e.g. Windows 7 or a new Linux distro) without totally committing to it. Since Macs are now Intel based, GPartEd should work fine on a Mac, and you could boot OS X, Linux, or Windows from different partitions on the same drive. The only caveat is that you need to install a boot loader to enable you to select which OS to load when the system boots up. Most Linux installations will do this for you automatically.

Another handy use of GPartEd is to create a partition for data that can be shared by multiple OS’s on the drive. For example, you may have documents, photos, and/or music files that you want to access regardless of which OS you boot. All you need to do is to create the partition in a format recognized by all the OS’s on your system. I use fat32 for this.

GPartEd is just one of a multitude of free open source software products that can make our technical lives easier — and cheaper. Kudos to the developers and other contributors that made it possible.

Feel free to comment with any feedback or experiences.

– Keith

Read Full Post | Make a Comment ( 5 so far )

The Loss of One’s Adopted Country – Another Result of the Economic Crisis

Posted on March 30, 2009. Filed under: Uncategorized |

At a recent technical meeting I met a colleague with whom I’ve spoken from time to time. He is from India and has been working on an H-1 visa after getting his Masters degree at a state university here in the U.S. He, his wife, and his children have been here together for thirteen years, and consider this country their home.

Now, because of the economic crisis, he is having a hard time finding work to keep his visa active. He told me that if he cannot find work within a couple of weeks, he will have to return to India. This would be a huge, sudden, and unwelcome upheaval for his family.

It struck me that this is an a side of the economic crisis that has not been discussed much. While many of us are suffering in other ways, very few of us risk losing our adopted country. And, while one could argue that, as a guest worker, he should have known that his welcome might end, is he really more guilty of unrealistic optimism (or, as Alan Greenspan put it, irrational exuberance) than the rest of us?

Read Full Post | Make a Comment ( 4 so far )

« Previous Entries

Liked it here?
Why not try sites on the blogroll...