Dust in the wind

October 21, 2007

I'm always telling myself to stop writing about the minor behind-the-scenes goings-on here, but of course I never do. I guess I'm OK with only a couple of people finding it interesting as I like this sort of thing when others do it.

So, without further ado, I present to you more banal and trivial nonsense.

After a week with the ‘new' layout, I decided I needed the menu back at the top. Not only was I finding myself kind of annoyed by its new location in the side menu, but I also felt there was no real navigational "anchor" (even though the links were in essentially the same location on every page).

I spent a good part of the day trying to make IE 6 play nice (yeah, the story of every web developer's life, ridiculous) with a dynamic rollover thingy I whipped up in JavaScript,1 that produced a menu when you hovered over a "+" symbol in the top right corner of the site (have I mentioned I'm a minimalist?). After getting everything working on every major browser, I decided to scrap it. Surprise.

Long story short (oh trust me, I could write a lot more on this), the old menu is back at the top, though now, for the first time in this site's history, it's a client-side image map instead of plain text (I just can't get enough of DIN Schrift MittelSchrift).

Speaking of wasting unbelievable amounts of time, I spent nearly 10 hours this weekend migrating the entire site from WordPress to Movable Type (for no overriding reason). However, and probably not surprisingly, all the work was for naught — I'm still using WP.

About a year ago, I wrote a three-part (one, two, three), 3,400-word piece regarding a possible move back to Movable Type. A lot has changed since then — Movable type just released version four and now both systems support a common import/export format.

Though I ultimately decided to stick with WordPress, I thought I'd discuss some of the issues I encountered during the migration.


Movable Type now supports the importation of WordPress eXtended RSS (WXR) files, the format through which WP exports. Importing was far easier this time than last, but it wasn't perfect. The biggest problem I had was HTML entities in some of my post titles; they completely broke the import script. Luckily, not too many of my titles had entities, so it wasn't that difficult to manually swap them out for their character equivalents.

The bigger problem was that each time I tried to import the file, it would import every post until it choked on a post it couldn't read, which meant that I had to delete all the imported posts multiple times before finally getting a clean import (after removing all the entities from the titles). It would have been nice if the import script validated the file before it actually attempted to import entries.

Another problem with the import was that it seemed to ignore my plea that it not format the posts' text (there's a "text formatting" drop-down, and one of the options is "none"), and instead chose to "convert line breaks." The problem is that I don't currently wrap the "bits" in paragraph tags until they are displayed, which means they were getting nested paragraph tags at the output, and there was no way for me to batch-change the format option on every bit to "none." Yes, I could have removed the double paragraph tags at the output, but that would have required me to change the way the bits are saved, something I didn't want to do.

The import also broke all of my post slugs. By default, Movable Type limits slugs (which it calls "basenames") to 30 characters; if your slugs are longer than this, they get truncated. Sure, this is easily remedied by deleting the weblog, creating it again, setting the basename value to some larger number, and then re-importing, but it would be easier (and logical) for the importer to ignore the defined basename length so as to not break URIs between systems.

After getting everything imported, I decided to divide the posts into two separate weblogs — one for regular posts and one for bits. To do this, I had to delete all bits from the weblog (100 at a time — the max allowed), export the remainder, delete the weblog entirely, import everything again, delete all regular posts from the weblog, export the remainder again, delete the weblog entirely again, create two new weblogs, and import into each. I realize this is probably a niche need, but it would have been nice if I could have simply selected a category (or tag, or whatever) and created a new weblog with only those posts. I guess I could have "cloned" the weblog and then deleted from each those posts that no longer ‘belonged,' but then my post IDs would have been all over the place.


Once everything was imported correctly into the two weblogs, I set out to use the now baked-in multi-blog feature to enable the weaving of bits and regular posts on the main page. Without too much fuss, and with Google's help, I was able to get interleaved posts working on the index page fairly quickly.

After most of the major issues had been worked out, it was time to decide how I was going to serve the pages. If [processing] time weren't an issue, I'd prefer the pages be built statically, but that no longer makes real-world sense given the current number of posts here. No, I don't have comments to deal with, but full rebuilds would still take more time than I could probably stand. In light of this, I decided to try out the dynamic options.

