Blog
Feed available as Atom and RSS
- Crystal Spire #10: Finishing the easy bit August 16, 2025
- Crystal Spire #9: Buffing the Worm's nails August 9, 2025
- Crystal Spire #8: Facing our enemies February 1, 2025
- Crystal Spire #7: Armor August 24, 2024
- Slay the Spire #6: Let's go to Codeberg! August 11, 2024
- I can do hard things August 11, 2024
- Slay the Spire #5: Going dynamic August 4, 2024
- Slay the Spire #4: Links are real, and strong, and they are my friend August 3, 2024
- Slay the Spire #3: Introducing links August 1, 2024
- Slay the Spire #2: Actions and consequences July 31, 2024
- Slay the Spire #1: HTML first July 30, 2024
- Slay the Spire #0: Preamble July 29, 2024
- Having fun with SVG text February 21, 2024
- Oops, I made code review painful April 14, 2023
- A corner-cutter's confession February 9, 2023
- 'Technical debt' is an incomplete model February 5, 2023
- I am a social animal February 4, 2023
- Enforcing advanced type constraints with class constructors in TypeScript January 20, 2023
- Using TypeScript to prevent common mistakes January 17, 2023
- Code reviews are overloaded January 7, 2023