Tech Side-Projects
Here I list the major side-projects I have completed. These include programming projects and IT infrastructure work. It does not include contributions to open source projects that are not mine. It also does not include smaller projects I don’t consider significant enough to include.
For a somewhat more complete list of things I have been involved with to any degree, see the links navigation entry.
Bin Bucket
My Binary Bucket is a project born of my administrative frustration. It’s very wasteful to simply install my most comfortable text editor, shell, etc on every server. Especially since many of them may not be available in the repositories, I may not control the server (e.g in case of working with corporate partners), and so on.
As a response, I decided to build an extremely simple and minimal system for building fully static binaries that may be easily deployed and updated. The binary bucket (so named because it is a bucket (s3-compatible terminology) that holds binaries) is the result of this effort.
You can browse the bucket itself here, and view the builder sources and history here.
BRPaste
BRPaste (Burning Rubber Paste) was an effort to create a pastebin that would have a faster backend (relative to various python or lua-based offerings at the time), have memorable identifiers (based on research into human short term memory) and have fewer features (thus requiring little to no runtime dependencies or configuration).
To achieve this, the 32bit murmurhash of the content was used as the id (since it’s possible to encode it into 6 characters of base64). To achieve the desired speed, an absolute minimum amount of processing was applied, and the storage was kept in memory (using either a built-in memory backend, or redis).
Now that the project is feature-complete, the main changes being considered are improvements to the html, the limited configuration system (multiple in-progress projects have to do with this), as well as adding a slower (but easier, perhaps even default) storage system using an on-disk b-tree.
CNI
CNI is an INI-alike configuration format.
It comes with a specification (by way of an exhaustive test suite and reference implementation), but has an even simpler grammar than INI. It also handles the data differently: as a pure key-value store (with sections simply being prefixes/formalities). The Go implementation is also planned to come with linting and analysis utilities.
You can find the repository for the reference implementation and test suite here.
Jurl
Jurl is an HTTP client for Janet (a mixed functional/imperative lisp from 2018). It’s a libcurl wrapper, with the native bindings having the explicit goal of being as complete as possible. To the best of my knowledge, it is the most complete bindings for a dynamic language of this category.
The language level bindings are then implemented on top of that. I had the goal of making them as nice and complete (but only for HTTP, rather than everything curl can do) as I could. The result is the nicest HTTP client I’ve ever used, competing roughly with python’s requests (the “request” function is roughly equivalent to requests API, with the additional API layer on top of this being a lisp/F#-like pipeline).
Patok
Patok is a runtime tokenizer in pure lua. The primary novelty involved is that it works entirely on the basis of lua’s patterns. Typically, tokenizers/parsers are built using bespoke systems rather than regular expressions or similar. Those that are regex-or-similar based are handled in AOT and as such require a separate transformation, such as bison/yacc. The only project I am (now) aware of that’s similar is the moo tokenizer for javascript.
In order to make the tokenizer useful, patok also comes with piecemeal, a fairly standard run-of-the-mill recursive descent parser built to consume patok output.