Software projects
My open source projects are available via my Github profile. See also, blog posts filed under the associated tag.
Curiosities
lifepaths.pl
I wrote this to relearn Prolog—a language I’ve been fascinated with since university—using data from the Burning Wheel RPG’s lifepaths.
Retired
(inc clojure-brush)
A structure aware Clojure brush for Syntax Highlighter (a javascript library for in-browser highlighting). This brush provided smart highlighting for the Clojure programming language by implementing a full parser.
While I am largely happy with the project, and I still think its one of the best highlighter brushes for Clojure, I can’t recommend it as I wouldn’t recommend Syntax Highlighter these days. Pygments or highlight.js are probably better choices.
color.js
A simple color management API for JavaScript from a time before comprehensive color support in CSS.
Manticore
Manticore is a web app for the 13th Age tabletop RPG. It implements the rules for Building Battles on page 186 of core rulebook, in particular the pricing table. This application will automatically produce a set of all – within reason – encounter combinations that are allowed for a given party and selection of monsters.
I frequently used this app as a test bed for ideas and tools I’m experimenting. Over its life it has been implemented in Clojure as a logic program with core.logic, ClojureScript (without core.logic, when I realised how easy it was to make a computationally expensive query), and TypeScript with and without React, and finally using Svelte 4.
Necessary Evil
Necessary Evil is a library for writing XML-RPC clients and servers in Clojure. The library is built on top of Ring and from version 2.0.0 supports Clojure 1.2.1 and 1.3.
This project has been taken over by Toyam Cox.
Picoparse
Picoparse was a Python parser combinator library. It is very small, very expressive, and not especially fast. It lets you create parsers quickly and in pure Python, no regular expressions or new language to learn. But just write a recursive decent parser, they aren’t hard.