<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Philippe Gaultier's blog</title>
<link href="https://gaultier.github.io/blog"/>
<updated>2026-03-19T09:34:49+01:00</updated>
<author>
  <name>Philippe Gaultier</name>
</author>
<id>urn:uuid:9c065c53-31bc-4049-a795-936802a6b1df</id>


<entry>
<title>Getting started with Scheme by solving an Advent of Code 2018 challenge</title>
<link href="https://gaultier.github.io/blog/advent_of_code_2018_5.html"/>
<id>urn:uuid:b3c0c1c1-e36f-51fd-9356-99f8686e7329</id>
<updated>2026-03-04T17:13:39+01:00</updated>
<published>2019-09-05T11:45:48+02:00</published>
</entry>
    
<entry>
<title>How to compile LLVM, Clang, LLD, and Ziglang from source on Alpine Linux</title>
<link href="https://gaultier.github.io/blog/compile_ziglang_from_source_on_alpine_2020_9.html"/>
<id>urn:uuid:6cccb673-c083-550b-a1c8-d7a27819f1c7</id>
<updated>2025-07-07T16:51:52+02:00</updated>
<published>2020-09-07T20:49:20+02:00</published>
</entry>
    
<entry>
<title>Adventures in CI land, or how to speed up your CI</title>
<link href="https://gaultier.github.io/blog/speed_up_your_ci.html"/>
<id>urn:uuid:4663e8ea-73ab-56ef-9dc5-8dbb4743d84a</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2020-09-21T08:37:07+02:00</published>
</entry>
    
<entry>
<title>Learn x86-64 assembly by writing a GUI from scratch</title>
<link href="https://gaultier.github.io/blog/x11_x64.html"/>
<id>urn:uuid:fa923100-dd66-531e-bdab-8eed3527960f</id>
<updated>2026-02-23T09:56:17+01:00</updated>
<published>2023-05-31T14:24:11+02:00</published>
</entry>
    
<entry>
<title>Cycle detection in graphs does not have to be hard: A lesser known, simple way with Kahn&#39;s algorithm</title>
<link href="https://gaultier.github.io/blog/kahns_algorithm.html"/>
<id>urn:uuid:665ef523-5c28-5dad-8582-587bfea27205</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2023-06-03T09:20:51+02:00</published>
</entry>
    
<entry>
<title>Optimizing an Advent of Code solution in assembly</title>
<link href="https://gaultier.github.io/blog/advent_of_code_2018_5_revisited.html"/>
<id>urn:uuid:371c9129-162e-5d69-af73-c3263a2f7e47</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2023-10-05T15:39:43+02:00</published>
</entry>
    
<entry>
<title>Learn Wayland by writing a GUI from scratch</title>
<link href="https://gaultier.github.io/blog/wayland_from_scratch.html"/>
<id>urn:uuid:6b96e587-14ff-53a9-a142-d20e9c53d970</id>
<updated>2026-03-12T08:32:22+01:00</updated>
<published>2023-10-12T13:19:53+02:00</published>
</entry>
    
<entry>
<title>Roll your own memory profiling: it&#39;s actually not hard</title>
<link href="https://gaultier.github.io/blog/roll_your_own_memory_profiling.html"/>
<id>urn:uuid:5344c109-864c-5db2-97a9-24834e053169</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2023-11-23T11:26:11+01:00</published>
</entry>
    
<entry>
<title>Solving a problem with Gnuplot, the programming language (not the plotting software!)</title>
<link href="https://gaultier.github.io/blog/gnuplot_lang.html"/>
<id>urn:uuid:f2d9c4e3-5c3d-57ab-8083-0f56daf1f41e</id>
<updated>2025-07-07T21:09:49+02:00</updated>
<published>2023-12-01T15:15:26+01:00</published>
</entry>
    
<entry>
<title>This blog now has an Atom feed, and yours should probably too</title>
<link href="https://gaultier.github.io/blog/feed.html"/>
<id>urn:uuid:1f4df7db-eea8-5ef0-ae92-1038111f5dc9</id>
<updated>2025-09-17T09:33:23+02:00</updated>
<published>2023-12-15T12:23:43+01:00</published>
</entry>
    
<entry>
<title>Body of work</title>
<link href="https://gaultier.github.io/blog/body_of_work.html"/>
<id>urn:uuid:b6ce21d7-32d4-5b52-a4f3-435887fe9ba4</id>
<updated>2025-06-10T08:45:01+02:00</updated>
<published>2023-12-19T14:27:40+01:00</published>
</entry>
    
<entry>
<title>Quick and easy PNG image size reduction</title>
<link href="https://gaultier.github.io/blog/image_size_reduction.html"/>
<id>urn:uuid:1cd73d67-ad32-5cdc-93a7-f4046d7cd4a5</id>
<updated>2025-09-17T09:33:23+02:00</updated>
<published>2024-02-23T11:27:43+01:00</published>
</entry>
    
