2024 |
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 |