15 Apr, 2008

Every so often, I describe what I do to make this site a reality. For the four of you who like to watch me gaze at my navel, I have good news: today is one of those days. For the rest of you, I'm sorry. It's one of those days. You can move on. (I won't be offended. You can even give this essay a nasty rating if you want. I have skin like leather, and I do pay attention to the ratings.)

Okay, here goes.


I use a MacBook to compose all of my essays. My old Toshiba laptop (which was running Windows) died and I decided to see if life was better on the other side. I have come to like Mac OS X, after some initial frustrations, but I'm not a fanatic or anything.

I write the body of my entries in hand-crafted HTML using Smultron, a text editor. Smultron is not a great text editor, but I've grown used to it and haven't felt compelled to seek out something better. I also use OmniGraffle when I need to make pretty diagrams. Mmm... lickable.

Everything required to make the site go is stored locally, on my MacBook. I deploy the site to a local copy of Apache for testing, then to my web host when I'm ready to go live. I use a Ruby Rakefile to build the site, and then rsync the whole mess to the server. The exact same site goes on the server as on the local test site; all that changes is the rsync destination.

I am absolutely paranoid about backups and revision control. There's years of work here. That's why all of my essays are written in a text editor and stored on my laptop. Most blogging software I know of saves your work in a database on the web server. Easy, but not fault tolerant. I plan to be writing for the next ten, twenty, thirty years... minimum. My stuff has to be easily scripted, version-controlled, backed up, and trivial to deploy to another web host when (not if) my current host goes under.

The source for my site (including rakefiles) is versioned by Subversion. The repository is local, on my laptop. The laptop is backed up several times over: first, the entire site is on the web host, of course. Most of my files are also backed up automatically to my Mirra continuous backup server, running on my wireless network. The entire computer is backed up with Time Machine every hour. (Time Machine is better than Mirra, so when the Mirra server dies, I won't replace it. Mirra seems to have been killed by Seagate anyway.) I also make a bootable whole-disk backup using SuperDuper! and store it off-site.


The biggest challenge for me in making the site was my complete lack of web design skills. (Software engineering, yes. Graphic design, no.) Sitepoint got me started and A List Apart carried me through. I borrowed liberally from Jeffrey Zeldman in creating the side menu, as permitted by comments in his CSS.

For the color scheme, Jason Beaird's "Color for Coders" article helped me get started and Visibone's Color Laboratory allowed me to pick web-safe colors. (I have no idea if we're supposed to limit ourselves to 216 "web-safe" colors any more, but it seemed like a safe bet. I cheated a bit for quotes, though.)

I also took advantage of some royalty-free icons. The RSS feed icon (sample icon) came from Feed Icons; the Twitter icon (sample icon) is resized from an icon I got from; the print icon (sample icon) came from graphicPUSH; the star icon (sample icon) came from 1ClipArt; and the spinner (sample icon) came from Andrew Davidson.

The nicely self-contained JS-Kit handles my comments and ratings. JS-Kit is very straightforward, but I do have a few small (very small) lessons learned that might be useful.

Finally, lots of trial and error got me to the result I have today. W3Schools' CSS Reference was invaluable for making it work. Eric Meyer's "Going to Print" article provided the finishing touch for my print stylesheet by showing me how to automatically insert URLs after printed links.

During this process, I learned how badly Internet Explorer 6 supports CSS. Rather than struggle with IE's problems, I settled for graceful degradation. IE will work, but Firefox renders the site better, will give you URLs in the print results, and has a more responsive "print" button.


The site is hosted by TextDrive (now owned by Joyent) and runs on the Apache web server. I use mod_rewrite to make sure public-facing URLs are implementation-independent and to ensure that you can link to a page forever (for sufficiently small values of forever). Domain Discover makes sure that my domains ( and point to the right place. Mint handles my analytics, along with the plug-ins Fresh View, Trends, Download Counter, Doorbell, Outbound, and Secret Crush.

The site is rendered by the ultra-minimalistic Blosxom. Blosxom was the only blogging software I could find that actually allowed me to store entries locally, in files that I can back up and put in Subversion, rather than on a database on the server. Blosxom runs on Perl 5. Blosxom does almost nothing by itself, so I use these plug-ins to help out: blok, meta, default_flavour, prefs, breadcrumbs, directorybrowse, entries_index_tagged, interpolate_fancy, menu, plain_text, postheadprefoot, readme, static_file, urltranslate, and wordcount.

I run my whole site with Blosxom, not just the blog portion. Getting this working was quite a headache and I had to make some custom mods to several of the plug-ins as well as Blosxom itself. It's been three years since I got it set up the way I like it, though, and the site has been pretty much hands-off and trouble-free ever since.

Colophonem adidi.

(I ran across that little gem while using Google to define "colophon." It means "I have put the finishing touch to it.")