Content from 2011-05

Two Years

posted on 2011-05-20 02:07:42

Yesterday was the 2 year anniversary of my father's death. It's hard to believe it's been that long. Appropriately, I had a dream the night before where I couldn't find him and didn't know his cell number or address. Luckily, I wound up spending most of the day relaxing, enjoying the weather and seeing people then had dinner with Mom and drinks with a friend after. There was a minimum of sulking and what memories Mom and I shared were, of course, fond ones. I think dad would be pretty proud of Mom and I. That might have been hard to say 6-12 months ago but it's a little easier now. I made myself go back to school and get a degree, I've got my first job lined up and it's a great one, Mom and I are closer than we've ever been and so on. All told, I'm pretty happy and maybe somewhere he is too. There's probably not a strong argument for this post but I feel compelled to make note of this day somewhere and if your own blog isn't the place, what is?

Faster than sense

posted on 2011-05-15 03:51:35

Things have been moving really rapidly of late. 11 days ago I was taking my last exam, 5 days ago I had my 3rd interview with Cox, 4 days ago I got the job offer and accepted, today I applied for a 12-month lease on a 2 bedroom 12th story apartment in Midtown with one of my oldest and dearest friends. It all feels like a surreal, ridiculous, out-of-body experience. I'm not altogether sure how to cope with or interpret the change at the speed it's happening. I've been trying to just relax and give myself time off. Soon it will be time to start familiarizing myself with Django and Python though. And there's no end of work to do on Coleslaw.

I've set up a Windows box to pursue two things I haven't in a *long* time. Some light PC gaming and Music Production. I've played with Ableton some but haven't really dug in yet. Here's hoping I actually spend some time learning about making music this Summer and Fall.

I am genuinely excited about the job and also the new apartment. Cox honestly seems like a fantastic place to work filled with smart and cool folks. I'm slightly intimidated simply by virtue of the fact that it will be my first full-time programming position and I expect the learning curve to be substantial but I'll overcome. And having a budget for real food so I can try new recipes again will be fantastic.

Ye Olde Smorgasborg

posted on 2011-05-06 21:18:23


This post may come off as a bit scattered. The main reason is that so much has been going on. I've finished my last semester at SPSU and should be picking up my diploma soon, I've been running around looking for a loft to move into with my friend Burke come late June and I've been working on getting a job. There's been progress on all of those fronts and I look forward to writing about them soon. Finally, I have a new Lisp project that I've been having fun hacking on and wanted to talk about. I was going to wait until I was ready to release version 0.1 but it's beginning to seem like that might be a few months out and I just can't help myself. I'll talk mostly about my motivations, design goals, some early results, my immediate plans and similar work others have begun recently.


The project is a piece of Lisp blog software I've christened "Coleslaw". I've wanted to write my own blog for a while for a variety of reasons. The most significant is that it would be a good learning experience and fun. Additionally, then I could just run SBCL and PostgreSQL on my servers and scrap MySQL and PHP. I'd been putting it off for some time as I'm no web development expert but I had an opportunity to get course credit for working on it some this semester so I decided to get the ball rolling.

Lately a piece of Ruby blogware named Jekyll became surprisingly popular. There are two interesting things about Jekyll to me. The first is that it uses a static-site compilation model rather than generating pages dynamically (as Wordpress does). The second is that it requires and provides no admin-interface as a result. It simply watches a directory for new posts and regenerates as much of the site as necessary.

The simplicity (and somewhat simpler security model) of writing blogware that didn't have an admin interface and just keeping everything in flat files really appealed to me but I knew many people still love admin interfaces and database backed webapps and for good reason. Though you should always have backups of course. Anyway, it's thanks to Jekyll and several similar clones that I really started looking into the design of something that could support both options.

Design Goals

The original design goals were to support a *single-user* blog with either a dynamic backend that provided an admin interface and made use of a database or a static backend that simply compiled posts from a watched directory to an HTML output directory. Since then I've decided a bit more separation of concerns is in order. Down the line I'd like to support the following "large-scale" options with Coleslaw:
  • Where is the data? (mongodb, postgresql, flat files, lisp data persisted with cl-store or similar, etc)

  • How is the data served? (Static files, Dynamically generated w/optional caching)

  • How is the data edited? (web-admin-interface-p)

  • Who serves the data? (S3, Lisp server (hunchentoot/etc), System HTTPD (lighttpd/apache/etc)

  • How are comments handled? (Cloud service (disqus/etc), Stored and generated locally, disabled)

  • Above and beyond that I'd like to have a few bundled plugins for things like Analytics, Syntax Hightlighting, LaTeX support, Import from other blogs, Crossposting. Finally, Coleslaw should be easy to theme.

    Early Results

    The code is presently on github and I haven't hacked on it for a few days because I've been relaxing post-finals. That said, I'm looking forward to getting back into working on it in the near future. At this time, only the static backend has been started and there's still no implementation for directory watching to update posts. Comment support also hasn't been completed. That said there's a preliminary theme (stolen from ckeen's hyde, thanks ckeen!) and an example site running backed by S3. Note that the posts shown are all imported from an XML export of my Wordpress blog. The current import plugin only supports wordpress and only handles posts, not comments. The code used to generate the example site was pasted here.

    I feel pretty solid about the internal API for indexes and posts and my plugin infrastructure as well as the theming situation. cl-fad, local-time, cl-closure-template, cl-docutils and cl-markdown are the current hard dependencies for the core because I'd like to support ReStructuredText, HTML or Markdown input for posts. Just for giggles my friend Neil also made a logo in large, medium and small. Here's medium: Medium Coleslaw Logo

    Immediate Plans

    I started working on plugins for disqus comment support as well as mathjax LaTeX support but the whole experience made me want to revamp my API for "injections" which allows plugins to throw various bits of JS in the page HEAD and BODY. I'd like to support arbitrary predicates (say, to only add the mathjax scripts when posts are tagged "math") and allow for distinguishing between whether something should be injected on post pages or index pages in addition to the current "should I inject this in the HEAD or BODY?" functionality. Once that's done, I'd like to support syntax highlighting via Python's pygments library. Then I'll get around to the directory watching/updating semantics. Once that's done I can work on the dynamic backend and start *THINKING* about a 1.0. That's the state of things today. I'd love to hear from you if you have thoughts, opinions or a desire to contribute patches/help. :D

    Recent Similar Efforts

    I've found it pretty comical that 2 other (more experienced and talented) lispers recently began writing lisp blog software shortly after I started working on coleslaw. Who knows, if they had gotten around to it 6-9 months earlier I might never have wound up working on coleslaw, but I'm glad I have. It's a lot of fun.

    If you find coleslaw interesting it's worth looking at nuclblog(cl-store serialized data, dynamic, Markdown) by Cyrus Harmon (slyrus), lisplog(drupal import, custom flat file database, dynamic) by Bill St. Clair (billstclair) and arblog(mongodb-backed, dynamic, ReStructuredText) by Andrey Moskvitin (archimag).

    Unless otherwise credited all material Creative Commons License by Brit Butler