lime icon

Phosphorus and Lime

A Developer's Broadsheet

This blog has been deprecated. Please visit my new blog at
Google App Engine
I got my Google App Engine invite a couple weeks ago but didn't have a chance to really play with it until this weekend. I built a couple little demos on my sandbox app today:

I have to say I'm very impressed with it thus far. I can see how this could be truly revolutionary. Indeed, this is just the tool I've been looking for for the past, what, four years. The things I really like about it:

1. It uses Python
2. Simple mvc organization using the Google webapp framework
3. Easy to move between test and production environments
4. It's designed to be scalable
5. It's free

Downsides? The big one I keep reading about is the datastore, which uses an ORM model rather than the more familiar SQL relational. I haven't found the adjustment that hard at all, but then I've never fancied myself a DBA wizard and my usage of the datastore thus far has been trivial.

But believe me, I have big plans for the future!
The Perfect Heart Shape
If not perfect, symmetrical at least. The graphic below says it all:

From here, it just a matter of tweaking with your favorite vector editor.

Got this from an old cookbook recipe for heart-shaped cakes.


Ubuntu: Command Line Email
For a simpler, updated version of this guide, please see:


I want to send email using the command line on my laptop Ubuntu system. Mainly for cron jobs and automated backups. I want to be able to do so without having to set up a full-fledged MTA like sendmail or exim. And I want to be able to use either my ISP email account or a Gmail account.

Seemed simple enough and it probably is for people who do this type of thing for a living. Took me all night. So hopefully this will save someone else (perhaps me again in the future) hours of unnecessary frustration.


First, look at this diagram from Wikipedia. Without being able to find a simple step-by-step tutorial to guide me, the biggest problem I was having was sorting out what was my MUA, what was my MTA, and what if anything I needed to connect the two. Long story short, they are as follows:

MUA (the client): nail (you can also use mailx or mutt or even evolution)
MTA (the mail server): your isp or gmail
MSA (smtp middle man): msmtp (a simple MTA that gets mail from your client to your real MTA or mailhub)


Install the needed programs
$ sudo apt-get install msmtp
$ sudo apt-get install nail

Install Thawte certificate for Gmail
This is necessary (I think) for Gmail. Probably the most complicated step, though not too bad thanks to instructions here:
$ mkdir -p ~/etc/.certs
$ chmod 0700 ~/etc/.certs
$ cd ~/etc/.certs
$ wget --no-check-certificate
$ unzip
$ cp Thawte\ Server\ Roots/ThawtePremiumServerCA_b64.txt ThawtePremiumServerCA.crt

Configure msmtp
Replace UPPERCASE text with your personal settings
$ gedit ~/.msmtprc

This will open up an msmtp configuration file where you'll want to copy the following lines, with your correct settings, of course:
# config options:
logfile /tmp/msmtp.log

# isp account
account isp
auth login
port 25
password *****

# gmail account
account gmail
auth on
port 587
password *****
tls on
tls_trust_file /home/USER/etc/.certs/ThawtePremiumServerCA.crt

# set default account to use (from above)
account default : isp

Change permission on this file or msmtp will complain:
$ chmod 600 ~/.msmtprc

Configure nail
$ gedit ~/.mailrc

The key line below is "set message-sendmail-extra-arguments". It seemed like I should have been able to add this to the set sendmail command. Suffice to say, not well documented.
# set smtp for nail
# ref:
# docs:

# isp account (default)
# $ nail -s "subject line" -a /path/file < /path/body.txt
set sendmail="/usr/bin/msmtp"
set message-sendmail-extra-arguments="-a isp"

# gmail account
# $ nail -A gmail -s "subject line" -a /path/file < /path/body.txt
account gmail {
set from=" (YOURNAME)"
set sendmail="/usr/bin/msmtp"
set message-sendmail-extra-arguments="-a gmail"

Send test messages for both accounts

$ echo -e "testing email from the command line" > /tmp/test_email
$ nail -s "isp test" < /tmp/test_email
$ nail -A gmail -s "gmail test" < /tmp/test_email

Check your gmail account and you should have two new messages -- one from that account and one from your ISP account. To check your log:
$ gedit /tmp/msmtp.log


Only took me all Friday night to figure this out. But, hey, better than getting drunk, stoned, and laid. :)

I've added this post to


Removing a File from a Hg Repository
Removing a file from a mercurial repository without deleting it: hg rm -A.


hg rm -A dir/*

I think this works. The docs aren't exactly clear on the point:

If you use hg rm file, it just deletes the file.