Projects
things i've built, am building, or have honorably abandoned. ● active · ○ done · ◌ shelved. shelved isn't dead, just hibernating.
an agent-based building-evacuation sim i built from scratch in python with mesa. occupants react on their own timelines, follow bfs shortest paths around real walls, and queue at capacity-limited stair doors, so the bottlenecks emerge on their own instead of being scripted. v2 rebuilds the egress-deficient fourth floor of a real building i'd already analyzed by hand under nfpa 101, and it lands on the same constraint on its own. v3 sets the floor on fire. cellular fire and a faster smoke front spread over time, destroy an exit, and force occupants to reroute, and the casualty count shows the deficiency turns lethal specifically when a fire compromises the south stair (how close the fire starts to that stair correlates −0.85 with deaths).
flashed libreboot 25.06 onto my x220, using a raspberry pi zero 2 w wired onto the flash chip as an external spi programmer to replace the stock lenovo firmware. it went through on the first attempt and the existing kali install booted straight after. the useful parts were finding out the rom prep needs an x86_64 host so the pi can only ever be the programmer, and that a garbled chip id at high spi speed was a wire length problem rather than a backwards clip. three verified backups before anything got written. ram to 16gb is waiting on a warranty replacement for a stick that arrived dead, and a wifi card swap, display, and usb-c mod are maybes. build log in notes.
a self-hosted stack on a salvaged office desktop, an hp 280 g1 running debian and about ten docker containers: jellyfin with gpu transcoding, immich, nextcloud, pi-hole serving dns for the whole apartment, a minecraft server, and uptime kuma watching them. i own the network edge too, an r7000 flashed from netgear's firmware onto freshtomato, since openwrt can't properly drive broadcom wireless. the useful lesson was measuring instead of assuming. profiling found minecraft tick spikes that a perfect 20.000 tps average was hiding, and comparing my router's wan address against an external ip service found the double nat that makes port forwarding impossible from this building no matter how it's configured. so tailscale isn't a workaround anymore, it's the architecture, and nothing here is exposed to the open internet. build log in notes.
a speaker that makes sound by ionizing the air with electrical arcs instead of a normal cone and coil. the goal was handing it an mp3 or a wav and hearing that file come back out of the arcs. this was a 4 person course project where i worked mostly on the hardware, winding the roughly 1,650 turn secondary coil, doing the proof of concept research, and the design and marketing. i also drew up the circuit diagram, adapted from a slayer exciter reference build for the audio path our version needed, running arduino pwm through an optocoupler into the transistors switching the coil. i didn't do the arduino code or the teensy integration. honest ending, it never actually sang by the deadline. we cloned an existing build instead of doing the math behind it, so when it stayed silent we had nothing to debug against. shelved rather than finished, with a build log in notes.
want the gory details on any of these? most have a build log over in notes.