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

Before this blog, I also wrote a separate collection of notes about Chromium, the browser better known as Google Chrome.

Before even that, see the LiveJournal I used to use.