This page lists some of my non-work related projects, that I have done over the years:

JSON Schema parser (Code library)

Description

The json_schema project is an Elixir library for parsing, inspecting and manipulating JSON Schema documents, thus making it easier for third parties to create new tools based on JSON schema specifications, e.g. JSON schema validators or code generation tools.

The project was created as a result of my json-schema-to-elm project growing sufficiently large that it started to make sense to split it into two projects: the JSON schema parser and the Elm code generator.

ExRerun (Code library)

Description

The ex_rerun project is an Elixir library for monitoring your source code and running a set of custom mix tasks, like compile or test, whenever source files change. The tool is made to be pluggable allowing developers to add their own mix tasks to be run by the tool, e.g. for compiling frontend code or generating API documentation.

The project was created because I was developing a RESTful Elixir backend, in cowboy, which was bundled with a corresponding CRUD frontend in Elm, and wanted to compile the Elm code alongside the Elixir code whenever either of the code bases changed.

JSON Schema to Elm code generator (Command line tool)

Description

The json-schema-to-elm project is a command line tool, written in Elixir, which takes as input a list of JSON schema files, describing some API, and outputs Elm type declarations, JSON decoders and encoders, and Fuzz tests for manipulating the types specified by the JSON schema files in Elm.

The project was created as I found the act of writing all these JSON decoders and encoders by hand rather tedious and error prone, so it made sense to investigate the alternative of generating them based on a specification. Furthermore, this had the added advantage of giving me some hands on experience writing both parser and code generation logic for a real world use case.

i18n to Elm code generator (Command line tool)

Description

The i18n-to-elm project is a command line tool, written in Elixir, which takes as input a list of i18n resource files, containing translations of string assets in different languages, and outputs type safe Elm code for handling these i18n resources.

The project was created after reading “Elm i18n and Type Safety” – and having already written a working first version of the json-schema-to-elm tool – as a way of solving yet another boilerplate-related issue when working with Elm. This also had the effect of allowing me to test some of the Elm code generating logic on a slightly different use case than the JSON schema files.

CHIP-8 emulator (Web application)

Description

The chip-8 project is a web application, written in Elm, which implements a CHIP-8 emulator in the browser.

The project was created for two reasons:

  • Learning about emulators by implementing one, and
  • writing an emulator in a functional programming language.

Brainfuck interpreter (Web application)

Description

The brainfuck project is a web application, written in Elm, which implements a Brainfuck interpreter in the browser.

The project was created for two reasons:

  • Learning about interpreters implementing one, and
  • writing an interpreter in a functional programming language.

b.el (Emacs package)

Description

The b.el project is an Emacs package, written in Emacs Lisp, which provides a range of standard functions for manipulating and parsing bytes centered around three distinct representations for bytes as decimal, hexadecimal and binary values, respectively.

The project was create to aid developers who either want to rapidly prototype a parser for a binary format, and would prefer to do this from the comforts of an Emacs buffer, or simply want become better acquainted with bytes as a fundamental building block for software development and how these can be manipulated and represented.

Helm Bitbucket (Emacs package)

Description

The helm-bitbucket project is an Emacs package, written in Emacs Lisp, which adds Helm support for searching Bitbucket repositories, of which you are a member, and opening the corresponding the Bitbucket web page in the browser.

The project was created to easily lookup a Bitbucket repository while developing, e.g. to compare some piece of code or check on a pull request.

A Formal Study of Moessner’s Sieve (Master’s thesis)

Description

The formal-moessner project is my Master’s thesis in Computer Science completed at Aarhus University, and done under the supervision of Olivier Danvy. The dissertation presents a new characterization of a mathematical procedure known as Moessner’s Sieve, formalized in Coq, along with a range of new mathematical results.

The dissertation was later published as an eBook by Aarhus University Library.