Portfolio
Code
-
ABCLS
An IDE for musicians. It’s a text-based score editor, for real.
I use it every day when writing piano transcriptions.
It’s so fast it makes score editing a casual activity again - just like when you used to do pencil and paper. It takes a second to start up in vim or kak, it doesn’t crash, it can edit at the speed of thought.
The syntax highlighting, the formatter, the renderer, the arranging capabilities: I wrote the tool I dreamt of while in music school.
My best code to this day, even if the arranging module has some nasty bugs. -
scripts for Reaper
My signature DAW moves, summed-up in a repo.
This grew organically as a result of trying to speed-up some of the repetitive things I was doing:- humanizing grid-based parts by pasting a human-based rhythm feel,
- adding (somewhat) realistic-sounding flams to sample-based drums,
- setting up mixing session by auto-routing tracks to busses using rules similar to SWS’ auto-colour…
-
reavim
A fork of the reaper-keys project, with my own flavor of daily moves. I hope to get back to refining this one day.
-
zlowcheck
I wrote this after reading about the sad state of property-based testing libraries, and Matklad’s bit about finite-entropy PRNGs. PBT turned into a mini-obsession and served me well on countless projects.
-
cstree
Child-sibling tree library — left node is the child, right node is the sibling,
prevnode leads back to older sibling or the parent. The sibling chains are basically swapping intrusive children arrays with a linked list.
This lets you represent arbitrary levels of nesting with a predictable memory layout.
I jumped on this after finding out that it was possible to traverse trees up and down using a state-machine approach. It’s weird to me that these LCRF trees aren’t more popular.
I got to loving them when I discovered how they mapped to my mental model of modal editing in a text-based score. The way I pictured it: stacking filters would narrow down selections, and then transform little semantic elements from those selections.
Incidentally, the approach matched perfectly with how Kakoune’s moves are structured.
The lib is part of the ABCLS toolchain, but it can be used standalone. -
treelist
A super-fast-traversing heterogeneous intrusive tree in Zig.
This was the original idea for what became ABCLS’ child-sibling tree library. I wrote a whole series on the topic:
-
reaziglib
Zig bindings for the Reaper DAW extension API, and bunch of other small utilities for building app extensions.
Non-exhaustively:- Comptime-prevention of midi control surface recursion
- A string pool
- A localization/translation module
- Preset file reading
- Testing models that mimick the reaper env, its audio tracks and its audio FXs
- …lots more…
-
Score transcriptions
Remnants of my past obsession with Gary Burton.
La Fiesta - as he gloriously played it with Chick Corea. The transcription is for sale.
I hope to get around to publishing some of his other mean solos I have stashed up someday. -
Stenography plugin for Plover
Prior to the years of AI voice transcriptions, I was seeking a way to type fast, so I made this steno dictionary. It’s loosely based on Granjean, can reach 170WPM - if you exclude that every other word pulled by the dictionary is wrong.
Kids, steno school attrition rate is higher than a plague epidemic. Don’t do this at home.