04 Jul 2017

Projects

This is a selection of projects I've worked on over the years. It's not an exhaustive list - you can find more of my code on GitHub.

JavaScript modules

Async

Utilities for working with JavaScript callbacks, works in both Node.js and the browser. Async provides around 70 functions that include the usual functional suspects (map, reduce, filter, each…) as well as some common patterns for asynchronous control flow (parallel, series, waterfall…).

Highland

High-level streams library for Node.js and the browser, with strict laziness so it can be used to sequence side-effects.

Copy Kitten

A tiny immutable JSON data structures library (< 1kb gzipped). I wrote this for time when Immutable.js was overkill.

Progressive enhancement

Some experiments on designing templates for progressive enhancement, for my thoughts on this see the blog post.

Magery

The JavaScript implementation of the templates. Allows incremental DOM updates based on server-rendered templates.

python-magery

Python implementation for server-side rendering.

magery-tests

Test suite to test server implementations of the template engine against.

Scheme (including C bindings)

Raspberry Pi GPIO

Provides a CHICKEN Scheme interface to the Raspberry Pi GPIO pins. Co-authored with Jörg F. Wittenberger.

Punycode

Scheme implementation of RFC 3492. Encodes internationalised domain names in the ASCII subset supported by DNS.

Bencode

Scheme code to parse and serialise Bencode, the encoding used by BitTorrent for storing and transmitting loosely structured data.

CMark

Parser for CommonMark, a more highly specified version of Markdown. This is a very simple binding to the libcmark library.

TOML

Scheme implementation of a TOML markup parser. Passes toml-test suites for encoding and decoding.

LMDB (lolevel)

Low level bindings to Lightning Memory-Mapped Database (LMDB) for CHICKEN Scheme, closely following the C API (but without the manual memory management).

LevelDB

Complementary CHICKEN Scheme packages for working with LevelDB, a key/value database library by Google. The abstract interface is provided by the level egg, and the real LevelDB backed store is implemented in the leveldb egg. This is similar to the LevelUP / LevelDOWN split used in the Node.js bindings.

  • level - Abstract interface for level implementations.
  • leveldb - C binding to LevelDB providing a level implementation
  • sublevel - Namespaced access which can exposed as a level implemenation
  • level-sexp - Wraps a level implementation to automatically read/write scheme values