Now with even more Lisp!
Written on 2012-09-19 20:47:00
I haven't finished my headless NES emulator in time for Strange Loop. On the other hand, I have done some cool things that I didn't anticipate. Here's what's been going on in hackland lately:
Coleslaw: Heroku & Plugins
The majority of my efforts have been related to my new blogging engine, Coleslaw. I've substantially cleaned up the rendering pass, added optional RSS feeds for specific tags, revamped the plugin architecture, and added a plugin for Disqus support. Jose Pereira also wrote a heroku buildpack for running Coleslaw so if you feel like having a simple managed install, problem solved!
While docs are still needed, here is a rough overview of the plugin architecture. I'll add a simple, hello-world-ish example to the README shortly.
Plugins are lisp files placed in coleslaw's
plugins
directory.Each plugin should define a package
:coleslaw-$filename
where $filename is the name, excluding extension, of the plugin.The package should export a function named
enable
that can be called to activate the plugin.enable
is mostly useful for adding Javascript to the page viaadd-injection
or passing initialization args elsewhere.add-injection
takes a cons like(js-string predicate)
and a location (:head
or:tail
) to insert it.- The predicate should take a single content object as argument. A content object can be either a POST or an INDEX.
- The predicate will be called at render time and a non-nil return value will cause the injection to be included in the page.
Plugins can also extend
render-content
to support new post formats such as ReStructuredText or modifydeploy
with:before
,:after
, or:around
methods to support deployment to S3, serving via Hunchentoot, etc.- End users take advantage of plugins by enabling them in their .coleslawrc's :plugins list.
- A plugin given as a symbol will call
enable
with no args whereas a plugin given as a list will callenable
with the args after the plugin's name.
- A plugin given as a symbol will call
Colorize Reborn
I am pleased to announce I've taken over as maintainer of colorize. It provides the syntax highlighting in Coleslaw's 3bmd markdown mode. I've backported patches from lisppaste to colorize for Haskell, Erlang, Python, and a number of other languages. I also added very rudimentary support for Clojure highlighting. While I'm interested in seeing further language support (particularly Clojure and Rust) I lack the time to work on further coloring modes myself. If you have any inclination to hack on colorize to add support for new languages or otherwise improve it please feel free to contact me. I'm more than happy to review and merge pull requests. :)
Wanting Types, Demanding Mirrors
I delivered a final Lunch and Learn at CMGdigital on Dynamic Systems. I have a screencast of it like my last talk but I haven't uploaded it yet. I'm a bit more out of my depth this time and am still considering tweaking the content and rerecording. The slides are linked above though and I would welcome comments. I'm also working on a Magic the Gathering tutorial/unsession for Strange Loop and an Emacs Crash Course for my new coworkers at Primedia. Finally, I'm giving a talk on the internals of cl-6502 to the Atlanta Lisp User Group on October 1st.
Vacietis and trivial-dump-core
Vladimir Sedach has been working on a C to Common Lisp compiler called Vacietis for a while now. It's become mature enough to generate Lisp executables for small C programs. However, dumping executables isn't a portable CL feature so I contributed a minor pull request to use trivial-dump-core to improve portability from ccl to clisp, sbcl, and ccl. I hope trivial-dump-core sees more use and gains support for more implementations as portable executable creation would be a nice thing to have.