2025 |
| September 16 |
Access logging in 2025 |
| September 13 |
Account disasters |
| August 21 |
Understanding Jujutsu bookmarks |
| August 09 |
diff --stat for binary files |
| May 25 |
retrowin32, split into pieces |
| April 26 |
Unpacking packed executables |
| March 11 |
Rust trait object layout |
| March 04 |
Medium data and small data |
| January 24 |
Tech vocabulary |
2024 |
| December 12 |
The Jujutsu version control system |
| September 18 |
retrowin32: redoing syscalls |
| September 12 |
retrowin32, two years in |
| July 01 |
ICFP 2024 programming contest |
| May 16 |
retrowin32: Threading in two ways |
| April 16 |
Cross compiling C/Rust to win32, again |
| April 02 |
Moving data from Rust to JS |
| March 16 |
retrowin32: Minesweeper and the four month bug |
| February 04 |
Cross compiling Rust to win32 |
2023 |
| November 18 |
retrowin32's third x86 emulator |
| September 09 |
retrowin32, the blog series |
| August 13 |
Emulating x86 on x64 on aarch64 |
| July 12 |
The dominator tree of a dependency graph |
| July 08 |
Quick hacks on GitHub Pages |
| June 23 |
Finally getting two's complement |
| May 22 |
retrowin32: async, DLL loading, tracing execution, and Zig |
| March 17 |
Crinkler packing |
| March 08 |
Polymorphic shellcode |
| February 20 |
retrowin32 progress report |
| January 27 |
Solving an advent of code problem using a compiler |
| January 21 |
Emulating win32 |
| January 04 |
Two surprises in browser crashes |
2022 |
| December 10 |
A simple stack for today's web hacks |
| December 08 |
Chrome, 10 years later |
| November 30 |
Mini EV |
| October 13 |
retrowin32, a win32 emulator |
| October 05 |
Blog software |
| September 29 |
Taking a break |
| June 26 |
WebAssembly and C++ |
| June 19 |
Notes on WebAssembly |
| March 24 |
n2: revisiting Ninja |
| January 12 |
Rethinking errors, warnings, and lints |
2021 |
| July 04 |
Leaving Google |
2020 |
| October 28 |
Scaling TypeScript compilation |
| May 12 |
The Success and Failure of Ninja |
| April 13 |
Oblique Questions |
| February 25 |
California Exit |
2019 |
| November 23 |
Interfaces generally belong with users |
| April 24 |
JavaScript minification |
2018 |
| September 01 |
TypeScript at Google |
| July 08 |
Why not add an option for that? |
2016 |
| July 06 |
TypeScript nullable types |
| July 04 |
Adventures in terminal emulators |
| April 10 |
TypeScript's type-independent output |
| March 30 |
Microsoft BUILD conference |
| February 10 |
Revisiting TypeScript |
2015 |
| September 16 |
Random software: gocairo |
| September 16 |
Random software: Blizzard parser |
| July 27 |
Arch Linux on a ASUS Zenbook UX305 |
| July 22 |
Sabbatical, 2 |
| July 20 |
Recovering without a reflog |
| June 25 |
Notes on celiac disease |
2014 |
| November 20 |
Embedding the current revision in your product's binary |
| August 09 |
Pocket mini |
| July 01 |
The Anti-Dashboard Manifesto |
| June 13 |
Informal statistics |
| February 18 |
Links in a single page app |
| February 11 |
React, JSX, and CoffeeScript |
2013 |
| September 25 |
Big companies, small companies |
| August 10 |
SPDY setup |
| July 20 |
The zen of monads |
| March 29 |
Making |
| March 06 |
No posts / jelly no puzzle |
2012 |
| July 16 |
Gyp, Ninja, and shared object TOCs |
| June 15 |
Instant backtraces in C/C++ |
| May 09 |
New project |
| March 06 |
Adventures in heap profiling |
| January 16 |
Sabbatical |
2011 |
| December 21 |
Linux on a G4 Mac Mini |
| December 20 |
Nonblocking disk IO |
| December 15 |
Return by value |
| November 09 |
Graphics stack |
| October 18 |
Animation |
| October 18 |
Arch for Debian users |
| October 17 |
Why not Haskell? |
| October 13 |
Quoting |
| September 21 |
New blog format |
| September 11 |
Platform of the future |
| May 18 |
Some things I've learned about memory |
| April 30 |
An update on Ninja |
| April 23 |
Complexity is the enemy |