Archives for March 2008

The best business card ever

Okay, this is my favorite business card of all time:

Great business cards

In case you can’t read the image, it says:


W. W. GREEN, President

Wars Fought Stud Service
Revolutions Started Tigers Tamed
Assassinations Plotted Bars Emptied
Governments Run Computers Verified
Uprisings Quelled Orgies Organized

I found this business card in an old book that I bought at a book sale. So I never met the person who made the card, and the mystery behind the business card remains intact. How many uncreative (boring) business cards have you seen in your life? This business card illustrates that a little bit of creativity can go a long way towards sticking in someone’s mind.

March Madness 2008!

March Madness is here again, baby! The brackets have been released, and the University of North Carolina is a #1 seed. The wonderful thing about attending the University of Kentucky for undergrad and then UNC in grad school is that I’ve always got great teams to root for in March. 🙂

If you’re a fan, Google released a basketball bracket gadget for iGoogle. It’s really useful to track how you’re doing.

SEO Advice: Getting Links

[Note: This post was written in December 2005 (!). I’m going through some of my old draft posts and publishing the ones that aren’t too awful. Some of these “Leftovers” will be rough.]

Okay, here are some ways to get high-quality links without emailing, paying, or even paying attention to search engines:

Provide a useful one-time service. It really doesn’t take very much. Here are some examples:

  • Check out in Internet Explorer. You have to sign up for a free account, but then this site provides an online interface to create ANSI-compliant warning signs, and you get PDF files ready to print. This site is great for making gag signs. Here’s one I made in just a few minutes:
    Watch out for falling spam!
  • Is that too much trouble? You don’t know how to create PDFs, or you don’t have safety clip art lying around? Okay, here’s a simpler example: everyone hates getting spam email. If you leave your email address lying out on the web, you’ll get more email spam. Here’s a site that lets you make a graphical badge instead: That url is for Gmail, but lets you make sigs for Hotmail, Yahoo!, AOL and others.
  • Is that too much trouble? Graphics mojo leave you cold? Well, you can also encode email addresses using JavaScript or character entities. For example, can turn a normal email address like into something like
    that email harvesters won’t bother with.
  • Make a robots.txt validator.

Provide an ongoing service:

  • Web-based services like Bloglines are a great example.

Become a resource:

  • You can do this with a personal or company blog. Blogs are a great way to get link love or just to get your word out.
  • If blogs sound scary, start out with newsletters. Or studies. Or surveys. Or white papers.
  • Once a company (I’ll call them site A) that does language translations asked me why they didn’t rank as highly as another website (I’ll call them site B). When I checked it out, site A had very little content, just 5-6 pages with contact info and a short description of what they did. It was like an online brochure. So what did site B have? They offered a tutorial about the difference between Katakana, Hiragana, and Kanji, plus they showed how to write a few characters. Who would you link to, the empty brochure site or the site with tutorial pages?

Provide valuable information.

Be the first. Be the first means coming up with a creative idea that catches the fancy of the web.

Who appointed Loren Baker the judge of the best search blogs? No one at all: he just saw a creative opportunity and took it.

Get an article written about you. Be aware that controversy gets attention, but can also affect how people perceive you. If you bait people too often, that affects your reputation.

Open up your product:

  • I bought a TiVo because I could hack it. I chose XM Radio because they offered they offered a device (the XM PCR) that allowed your computer to get analog satellite radio. And this sexy device has an open-source server so that you can stream RSS or almost any other info to the device in addition to playing music. Help people tinker and hack with your product. When I found out that a local computer store had a 160GB external hard drive that could be hacked to run Linux, I ran out and got one. I installed Linux on it (because I could, dammit!), and made it into a streaming MP3 jukebox. What did I do after that? I went down to the computer store and bought a spare! Buffalo LinkStation, you rule! And because I could hack around with the 160GB hard drive, now I’m eyeing their 1.6 terabyte TeraStation. [Editor’s note: I did get the TeraStation and it served me well for years.] All this because I was able to tinker/hack/mod a product.

[There you go. I think most of these ideas have aged pretty well.]

How to back up your Gmail on Linux in four easy steps

I really like Gmail, but I also like having backups of my data just in case. Here’s how to use a simple program called getmail on Unix to backup your Gmail or Google Apps email. We’ll break this into four steps.

Gmail image

Step 0: Why getmail?

If you browse around on the web, you’ll find several options to help you download and backup your email. Here are a few:

Step 1: Install getmail

On Ubuntu 7.10 (Gutsy Gibbon), you would type

sudo apt-get install getmail4

at a terminal window. Hey, that wasn’t so bad, right? If you use a different flavor of Linux, you can download getmail and install it with a few commands like this:

cd /tmp
[Note: wget the tarball download link found at ]
tar xzvf getmail*.tar.gz
cd (the directory that was created)
sudo python install

Step 2: Configure Gmail and getmail

First, turn on POP in your Gmail account. Because you want a copy of all your mail, I recommend that you choose the “Enable POP for all mail” option. On the “When messages are accessed with POP” option, I would choose “Keep Gmail’s copy in the Inbox” so that Gmail still keeps your email after you back up your email.

