The Curious Engineer

All blogs / Databases

Notes on software development

notes.eatonphil.com

DatabasesCompilersDistributed systems / cloudGoSoftware / engineering practice

Posts
208 from 29 Dec 2016 to 29 Oct 2026
Posting
weekly (41 in the last year)
Kind
personal blog
Feed
https://notes.eatonphil.com/rss.xml

2026 37

  1. 2026 10 29 nyc
  2. Deepthi Sigireddi from Supabase
  3. Compression and concatenation on the web
  4. Full text search and PostgreSQL
  5. Query plan rewriting in PostgreSQL
  6. Data races and the limits of ThreadSanitizer in C and Go
  7. Another look at SQLite's WAL-Reset bug
  8. The road to ACID transactions in Cassandra 6
  9. Hourly updates to jobs and the feed
  10. Touring The Consensus, six months in
  11. The feature in OxCaml that more languages should steal
  12. WasmGC in Wasmtime
  13. Observing Go's garbage collector, old and new
  14. Doing the rounds
  15. This week in infrastructure
  16. Of forks and clones and package management
  17. Python 3.14 garbage collection rigamarole
  18. Yeunjoo Choi from Igalia on Chromium
  19. Serving files over HTTP three ways: synchronous, epoll, and io_uring
  20. Automating Hermitage to see how transactions differ in MySQL and MariaDB
  21. Branimir Lambov from IBM on Cassandra
  22. Who even uses jemalloc in 2026 anyway? (many major projects)
  23. How jobs, events, and funding work on The Consensus
  24. Who contributed to DataFusion 53
  25. Taking multi-master MariaDB for a spin, reproducing a Jepsen report
  26. Developer Spotlight: Somtochi Onyekwere from Fly.io
  27. A static site generator and website transferring under 20kB
  28. Mojo's not (yet) Python
  29. Source-available projects and their AI contribution policies
  30. Open Source Contributor Spotlight: Kosta Tarasov and DataFusion
  31. I started a software research company
  32. We have pgvector at home
  33. Generating vector embeddings for semantic search locally
  34. Paths of MySQL, vector search edition
  35. Companies behind Postgres 18 development
  36. LLMs and your career
  37. Distinguishing yourself early in your career as a developer

2025 25

  1. Year in community
  2. Year in books
  3. Is psql's scripting language Turing complete? Or: fibonacci in psql
  4. An individual can change an organization
  5. Transaction pooling for Postgres with pgcat
  6. In response to a developer asking about systems
  7. A simple clustering and replication solution for Postgres
  8. Analytics query goes 6x faster with EDB Postgres Distributed's new analytics engine
  9. Set up a single-node EDB Postgres Distributed cluster on Ubuntu
  10. What even is distributed systems
  11. Stack traces for Postgres errors with backtrace_functions
  12. Want to meet people, try charging them for it?
  13. Debugging memory leaks in Postgres, jemalloc edition
  14. Cheerleading
  15. Debugging memory leaks in Postgres, heaptrack edition
  16. Screw your title
  17. Transactions are a protocol
  18. Things that go wrong with disk IO
  19. Phil Eaton on Technical Blogging
  20. Minimal downtime Postgres major version upgrades with EDB Postgres Distributed
  21. From web developer to database developer in 10 years
  22. Edit for clarity
  23. An explosion of transitive dependencies
  24. Embedding Python in Rust (for tests)
  25. Logical replication in Postgres: Basics

2024 25

  1. How I run a coffee club
  2. Picking up volleyball in NYC with Goodrec and New York Urban
  3. 1 million page views
  4. Exploring Postgres's arena allocator by writing an HTTP server from scratch
  5. Effective unemployment and social media
  6. Checking linearizability in Go
  7. Intuitions for Distributed Consensus by Phil Eaton
  8. Build a serverless ACID database with this one neat trick (atomic PutIfAbsent)
  9. Be someone who does things
  10. Obsession
  11. What's the big deal about Deterministic Simulation Testing?
  12. Delightful, production-grade replication for Postgres
  13. A reawakening of systems programming meetups
  14. A write-ahead log is not a universal part of durability
  15. The limitations of LLMs, or why are we doing RAG?
  16. Confusion is a muse
  17. How I run a software book club
  18. Implementing MVCC and major SQL transaction isolation levels
  19. What makes a great technical blog
  20. A paper reading club at work; databases and distributed systems research
  21. Finding memory leaks in Postgres C code
  22. Zig, Rust, and other languages
  23. First month on a database team
  24. An intuition for distributed consensus in OLTP systems
  25. Writing a minimal in-memory storage engine for MySQL/MariaDB

2023 22

  1. Make your own way
  2. Exploring a Postgres query plan
  3. Writing a storage engine for Postgres: an in-memory Table Access Method
  4. io_uring basics: Writing a file to disk
  5. Go database driver overhead on insert-heavy workloads
  6. Intercepting and modifying Linux system calls with ptrace
  7. How do databases execute expressions?
  8. Eight years of organizing tech meetups
  9. Thinking about functional programming
  10. We put a distributed database in the browser – and made a game of it
  11. Metaprogramming in Zig and parsing CSS
  12. Implementing the Raft distributed consensus protocol in Go
  13. Two books I recommend to developers
  14. My favorite software subreddits
  15. Errors and Zig
  16. Notes from Neal Gabler's Walt Disney
  17. Lessons learned streaming building a Scheme-like interpreter in Go
  18. An effective product manager
  19. The year in books: 2022
  20. Favorite compiler and interpreter resources
  21. General book recommendations
  22. In response to a frontend developer asking about database development

