projects
Three and a half years of NSF EPSCoR funded research (the "Wisdom" team) into open technology for remote environmental sensing and infrastructure monitoring. The result is a complete open firmware platform for the RP2040: solar-powered sensor nodes on sodium-ion cells, RFM69 packet radio to a cellular gateway, MQTT out the far end. Deployed networks have 100% data retention, including through a gateway failure.
Everything is open source and open hardware (CERN-OHL-W), designed so other researchers can reproduce it from commonly available parts. There is no vendor SDK anywhere in the stack. Startup code, linker scripts, register definitions, build system, HAL, drivers, and transport are all first-party Zig, grown bottom-up as independent libraries. Each library has its own tests, its own documentation, and its own reason to exist.
.fig file into that type, with typed errors and
rendered file:line:col diagnostics. 305 tests.This work won the Outstanding Student Presentation Award at the AGU Fall Meeting 2025.
Contributor to Wine, the compatibility layer that runs Windows software on Linux. Thirty years of accumulated small problems, each one some specific program depending on some specific behavior, fixed one conformance test at a time. It is the largest grown system I have worked in and my favorite kind of codebase.
NtQueryFullAttributesFile returned an internal status,
STATUS_BAD_DEVICE_TYPE, for names that are not filesystem paths,
where Windows returns STATUS_OBJECT_NAME_INVALID. The fix asks the
server to open the object and reports its status, the same lookup
NtCreateFile already performs for those names.dup(), which shares
the file offset, so POSIX leaves it unspecified whether recent entries appear. A
non-empty directory could be reported as empty. Filesystem dependent, so CI never
saw it: on btrfs the ntdll:file suite went from 54 failures and a crash on the
second run against the same prefix, to 1 failure and stable. Reproducible outside
Wine in about thirty lines. The fix is one call, in the one ordering the standard
actually guarantees.todo_wine carried since 2010. Windows rejects
FILE_SYNCHRONOUS_IO_NONALERT without SYNCHRONIZE in the
access mask; Wine returned a path error instead and validated the combination
nowhere. The marker survived sixteen years partly because the original test's
subject line blamed the filename, which is not what causes the status. I measured
the real behavior on TestBot (the access mask outranks the path, generic rights do
not satisfy the requirement, neither does MAXIMUM_ALLOWED), which
decided where the check belongs. Three commits across seven files: the fix cannot
land alone, so an audit of all 252 call sites found ten passing a synchronous
option without SYNCHRONIZE, fixed first, and the check added after
with zero breakage.
An IO monitor that holds on. A tmux-style client/server tool in Go that
watches many serial (USB CDC) and MQTT streams at once, survives disconnects
and reconnects, names every stream uniformly
(type:watch@unit), and formats output through pluggable
formatters. Built as daily-driver tooling for sensor-network development.
About 12k lines, with tests.
The core of an entity component system, implemented twice: once in C, once in modern Fortran, a language I learned for the project. The goal was to test Fortran's claims of superior compiler auto-vectorization. Across hundreds of thousands of transformations of large data vectors, repeated thousands of times with randomized data, the Fortran implementation was consistently 10-15% faster than the C.