Dante’s Infernet

In a few days bit-player will celebrate its seventh birthday. (The first published post was dated January 9, 2006.) The original design for the web site was thrown together in haste, and I’ve long been meaning to give it a makeover. I’ve also had a hankering to get away from a managed hosting service and set up my own server. Over the past six weeks I’ve finally done both of those things. Here’s a brief account of the blog’s rebirth. (If you’re reading this via the RSS feed, you might want to take a glance at the web site.)

Lasciate ogne speranza, voi ch’intrate

Gustave Doré’s illustration for Canto 13 of Dante’s Inferno, where the narrator and his guide Virgil enter the wood of the suicides and spendthrifts. Source: Wikipaintings.

After a few weeks of playing sysadmin, I’ve concluded that the modern world of internet computing is organized just like Dante’s Inferno, with concentric circles of torment that get progressively deeper and darker as you travel toward the center.

The outer suburbs are not such a bad place to live. The people there speak HTML and CSS and JavaScript, and they amuse themselves by writing cute little programs that display words and pictures on other peoples’ screens. The worst punishment these souls suffer is being made to write <!--[if IE 6]> over and over again all day long.

As you descend into the inner circles of the computational underworld, however, the light fades; you find yourself in a maze of twisty little passages, all alike; in the darkness around you confused voices cry out in strange tongues; dæmons roam the woods.

In the case of bit-player, what lies immediately below the sunny stratum of HTML-CSS-JavaScript is the WordPress blogging platform. Beneath WordPress is the programming language PHP, which builds complete web pages from fragments of HTML. Next is a MySQL database, which has a programming language of its own. Deeper still, we come to the Apache web server. (I’ve only recently learned the story behind the name Apache. According to Brian Behlendorf, it’s a play on “a patchy server”; although the Apache Foundation FAQ pooh-poohs this idea, it has the ring of truth.) Under Apache lies the Linux operating system.

The Infernet has still deeper levels, although my Dantean tour didn’t spend much time at the bottom of the pit. I had to make a brief visit to the land of DNS—the domain name system—where the denizens speak knowingly of A records and CNAMEs and such. I never had a need to skate on the frozen lake of TCP/IP.

Maybe my server is here? (This is 165 Halsey Street in Newark, where the rooftop is chockablock with chillers and generators.)

If you’re reading this, then in some sense my crazy project succeeded. I have a shiny new virtual server (from Linode) running Linux and Apache and MySQL and PHP and WordPress. It spits out pages that web browsers seem to recognize as valid HTML and CSS and JavaScript. And when you ask the Internet for one of those pages, the series of tubes apparently knows how to find my little server and retrieve what you want. (That’s more than I can do. The machine is said to be in Newark, NJ, but I have no more specific coordinates.)

Now that (most of) the work is done, I’m happy enough with the outcome. I’m having fun designing new ways to waste cpu cycles (yours as well as mine—the program animating the front-page banner runs in your browser, not on my server). As for the deeper levels—well, I can’t really say I’m getting a lot of personal fulfillment out of tweaking settings in /etc/apache2/hpptd.conf and running sudo chmod -r 755 on directories, but I suppose these are things that every educated person in the 21st century is supposed to know about.

Next time, though, I may do it differently. Rather than move WordPress to a new server (a body transplant), I’ll keep the same server and replace WordPress with something else (a head transplant).

I hasten to add that I don’t blame WordPress for my troubles. It’s a marvel of our age: Fill in a few blanks, push a few buttons, and Presto! you’re a publisher. But there’s a price to be paid for the push-button interface. Simplicity on the surface leads to gnarly complexity inside. In the course of my redesign, I wanted to do a number of things for which WordPress has no built-in push button. I was soon hacking my way through dense thickets of other peoples’ code.

I’m well aware that such slash-and-burn programming is frowned upon in the WordPress community. (“Every time you hack core, God kills a kitten.”) I could make excuses. I could claim that none of the 1,656 themes offered on the WordPress web site matched my exact needs, and neither did any of the 22,956 plugins. I could argue that my way of doing things is intrinsically better than anything the hundreds (thousands?) of WordPress developers have come up with over the past 10 years.

No, I don’t believe those things either.

The simple truth is, I’m an incorrigible do-it-yourselfer. Call it a character flaw, or a way of life. But I suppose that if I really want to go it alone, I should go all the way, and build the next bit-player from scratch.

Oof! Thanks for alerting me. It was not just one stray link but hundreds. I’ve paid a visit to /etc/apache2/sites-enabled/ to put in some redirection, which should handle most of the errors for now. Will have to think about the right permanent solution.

Hack away! There’s no problem editing core code so long as (1) when you upgrade, you know how to do so in such a way that your changes are not lost, and (2) you’re not planning to share your code any time soon and have someone else successfully install it.

I have a project (http://cscircles.ca) where we were initially fine with (2) but now want to open-source it. It seems like a 2-month summer project, minimum, now. But if I waited to learn about pluggable functions and plugin objects in addition to filters and hooks, the project would never have been completed in the first place.

I’d be happy enough if everyone in the 21st century would understand cd but that’s already an unrealistically high goal.