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.
- Collaborative editing
- Progressive enhancement
- Scheme and C libraries
- Rust packages
Popular async utilities for node and the browser. According to GitHub this is now relied upon by over 4.5 million repositories!
High-level streams library for Node.js and the browser, with strict laziness so it can be used to sequence side-effects. Read the article.
A tiny immutable JSON data structures library (< 1kb gzipped). I wrote this for time when Immutable.js was overkill.
A follow-on experiment from Pithy in developing ergonomic internal DSLs for generating DOM elements.
A convenient chainable API for Node.js HTTP responses.
A really simple URL dispatcher that allows arbitrarily nested regular expressions for matching URLs and calling an associated function.
A wiki designed around collaborative text editing developed in Rust, WebAssembly, and React. Still in early development.
Some experiments on designing templates for progressive enhancement. For my thoughts on this see the associated article.
Python implementation for server-side rendering.
Test suite to test server implementations against.
Scheme and C libraries
Raspberry Pi GPIO
Provides a CHICKEN Scheme interface to the Raspberry Pi GPIO pins. Co-authored with Jörg F. Wittenberger.
Scheme implementation of RFC 3492. Encodes internationalised domain names in the ASCII subset supported by DNS. See the associated article.
Scheme code to parse and serialise Bencode, the encoding used by BitTorrent for storing and transmitting loosely structured data.
Partial Scheme bindings to the libsodium crypto library, a "portable, cross-compatible, installable, packageable fork of NaCl, with a compatible API, and an extended API to improve usability even further".
Parser for CommonMark, a more highly specified version of Markdown. This is a very simple binding to the libcmark library. See the associated article.
Scheme implementation of a TOML markup parser. Passes toml-test suites for encoding and decoding.
A fast HTTP server for CHICKEN Scheme based around Joyent's http-parser C library (used internally by Node.js).
Low level bindings to Lightning Memory-Mapped Database (LMDB) for CHICKEN Scheme, closely following the C API (but without the manual memory management). See related articel on exploring LMDB.
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
Macros for creating request routers in hyper. Created to more easily support async request handlers.
Drive a Sharp Memory Display module from a Raspberry Pi.
Some older projects no longer in active development.
One of the very first unit testing frameworks for Node.js. It provided a simple TDD and export based syntax later used by expresso (which itself was later replaced by Mocha).
An easy way to create, parse, and validate forms in Node.js
Secure cookie-based session middleware for Connect.
A lightweight client for CouchDB for Node.js and the browser.
Standalone code based on CouchDB's proxy module for proxying mochiweb requests.
A Music Player Daemon (MPD) client module for Erlang. Read the original article. I'm not sure, but this might be my first open-source code! It's either that or a Erlang language definition for the SHJS highlighting library.