Projects
Dialyxir
This was a small project that I initially banged out in the course of a single day, but then contributions started coming and never stopped. Eventually it became a community standard in CI pipelines and I put a lot of work into it over the years. This integrates the Erlang Dialyzer into Elixir projects, transforms Erlang warning terms into Elixir representations, and provides some basic information about different warning types.
The Dialyzer has never been a real substitute for static types, and I'm really thrilled that this project is becoming less relevant with every single release of Elixir now that set-theoretic types are being added. Once we have type annotations we could see the need for Dialyxir disappear almost completely.
Bitty
A new website needs a static generator! Not really. I built the first version of this website in pure HTML & CSS but writing copy directly into p tags is just too annoying compared to markdown. So I went looking for the most minimal markdown -> HTML website generator. There are a lot of great candidates but tinystatic - by Julian Vossen - ticked a lot of boxes: very simple model, nice template features and relatively few dependencies.
I forked it because the last release added a Javascript interpreter that added more than a dozen dependencies - that seemed excessive when it already had Go templating. I also needed builds for Apple Silicon and wanted a dev server. It also gave me a nice excuse to host a new project on Codefloe with automated releases by Crow!
This project is a great showcase for Go - it can do so much with really nothing but a couple of markdown libraries and a few hundred lines of code. For free we get: built-in webserver, flexible templating and its trivial to provide pre-built binaries for Linux and both flavors of Apple. Gophers, I should have never snarked ye.
Higher-LevelDB
This library provides a rich API for working with LevelDB databases in Haskell. This was the first Haskell library that I developed and released, and it probably shows to some extent, but it has seen the most usage based on Hackage download statistics.
Distributed Process ZooKeeper
This project provides service and node discovery for Cloud Haskell applications using a ZooKeeper cluster for name registration, lookups and leader election. The core functionality this offers is the ability to have global singleton processes, which are automatically replaced from a pool of candidates on termination. I’m really proud of this implementation but haven’t used it in a real project and it has not seen much interest from the community.