<entry>
<title>You&#39;ve just inherited a legacy C++ codebase, now what?</title>
<link href="https://gaultier.github.io/blog/you_inherited_a_legacy_cpp_codebase_now_what.html"/>
<id>urn:uuid:b9c26cf9-cb85-5ca9-b52f-5cdd535a3b84</id>
<updated>2026-03-08T17:21:06+01:00</updated>
<published>2024-02-29T09:30:30+01:00</published>
</entry>
    
<entry>
<title>A small trick to improve technical discussions by sharing code</title>
<link href="https://gaultier.github.io/blog/a_small_trick_to_improve_technical_discussions_by_sharing_code.html"/>
<id>urn:uuid:ec2664b2-2153-5f24-a222-21f87171b57b</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2024-03-07T11:14:09+01:00</published>
</entry>
    
<entry>
<title>How to rewrite a C++ codebase successfully</title>
<link href="https://gaultier.github.io/blog/how_to_rewrite_a_cpp_codebase_successfully.html"/>
<id>urn:uuid:70495e98-9416-5945-9178-1b77e690ea86</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2024-05-03T14:46:42+02:00</published>
</entry>
    
<entry>
<title>Let&#39;s write a video game from scratch like it&#39;s 1987</title>
<link href="https://gaultier.github.io/blog/write_a_video_game_from_scratch_like_1987.html"/>
<id>urn:uuid:6bea7a85-d449-5f4d-9ab6-7e627c67ba57</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2024-06-20T07:44:40Z</published>
</entry>
    
<entry>
<title>Odin and musl: Cross-compiling Odin programs for the Raspberry Pi Zero</title>
<link href="https://gaultier.github.io/blog/odin_and_musl.html"/>
<id>urn:uuid:5fa076c9-2d59-5651-8337-9f2fb85d9e3e</id>
<updated>2025-07-07T21:11:35+02:00</updated>
<published>2024-09-10T12:59:04+02:00</published>
</entry>
    
<entry>
<title>A small trick for simple Rust/C++ interop</title>
<link href="https://gaultier.github.io/blog/rust_c++_interop_trick.html"/>
<id>urn:uuid:fdfd0b73-184a-5d7f-91f0-457820b278d8</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2024-09-19T18:09:57+02:00</published>
</entry>
    
<entry>
<title>Tip of the day #1: Count lines of Rust code, ignoring tests</title>
<link href="https://gaultier.github.io/blog/tip_of_day_1.html"/>
<id>urn:uuid:7f069c67-f7cc-5b66-99c5-240656047972</id>
<updated>2025-07-07T16:51:52+02:00</updated>
<published>2024-10-29T13:46:14+01:00</published>
</entry>
    
<entry>
<title>Tip of the day #2: A safer arena allocator</title>
<link href="https://gaultier.github.io/blog/tip_of_the_day_2.html"/>
<id>urn:uuid:dd624149-10e7-5563-af44-efda307fa041</id>
<updated>2025-07-07T21:23:20+02:00</updated>
<published>2024-10-29T16:15:48+01:00</published>
</entry>
    
<entry>
<title>Lessons learned from a successful Rust rewrite</title>
<link href="https://gaultier.github.io/blog/lessons_learned_from_a_successful_rust_rewrite.html"/>
<id>urn:uuid:82d0f141-d7cc-5bee-84b0-18bc3e699a9f</id>
<updated>2026-03-08T10:41:46+01:00</updated>
<published>2024-10-30T11:46:57+01:00</published>
</entry>
    
<entry>
<title>Tip of the day #3: Convert a CSV to a markdown or HTML table</title>
<link href="https://gaultier.github.io/blog/tip_of_day_3.html"/>
<id>urn:uuid:94af4e61-6ac9-52eb-8d33-cdf29b9abf02</id>
<updated>2025-07-07T16:51:52+02:00</updated>
<published>2024-10-31T16:09:02+01:00</published>
</entry>
    
<entry>
<title>Perhaps Rust needs &amp;quot;defer&amp;quot;</title>
<link href="https://gaultier.github.io/blog/perhaps_rust_needs_defer.html"/>
<id>urn:uuid:55eb4918-5851-5a25-80d5-d350aad8971b</id>
<updated>2026-03-08T17:21:06+01:00</updated>
<published>2024-11-06T08:33:45+01:00</published>
</entry>
    
<entry>
<title>Way too many ways to wait on a child process with a timeout</title>
<link href="https://gaultier.github.io/blog/way_too_many_ways_to_wait_for_a_child_process_with_a_timeout.html"/>
<id>urn:uuid:38fa76b5-00c5-5e17-9753-74b7d0ea1ec0</id>
<updated>2026-03-04T17:13:39+01:00</updated>
<published>2024-11-10T23:58:59+01:00</published>
</entry>
    
