Gaige's Pages moves to static generation

Gaige's Pages has been through a lot of changes over the last 15 years, since I did the first major revamp of the site. At that time, I was converting from a statically generated site that I was manually creating (with a little help from DreamWeaver) to Geeklog, a venerable, geeky CMS with many more features than I needed.

A little history

At the time (January 2003), I was expecting to create more content; and, boy did I! During that year, my most prolific blogging year, I managed to crank out over 1400 individual blog posts, ranging from a 3059-word missive about the future of media to about 800 pieces less than 100 words in length that mostly point at other people's thoughts (with some commentary). I wrote about 50 pieces that would be considered essay-length, which isn't bad, except when you consider that I really didn't have a full time job that year.

My interest in blogging waned as I got back into working with other people, and as Carol & I got married in 2004.

Year Posts Word Count
2003 1493 214283
2004 304 48612
2005 191 35872
2006 149 30039
2007 52 12761
2008 41 15988
2009 15 7539
2010 4 1418
2011 1 582
2012 0 0
2013 5 1632
2014 2 178
2015 7 2202
2016 0 0
2017 1 574
2018 2 959

Blog Engines

Over the intervening 15 years, I've changed blog engines infrequently. Frankly, it's an annoying process with few significant upsides when you aren't writing frequently.

Geeklog (2003)

I moved to GeekLog in 2003 when I was thinking I wanted to write more and was tired of dealing with hand-coding HTML (even with the help of DreamWeaver). This was a reasonable choice at the time, and got me a hybrid HTML editor and a content indexing system (along with a ton of stuff I didn't need, like a calendar system).

In 2006, when I acquired in advance of releasing Cartographica (in 2008 for beta, and 2009 for public release), I used GeekLog as the basis for the Cartographica blog as well. This provided me with a converged platform and the ability to leverage my knowledge.

SquareSpace (2011+ Cartographica)

In 2011, as Cartographica was gaining steam, we hired a bright youngster to do some significant blogging, however GeekLog was showing its age and wasn't really adequate for blogging with images unless you were a pro with HTML, so I moved Cartographica to the hosted service SquareSpace, which we still use.

Drupal (2013?)

After moving Cartographica's blog to SquareSpace, I realized that I didn't particularly enjoy using GeekLog any longer, and support for it was waning. Wordpress was the new hotness, but it was way too maintenance heavy (see any security blog), so I wanted something with the right level of geek, good maintenance and good code hygiene. After consulting with some friends, I decided on Drupal. Drupal's been good, but I've just not been blogging that frequently and the amount of effort necessary to maintain and defend a full-fledged CMS doesn't seem worth the effort for a single-writer blog that is infrequently updated. In truth, for the last few years I've spent more time updating my blog software than writing for my blog.

Static blog engines

A few months ago, I started looking at moving the Pages to a static blog engine. My thinking is that I'm not blogging that much these days, and I'd rather use my scant blog-related time to actually write than to do administrative tasks on the server; especially those involving security patches. In addition, I prefer to write my posts in Markdown. Most of the static blogging engines work with Markdown and that just seemed the right direction for me to take.


I really tried to use Jekyll. RS, my oft-times partner in technology, considers it "good enough to offset being one of two unfortunate cases of ruby in my life, the other being". It seems to be well liked by most people who use it, so I set out to translate my 2000+ blog posts into Markdown for assimilation into Jekyll.

Unfortunately, I ran into two problems: first, it's good for small blogs, but regeneration times on large ones is really long; second, it's written in Ruby. I know what you're thinking: I shouldn't be bashing an entire programming language which is likely used by millions of people. Well, millions of people smoke, too, and although both things are completely legal, I wouldn't consider either safe for your health.

It's not so much the ruby syntax that bothers me, it's the ethos. Jekyll is great for people who like it and have no problems with it, but when my generation was taking literally hours to never finish, I decided that I'd take a look at the code to make sure there wasn't some weird bug I was triggering.

We'll never know if that was the case, because after finding no reasonable way to even figure out what module was consuming time, I just gave up.


I took to Google to find something that fit the bill. If I was going to have to potentially debug this puppy, I wanted it to be written in a language that I am comfortable with and one whose ethos involves making code that can be read and debugged by someone other than the original author.

Into google, I typed static blog engine python markdown jinja2. I wasn't sure I'd find something, but I wanted python for maintainability, static blog engine so that I didn't have to work if I wasn't changing anything, markdown for a fast and familiar writing environment (Hello, BBEdit!) and finally jinja2 for any templating. The heavier-duty MacGIS web site had already been moved to Django, which uses Python and (optionally) jinja2 as a templating language. Similarly, I'd moved from Puppet to Ansible a couple of years ago (another story, many thanks to Rob), which is also based on Python and jinja2.

The first recommendation was Pelican, which has been my answer for this stage of Gaige's Pages.

The transition has not been without hiccups, and I even ran into a bug which I needed to diagnose; but, diagnose it I did, because I could use all of my tricks for debugging Python, including PyCharm