Over the past month or so I’ve been spending some time hacking together yet another blogging platform, to satisfy all my (admittedly weird) blogging desires. It’s finally at the point where I can host my fascinating insights on it, so here you go. It’s called Whisper, and you’re looking at it now.

Interesting features:

  1. No RDBMS. Storing your blog entries in a RDBMS is like driving to work in the Space Shuttle.
  2. YAML+Textile, sitting on a disk. Like Hobix, blog posts and comments are stored on disk in regular files, using a mix of YAML and Textile. This means you can keep your content under version control, and you can edit it with whatever editor you desire. Unlike Hobix, the entry content is stored in a separate file from the metadata, so there’s none of the trickiness of embedding Textile in YAML.
  3. Sits directly on top of Rack (or Thin). No intermediate layer to slow things down. These particular bits are served from Thin over a unix socket to Nginx.
  4. Lazy cached dependency graph: every bit of content is cached, built lazily, and a part of a big dependency graph. That means almost every request is served directly from memory, and making a change, like adding or updating an entry, forces a regeneration of only those bits that require it. Infrequently-requested bits of content eventually expire.
  5. Markup enhancements: I’ve added some extra processing on top of Textile to do the things I’ve always wanted to do. Ruby code is automatically syntax-highlighted, LaTeX math expressions are turned into MathML (via RiTeX ), etc. Finally I can write purty-lookin’ math and code without a ridiculous amount of effort.
  6. Threaded comments. Why would you not have this?
  7. Comments via email. This is still a work in progress, but comments can currently only be made by entering your email address, and replying to the resulting email. This allows you to quote, thread, and generally have a reasonable discussion, which is what email is good at, and what typing shit into little text areas on your web browser is not. The eventual goal is to automatically mirror the entire conversation, but right now it just mirrors individual replies.
  8. Multiformat support. In addition to HTML and RSS output, there’s a plain text mode for the hard-core.
  9. Pagination, labels, per-label and per-author indices, etc.
  10. The whole thing amounts to a little over 1200 lines of code.

The code’s still a while away from being ready for public consumption, but I’ve put up a git repo here: git://masanjin.net/whisper.

The next steps are to flesh out the code enough to make it usable by other people, make a gem, and maybe publish some performance numbers.

William Morgan, March 1, 2009.
This article was labeled as

Comments

To reply to the article, enter your email address. A copy of the article will be sent to you via email.