The Curious Engineer

All blogs / Software / engineering practice

Made of Bugs

blog.nelhage.com/post

Nelson Elhage's blog. I write about software and software engineering.

Software / engineering practicePerformance / optimizationCPU / microarchitectureAI / MLDistributed systems / cloudEngineering blogs

Posts
98 from 11 Feb 2007 to 23 Mar 2026
Posting
now and then (1 in the last year)
Kind
personal blog
Feed
https://blog.nelhage.com/atom.xml

2026 1

  1. From error-handling to structured concurrency

2025 4

  1. Solving regex crosswords with Z3
  2. The ITTAGE indirect branch predictor
  3. Performance of the Python 3.14 tail-call interpreter
  4. Building personal software with Claude

2024 2

  1. Finding near-duplicates with Jaccard similarity and MinHash
  2. Stripe's monorepo developer environment

2023 5

  1. Performance engineering, profilers, and seeing the invisible
  2. Advent of Code in C++ Template Metaprogramming
  3. What's with ML software and pickles?
  4. Graceful behavior at capacity
  5. Efficiency trades off against resiliency

2022 2

  1. Transformers for software engineers
  2. A Cursed Bug

2021 3

  1. Distributed cloud builds for everyone
  2. Building LLVM in 90 seconds using Amazon Lambda
  3. Some opinionated thoughts on SQL databases

2020 9

  1. Towards solving Ultimate Tic Tac Toe
  2. Write testable code by writing generic code
  3. Test suites as classifiers
  4. Systems that defy detailed understanding
  5. Computers can be understood
  6. Reflections on software performance
  7. Why the Sorbet typechecker is fast
  8. Testing and feedback loops
  9. Record/Replay testing in Sorbet

2019 5

  1. Two kinds of testing
  2. The architecture of declarative configuration management
  3. A Go/C Polyglot
  4. Reader/reader blocking in reader/writer locks
  5. My Apollo Bibliography

2018 1

  1. Three kinds of memory leaks

2017 7

  1. Property Testing Like AFL
  2. Property-Based Testing Is Fuzzing
  3. Disable Transparent Hugepages
  4. Two Perspectives on the End-to-End Principle
  5. Running Tensorflow on AWS GPUs
  6. Thoughts On Kubernetes
  7. Measuring Capacity Through Utilization

2016 2

  1. How I Write Tests
  2. Design for Testability

2015 3

  1. What MongoDB got Right
  2. Indices point between elements
  3. Regular Expression Search with Suffix Arrays

2014 1

  1. New reptyr feature: TTY-stealing

2013 2

  1. Lightweight Linux Kernel Development with KVM
  2. Tracking down a memory leak in Ruby's EventMachine

2012 1

  1. Why node.js is cool (it's not about performance)

2011 4

  1. BlackHat/DEFCON 2011 talk: Breaking out of KVM
  2. Exploiting misuse of Python's "pickle"
  3. reptyr: Changing a process's controlling terminal
  4. reptyr: Attach a running process to a new terminal

2010 34

  1. Some Android reverse-engineering tools
  2. CVE-2010-4258: Turning denial-of-service into privilege escalation
  3. Some notes on CVE-2010-3081 exploitability
  4. Why scons is cool
  5. Configuring dnsmasq with VMware Workstation
  6. Using Haskell's 'newtype' in C
  7. amd64 and va_arg
  8. A brief look at Linux's security record
  9. Dear Twitter: Stop screwing over your developers.
  10. How is duct tape like the force?
  11. Write yourself an strace in 70 lines of code
  12. Navigating the Linux Kernel
  13. Suggestion time: What should I blog about?
  14. Some musings on ORMs
  15. Implementing a declarative mini-language in the C preprocessor
  16. Check Plus: An EDSL for writing unit tests in C
  17. Lab Notebooking for the Software Engineer
  18. Wordpress tricks: Disabling editing shortcuts
  19. Confessions of a programmer: I hate code review
  20. Using X forwarding with screen by proxying $DISPLAY
  21. Getting carried away with hack value
  22. The Window Manager I Want
  23. Software Engineers should keep lab notebooks
  24. Some thoughts on Quora
  25. Fun with the preprocessor: CONFIG_IA32_EMULATION hacks in Linux
  26. Security doesn't respect abstraction boundaries
  27. Followup to "A Very Subtle Bug"
  28. A Very Subtle Bug
  29. Iron Blogger: Blogging for Beer
  30. Versioning dotfiles in git
  31. CVE-2007-4573: The Anatomy of a Kernel Exploit
  32. Git in pictures
  33. On git and usability
  34. A Brief Introduction to termios: Signaling and Job Control

2009 2

  1. A Brief Introduction to termios: termios(3) and stty
  2. A Brief Introduction to termios

2008 7

  1. wpa_supplicant: GUI and wpa_action
  2. autocutsel
  3. New Blog Location
  4. Using wpa_supplicant on Debian/Ubuntu
  5. Automounting sshfs
  6. Conkeror
  7. todo.pl ratmenu

2007 3

  1. A week with the iPhone
  2. DEF CON
  3. 6.170, CVS, and SVN