<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://blog.jchw.io/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Untitled Blog</title>
    <link>https://blog.jchw.io/</link>
    <atom:link href="https://blog.jchw.io/public/rss.xml" rel="self" type="application/rss+xml" />
    <description>A blog about software.</description>
    <language>en</language>
    <item>
      <title>What Does grantpt() Do?</title>
      <link>https://blog.jchw.io/grantpt/</link>
      <description>What exactly does the grantpt() function do on Linux? The answer may surprise you.</description>
      <pubDate>Tue, 30 Dec 2025 13:10:00 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid>https://blog.jchw.io/grantpt/</guid>
    </item>
    <item>
      <title>Object Files, Part 1: History</title>
      <link>https://blog.jchw.io/object-files-history/</link>
      <description>A brief exploration into the history of object file formats.</description>
      <pubDate>Wed, 11 Jun 2025 01:20:00 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid>https://blog.jchw.io/object-files-history/</guid>
    </item>
    <item>
      <title>Stealth Branches</title>
      <link>https://blog.jchw.io/stealth-branches/</link>
      <description>Code review and test line coverage often collude to try to force you to handle edge cases, but outsmarting both of those filters at once is sometimes easier than it seems.</description>
      <pubDate>Fri, 05 Jul 2024 15:00:00 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid>https://blog.jchw.io/stealth-branches/</guid>
    </item>
    <item>
      <title>Who is resolving my names?</title>
      <link>https://blog.jchw.io/who-is-resolving-my-names/</link>
      <description>Be careful when isolating traffic using network namespaces: you might be surprised to see how difficult it is to ensure that there are absolutely no leaks. This post is about a surprise leak caused by nscd.</description>
      <pubDate>Mon, 09 Oct 2023 00:57:52 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">652339f0837f8d010731bc0b</guid>
    </item>
    <item>
      <title>Sending AT commands to the modem of a Pixel 4a</title>
      <link>https://blog.jchw.io/sending-at-commands-on-a-pixel-4a/</link>
      <description>AT phone modem commands have existed since the early 1980s; here's how one can issue them on a typical Android phone decades later.</description>
      <pubDate>Wed, 30 Aug 2023 23:00:00 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">64ef6e97837f8d010731bb62</guid>
    </item>
    <item>
      <title>Developing using Visual Studio Code with Nix Flakes</title>
      <link>https://blog.jchw.io/vs-code-with-flakes/</link>
      <description>Nix flakes and Visual Studio Code can be a little cumbersome to work with together. Here is an approach to running isolated Visual Studio Code instances inside of Nix flake development shells.</description>
      <pubDate>Sat, 06 May 2023 19:38:14 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">6456a09ae2671d02108d33c5</guid>
    </item>
    <item>
      <title>Inside the Triforce Main Board Bootrom - BS1</title>
      <link>https://blog.jchw.io/triforce-bs1/</link>
      <description>The Triforce arcade machine contains a nearly-stock GameCube motherboard in it, with essentially the only difference being the bootrom. This is a step-by-step reading of the first stage of the Triforce bootrom.</description>
      <pubDate>Fri, 02 Sep 2022 05:08:48 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">630dae68c852fe020bc53263</guid>
    </item>
    <item>
      <title>Triforce NAND Type-3 Teardown</title>
      <link>https://blog.jchw.io/triforce-type-3-teardown/</link>
      <description>The Triforce was a Nintendo GameCube-based arcade machine. Here's a complete teardown of the guts of the Triforce.</description>
      <pubDate>Sat, 13 Aug 2022 20:36:08 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">62f7f6194c42ce020b320c4a</guid>
    </item>
    <item>
      <title>Sorry, Wrong Number: Debugging a Crash under Wine</title>
      <link>https://blog.jchw.io/wrong-number/</link>
      <description>When a friend of mine was developing some software, they were puzzled to find their software worked on Windows but crashed under Wine. A quirk of the MinGW toolchain and the behavior of the Windows loader led to a surprisingly subtle failure mode.</description>
      <pubDate>Tue, 12 Apr 2022 13:00:00 +0000</pubDate>
      <dc:creator>John</dc:creator>
      <guid isPermaLink="false">6270732da79364020c23163a</guid>
    </item>
  </channel>
</rss>