<entry>
<title>The missing cross-platform OS API for timers</title>
<link href="https://gaultier.github.io/blog/the_missing_cross_platform_os_api_for_timers.html"/>
<id>urn:uuid:87e0c181-0c40-53af-954a-0dffe1881278</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-02-02T23:11:55+01:00</published>
</entry>
    
<entry>
<title>Tip of the day #4: Type annotations on Rust match patterns</title>
<link href="https://gaultier.github.io/blog/tip_of_the_day_4.html"/>
<id>urn:uuid:c4aa2dc8-0d40-5ce8-9b46-ac6c7f41dea6</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-02-11T16:47:16+01:00</published>
</entry>
    
<entry>
<title>Addressing CGO pains, one at a time</title>
<link href="https://gaultier.github.io/blog/addressing_cgo_pains_one_at_a_time.html"/>
<id>urn:uuid:07006a7b-7a02-50db-aa27-568407c1f588</id>
<updated>2026-03-08T17:21:06+01:00</updated>
<published>2025-02-14T13:14:11+01:00</published>
</entry>
    
<entry>
<title>Making my debug build run 100x faster so that it is finally usable</title>
<link href="https://gaultier.github.io/blog/making_my_debug_build_run_100_times_faster.html"/>
<id>urn:uuid:a5f75104-e439-59db-b54f-c7f65d76b339</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-02-18T08:07:55+01:00</published>
</entry>
    
<entry>
<title>Tip of the day #5: Install Go tools with a specific version</title>
<link href="https://gaultier.github.io/blog/tip_of_the_day_5.html"/>
<id>urn:uuid:39a7f948-a91a-5dea-8f36-8c8aaf8d01b6</id>
<updated>2025-07-07T16:51:52+02:00</updated>
<published>2025-02-18T12:02:06+01:00</published>
</entry>
    
<entry>
<title>Making my static blog generator &lt;del&gt;11&lt;/del&gt; 33 times faster</title>
<link href="https://gaultier.github.io/blog/making_my_static_blog_generator_11_times_faster.html"/>
<id>urn:uuid:d29b6ec2-f895-5f2f-896f-2f343766fc85</id>
<updated>2026-03-06T16:14:05+01:00</updated>
<published>2025-02-19T15:13:54+01:00</published>
</entry>
    
<entry>
<title>Tip of the day #6: Use Bpftrace to estimate how much memory an in-memory cache will use</title>
<link href="https://gaultier.github.io/blog/tip_of_the_day_6.html"/>
<id>urn:uuid:1364b66b-c20b-5130-a782-2c785188ed89</id>
<updated>2026-03-08T17:21:06+01:00</updated>
<published>2025-03-12T13:35:23+01:00</published>
</entry>
    
<entry>
<title>Build PIE executables in Go: I got nerd-sniped</title>
<link href="https://gaultier.github.io/blog/build-pie-executables-with-pie.html"/>
<id>urn:uuid:dc223815-7853-5330-8e0c-46251ae2419d</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-03-18T14:55:21+01:00</published>
</entry>
    
<entry>
<title>What should your mutexes be named?</title>
<link href="https://gaultier.github.io/blog/what_should_your_mutexes_be_named.html"/>
<id>urn:uuid:0917ef9a-670e-5705-be73-b007cd362f86</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-06-09T23:30:04+02:00</published>
</entry>
    
<entry>
<title>A subtle data race in Go</title>
<link href="https://gaultier.github.io/blog/a_subtle_data_race_in_go.html"/>
<id>urn:uuid:2bbc9f5e-3d29-5c97-8568-795307bafe6c</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-06-10T20:02:21+02:00</published>
</entry>
    
<entry>
<title>An optimization and debugging story with Go and DTrace</title>
<link href="https://gaultier.github.io/blog/an_optimization_and_debugging_story_go_dtrace.html"/>
<id>urn:uuid:f88592d4-3a30-5f83-aea7-ec456edbc848</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-07-01T19:20:47+02:00</published>
</entry>
    
<entry>
<title>A subtle bug with Go&#39;s errgroup</title>
<link href="https://gaultier.github.io/blog/subtle_bug_with_go_errgroup.html"/>
<id>urn:uuid:91dd6f95-7f4d-5706-91b5-f2cbf6b89f09</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-08-09T10:07:00+02:00</published>
</entry>
    
<entry>
<title>An amusing blind spot in Go&#39;s static analysis</title>
<link href="https://gaultier.github.io/blog/an_amusing_go_static_analysis_blindspot.html"/>
<id>urn:uuid:cc97adce-0e6e-5ec7-89fe-db04808b1b4c</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-08-22T11:17:32+02:00</published>
</entry>
    
