Projects
Some of these are released, some are archived, some are private. Not an exhaustive list of course. Mostly what they have in common is that I spent a comical amount of time on them and they are very, very extra.
-
Winnower
Web app, solver in Rust compiled to WebAssembly
Tells a Destiny 2 player which items in their vault are safe to delete. A vault holds hundreds of weapons, and any one of them can roll thousands of combinations of barrel, magazine and traits, so the question is which few cover everything worth keeping. A conditional logit model over 250,000 curator recommendations scores each perk by how often curators pick it when they could have picked something else, with game mode and input device as interaction terms, and Jenks natural breaks sort the perks within each archetype. Integer linear programming then finds the smallest set of weapons that covers every combination worth keeping, and a second pass picks the best barrels and magazines among the sets that tie. Armour is trimmed to its Pareto frontier separately.
-
CryoArchive dashboard
Web app and serverless collectors · archived
A public, high-traffic dashboard for the alternate reality game around Bungie's Marathon, showing players the state of the game's puzzles close to live, built against a site that published no API. The React Server Component payloads and the deobfuscated bundle exposed the component tree, the endpoint contracts, and two HS256 tokens carrying puzzle state on every request. Scheduled functions polled the game every minute into a blob store, kept two days at that resolution, and compacted anything older to its change points before archiving it. A collector running in players' browsers posted what it saw back with a bearer token. Reads sat behind a sixty-second edge cache, purged by tag whenever a write landed, and a diff on every response raised an alarm when the upstream changed shape.
-
Eraser
Max for Live device, rebuilt as an Ableton extension
Strips silence from every track of an Ableton Live session in one pass. Each track finds its own threshold with Otsu's method, the algorithm that separates foreground from background in a photograph, run over loudness instead of brightness. Cuts snap outward to the musical grid, so a cut never eats into audio you meant to keep. The interface was built by patching Max's binary patch format from Node, which is not really how anyone should make a Max patch.
-
Ludus
Electron desktop app, React over tRPC · in development
A gladiator-school management game whose numbers come from published research. Running its economy over ten thousand simulated careers showed that 88 percent of a school's income was death compensation rather than fight fees. Fighters decline on curves taken from real combat-sports data, where knockdown vulnerability roughly doubles between the early twenties and the late thirties. Height and weight come from a correlated distribution, and BMI feeds strength and stamina. Names come from Kajanto's The Latin Cognomina, a 1965 catalogue of Roman names run through OCR, weighted by how many surviving inscriptions carry each one.