Essays

2026

  1. A neural character-level bigram language model, optimized with gradient descent rather than counted from the training data.

  2. Generalizing the statistical bigram model to arbitrary n-grams, and using it as a vehicle to explore hyperparameter tuning.

2025

  1. Building a statistical character-level bigram language model - the first step from raw autograd toward models that emulate natural language.

  2. Using race data from the 2025 Hyrox World Championships to identify the performance measures that separate elite athletes from top non-elites.

  3. Extending the autograd engine with more arithmetic operations and nonlinear activations, then building a small neural network library on top of it.

  4. Implementing a scalar-valued automatic differentiation engine from scratch. First post following Karpathy's Neural Networks: Zero to Hero.

  5. A response to Cal Newport's case against superintelligence, laying out where his rebuttal of Yudkowsky's existential-risk argument goes wrong.

2022

  1. How the standard library achieves a space-optimized boolean vector without giving up container semantics, and why that optimization still surprises people.

  2. Adding an almost-equal operator to CPython by extending the tokenizer, parser, and abstract syntax tree. First in a series on hacking the interpreter.

  3. Comparing several options for deploying containerized applications on AWS across usability, scalability, and pricing.

2021

  1. A recovered 2019 presentation on the gulf between cryptographic theory and practice, and how that gap invalidates common assumptions about real-world cryptographic strength.

  2. Takeaways from Simon Peyton Jones's talk on writing research papers, annotated with commentary from a first-time researcher.

  3. Benchmark results for two popular reader-writer lock implementations, with tentative explanations for the patterns they reveal.

2020

  1. Using C++20 coroutines to hide memory stall latency during bulk lookups on a hashtable larger than last-level cache.

  2. Building an awaitable timer on top of native system timer facilities, as a template for integrating coroutines with any asynchronous system event.

  3. Exploring the semantics of coroutine composition through a deliberately simplified implementation of the task type.

  4. An introduction to a series on C++20 coroutines, and why they offer an elegant solution to the problem of asynchronous state management.

Tags