<entry>
<title>Observe live SQL queries in Go with DTrace</title>
<link href="https://gaultier.github.io/blog/observe_sql_queries_in_go_with_dtrace.html"/>
<id>urn:uuid:e0b0bae7-993a-5691-9efe-b7615415b944</id>
<updated>2026-03-16T11:40:59+01:00</updated>
<published>2025-09-11T11:37:44+02:00</published>
</entry>
    
<entry>
<title>Are my SQL files read at build time or run time?</title>
<link href="https://gaultier.github.io/blog/are_my_sql_files_read_at_build_time_or_run_time.html"/>
<id>urn:uuid:8a33a55a-190b-5afc-8978-66976b6ecda8</id>
<updated>2025-09-17T09:16:05+02:00</updated>
<published>2025-09-16T17:38:32+02:00</published>
</entry>
    
<entry>
<title>See all network traffic in a Go program, even when encrypted and compressed</title>
<link href="https://gaultier.github.io/blog/go_dtrace_see_all_network_traffic.html"/>
<id>urn:uuid:0c714eff-cc83-539a-99a7-b9043996241d</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-09-25T16:50:53+02:00</published>
</entry>
    
<entry>
<title>How to reproduce and fix an I/O data race with Go and DTrace</title>
<link href="https://gaultier.github.io/blog/how_to_reproduce_and_fix_an_io_data_race_with_dtrace.html"/>
<id>urn:uuid:8d5cd0cd-5a6d-5e55-80e9-63cd36488f07</id>
<updated>2026-03-08T17:21:06+01:00</updated>
<published>2025-10-01T16:47:19+02:00</published>
</entry>
    
<entry>
<title>A million ways to die from a data race in Go</title>
<link href="https://gaultier.github.io/blog/a_million_ways_to_data_race_in_go.html"/>
<id>urn:uuid:a13c572e-50c1-5844-90f1-55aef92bda42</id>
<updated>2025-12-15T09:12:45+01:00</updated>
<published>2025-11-21T13:38:45+01:00</published>
</entry>
    
<entry>
<title>What HTTP routes does your application provide?</title>
<link href="https://gaultier.github.io/blog/go_dtrace_see_registered_routes.html"/>
<id>urn:uuid:c3d78b44-758d-5770-aaa6-959f126eb04e</id>
<updated>2026-03-13T16:59:58+01:00</updated>
<published>2025-12-03T10:20:30+01:00</published>
</entry>
    
<entry>
<title>Detecting goroutine leaks with DTrace</title>
<link href="https://gaultier.github.io/blog/detecting_goroutine_leaks_with_dtrace.html"/>
<id>urn:uuid:5390e265-a3aa-5972-a291-25b7c90c8fcf</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-12-21T18:06:44+01:00</published>
</entry>
    
<entry>
<title>The production bug that made me care about undefined behavior</title>
<link href="https://gaultier.github.io/blog/the_production_bug_that_made_me_care_about_undefined_behavior.html"/>
<id>urn:uuid:5e8b603b-49e4-5967-b798-c0f06d2034d8</id>
<updated>2026-03-04T16:24:07+01:00</updated>
<published>2025-12-27T10:45:59+01:00</published>
</entry>
    
<entry>
<title>A silly shell pitfall</title>
<link href="https://gaultier.github.io/blog/shell_pitfall.html"/>
<id>urn:uuid:26cefafe-8cec-5ea6-99ce-8a57b82a6754</id>
<updated>2026-03-06T14:40:53+01:00</updated>
<published>2026-03-04T17:53:43+01:00</published>
</entry>
    
<entry>
<title>In Rust, &lt;code&gt;let _ = ...&lt;/code&gt; and &lt;code&gt;let _unused = ...&lt;/code&gt; are not the same</title>
<link href="https://gaultier.github.io/blog/rust_underscore_vars.html"/>
<id>urn:uuid:3d764e18-e66a-52a6-86e6-cd20dad3b30a</id>
<updated>2026-03-06T22:28:50+01:00</updated>
<published>2026-03-06T15:14:07+01:00</published>
</entry>
    
<entry>
<title>How to make your own static site generator</title>
<link href="https://gaultier.github.io/blog/how_to_make_your_own_static_site_generator.html"/>
<id>urn:uuid:11e1f1d7-6105-5048-967d-7f57942f6260</id>
<updated>2026-03-15T17:16:35+01:00</updated>
<published>2026-03-09T16:05:54+01:00</published>
</entry>
    
<entry>
<title>Detect data races with DTrace in any language</title>
<link href="https://gaultier.github.io/blog/detect_data_races_with_dtrace.html"/>
<id>urn:uuid:413e821b-8449-5c1c-85d6-578aa3fe3f74</id>
<updated>2026-03-19T09:34:49+01:00</updated>
<published>2026-03-11T13:35:11+01:00</published>
</entry>
    </feed>