the all-thing | 2010-09-04 16:39:29 -0400 ========================================== Another month, another blog platform ------------------------------------ Date: March 1, 2009 8:07am Author: William Morgan Labels: whisper URL: http://all-thing.net/welcome-to-whisper.txt 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 [1], 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 [2] ), 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 [3]. 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. [1] http://hobix.com [2] http://ritex.rubyforge.org [3] http://all-thing.net/index.txt Replies -------- William Morgan, on March 1, 2009 10:48am: ["| \n", "| Hahah good one! Ok, just testing.\n", "| \n"] William Morgan, on March 1, 2009 3:48pm: ["| \n", "| Hahah good one! Ok, just testing.\n", "| \n"] Kevin Lingerfelt, on March 2, 2009 5:48am: ["| I was about to scream, \"where's my RSS feed[image: ]!\" But then I found it,\n", "| here: http://all-thing.net/index.rss\n", "| \n", "| Cool.\n", "| \n", "| _[Top-posting automatically elided. Bad commenter, no cookie! --ed.]_\n", "| \n"] Kevin Lingerfelt, on March 2, 2009 12:48am: ["| I was about to scream, \"where's my RSS feed[image: ]!\" But then I found it,\n", "| here: http://all-thing.net/index.rss\n", "| \n", "| Cool.\n", "| \n", "| _[Top-posting automatically elided. Bad commenter, no cookie! --ed.]_\n"] William Morgan, on March 2, 2009 11:18am: [" | \n", " | Ok, have my top-post auto-scolder up and running now. Thanks! :)\n", " | \n"] William Morgan, on March 3, 2009 6:50pm: [" | I've added a link to the RSS widget on the left.\n", " | \n", " | And the git repo is _almost_ at the point where it's usable by other people\n", " | now.\n", " | \n"] This delicious text version served up by Whisper .