Toronto
A compiler and a mind are both machines for turning symbols into meaning.
I study both at the University of Toronto, and I write here about where the analogy leaks: types, time zones, private networks, and the small bugs that turn out to have been category errors all along.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
Selected projects
Serval
Configuration and scripts served from a URL that never moves, filled in per caller and versioned so any revision is restorable. A Gist serves stale content after an edit; here a write evicts the cache, and a route id nobody minted never reaches the database.
- Rust
- ·PostgreSQL
- ·Content-addressed
Letterbox
Opening an email should not tell the sender you opened it. Remote images are blocked by default, and the ones you allow go through a WARP tunnel the app builds itself in Rust, rather than a proxy that would do the logging instead.
- Kotlin
- ·Rust
- ·Android
PromptPipe
Behavioural studies fail on delivery more often than on design: missed prompts, silent dropout, answers that never arrive. PromptPipe reaches participants on WhatsApp, where they already are, and counts what was delivered apart from what was answered.
- Go
- ·Study infrastructure
Recent posts
A calendar date is not an instant
How a one-line date format shipped the wrong day, and why the fix was a type rather than a patch.
Taking control of my tailnet: Tailscale ACLs and tags
How I use Tailscale access control lists and device tags to keep a growing private network deny-by-default and legible.