Marijn's improvised weblog

Announcing: CL-TK

(Monday, March 16th 2009)

I've just put my Common Lisp Tcl/Tk bindings online. They differ from the existing LTK library in that they...

They've only been used in one medium-sized project so far, but they are so simple that I'm rather confident they work as intended.

Project page at http://marijn.haverbeke.nl/cl-tk/.

Announcing: ST-JSON

(Friday, August 8th 2008)

After dragging my JSON implementation through various projects, and having several incompatible versions exist at the same time, I got permission to open-source it from the company that originally paid me to write it, so it has a home now: ST-JSON.

There already exists a comparable library called CL-JSON. I originally wrote a new one because the way CL-JSON uses nil to encode all of boolean false, the empty list, and the empty object was causing headaches, and later I added some other extensions.

HTTP Caching

(Wednesday, July 30th 2008)

Webreference.com just published my piece about HTTP caching. Unfortunately, their editor introduced a bunch of ugly sentences (see the first one) and mistakes (this seems to be a major part of editors' job descriptions). The general idea should still be there.

Interning symbols

(Saturday, July 19th 2008)

Mike Ajemian wrote something about dynamically interning symbols using the ~:@ format construct to upcase parts of the symbol's name. This works fine on standard CLs, but if you want to write something that also works with Allegro's 'modern' mode (where symbols are case-sensitive), you don't want to upcase the symbol. What you do there is use the reader against itself ― (format nil "~a-~a" :insert name-symbol), the symbol-name of :insert will be whatever the reader made of it, and thus you'll get a symbol that follows the same conventions as the surrounding system.

(You also don't want to use uppercase strings in your package definitions ― I'm looking at you split-sequence ― use #:symbol syntax if you don't want to waste memory on pointless keyword symbols.)

In a similar vein, sometimes you'll want to create throwaway symbols with a certain name at run-time. (For example, S-SQL requires symbols for stuff like database index names, which you might want to generate.) intern leaks memory in this case, since anything interned stays around until it is uninterned. gensym tends to add junk to the symbol's name. Some messing around with apropos (more languages need an apropos feature) led me to the predictably named make-symbol, which, like #: syntax, creates an uninterned symbol with a specific name.

Presenting: The Mold client-side web-templating system

(July 10th 2008)

After messing around with a few different client-side templating libraries, all of which seemed to be either unmaintained, too overbearing (forcing you to work inside their 'framework'), or just plain wrongheaded, I went ahead and implemented a new one. Mold aims to be a simple, general, convenient system for compiling and instantiating HTML templates. See the project page for examples, documentation and downloads.