The Curious Engineer

All blogs / Go

Philippe Gaultier's blog

gaultier.github.io/blog

GoPerformance / optimizationDatabasesDevOps / SRE / infrastructureRust

Posts
56 from 4 Sep 2019 to 28 Sep 2026
Posting
monthly (15 in the last year)
Kind
personal blog
Feed
https://gaultier.github.io/blog/feed.xml

2026 11

  1. What good is a best-effort exclusive lock, anyway?
  2. Optimization tales in production with CockroachDB: UUID generation (part 5)
  3. Optimization tales in production with CockroachDB: the slow list of users (part 4)
  4. Optimization tales in production with CockroachDB: the slow list of messages (part 3)
  5. Optimization tales in production with CockroachDB: the slow logout (part 2)
  6. Optimization tales in production with CockroachDB: the slow password reset flow (part 1)
  7. Don't run SQL migrations in tests: How I sped up the test suite by 2x
  8. Detect data races with DTrace in any language
  9. How to make your own static site generator
  10. In Rust, let _ = ... and let _unused = ... are not the same
  11. A silly shell pitfall

2025 21

  1. The production bug that made me care about undefined behavior
  2. Detecting goroutine leaks with DTrace
  3. What HTTP routes does your application provide?
  4. A million ways to die from a data race in Go
  5. How to reproduce and fix an I/O data race with Go and DTrace
  6. See all network traffic in a Go program, even when encrypted and compressed
  7. Are my SQL files read at build time or run time?
  8. Observe live SQL queries in Go with DTrace
  9. An amusing blind spot in Go's static analysis
  10. A subtle bug with Go's errgroup
  11. An optimization and debugging story with Go and DTrace
  12. A subtle data race in Go
  13. What should your mutexes be named?
  14. Build PIE executables in Go: I got nerd-sniped
  15. Tip of the day #6: Use Bpftrace to estimate how much memory an in-memory cache will use
  16. Making my static blog generator ~11~ 33 times faster
  17. Tip of the day #5: Install Go tools with a specific version
  18. Making my debug build run 100x faster so that it is finally usable
  19. Addressing CGO pains, one at a time
  20. Tip of the day #4: Type annotations on Rust match patterns
  21. The missing cross-platform OS API for timers

2024 13

  1. Way too many ways to wait on a child process with a timeout
  2. Perhaps Rust needs "defer"
  3. Tip of the day #3: Convert a CSV to a markdown or HTML table
  4. Lessons learned from a successful Rust rewrite
  5. Tip of the day #2: A safer arena allocator
  6. Tip of the day #1: Count lines of Rust code, ignoring tests
  7. A small trick for simple Rust/C++ interop
  8. Odin and musl: Cross-compiling Odin programs for the Raspberry Pi Zero
  9. Let's write a video game from scratch like it's 1987
  10. How to rewrite a C++ codebase successfully
  11. A small trick to improve technical discussions by sharing code
  12. You've just inherited a legacy C++ codebase, now what?
  13. Quick and easy PNG image size reduction

2023 8

  1. Body of work
  2. This blog now has an Atom feed, and yours should probably too
  3. Solving a problem with Gnuplot, the programming language (not the plotting software!)
  4. Roll your own memory profiling: it's actually not hard
  5. Learn Wayland by writing a GUI from scratch
  6. Optimizing an Advent of Code solution in assembly
  7. Cycle detection in graphs does not have to be hard: A lesser known, simple way with Kahn's algorithm
  8. Learn x86-64 assembly by writing a GUI from scratch

2020 2

  1. Adventures in CI land, or how to speed up your CI
  2. How to compile LLVM, Clang, LLD, and Ziglang from source on Alpine Linux

2019 1

  1. Getting started with Scheme by solving an Advent of Code 2018 challenge