<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>jon.dev</title>
    <link>https://jon.dev/</link>
    <description>Jon Olson in Seattle.</description>
    <language>en-us</language>
    <copyright>Copyright 2026 Jon Olson</copyright>
    <dc:creator>Jon Olson</dc:creator>
    <ttl>60</ttl>
    <atom:link href="https://jon.dev/feed.xml" rel="self" type="application/rss+xml" />
    <lastBuildDate>Sun, 30 Aug 2026 01:46:21 GMT</lastBuildDate>
    <item>
      <title>J-Link over USB: What’s on the Wire</title>
      <link>https://jon.dev/2026/08/j-link-over-usb</link>
      <guid isPermaLink="false">tag:jon.dev,2026-08-29:trace/j-link-over-usb</guid>
      <pubDate>Sun, 30 Aug 2026 01:46:21 GMT</pubDate>
      <category>Traces</category>
      <dc:creator>Jon Olson</dc:creator>
      <description>Ostiole can now use SEGGER J-Link probes directly over USB. Its J-Link package finds the probe’s application interface, reads its firmware and capabilities, configures SWD, and sends raw bit streams. Building it meant reconstructing enough of the USB protocol to know not only which bytes to send, but exactly how many to expect back.</description>
      <content:encoded><![CDATA[<p>Ostiole can now use SEGGER J-Link probes directly over USB. Its
<a href="https://github.com/jon/ostiole/tree/main/jlink">J-Link package</a> finds the
probe’s application interface, reads its firmware and capabilities, configures
SWD, and sends raw bit streams. Building it meant reconstructing enough of the
USB protocol to know not only which bytes to send, but exactly how many to
expect back.</p>
<p>The protocol is simple in a way that is not especially forgiving. Each request
starts with a one-byte operation code followed by whatever data that operation
needs. The reply contains only that operation’s response: no common header,
transaction number, length, checksum, or error envelope. Read the wrong number
of bytes once and the leftovers can look like the answer to the next request.</p>
<p>One documented RTCK measurement made the risk unusually concrete. On my J-Link
EDU Mini V2, the request went out, no reply came back, and the probe stayed
wedged after I closed it and reset the USB device. It recovered only after I
unplugged and reconnected it.</p>
<p>The complete reconstruction is now this Trace. Ostiole uses it for the J-Link
support that exists today, and there is enough protocol in it for another
implementation to start without first reconstructing the same conversation from
old clients and a probe on the bench.</p>]]></content:encoded>
    </item>
    <item>
      <title>Making holograms with a pen plotter</title>
      <link>https://jon.dev/2026/08/making-holograms-with-a-pen-plotter</link>
      <guid isPermaLink="false">tag:jon.dev,2026-08-16:pointer/making-holograms-with-a-pen-plotter</guid>
      <pubDate>Mon, 17 Aug 2026 01:37:00 GMT</pubDate>
      <category>Pointers</category>
      <dc:creator>Jon Olson</dc:creator>
      <description>From Jordan Matelsky, on the first step in pen-plotter holography:</description>
      <content:encoded><![CDATA[<p>From Jordan Matelsky, on the first step in pen-plotter holography:</p>
<blockquote>
<p>It was a truly bizarre experience deliberately smearing my fingers with oil
and then touching my phone screen. Try it! Rules are made up!</p>
</blockquote>
<p>I spent longer than warranted looking at the old CD jewel cases in Matelsky’s
photos, partly out of nostalgia and partly because they turn out to be the
medium. Matelsky turns the highlights moving across a greasy fingerprint into
curves for a pen plotter to scratch into the plastic, creating an image whose
apparent depth comes into view under a point light as you move your head.</p>
<p>Matelsky puts a pen plotter and old CD jewel cases back to work together, a
delightfully useless collision of dead technologies for the pure fun of making
holograms.</p>]]></content:encoded>
    </item>
    <item>
      <title>ostiole</title>
      <link>https://jon.dev/2026/08/ostiole</link>
      <guid isPermaLink="false">tag:jon.dev,2026-08-16:byte/ostiole</guid>
      <pubDate>Sun, 16 Aug 2026 23:52:01 GMT</pubDate>
      <category>Bytes</category>
      <dc:creator>Jon Olson</dc:creator>
      <description>I’ve been working on a Go library called ostiole—a little door into the inner workings of chips. At the moment, the door opens onto one very specific path. It starts with native USB on Linux or macOS, passes through an FTDI H-series adapter and SWD, and reaches just far enough into Arm’s debug architecture to identify a Cortex-M. That isn’t debugging, but it is enough to get a sense of the project’s layers. They’re separate, composable libraries that anyone comfortable with Go can use to build their own hardware tools.</description>
      <content:encoded><![CDATA[<p>I’ve been working on a Go library called ostiole—a little door into the inner
workings of chips. At the moment, the door opens onto one very specific path. It
starts with native USB on Linux or macOS, passes through an FTDI H-series
adapter and SWD, and reaches just far enough into Arm’s debug architecture to
identify a Cortex-M. That isn’t debugging, but it is enough to get a sense of
the project’s layers. They’re separate, composable libraries that anyone
comfortable with Go can use to build their own hardware tools.</p>
<p>Hardware-debugging tools are happy to do exactly what I asked instead of what I
intended, then hand me enough hexadecimal rope to hang myself trying to work out
what happened. An AI gets the same two chances. It can hallucinate the script
and the result.</p>
<p>I want to optimize for a different target, one where AIs compose exactly the
tools they need. Ostiole’s libraries should have small jobs and clear
boundaries. The simulators should let an AI try them without a bench. The
documentation should point it at the library that already owns an operation
before it goes rummaging through the whole repository.</p>
<p>Eventually, I expect Ostiole to inspect, control, and program whole systems,
with debugger and MCP interfaces using the same libraries instead of growing
their own hardware stacks. That is a long way from reading a Cortex-M identity,
but building it is the fun part—and somewhere along the way an AI will use
Ostiole to debug a chip as part of doing something genuinely useful.</p>]]></content:encoded>
    </item>
    <item>
      <title>Rands’ Motivation</title>
      <link>https://jon.dev/2026/08/rands-motivation</link>
      <guid isPermaLink="false">tag:jon.dev,2026-08-09:pointer/rands-motivation</guid>
      <pubDate>Mon, 10 Aug 2026 01:03:41 GMT</pubDate>
      <category>Pointers</category>
      <dc:creator>Jon Olson</dc:creator>
      <description>Rands, asking why he writes:</description>
      <content:encoded><![CDATA[<p>Rands, asking why he writes:</p>
<blockquote>
<p>I write because I like the mental state created by writing. It calms and
quiets me, but that is not why I write.</p>
</blockquote>
<p>I read this while getting jon.dev ready to launch, so it seemed apropos. Rands
has an answer. His post helped me think about mine.</p>]]></content:encoded>
    </item>
    <item>
      <title>First post!</title>
      <link>https://jon.dev/2026/08/first-post</link>
      <guid isPermaLink="false">tag:jon.dev,2026-08-08:words/first-post</guid>
      <pubDate>Sun, 09 Aug 2026 02:00:00 GMT</pubDate>
      <category>Words</category>
      <dc:creator>Jon Olson</dc:creator>
      <description>jon.dev is where I’ll publish things that are, to me, both technical and interesting. That has long meant systems programming, firmware, and low-level electronics. More recently, it has also meant some AI.</description>
      <content:encoded><![CDATA[<p>jon.dev is where I’ll publish things that are, to me, both technical and
interesting. That has long meant systems programming, firmware, and low-level
electronics. More recently, it has also meant some AI.</p>
<p>The format here owes <a href="https://daringfireball.net/">Daring Fireball</a> an obvious
debt. John
<a href="https://daringfireball.net/2004/11/linked_list_placement">credits Jason Kottke</a>
with the idea of mixing link posts and full articles in one chronological
stream. He shamelessly copied it. I’m shamelessly copying him.</p>
<p>I don’t know exactly what this will turn into. I’m glad you’re here to find out
with me.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
