This page is a resume-like overview of my open-source work. It describes the purpose of each project and the extent of my contributions. Most projects also have an adequate README file, but these are intended for a typical user of the project and may require niche knowledge (e.g. of J) to understand.

Personal projects

All code designed and written by me.

ILanguage (C)

I is an experimental (avant-garde, even) programming language inspired by J. I began creating it after the stunning realization that my two favorite features of J—rank and forks—were actually the same concept! A paper describing this idea, a generalization of what Haskell calls the Functor typeclass, is shown in the I repository. It assumes no knowledge of any specific language. The language uses a number of other interesting ideas which are described in its documentation and guided examples.

Some features of the implementation include

  • Memory management implemented with reference counts.
  • A soft-typing framework built into the language. Any type can be a combination of elementary types, in which case values of that type are type-value pairs.
  • A framework for JIT compilation. Currently there is no actual code generation, and function pointers are used. However, many operations, like mapping and reduction with arithmetic operations, are already fast (close to C’s speed).

JtoLaTeX (J)

This is a half-compiler, half-preprocessor which creates LaTeX using J code. It replaces J operations with symbolic counterparts to build a syntax tree, and then turns the tree into LaTeX code. A particular design goal is to make the output code look natural even when the input is idiomatic J. The converter uses knowledge about order of operations and mathematical convention to parenthesize only when necessary, and it is very rare to need to add or remove parentheses while using JtoLaTeX. Addons provide other utilities like matrix handling, uncertainty calculation, greek and other symbols, and set notation.

The base code and the more important addons are well-documented in the doc folder.

JSound (J)

These are the utilities I use for music mixing and mastering, as well as some other tools for working with sound. Features include a tool for reading and writing wave files, a large collection of IIR filters, and sound synthesis tools.

Since this is more of a library than an application, documentation is provided only in the form of comments in the source files.

JScripts (J)

Various J scripts not large enough to merit an entire repository.

vim-earl-grey (Vimscript)

Earl Grey is a compile-to-Javascript language with (in my opinion) a very elegant design. I hope to work with it more in the future. This repository contains vimscript code for highlighting it. Harder than it sounds, since the grammar used for highlighting is far from context-free!


Projects that I have contributed to significantly. My contributions are noted.

J programming language (C)

J is my programming language of choice, and I am one of a handful of people who work with the source code at the moment. Although J has been open source since 2012, various problems made it impossible to contribute to the language until much more recently (early 2016).


The official Github mirror of J’s source. Most of my contributions should appear here eventually.


A fork of the J source code. I prefer to work with it over the official J source since the build system is nicer, and my changes appear here first.


Defunct. I keep it around because there are still some changes which I have not added to unbox.

htmllint (Javascript)

A school project that I and three other students designed for a class at UNC, with input from a small team at IBM. I am now the sole active maintainer. This does not mean I want to work in web dev.


Projects that I have changed, but only to a small extent.

exafmm (C++)

A project which aims to unify research on the fast multipole method so that variations on the algorithm (in particular, different kernels) are easily comparable. I made several modifications to exafmm for my master’s thesis and am working on merging some of them back in.

st (C)

The terminal I use. The only significant change from the code distributed by suckless is the addition of xft font rendering.