A new post for a newly revamped void * blog and a new personal home page constructed with Jekyll, a ruby based static site generator. In relation to my needs, Jekyll offers:
A back-to-basics approach of static site generation from “source” as HTML templates, CSS, and markdown, all easily maintained by me in git and emacs.
Supports blog-style dated posts with excerpts and template driven atom feed generation.
Usable as a simple but complete and powerful CMS, not just blog posts. I want this for both maintaining a home page for myself, but also for developing technical site docs (usage, design, reference, etc.) for various projects.
Supports inline code sample syntax highlighting, something that was lacking in the previous blog.
For now, the generated site remains on my home server and is served via Nginx. But I could easily push it elsewhere, for example, S3; as it requires no dynamic server component.
A missing feature vs. my previous blog is comment support, which has traditionally required a dynamic server, means of storage, spam detection, and many other complications. But java script embeddable comment services like DISQUS are now winning conversions even from mainstream blog platforms based on superior features and identity integration. Its on my list to integrate one of these. Its both amusing and convenient to have Web 2.0 handling the last mile, and allowing me to get back to basics with a Web 0.1 static site generator.
I’ll end the post with an example, the liquid template used to produce this blog’s atom feed:
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>void * blog</title>
<link href="http://gravitext.com/atom.xml" rel="self"/>
<link href="http://gravitext.com/"/>
<updated>{{ site.time | date_to_xmlschema }}</updated>
<id>http://gravitext.com/</id>
<author>
<name>David Kellum</name>
<email>dek-blog@gravitext.com</email>
</author>
{% for post in site.posts %}
<entry>
<title>{{ post.title }}</title>
<link href="http://gravitext.com{{ post.url }}"/>
<updated>{{ post.date | date_to_xmlschema }}</updated>
<id>id:{{ post.id }}</id>
<content type="html">{{ post.content | xml_escape }}</content>
</entry>
{% endfor %}
</feed>