10 Jan, 2019

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.

Okay, here goes.


I use a MacBook to compose all of my essays. Years ago, my Windows laptop 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, and now I have a hard time imagining going back.

I write the body of my entries in hand-crafted HTML using Webstorm. 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 decades of work here. That's why all of my essays are written in a text editor and stored on my laptop. Most blogging sites save your work in the cloud. Easy, but not fault tolerant. I've been writing for nearly two decades and plan to continue writing for several more. My stuff has to be easily scripted, version-controlled, backed up, and trivial to deploy to another web host when (not if) my host goes under... which it already has. Twice.

The source for my site (including rakefiles) is versioned by Subversion. (For new codebases, I use git, but there's no reason to switch. It could be worse... the code used to be in CVS.) 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. The computer itself is backed up to two redundant drives with Time Machine every hour. I also make a bootable whole-disk backup using SuperDuper!. Every quarter, I rotate one of the backup drives to an off-site location.


The site was originally designed in 2002 and it shows. Boy, does it show. But it's functional and there always seems to be some other priority getting in the way of a redesign.

The biggest challenge for me in originally 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.

Finally, lots of trial and error got me to the result I have today. W3Schools' CSS Reference was invaluable for making it work, but these days MDN is a better resource. 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.


The site is hosted by NearlyFreeSpeech 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. Google handles my analytics. Sorry about that.

The site is rendered by the ultra-minimalistic Blosxom. Back in the day, 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 version control, rather than on a database on the server. (Nowadays, of course, static site generators are a dime a dozen.) 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 worked for over 15 years, but the volume of content is causing performance problems, and Blosxom's idiosyncracies are standing in the way of a redesign. It's past time for me to move on. I have a very nice CMS I wrote to manage my Let’s Code JavaScript site, and one of these days I'll migrate to that. That's probably when I'll make the badly-needed visual refresh, too.

Colophonem adidi.