Choosing a host, part 1

The inaugural post.  What should it be?  Is it cool and shiny, with blinking lights?

Sorry.  It’s one of those lessons-learned kind of posts.  I’m going to talk about how I chose to host this blog, since I just went through that process, and in the process learned things I didn’t want to learn.

For a long time I’ve been thinking of rolling my own blog software, because I like to understand my entire stack.  My dream system would be chips laid out myself, that run an instruction set I designed, compiled from a language I wrote, written in my own editor… yeah, baby.

This comes from the kind of exposure to computers I had when I was young (I was 12 years old in 1980) and had time but no money, and wire-wrapping my own system from chips scavenged from hamfest bargains made sense because it was way cheaper than buying someone’s product, and my own software was as good as anything that would come with the system.

But… reality intrudes.  I have kids and time is much dearer than money.  What will reality permit?  Well, there is one obvious thing, which is write simple flat file traversal generating static files.  It’s simple and robust.

I’m the kind of guy who likes ascii text in files.  It’s like wire-wrapping instead of designing circuits by CAD and surface-mounting; if you don’t like what you’ve done, just rewire it.  The thought of my content in a database is grating.  I don’t want to have to start and stop a service, deal with updates, backing up that is more complicated than rsync.  Even worse is having the database living in the cloud administered by someone else with unknown priorities.

I spent a while playing with this.  There are a lot of dead-simple projects to crib from.  Here are just three that struck me in their utter simplicity:

  • Bloxsom is a venerable bit of Perl bloggery that started life as just lifting the post name from the file name, the post date from the file modification time, and the category from the directory it resides in.  This is so simple it is sort of brilliant except for the crucial part where modification times, file lengths and reserved characters are handled differently depending on file systems.  Merely backing up and restoring can reset all the modification dates.
  • Chisel is a really tiny Python code.  I found two people using it, one of which is  Alex Le.
  • Journo is a literate coffeescript.  Elegant and 21st century (Node.js et al.)

Note the absence of handling comments.  Comments are where almost all the stateful complexity of blogs comes from: not just because of the state modifications themselves, but because there are bad guys who are happy to abuse it hard.  Comments fall apart without comprehensive identity-verifying and de-spamming machinery.  This is hard enough to get right that there are several companies such as Disqus that do only this.  But I’m not going for that – more and more of the system is getting out of control.  How do I even back it up?  After the thin veneer of static files, there’s a mountain of complexity and dependencies.

So I grimanced and I tried the free services such as Blogger.  Blogger makes me uncomfortable by how buggy it is.  I remember using it within Google back in 2004, and it hasn’t changed much.  Here bugs be.  It still looks crappy, and this is a service Google may well cancel.

So, I gave up the dream of simplicity and moved on to WordPress.  In Part 2 I’ll talk about what I learned.

One response to “Choosing a host, part 1

  1. Jess

    Another anniversary to celebrate. Happy that neither databases nor buggy bloggery could keep you from your goal to post. Post on kind sir.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: