Philippe Gaultier's 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
- What good is a best-effort exclusive lock, anyway?
- Optimization tales in production with CockroachDB: UUID generation (part 5)
- Optimization tales in production with CockroachDB: the slow list of users (part 4)
- Optimization tales in production with CockroachDB: the slow list of messages (part 3)
- Optimization tales in production with CockroachDB: the slow logout (part 2)
- Optimization tales in production with CockroachDB: the slow password reset flow (part 1)
- Don't run SQL migrations in tests: How I sped up the test suite by 2x
- Detect data races with DTrace in any language
- How to make your own static site generator
- In Rust, let _ = ... and let _unused = ... are not the same
- A silly shell pitfall
2025 21
- The production bug that made me care about undefined behavior
- Detecting goroutine leaks with DTrace
- What HTTP routes does your application provide?
- A million ways to die from a data race in Go
- How to reproduce and fix an I/O data race with Go and DTrace
- See all network traffic in a Go program, even when encrypted and compressed
- Are my SQL files read at build time or run time?
- Observe live SQL queries in Go with DTrace
- An amusing blind spot in Go's static analysis
- A subtle bug with Go's errgroup
- An optimization and debugging story with Go and DTrace
- A subtle data race in Go
- What should your mutexes be named?
- Build PIE executables in Go: I got nerd-sniped
- Tip of the day #6: Use Bpftrace to estimate how much memory an in-memory cache will use
- Making my static blog generator ~11~ 33 times faster
- Tip of the day #5: Install Go tools with a specific version
- Making my debug build run 100x faster so that it is finally usable
- Addressing CGO pains, one at a time
- Tip of the day #4: Type annotations on Rust match patterns
- The missing cross-platform OS API for timers
2024 13
- Way too many ways to wait on a child process with a timeout
- Perhaps Rust needs "defer"
- Tip of the day #3: Convert a CSV to a markdown or HTML table
- Lessons learned from a successful Rust rewrite
- Tip of the day #2: A safer arena allocator
- Tip of the day #1: Count lines of Rust code, ignoring tests
- A small trick for simple Rust/C++ interop
- Odin and musl: Cross-compiling Odin programs for the Raspberry Pi Zero
- Let's write a video game from scratch like it's 1987
- How to rewrite a C++ codebase successfully
- A small trick to improve technical discussions by sharing code
- You've just inherited a legacy C++ codebase, now what?
- Quick and easy PNG image size reduction
2023 8
- Body of work
- This blog now has an Atom feed, and yours should probably too
- Solving a problem with Gnuplot, the programming language (not the plotting software!)
- Roll your own memory profiling: it's actually not hard
- Learn Wayland by writing a GUI from scratch
- Optimizing an Advent of Code solution in assembly
- Cycle detection in graphs does not have to be hard: A lesser known, simple way with Kahn's algorithm
- Learn x86-64 assembly by writing a GUI from scratch