For this example, let’s assume that your username is and your password is bobpassword. Let’s also assume that you want to back up your email into a directory called gmail-archive and that your home directory is located at /home/bob/.

I have to describe a little about how mail is stored in Unix. There are a couple well-known methods to store email: mbox and Maildir. When mail is stored in mbox format, all your mail is concatenated together in one huge file. In the Maildir format, each email is stored in a separate file. Needless to say, each method has different strengths and weaknesses. For the time being, let’s assume that you want your email in one big file (the mbox format) and work through an example.

Example with mbox format

– Make a directory called “.getmail” in your home directory with the command “mkdir ~/.getmail”. This directory will store your configuration data and the debugging logs that getmail generates.
– Make a directory called gmail-archive with the command “mkdir ~/gmail-archive”. This directory will store your email.
– Make a file ~/.getmail/ and put the following text in it:

type = SimplePOP3SSLRetriever
server =
username =
password = bobpassword

type = Mboxrd
path = ~/gmail-archive/gmail-backup.mbox

# print messages about each action (verbose = 2)
# Other options:
# 0 prints only warnings and errors
# 1 prints messages about retrieving and deleting messages only
verbose = 2
message_log = ~/.getmail/gmail.log

Added: Run the command “touch ~/gmail-archive/gmail-backup.mbox” . If you change the path in the file above, touch whatever filename you used. This command creates an empty file that getmail can then append to.

The file format should be pretty self-explanatory. You’re telling getmail to fetch your email from via a POP3 connection over SSL (which prevents people from seeing your email as it passes between Gmail and your computer). The [destination] section tells where to save your email, and in what format. The “Mboxrd” is a flavor of the mbox format — read this page on mbox formats if you’re really interested. Finally, we set options so that getmail generates a verbose log file that will help in case there are any snags.

Example with Maildir format

Suppose you prefer Maildir instead? You’d still run “mkdir ~/.getmail” and “mkdir ~/gmail-archive”. But the Maildir format uses three directories (tmp, new, and cur). We need to make those directories, so type “mkdir ~/gmail-archive/tmp ~/gmail-archive/new ~/gmail-archive/cur” as well. In addition, change the [destination] section to say

type = Maildir
path = ~/gmail-archive/

Otherwise your configuration file is the same.

Step 3: Run getmail

The good news is that step 2 was the hard part. Run getmail with a command like “getmail -r /home/bob/.getmail/” (use the path to the config file that you made in Step 2). With any luck, you’ll see something like

getmail version 4.6.5
Copyright (C) 1998-2006 Charles Cazabon. Licensed under the GNU GPL version 2.
msg 1/99 (7619 bytes) from <> delivered to Mboxrd /home/bob/gmail-archive/gmail-backup.mbox
msg 2/99 (6634 bytes) from <> delivered to Mboxrd /home/bob/gmail-archive/gmail-backup.mbox

99 messages retrieved, 0 skipped
Retrieved 99 messages from

Hooray! It works! But wait — I have over 99 messages, you say. Why did it only download 99 messages? The short answer is that Gmail will only let you down a few hundred emails at a time. You can repeat the command (let getmail finish each time before you run it again) until all of your email is downloaded.

Step 4: Download new email automatically

A backup is a snapshot of your email at one point in time, but it’s even better if you download and save new email automatically. (This step will also come in handy if you have a ton of Gmail and don’t want to run the command from Step 3 over and over again for hours to download all your mail.)

We’re going to make a simple cron job that runs periodically to download new email and preserve it. First, make a very short file called /home/bob/ and put the following text in the file:

# Note: -q means fetch quietly so that this program is silent
/usr/bin/getmail -q -r /home/bob/.getmail/

Make sure that the file is readable/executable with the command “chmod u+rx /home/bob/”. If you want to make sure the program works, run the command “/home/bob/”. The program should execute without generating any output, but if there’s new email waiting for you it will be downloaded. This script needs to be silent or else you’ll get warnings when you run the script using cron.

Now type the command “crontab -e” and add the following entry to your crontab:

# Every 10 minutes (at 7 minutes past the hour), fetch my email
7,17,27,37,47,57 * * * * /home/bob/

This crontab entry tells cron “Every 10 minutes, run the script”. If you wanted to check less often (maybe once an hour), change “7,17,27,37,47,57” to “7” and the cron job will run at 7 minutes after every hour. That’s it — you’re done! Enjoy the feeling of having a Gmail backup in case your net connection goes down.

Bonus info: Back up in both mail formats at once!

As I mentioned, mbox and Maildir have different advantages. The mbox format is convenient because you only need to keep track of one file, but editing/deleting email from that huge file is a pain. And when one program is trying to write new email while another program is trying to edit the file, things can sometimes go wrong unless both programs are careful. Maildir is more robust, but it chews through inodes because each email is a separate file. It also can be harder to process Maildir files with regular Unix command-line tools, just because there are so many email files.

Why not archive your email in both formats just to be safe? The getmail program can easily support this. Just change your [destination] information to look like this:

type = MultiDestination
destinations = (‘[mboxrd-destination]’, ‘[maildir-destination]’)