I was quite surprised that once I turned on dynamic publishing (for everything), it just worked. Well, sorta. It worked on all archive files (including individual entry archives), but threw a 404 on the main index page. I could not resolve this to save my life, but to be fair, it could have had something to do with my 775-line htaccess file (which is part of the reason I was so surprised it worked at all). Regardless, I gave up on trying to find a solution and instead chose to "publish only archive templates dynamically," which seemed to fix the issue.

After jumping through all these hoops (and many more), I completely scrapped the installation, but I guess I now know it's still a viable option should I want/need to ditch WordPress at some point.

  1. I wanted a pure CSS solution, but IE 6 (of course!) doesn't support the :hover pseudo class on anything but anchors.   

How to sync two or more Macs?#

I've a sneaking suspicion that Merlin's asking this question in anticipation of the rumored ultra-portable (Jobs, seriously, hurry up!), but in any event, there's some really great stuff in the response thread.

Why money doesn't buy happiness#

[Studies have generally concluded] that wealth increases human happiness when it lifts people out of abject poverty and into the middle class, but that it does little to increase happiness thereafter.

Live fast, love hard, die young#

Dr Clutton-Brock reckons that the sex difference in both human rates of ageing and in the usual age of death is an indicator that polygyny was the rule in humanity's evolutionary past—as it still is, in some places. That may not please some feminists, but it could be the price women have paid for outliving their menfolk.

A profound sense of time#

PZ Myers on the process that prompts the growth of all vertebrates from embryos to unspecialized segments to multicellular animals.

Body Worlds

October 16, 2007

The girlfriend and I recently experienced Body Worlds at the Tech Museum of Innovation in San Jose. At the risk of sounding a bit melodramatic (me? never), it was probably the coolest exhibit I've ever seen, and if I'm being completely honest, quite moving. While the $22 admission price may seem a little steep, I assure you it's worth your time and money. In fact, I may go again, and will certainly go to the various other Body Worlds exhibits should I find myself proximate to another hosting city.

Speaking of our bodies, you may want to have your TiVo grab National Geographic's Incredible Human Machine, which airs October 21:

NGC takes viewers on a two-hour journey through an ordinary, and extraordinary, day-in-the-life of the human machine. With stunning high-definition footage, radical scientific advances and powerful firsthand accounts, Incredible Human Machine plunges deep into the routine marvels of the human body.

Why there aren't right-handed apes#

According to [Corballis's] theory, communicative (as opposed to merely expressive) behavior began with bipedalism, freeing the hands for use in communication. Corballis argues that this communicative behavior may have slowly shifted towards facial movements, and that the final stages in the evolution of spoken language involved the addition of voicing to those 'facial gestures.' Handedness emerged as vocalization was incorporated into manual gesture, extending the left-hemispheric dominance for communication into manual control.

Harvard scientists predict the future of the past tense#

Mathematical analysis of [...] linguistic evolution reveals that irregular verb conjugations behave in an extremely regular way -- one that can yield predictions and insights into the future stages of a verb's evolutionary trajectory.

Teaching the tongue to see#

By connecting a camera to an array of electrodes that stimulate the sensitive nerves inside the mouth - a pixel of light is translated into a slight pinch - scientists can literally retrain the brain.

Findings from the Web Design Survey#

In April 2007, A List Apart and An Event Apart conducted a survey of people who make websites. Close to 33,000 web professionals answered the survey’s 37 questions, providing the first data ever collected on the business of web design and development as practiced in the U.S. and worldwide.

Dear Twitterer, I have access to ESPN

October 16, 2007

Please don't mention (relatively) current sports scores on Twitter. If I want a sports score, I'll go looking for it. I'm so sick of thoughtless fans blasting things like, "gators up by 27 at half," as I wait for the TiVo to finish recording the game. (For those wondering, with the 30-second skip you can get through college football games in ~1.5 hours.)

I'm not sure what drives your compulsion to tell the world the score, but from here on out please try to refrain. Thanks!