MP

Projects

Here you'll find a variety of projects, in a variety of states of activity or abandonment. Some are useful, some are just for fun. Feel free to contact me about any of them. In general, I make no guarantees as to their suitability for any purpose. Virtually all of my active projects have flake.nix files that define a development environment, so hacking on them is easy and environment-independent.

This list is likely to be incomplete, so check out my profiles on the various forges to see newer stuff. I have tried to put the things I am more actively maintaining towards the top.

cuid-rust

This was a relatively early Rust project for me. My EM at the time mentioned the CUID algorithm, and I decided to have a go at writing it in Rust. I believe it has become the de facto standard Rust implementation, which is pretty gratifying. The crate now includes two sub-crates implementing both v1 and v2 of the algorithm.

procfarm

I was inspired by a section of documentation of nix post-build-hooks:

Here we use the post-build hook to upload to a binary cache. This is a simple and working example, but it is not suitable for all use cases. The post build hook program runs after each executed build, and blocks the build loop. The build is slow or unreliable. A more advanced implementation might pass the store paths to a user-supplied daemon or queue for processing the store paths outside of the build loop.
I decided to make a "more advanced implementation" and, inspired by the sccache approach of a transparent background server, created procfarm. It runs a background server that listens on a unix socket, and provides a run command to send any arbitrary command call to it. Processes are run in parallel in the background, with stats collected about their execution.

githome

This started as a dotfiles repository, branching off of my old dotfiles repository (called, appropriately, dotfiles). As I got deeper into Nix and switched to NixOS, it has slowly morphed into the declarative configuration of all my systems. It is also an absolute mess, being a continuously used, always in progress record of the state of my systems and my learning process.

This Website

This is another early Rust learning project for me. I wanted to build a dead-simple website out of "classic" web technologies, and I didn't really care for the complexity of any of the major static site generators. So, I made a simple one. It generates and publishes this site whenever I push to the main branch, ezpz.

vitae

This is a totally normal completely insane project, in which I took something not fun (updating my resume) and made it into something fun: using emacs to convert a literate-programming-style org-mode file into a LaTeX file and then into a PDF. The result is pulled into the build process of this website, so you should be able to see both the generated PDF and the generated LaTeX here (promise it's not a Trojan ;p).

json-logic-rs

We used JsonLogic as part of the product at Bestow, but we had issues with discrepancies between the JavaScript and Python implementations, with several things just not working in the Python one. I wrote this Rust version, which provided Python and WASM bindings, so that everybody could use the same thing across the stack. After I left Bestow, it was mostly abandoned. I have an alternative fork at json-logic-plus, which I'd like to find time to catch up on and flesh out, but at the moment it too is also essentially abandoned.

pypiserver

This is one of the more popular alternative python package servers. I did not create it originally, but I started contributing in early 2016, and took over as the primary maintainer in 2018. I stopped actively contributing around 2021, being too busy with work and more excited about Rust than Python. Prior to stepping away, I ensured the project had active maintainers, and it seems to still be going strong.

pydecor

A Python package to make it easier to use python decorators to arbitrarily wrap functions. Ironically, years before I started using emacs, this essentially recreates the interface of emacs' advice-add functionality.

version-utils

At ihiji, we did a lot of random version parsing of things like RPM packages, so I made this simple Python library to help us out.