2022 25

  1. Is it worth writing about?
  2. A Programmer-Friendly I/O Abstraction Over io_uring and kqueue
  3. Writing a SQL database, take two: Zig and RocksDB
  4. A minimal RocksDB example with Zig
  5. A database without dynamic memory allocation
  6. A minimal distributed key-value database with Hashicorp's Raft library
  7. What's the big deal about key-value databases like FoundationDB and RocksDB?
  8. SQLite has pretty limited builtin functions
  9. Container scheduling strategies for integration testing 14 different databases in Github Actions
  10. Implementing a simple jq clone in Go, and basics of Go memory profiling
  11. One year as a solo dev building open-source data tools without funding
  12. Let's build a distributed Postgres proof of concept
  13. SQLite in Go, with and without cgo
  14. HTML event handler attributes: down the rabbit hole
  15. Interview With Phil of DataStation
  16. Surveying SQL parser libraries in a few high-level languages
  17. Writing a document database from scratch in Go: Lucene-like filters and indexes
  18. Speeding up Go's builtin JSON encoder up to 55% for large arrays of objects
  19. SMTP protocol basics from scratch in Go: receiving email from Gmail
  20. The world of PostgreSQL wire compatibility
  21. How to recommend books, or, stop recommending SICP
  22. Bootloader basics
  23. dsq: Commandline tool for running SQL queries against JSON, CSV, Excel, Parquet, and more.
  24. Analyzing large JSON files via partial JSON parsing
  25. The year in books: 11 to recommend in 2021

2021 23

  1. Writing a minimal Lua implementation with a virtual machine from scratch in Rust
  2. Running SQL Server in a container on Github Actions
  3. Implementing zip archiving in Golang: unzipping
  4. Benchmarking esbuild, swc, tsc, and babel for React/JSX projects
  5. Building a fast SCSS-like rule expander for CSS using fuzzy parsing
  6. Exploring PL/pgSQL part two: implementing a Forth-like interpreter
  7. Exploring PL/pgSQL: Strings, arrays, recursion, and parsing JSON
  8. Experimenting with column- and row-oriented datastructures
  9. Notes on running Electron
  10. Enumerating and analyzing 40+ non-V8 JavaScript implementations
  11. Writing a simple JSON library from scratch: a tour through modern C++
  12. Parser generators vs. handwritten parsers: surveying major language implementations in 2021
  13. Practical? Common Lisp on the JVM: A quick intro to ABCL for modern web apps
  14. Writing an efficient object previewer for JavaScript
  15. React without webpack: fast path to a working app from scratch
  16. Controlled HTML select element in React has weird default UX
  17. Leaders, you need to share organization success stories more frequently
  18. Languages you can run in the browser, part 1: Python, JavaScript, SQLite
  19. Coolest hard-tech companies in NYC 2021
  20. Writing a Jinja-inspired template library in Python
  21. Learning a new codebase: hacking on nginx
  22. How to get better at recursion
  23. Extending gosql to supporting LIMIT and OFFSET

2020 18

  1. The year in books: 20 to recommend in 2020
  2. Static analysis with semgrep: practical examples using Docker
  3. Emulating linux/AMD64 userland: interpreting an ELF binary
  4. The impact of management teams as a decision-making group, in startups and enterprise
  5. Standard ML in 2020
  6. The case for comments in code
  7. Writing a simple Python compiler: 1. hello, fibonacci
  8. A single-node Kubernetes cluster without virtualization or a container registry
  9. Generating a full-stack application from a database
  10. Generating a REST API from a database
  11. RFCs and asynchronous-first culture
  12. Writing a SQL database from scratch in Go: 4. a database/sql driver
  13. Writing a SQL database from scratch in Go: 3. indexes
  14. Writing a SQL database from scratch in Go: 2. binary expressions and WHERE filters
  15. Studying foreign languages with inbox zero
  16. Reviewing the Surface Book 2
  17. Writing a SQL database from scratch in Go: 1. SELECT, INSERT, CREATE and a REPL
  18. A minimal REST API in Java

2019 18

  1. Writing a lisp compiler from scratch in JavaScript: 6. an x86 upgrade
  2. Confusion and disengagement in meetings
  3. Interpreting Go
  4. Administering Kubernetes is hard
  5. Unit testing C code with gtest
  6. Writing an x86 emulator from scratch in JavaScript: 2. system calls
  7. Writing a lisp compiler from scratch in JavaScript: 6. LLVM system calls
  8. Writing an x86 emulator from scratch in JavaScript: 1. a stack and register machine
  9. Tail call elimination
  10. Writing a lisp compiler from scratch in JavaScript: 4. LLVM conditionals and compiling fibonacci
  11. Responsibility and ownership
  12. Interpreting TypeScript
  13. Writing a web server from scratch: 1. HTTP and sockets
  14. Writing a simple JSON path parser
  15. Writing a lisp compiler from scratch in JavaScript: 3. LLVM
  16. AOT-compilation of Javascript with V8
  17. Windows
  18. Writing a lisp compiler from scratch in JavaScript: 2. user-defined functions and variables

2018 12

  1. Writing a lisp compiler from scratch in JavaScript: 1. lisp to assembly
  2. On NYC, Tokyo and Seoul
  3. Why (and how) to read books
  4. Compiling dynamic programming languages
  5. btest: a language agnostic test runner
  6. Writing to be read
  7. Writing a simple JSON parser
  8. Finishing up a FreeBSD experiment
  9. Book Review: ANSI Common Lisp
  10. Starting a minimal Common Lisp project
  11. Interview with the D Language Blog: BSDScheme
  12. First few hurdles writing a Scheme interpreter

2017 1

  1. Deploying FreeBSD on Linode unattended in minutes

2016 1

  1. Walking through a basic Racket web service

Undated 1

  1. 2025 Holiday Fundraiser