Projects

This is a somewhat curated list of my projects. You can find more on Github, although I’ve used it as a dumping ground for random stuff.

DIY 3D printers

I’ve built and modded two 3D printers: the VORON Trident and the VORON 0. Building the printers were really fun and rewarding, and being able to 3D print stuff is very useful too.

My ultimate keyboard

I built a custom keyboard with 35 keys and an integrated trackball. I’ve also got a completely custom keyboard layout for it:

Gui J Ctrl C Ctrl F End Ctrl X Home Gui W Gui E Gui R Gui . Ctrl A Shift Ctrl Shift Tab Ctrl Tab Ctrl Left Mouse Gui K Gui , Ctrl V Right Mouse PgDn Ctrl D Ctrl U PgUp Back Mouse Fwd Mouse Space NAV WNAV
The navigation layer I use with the keyboard.

Tree-sitter Djot

The Tree-sitter grammar for the Djot markup language gives editors such as Neovim the ability to syntax highlight, conceal, select text semantically, jump between elements, and more.

{#example-attribute}
# Djot is like Markdown
But Djot is _easier_ to parse and has some additional
markup elements.[^footnote]
::: div_class
i. Roman numerals for lists.
i. Lisp-like :symbols: for postprocessing.
i. LaTeX math: $`i^2 = -1`
i. ~superscript~, {+insert+} and {-delete-}, and more...
:::
[^footnote]: But I admit, the difference between Djot and
the various Markdown flavors isn't *that* large.

If you’re curious about Tree-sitter, make sure to check out the in-depth post Let’s create a Tree-sitter grammar that walks you through the creation of a grammar for a subset of Djot.

BitPal

BitPal is a self-hosted cryptocurrency payment processor It allows you to accept payments online using various cryptocurrencies without a third-party custodian, on your own hardware. It’s developed in Elixir.

T-34 Keyboard layout

J C Y F P X W O U . R S T H K M N A I Repeat , V G D B / L ( ) _ SHRT Space NAV E SPEC

I made a custom keyboard layout, designed for a keyboard with 34 keys. It’s been a fun project but it’s also helping me relieve my RSI.

MARC

This is a VHDL implementation of the Core Wars 88 standard. Core Wars is a computer game where two programs compete and try to destroy each other.

The programs may look like this:

; This program will copy a DAT instruction to every 4th line in the memory,
; hoping to catch enemy processes and kill them off.
;
; add 4 to the instruction at offset 3 (the DAT)
ADD #4, 3
; copy the instruction at offset 2 to relative location of
; the second field of instruction 2 (+4 lines after DAT the first execution)
MOV 2, @2
; jump back to beginning
JMP -2,0
; if a process tries to execute this line, it dies
DAT #0, #0

See the Core Wars wiki for more info.

Competitive programming algorithms

This is a collection of algorithms used in competitive programming. There are also slightly hacky commandline submit scripts for kattis and UVa. See my uHunt profile for a list of solved UVa problems.

// Bellman-Ford's algorithm for single source shortest path.
// Return a vector of pair<dist, parent>.
// Take in an adjecency list of type pair<node, weight>.
template<typename T>
vector<pair<T, int>> shortest_path(vector<vector<pair<int, T>>> adj_list, int start);
// Aho-Corasick's string matching algorithm.
// Return a vector of matching positions corresponding to the pattern index.
vector<vector<int>> find(const vector<string> &patterns, string text);

Games

Some fast game prototypes. Most were made in 7 days or 48 hours.