I’m rewriting my blog software for the fifth or sixth time, this time in Common Lisp … am I in the weeds yet?
OK, so my existing blog software is working well enough.
But, it’s kind of slow to run, with >100 blog posts. I could probably optimize it… but… lately I’m getting interested in Common Lisp, so what you’ll find here is an in-progress rewrite of Organa in Common Lisp
Why? For one thing, Common Lisp is fast. It’s a great horrid gorgeous ancient fire-breathing beast of a language, but damn, it smokes compared to Clojure, Python, …. Plus, this. And this, and this.
I want to keep some principles from Organa:
- statically generated site; no database
- posts written in Emacs Org Mode and exported using that tool to HTML, then knitted and massaged by the blog software into a coherent, inter-linked whole;
- categories / tags
- support for drafts, static files, etc.
- facilities for images, with captions, etc.
- better support for short posts and images (use cases from Twitter, Tumblr, and Instagram, none of which I really want to use anymore)
- redesigned home page
- way faster execution
Do you really want to get lost in the weeds? I didn’t think so. Currently this software won’t work anywhere but on my personal laptop, though I may generalize it if I’m happy enough with it.
If decide to wade in, you might want to set up Common Lisp first (if you’re on a Mac, this repo might be helpful).
To build the binary for the program, I run ./build.sh
and to run it,
I run ./weeds
. This currently takes less than a second, as
compared to nearly 30 seconds for Organa (not counting roughly the
same amount of time to build the überjar).
- Add / adapt CSS styling from Organa
- Fix / adapt images
- Make postcard summaries for front page view
- Image-only (or mostly image) posts
- Make a new home page
Extract and show post tagsMake an index page with every post on itDetermine and save post datesDetermine and save post titlesFigure out how to break up large fileFigure out how to auto-evaluate multiple dependencies at the REPL
See this question. Solution is a little hack-y but OK for now.