I didn’t even attend…

I can’t find the specific invitation, but my chrome history shows the date: 31 Jul 2014. The meeting included a talk on middleman, a static website generator. I didn’t attend, but I looked it up and decided it sounded worth trying. I spent some hours reading the documentation, looking up reviews and articles from users, and poking around the github repository.

On 1 Aug I started installing it on a pogoplug running Arch Linux. Of course that meant I had to get the plug working again, find memory for it, and so on. Maybe I’ll write up the details before I forget and doom myself to learning them from scratch again (though I think I’ll go to a single-board computer with a modern processor next time).

Meat-life consumed the 2nd. On the 3rd I was accessing the configuration page from other devices, which means the plug was working and middleman was installed.

My idea was: from any of my systems I could create and edit blog articles. The updates would sync to the pogo/middleman server, which would update the development site, live-updating the page hosted there viewed in my local browser.

My initial plan was to continue editing in Scrivener. Unfortunately the Windows version lacks a folder synchronization feature, making it awkward for this purpose. I purchased Sublime Text, which has a number of useful plug-ins, works well on both Windows and Linux, and can be customized for my user experience preferences.

Bootstrapping a website with a static site generator is eased a bit by their support for templates. Middleman has an extension specifically for blogging with supporting templates, and community-provided templates as well. Of course you have to learn about all of these enough to understand the consequences of choosing one or the other even slightly. Then in more depth to use, which might reveal other consequences that cause you to reconsider.

Frederick Brooks in No Silver Bullet argued that an order-of-magnitude improvement in software development productivity in a decade was all but out of reach. As it turned out he was far too optimistic. Significantly automating complicated systems faces intrinsic difficulties. Decreasing the amount of work you do directly causes more work to bulge out somewhere else. Understanding the consequences of choices requires abstracting the key differences, which requires a domain-specific language, which then must be learned by the ‘consumer’ of the system and implemented faithfully by the system implementer.