type = Mboxrd
path = ~/gmail-archive/gmail-backup.mbox

type = Maildir
path = ~/gmail-archive/

Note that you’ll still have to run all the “mkdir” commands to make the “gmail-archive” directory, as well as the tmp, new, and cur directories under the gmail-archive directory.

Bonus reading!

What, you’re still here? Okay, if you’re still reading, here’s a few pointers you might be interested in:
– The main getmail site includes a page with lots of getmail examples of configuration files. The getmail website has a ton of great documentation, too. Major props to Charles Cazabon for his getmail program.
– This write-up from about a year ago covers how to back up Gmail as well.
– The author of getmail seems to hang out quite a bit on this getmail mailing list. See the main site for directions on signing up for the list.
– If you’re interested in a more powerful setup (e.g. using Gmail + getmail + procmail), this is a useful page.
– For the truly sadistic, learn the difference between a Mail User Agent (MUA) and a Mail Transfer Agent (MTA) and how email really gets delivered in Unix.
– I’ve been meaning to write all this down for months. Jeff Atwood’s recent post finally pushed me over the edge. Jeff describes a program that offers to “archive your Gmail” for $29.95, but when you give the program your username/password it secretly mails your username/password to the program’s creator. That’s pretty much pure evil in my book. And the G-Archiver program isn’t even needed! Because Gmail will export your email for free using POP or IMAP, it’s not hard to archive your Gmail. So I wrote up how I back up my Gmail in case it helps anyone else. Enjoy!

Added March 16, 2008: Several people have added helpful comments. One of my favorites led me to a post by commenter Peng about how to back up Gmail with IMAP using getmail. Peng describes how to back up the email by label as well. He mentions that you could use the search “after:2007/1/1 before:2007/3/31” and assign the label FY07Q1 to the search results, for example. Then you can back up that single label/mailbox by making the getmail config file look like this:

type = SimpleIMAPSSLRetriever
server =
username = username
password = password
mailboxes = (“FY07Q1”,)

type = Mboxrd
path = ~/.getmail/gmail-backup-FY07Q1.mbox

Peng also mentions a nice bonus: since you’re backing up via IMAP instead of POP, there’s no download limit. That means that you don’t have to run the getmail program repeatedly. Thanks for mentioning that Peng!

Summer of Code 2008: 21 potential projects

Yay! Google is opening up its “Summer of Code” for 2008. Google’s Summer of Code program encourages students to tackle open-source projects over the summer break. For a 2-3 more days, sponsor organizations are invited to apply and then students can apply starting March 24th. I’ve been thinking about some projects that I’d enjoying seeing. If anyone needs ideas, I’d love to see some of these projects:

  1. Synergy is a fantastic way to control multiple computers with one mouse/keyboard. You can even move your mouse directly from one computer’s display seamlessly to the other computer’s display. But Synergy currently doesn’t support drag/drop between computers or file transfer between computers. Adding drag/drop sounds like a great summer project to me. 🙂
  2. Tweak Google Browser Sync to synchronize user-defined spelling dictionaries between computers.
  3. I don’t know about anyone else, but personally I’d love a Google Account sign-in for WordPress. If you wrote the plug-in in a pretty general way, you could no doubt also use it for OpenID, Yahoo accounts, Live IDs, TypeKey, etc. But mainly I’d like to use my Google Account to leave authenticated comments on WordPress blogs.
  4. Better tools to reverse engineer USB devices so that they can work on Linux in user space.
  5. Extend Firefox 3 Places to provide more complete tab history: when a tab was closed, whether a page was opened in a new tab or a new window, and basically anything to let a user see a “watertight” view of their surfing.
  6. Better screencasting support for Linux. Windows has Camtasia and CamStudio. The tools on Linux just aren’t as polished.
  7. Better video editing software in Linux. Or get parts of GIMPshop into the GIMP.
  8. Better podcasting support in Audacity.
  9. A Firefox extension or Greasemonkey to report webspam to Google. The extension would let you report a spam webpage from a button on a toolbar. The extension would also add a “Report as Spam!” button to Google’s search results page. 🙂
  10. A simple tool to backup your entire Google account (email, calendar, docs, feeds, etc.).
  11. Work to make Ubuntu more suitable for the coming wave of computers with Linux pre-installed (Wal-mart PC, Asus EEE).
  12. The world always needs better, more streamlined virtualization.
  13. Beef up the features on . For example, let each user see all the ideas that they’ve voted for.
  14. Help out on Google Gears or Android.
  15. Make Juice run better on Linux.
  16. Make Asterisk easier to install and configure.
  17. Implement the functionality of the dragdropupload extension directly into Firefox.
  18. Add the ability to drag/drop images in WordPress, and let WordPress handle uploading the image to a preferred location on your webhost.
  19. Make the standard version of Ubuntu boot even faster.
  20. Add some nice features to Wine, ReactOS or Abiword.
  21. How about a good open-source program to manage your book library? Something like the Delicious Library program, but that works with Linux?

What about you? If you could request a student to work on any open-source project this summer, what would you ask for?