41554 blogs · [ { "id": "01a0959d-5f3c-70fd-96cb-cf4a8ab7c0f3", "title": "Optimization tales in production with CockroachDB: UUID generation (part 5)", "url": "https://gaultier.github.io/blog/optimization-tales-cockroachdb-part5-uuid.html", "published_at": "2026-09-12T09:27:51+00:00" }, { "id": "01a0877b-d943-7233-af71-88b80175dd88", "title": "Optimization tales in production with CockroachDB: the slow list of users (part 4)", "url": "https://gaultier.github.io/blog/optimization-tales-cockroachdb-part4-slow-list-users.html", "published_at": "2026-07-07T18:38:35+00:00" }, { "id": "01a0877b-d943-7233-af71-88b80101e830", "title": "Optimization tales in production with CockroachDB: the slow list of messages (part 3)", "url": "https://gaultier.github.io/blog/optimization-tales-cockroachdb-part3-slow-list-messages.html", "published_at": "2026-07-01T13:28:31+00:00" }, { "id": "01a0877b-d943-7233-af71-88b8002ef381", "title": "Optimization tales in production with CockroachDB: the slow logout (part 2)", "url": "https://gaultier.github.io/blog/optimization-tales-cockroachdb-part2-slow-logout.html", "published_at": "2026-06-30T12:47:42+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7ffb2000b", "title": "Optimization tales in production with CockroachDB: the slow password reset flow (part 1)", "url": "https://gaultier.github.io/blog/optimization-tales-cockroachdb-part1.html", "published_at": "2026-06-29T14:09:53+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7ffb116bb", "title": "Don't run SQL migrations in tests: How I sped up the test suite by 2x", "url": "https://gaultier.github.io/blog/I_sped_up_the_test_suite_by_x2.html", "published_at": "2026-06-12T09:37:45+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7ff0999c1", "title": "Detect data races with DTrace in any language", "url": "https://gaultier.github.io/blog/detect_data_races_with_dtrace.html", "published_at": "2026-03-11T12:35:11+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7feddec50", "title": "How to make your own static site generator", "url": "https://gaultier.github.io/blog/how_to_make_your_own_static_site_generator.html", "published_at": "2026-03-08T16:52:42+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fe595e6a", "title": "In Rust, let _ = ... and let _unused = ... are not the same", "url": "https://gaultier.github.io/blog/rust_underscore_vars.html", "published_at": "2026-03-06T14:14:07+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fd955646", "title": "A silly shell pitfall", "url": "https://gaultier.github.io/blog/shell_pitfall.html", "published_at": "2026-03-04T16:53:29+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fd1a9d82", "title": "The production bug that made me care about undefined behavior", "url": "https://gaultier.github.io/blog/the_production_bug_that_made_me_care_about_undefined_behavior.html", "published_at": "2025-12-27T09:45:59+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fc29b619", "title": "Detecting goroutine leaks with DTrace", "url": "https://gaultier.github.io/blog/detecting_goroutine_leaks_with_dtrace.html", "published_at": "2025-12-21T17:06:44+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fb8cbcc6", "title": "What HTTP routes does your application provide?", "url": "https://gaultier.github.io/blog/go_dtrace_see_registered_routes.html", "published_at": "2025-12-03T09:20:30+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fb0d2d98", "title": "A million ways to die from a data race in Go", "url": "https://gaultier.github.io/blog/a_million_ways_to_data_race_in_go.html", "published_at": "2025-11-21T12:38:45+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fae3b417", "title": "How to reproduce and fix an I/O data race with Go and DTrace", "url": "https://gaultier.github.io/blog/how_to_reproduce_and_fix_an_io_data_race_with_dtrace.html", "published_at": "2025-10-01T14:47:19+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fadc22f2", "title": "See all network traffic in a Go program, even when encrypted and compressed", "url": "https://gaultier.github.io/blog/go_dtrace_see_all_network_traffic.html", "published_at": "2025-09-25T14:50:53+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7fa13cd2f", "title": "Are my SQL files read at build time or run time?", "url": "https://gaultier.github.io/blog/are_my_sql_files_read_at_build_time_or_run_time.html", "published_at": "2025-09-16T15:38:32+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7f961cf58", "title": "Observe live SQL queries in Go with DTrace", "url": "https://gaultier.github.io/blog/observe_sql_queries_in_go_with_dtrace.html", "published_at": "2025-09-11T09:37:44+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7f8ad2be8", "title": "An amusing blind spot in Go's static analysis", "url": "https://gaultier.github.io/blog/an_amusing_go_static_analysis_blindspot.html", "published_at": "2025-08-22T09:17:32+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7f832b347", "title": "A subtle bug with Go's errgroup", "url": "https://gaultier.github.io/blog/subtle_bug_with_go_errgroup.html", "published_at": "2025-08-09T08:07:00+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7f7e4b3fd", "title": "An optimization and debugging story with Go and DTrace", "url": "https://gaultier.github.io/blog/an_optimization_and_debugging_story_go_dtrace.html", "published_at": "2025-07-01T14:06:16+00:00" }, { "id": "01a0877b-d943-7233-af71-88b7f7c54f99", "title": "A subtle data race in Go", "url": "https://gaultier.github.io/blog/a_subtle_data_race_in_go.html", "published_at": "2025-06-10T18:02:21+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028c345940", "title": "What should your mutexes be named?", "url": "https://gaultier.github.io/blog/what_should_your_mutexes_be_named.html", "published_at": "2025-06-09T12:24:42+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028bec9e15", "title": "Build PIE executables in Go: I got nerd-sniped", "url": "https://gaultier.github.io/blog/build-pie-executables-with-pie.html", "published_at": "2025-03-18T13:55:21+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028b99af54", "title": "Tip of the day #6: Use Bpftrace to estimate how much memory an in-memory cache will use", "url": "https://gaultier.github.io/blog/tip_of_the_day_6.html", "published_at": "2025-03-12T12:35:23+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028b0a55a8", "title": "Making my static blog generator ~11~ 33 times faster", "url": "https://gaultier.github.io/blog/making_my_static_blog_generator_11_times_faster.html", "published_at": "2025-02-19T14:13:54+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028b066c08", "title": "Tip of the day #5: Install Go tools with a specific version", "url": "https://gaultier.github.io/blog/tip_of_the_day_5.html", "published_at": "2025-02-18T11:02:06+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028ac8d59a", "title": "Making my debug build run 100x faster so that it is finally usable", "url": "https://gaultier.github.io/blog/making_my_debug_build_run_100_times_faster.html", "published_at": "2025-02-17T08:20:47+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028a5bf364", "title": "Addressing CGO pains, one at a time", "url": "https://gaultier.github.io/blog/addressing_cgo_pains_one_at_a_time.html", "published_at": "2025-02-14T07:47:05+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490289ff9b1c", "title": "Tip of the day #4: Type annotations on Rust match patterns", "url": "https://gaultier.github.io/blog/tip_of_the_day_4.html", "published_at": "2025-02-11T15:47:16+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028941c381", "title": "The missing cross-platform OS API for timers", "url": "https://gaultier.github.io/blog/the_missing_cross_platform_os_api_for_timers.html", "published_at": "2025-02-02T16:37:35+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490288fdf33f", "title": "Way too many ways to wait on a child process with a timeout", "url": "https://gaultier.github.io/blog/way_too_many_ways_to_wait_for_a_child_process_with_a_timeout.html", "published_at": "2024-11-09T15:04:32+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490288f8bdd8", "title": "Perhaps Rust needs \"defer\"", "url": "https://gaultier.github.io/blog/perhaps_rust_needs_defer.html", "published_at": "2024-11-06T07:33:45+00:00" }, { "id": "01a0877b-d942-733c-b8c0-4902883591f3", "title": "Tip of the day #3: Convert a CSV to a markdown or HTML table", "url": "https://gaultier.github.io/blog/tip_of_day_3.html", "published_at": "2024-10-31T15:09:02+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028748661c", "title": "Lessons learned from a successful Rust rewrite", "url": "https://gaultier.github.io/blog/lessons_learned_from_a_successful_rust_rewrite.html", "published_at": "2024-10-30T10:46:57+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490286e5e239", "title": "Tip of the day #2: A safer arena allocator", "url": "https://gaultier.github.io/blog/tip_of_the_day_2.html", "published_at": "2024-10-29T15:15:48+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028608f66d", "title": "Tip of the day #1: Count lines of Rust code, ignoring tests", "url": "https://gaultier.github.io/blog/tip_of_day_1.html", "published_at": "2024-10-29T12:46:14+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490285e71d95", "title": "A small trick for simple Rust/C++ interop", "url": "https://gaultier.github.io/blog/rust_c++_interop_trick.html", "published_at": "2024-09-19T16:09:57+00:00" }, { "id": "01a0877b-d942-733c-b8c0-4902859599dc", "title": "Odin and musl: Cross-compiling Odin programs for the Raspberry Pi Zero", "url": "https://gaultier.github.io/blog/odin_and_musl.html", "published_at": "2024-09-10T10:59:04+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028572264c", "title": "Let's write a video game from scratch like it's 1987", "url": "https://gaultier.github.io/blog/write_a_video_game_from_scratch_like_1987.html", "published_at": "2024-06-19T12:55:01+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490285366c52", "title": "How to rewrite a C++ codebase successfully", "url": "https://gaultier.github.io/blog/how_to_rewrite_a_cpp_codebase_successfully.html", "published_at": "2024-05-03T12:46:42+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028499c408", "title": "A small trick to improve technical discussions by sharing code", "url": "https://gaultier.github.io/blog/a_small_trick_to_improve_technical_discussions_by_sharing_code.html", "published_at": "2024-03-07T09:48:39+00:00" }, { "id": "01a0877b-d942-733c-b8c0-4902840e95bd", "title": "You've just inherited a legacy C++ codebase, now what?", "url": "https://gaultier.github.io/blog/you_inherited_a_legacy_cpp_codebase_now_what.html", "published_at": "2024-02-29T08:30:30+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49028376c25a", "title": "Quick and easy PNG image size reduction", "url": "https://gaultier.github.io/blog/image_size_reduction.html", "published_at": "2024-02-23T10:27:43+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490282bbedd6", "title": "Body of work", "url": "https://gaultier.github.io/blog/body_of_work.html", "published_at": "2023-12-19T13:27:40+00:00" }, { "id": "01a0877b-d942-733c-b8c0-4902823341d3", "title": "This blog now has an Atom feed, and yours should probably too", "url": "https://gaultier.github.io/blog/feed.html", "published_at": "2023-12-15T11:23:43+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490281491ac6", "title": "Solving a problem with Gnuplot, the programming language (not the plotting software!)", "url": "https://gaultier.github.io/blog/gnuplot_lang.html", "published_at": "2023-12-01T14:15:26+00:00" }, { "id": "01a0877b-d942-733c-b8c0-490281222101", "title": "Roll your own memory profiling: it's actually not hard", "url": "https://gaultier.github.io/blog/roll_your_own_memory_profiling.html", "published_at": "2023-11-23T10:26:11+00:00" }, { "id": "01a0877b-d942-733c-b8c0-4902808dae33", "title": "Learn Wayland by writing a GUI from scratch", "url": "https://gaultier.github.io/blog/wayland_from_scratch.html", "published_at": "2023-10-12T11:19:53+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027fe38d0b", "title": "Optimizing an Advent of Code solution in assembly", "url": "https://gaultier.github.io/blog/advent_of_code_2018_5_revisited.html", "published_at": "2023-10-05T13:39:43+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027f8c4d20", "title": "Cycle detection in graphs does not have to be hard: A lesser known, simple way with Kahn's algorithm", "url": "https://gaultier.github.io/blog/kahns_algorithm.html", "published_at": "2023-06-03T07:20:51+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027f0c693a", "title": "Learn x86-64 assembly by writing a GUI from scratch", "url": "https://gaultier.github.io/blog/x11_x64.html", "published_at": "2023-05-31T12:24:11+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027e59d6aa", "title": "Adventures in CI land, or how to speed up your CI", "url": "https://gaultier.github.io/blog/speed_up_your_ci.html", "published_at": "2020-09-21T06:37:07+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027e13066b", "title": "How to compile LLVM, Clang, LLD, and Ziglang from source on Alpine Linux", "url": "https://gaultier.github.io/blog/compile_ziglang_from_source_on_alpine_2020_9.html", "published_at": "2020-09-07T18:49:20+00:00" }, { "id": "01a0877b-d942-733c-b8c0-49027dd5d127", "title": "Getting started with Scheme by solving an Advent of Code 2018 challenge", "url": "https://gaultier.github.io/blog/advent_of_code_2018_5.html", "published_at": "2019-09-04T06:41:29+00:00" } ] posts Claim your blog
Back to gaultier.github.io
Blog · corpus.blog/blogs/gaultier.github.io/posts

gaultier.github.io

gaultier.github.io

2026

2025

2024

2023

2020

2019