For the past few weeks, I have been working on renovating the Rubygame web site. Today, I have finally deployed the biggest chunk of that effort: migrating the home page and blog to Jekyll. I have also recently migrated the wiki to Github, and will soon be shutting down the forums.
This strange flurry of activity has a simple explanation: I’m putting Rubygame into a state of indefinite hibernation. Back in January, I made a post calling for a new project lead. I did receive several offers to “help out a bit”. Unfortunately, no one was interested in taking an active role to drive Rubygame forward, which is what it really needs.
But, I did receive quite a few emails from people expressing their appreciation for Rubygame and their hope that it would continue to be available, even if not actively developed. (Thank you to everyone who wrote; it’s certainly nice to hear.) So, all these changes to the website are steps to reduce the amount of regular maintenance needed to run the site, so that I can leave Rubygame inactive but available for the indefinite future.
WordPress is a nice blog engine, but it requires regular upkeep: applying security updates, moderating comments, etc. With Jekyll, every web page is just a static HTML file, so I don’t have to do anything except when I want to upload a new post. Serving static files is also a lot more efficient than dynamic content like WordPress, and it’s very simple to set up HTTP caching and gzip compression.
One other effect of the site now being static HTML, is that there are no comment submission forms on the blog posts anymore. For some blogs, that would be a downside. If I did want comment forms, I could use an off-site comment systems like Disqus, which is fairly easy to plug into a Jekyll template.
But, since my goal is to reduce the amount of maintenance time needed, and to avoid moderating comments, I’m quite happy to have no comment form. I do accept comments via email, for times where someone has something genuinely worth saying. If that thing-worth-saying adds value to the discussion, I’ll consider posting it to the site.
The actual process of migrating all my blog posts from WordPress to Jekyll was interesting, too. I write more about that below.
Wiki and Forums
Toward the same goal of reducing site maintenance time, I have migrated the wiki to Github, so that I (hopefully) won’t have to deal with the endless spam that was being posted to the old wiki. It might also encourage more people to edit the wiki, since you can use your Github login instead of creating a new one for this site. But if that happens, it would just be a nice side effect.
I’m still pondering what to do with the forums, since they are the biggest time-waster for me. In a typical month, the forums receive hundreds of spam posts, but only one or two legitimate posts. It’s not really worth keeping the forums up and running, but there are some threads worth archiving, such as the RubyWeekend contests. I might convert the worthwhile stuff to static HTML, and sacrifice the ability for anyone to make new posts.
Granted, it would be a shame to lose the only still-active (albeit barely) dedicated way for people to ask for help and communicate with other users. I might create a Rubygame mailing list on Google Groups, but then I’d still have to worry about moderation and spam. Given how inactive the “Rubygame community” has been, I’m not sure it’s worthwhile.
(Technically, there are already two dusty old mailing lists from Rubygame’s SourceForge days, but they are even less active than the forums. I’ll definitely be archiving and shutting them down soon.)
A New Look
The migration also gave me an opportunity to improve the site’s look. I hand-crafted the template myself, using HTML5 for semantic document structuring, and CSS3 for styling. There’s actually not a lot of fancy CSS3 going on, aside from some gradients, rounded corners, and shadows. Even so, I’m quite pleased with the result, both for its clean look and for its clean separation of structure from presentation.
Since it’s HTML5 and CSS3, the site might not render correctly on ancient browsers like IE6. It should still be legible, just not as pretty. But if you’re still stuck on IE6, you’re probably used to websites not rendering correctly anyway.
Working with Jekyll
For the uninitiated, Jekyll is a nifty little static website generator. It could benefit from a bit of code cleanup, but it works well for the most common purposes, and is pretty easy to use. You provide it with page templates and your post content (which can even be written in Markdown or Textile), and it churns out a website made of static HTML pages, ready to be uploaded to any web server.
Working with Jekyll has been a lot of fun. The templating system is totally customizable, since it’s just HTML with embedded Liquid markup. (Liquid has its shortcomings, but it gets the job done.) Even better, you can download or write your own Jekyll plugins in Ruby, to change or extend Jekyll’s behavior. For this site, I’m using plugins to generate the archive and category pages, to convert SCSS to CSS, to tweak the older/newer post pagination behavior, and to define a few custom Liquid filters that I use in my templates.
Converting the WordPress posts to Jekyll was another interesting experience. Jekyll comes with a very basic WordPress migrator script, which exports the post content and some basic metadata (e.g. title and date). But, I wanted the whole enchilada!
So, I majorly revamped the migrator to also export comments (including author info and date), categories and tags, drafts and private posts (while marking them as unpublished so Jekyll will ignore them), and more. It even exports post excerpts, or fills in an empty excerpt automatically if the post uses a
<!-- more --> tag. I also made it clean up HTML entities in the post and comment bodies, and add
rel="nofollow" to links in comments. Phew! Naturally, I’ll be contributing my improved migrator back to the Jekyll project soon.
Once the post data was migrated, it still took some work to get it all to render nicely, and to be mostly backwards compatible with WordPress so that there would be as few broken links as possible. I think I did pretty well on that front, although I did sacrifice the comment feeds and per-category feeds. It’s possible to reimplement them in Jekyll, but I’m not sure it’s worth it.
All in all, it was pretty fun working on the website. It gave me an opportunity to create something fresh, and to learn a cool new tool. And, in the long run, it should eliminate most of the maintenance required for this site, so that I can move on from Rubygame and focus on exciting new projects.