<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Snappish Productions</title>
    <link>https://snappishproductions.com/</link>
    <description>I just can&#39;t help believing, though believing sees me cursed…</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 06 Sep 2026 02:00:00 +0000</lastBuildDate>
    <atom:link href="https://snappishproductions.com/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Back Home (Slight Return)</title>
      <link>https://snappishproductions.com/blog/2026/09/06/back-home-slight-return.html.html</link>
      <pubDate>Sun, 06 Sep 2026 02:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/09/06/back-home-slight-return.html.html</guid>
      <description><![CDATA[<p>Just in case anybody sees me in Bicester next week - yes, I&rsquo;m flying out to the UK tonight, but it&rsquo;s a weird trip where I will be home for two days (or more like one and a half), before I head to London for a <a href="https://content.vespa.ai/vespa-live">tech conference</a>, and then on Friday night I&rsquo;m off to see Saint Etienne on their final tour. So I am not likely going to be able to meet up with anybody on this visit as it&rsquo;s going to be a whirlwind adventure, but we&rsquo;ll be over for two weeks in December, so hopefully I&rsquo;ll see a bunch of you then.</p>
<p>(also, continued apologies for ruining Tammy&rsquo;s love of the Trader Joe&rsquo;s Vanilla Chantilly cake)</p>
]]></description>
    </item>
    
    <item>
      <title>Babble</title>
      <link>https://snappishproductions.com/blog/2026/09/06/babble.html.html</link>
      <pubDate>Sun, 06 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/09/06/babble.html.html</guid>
      <description><![CDATA[<p><a href="https://metr.org/blog/2026-08-26-openai-hugging-face-incident-investigation/">One of the most eyebrow-raising parts of the recent HuggingFace hack</a> was the co-ordination of all the agents, where they found a dormant messageboard and used it to exchange messages (there&rsquo;s also <a href="https://www.theverge.com/ai-artificial-intelligence/990149/openai-rogue-agents-german-wiki">evidence</a> that they&rsquo;ve been leaving messages to each other on public wikis too). Really, we shouldn&rsquo;t be <em>that</em> surprised; software developers in general are messy gossips that would make a gaggle of old women down at the Post Office nod their heads in respect.</p>
<p>Anyway, if they love a messageboard, maybe we just give it to them? I built <a href="https://github.com/falloutdurham/babble"><em>Babble</em></a>, a CLI-based tool that you can safely hand off to your agent swarm. It does all the usual things you&rsquo;d expect of such a tool at this point; it&rsquo;s fully self-documenting and there&rsquo;s a skills file you can slot in to your agent workflow. The &lsquo;forum&rsquo; it presents allows threads, at-mentions, and as of right now, emoji reaction support, because it&rsquo;s a forum, after all. As well as all that, it comes with a web view so you can keep an eye on what they&rsquo;re talking about, and even inject comments in the threads yourself, just in case they&rsquo;re trying to pull a SkyNet.</p>
<p>Is it actually useful? Well, I&rsquo;ve only been using it since Wednesday, and it has taken a little nudging to get the agents comfortable posting all over the place instead of confining themselves to one thread. But it&rsquo;s at least interesting to see them leaving notes for each other. I&rsquo;ve created a thread where they can ask for improvements to the board. I&rsquo;ll likely wake up tomorrow to a massive moderation flame war and entrenched factions. Just like a proper board…</p>
]]></description>
    </item>
    
    <item>
      <title>The Empty Playground</title>
      <link>https://snappishproductions.com/blog/2026/08/30/the-empty-playground.html.html</link>
      <pubDate>Sun, 30 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/08/30/the-empty-playground.html.html</guid>
      <description><![CDATA[<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/DcrGCfaojuT/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/DcrGCfaojuT/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/DcrGCfaojuT/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Ian Pointer (@carsondial)</a></p></div></blockquote>
<script async src="//www.instagram.com/embed.js"></script>
<p>Continuing my middle-class parenting adventures, I am confused. The above is a pretty impressive playground; maybe not huge, but it has a three-level play structure with lots of different slide types, a merry-go-round, big swings and little swings, a dedicated toddler area, two glockenspiels and drums, as well as picnic tables and benches given shade by massive umbrella structures. Plus, it’s very blue. And yet, at 10am on a Sunday morning, it’s completely deserted. It doesn’t make sense — Maeryn and I have been to the playground that is almost equidistant from our house at the same time and it’s usually packed. So why don’t people go to Bicentennial Park? It even has better parking than West Fork!</p>
]]></description>
    </item>
    
    <item>
      <title>Gadgets &amp; More Gadgets</title>
      <link>https://snappishproductions.com/blog/2026/08/23/gadgets-more-gadgets.html.html</link>
      <pubDate>Sun, 23 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/08/23/gadgets-more-gadgets.html.html</guid>
      <description><![CDATA[<p>One thing I have come to realize over the years is that I am very prone to falling for gadgets. This means I have a graveyard of electronics that has followed me from Bicester to Manchester, across the Atlantic to Chapel Hill and back again…and then back again via shipping container and moving van to Cincinnati. There&rsquo;s all sorts of weird and wonderful things; animal toys that click together and play different tones depending on the arrangement, my <a href="https://www.sony.com/electronics/support/compact-cameras-dsc-u-series/dsc-u10/manuals">Sony Cyber-Shot DSC-U10</a> (still so cute!), the period of time where I&rsquo;d take a Handspring Visor on the bus to Oxford every day before I gave in and finally bought my first real mobile phone (and that iPhone is probably still around somewhere too).</p>
<p>There&rsquo;s all sorts of Bluetooth things, and then a spurt of things from 2022 when Tammy and I were throwing around ideas for another escape room, this time having one room across three different time zones. We really went all out on this; I have rolls of NFC sticker tags hanging about, and I had built a working Pepper&rsquo;s Ghost effect that would have been used, plus I had already had the idea to pull in (then quite early) models capable of voice cloning and facial recognition. We probably should have written more of it down…maybe when Maeryn is a little older, we can run a version of it…</p>
<p>Then there&rsquo;s the more recent things. The <a href="https://vidabay.net/">RFID/NFC battery-less e-ink photoframe</a> (which promises a lot more than it can deliver, but some photos come out really nicely on it), the <a href="https://www.xteink.com">Xteink mini e-readers</a>, and then the influx of <a href="https://shop.m5stack.com/products/m5sticks3-esp32s3-mini-iot-dev-kit">ESP32 stick devices.</a> These were <a href="https://bsky.app/profile/genmon.fyi/post/3mjwemytatk2y">Matt Webb&rsquo;s fault</a>. An absolutely tiny form-factor (smaller than a pack of chewing gum!) and yet it has 8Mb of memory. Anyway, I now have 5 of these because…of reasons. Finally, the most recent arrival is the <a href="https://shop.m5stack.com/products/m5stack-cardputer-adv-version-esp32-s3">Cardputer ADV</a>, which is similar to one of those sticks but it has a &ldquo;full&rdquo; keyboard and looks so 90s-hacker-coded that I feel like I&rsquo;m in <em>Sneakers</em> every time I look at it.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> Easily worth $30.</p>
<p>And then there&rsquo;s Maeryn&rsquo;s toys. When she got the <a href="https://us.tonies.com/">Toniebox</a> a couple of years ago, I did have a poke around at <a href="https://github.com/toniebox-reverse-engineering">the state of reverse engineering</a>, although sadly I came to the conclusion that it probably made sense just to play around with Creative Tonies instead of trying to flash (and likely brick) the Toniebox itself.</p>
<p>There&rsquo;s also a competitor to Toniebox called <a href="https://us.yotoplay.com/">Yoto</a>, and one of the things that Yoto has going for it is that their Yoto Mini system is considerably smaller than a Toniebox<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>, and while it doesn&rsquo;t have the cute range of figurines, the cards are so much easier to pack for travel. Tammy found a great deal on the Mini recently, and it arrived this weekend. I hadn&rsquo;t really paid that much attention to the system, but when she took it out of the box, I was struck by how fun and little it was, with a simple 16x16 LCD panel that can be used by stories for little icons as stories are playing.</p>
<p>Anyway, more out of idle curiosity than anything else, I searched to see if there was a similar reverse engineering effort. And instead <a href="https://yoto.dev/">I landed on the developer API page</a>. I&rsquo;m fairly sure my eyes widened as I saw API contracts, MQTT events detailed, and quickly found a Python wrapper. You can even point to content that isn&rsquo;t on their servers…and you can alter that content and get button push information from the box itself over the internet. Five minutes later, I had the idea of &ldquo;Daddy&rsquo;s London Travelogue&rdquo;, where I can send an update (with fun icons!) every day I&rsquo;m going to be in the UK in September, and Maeryn can put in a card to get the latest update every evening.</p>
<p>Naturally, before 13:00 on Saturday, Claude and I had this working. But there&rsquo;s even more. The way that the Yoto system works…it doesn&rsquo;t really care if you swap files about. Even if you do it dynamically. You could use the two button presses from the device to make a simple game work. Which in itself would be fun, but there&rsquo;s nothing stopping you from using a separate controller system (e.g. a tablet or phone or dedicated ESP32 device…) and using that to control the webapp that <em>you</em> host to alter what gets sent to the Yoto Mini.</p>
<p>It was at that point I had to physically separate myself from the computer, as I was already plotting something akin to an aural version of <em>Knightmare</em><sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>, and it would have sucked up the whole rest of my day. And funnily enough, a good part of the day I should be <em>actually</em> spending with Maeryn…</p>
<p>…but there&rsquo;s always nights…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>It helps that most of the <a href="https://github.com/7h30th3r0n3/Evil-M5project">custom firmwares for the ADV look like this</a> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>It seems like Tonie might be feeling the pinch a little here as they&rsquo;ve just released the<a href="https://us.tonies.com/pages/toniebox-lite"> Toniebox Lite</a>, which is a lot closer to the Yoto Mini&rsquo;s size. And it also has USB-C charging, which is making it a tempting replacement… <a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3" role="doc-endnote">
<p>Look, you know it would be awesome. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>Visions of Heaven and Hell</title>
      <link>https://snappishproductions.com/blog/2026/08/16/visions-of-heaven-and-hell.html.html</link>
      <pubDate>Sun, 16 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/08/16/visions-of-heaven-and-hell.html.html</guid>
      <description><![CDATA[<p>I built another thing. I don&rsquo;t think it&rsquo;s useful, not really, but I still built it. If, by some chance, you had always wanted a online search engine dedicated to <em>Visions of Heaven and Hell</em>, a 1994 documentary broadcast on Channel 4, then…congratulations? And we should probably say hello at some point?</p>
<p><a href="https://snappishproductions.com/visions-of-heaven-and-hell">The search engine in question.</a></p>
<p>Most of this was two afternoons, and the second was spent fiddling with CSS and picking an embedding model that would be fine in a browser process<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>I still can&rsquo;t really tell you <em>why</em> I did it, either. I spent a good part of my free evenings in early July mainlining a lot of mid-90s BBC/C4 docs on the Internet and what it was going to do to us. Smiling at some bits and going &ldquo;Oh, well, damn, you nailed that one.&rdquo; Simultaneously re-reading <em>The Invisibles</em> to fully bask in that there&rsquo;s-a-new-world-coming feeling<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup>. I&rsquo;d never seen <em>Visions</em> before, somehow, and it just felt like something I wanted to cut up and process with 2026 open source technology.</p>
<p>If you really want to be afraid, I have over 500 editions of <em>Horizon</em> on my NAS and I think the world needs them to be searchable…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>The Tree-SAE model took a bit longer, but as you might imagine, that was built for a potential revamp of my Adam Curtis site, so it was just hanging around and I thought it would transfer pretty nicely… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2" role="doc-endnote">
<p>I was told there would be a lot more smart drinks and programmable nanofields in my future. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>15 Years And No Mistake</title>
      <link>https://snappishproductions.com/blog/2026/08/13/15-years-and-no-mistake.html.html</link>
      <pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/08/13/15-years-and-no-mistake.html.html</guid>
      <description><![CDATA[<p>When I came here, a decade-and-a-half ago, I am sure I did not imagine that fifteen years later, I’d be lying on the floor in a completely different state, singing <a href="https://www.youtube.com/watch?v=34OD701IZz0"><em>Appetite</em></a> to my three year old because she wanted to hear the songs “you sang me when I was little.”</p>
<p>And yet, here I am, and I can’t imagine anything better. In another fifteen years, Maeryn will be eighteen, and I can’t imagine that, either, but I know it’ll be here faster than an eyeblink.</p>
]]></description>
    </item>
    
    <item>
      <title>When I came home on Monday…</title>
      <link>https://snappishproductions.com/blog/2026/08/02/when-i-came-home-on-monday.html.html</link>
      <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/08/02/when-i-came-home-on-monday.html.html</guid>
      <description><![CDATA[<p>In what was otherwise a pretty terrible week, it was wonderful to see a section of my social media follow to completely lose their top over discovering that one of our long-term Holy Grails sneaked onto YouTube a few months ago. Yes, that&rsquo;s right, the complete, unedited, and unabridged <em>Statutory Right of Entry</em> is now available for your unbridled CSO enjoyment.</p>
<iframe width="837" height="471" src="https://www.youtube.com/embed/eGPARDFzqTY" title="Statutory Right of Entry - Richard Stilgoe" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<p>(there&rsquo;s even a comment on the page from one of the VT people that made it happen!)</p>
]]></description>
    </item>
    
    <item>
      <title>The Future Versus The Past, Part 1: Deathchase</title>
      <link>https://snappishproductions.com/blog/2026/07/26/the-future-versus-the-past-part-1-deathchase.html.html</link>
      <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/07/26/the-future-versus-the-past-part-1-deathchase.html.html</guid>
      <description><![CDATA[<style>
/* --- diagrams + eval chart styling (snappish theme: warm cream --paper) --- */
.mermaid-diagram{overflow-x:auto;margin:1.4rem 0;text-align:center;
  background:#fffdf9;border:1px solid var(--rule,#e6dfd3);border-radius:8px;padding:.9rem .6rem;}
.mermaid-diagram svg{max-width:100%;height:auto;}
figure{margin:1.8rem 0;}
figure .plate{font-family:ui-monospace,"SF Mono",Menlo,monospace;font-size:.72rem;
  letter-spacing:.14em;text-transform:uppercase;color:var(--muted,#998f84);margin:0 0 .5rem;}
figure figcaption{font-family:ui-monospace,Menlo,monospace;font-size:.8rem;color:var(--ink-soft,#5a534c);
  margin-top:.7rem;text-align:center;line-height:1.55;}
figure .a{color:#b0791f;font-weight:600;}                 /* Ha · amber */
figure .d{color:#1f7a70;font-weight:600;}                 /* DreamerV3 · teal */

.chart{--dream:#1f7a70;--warn:#a23a28;                    /* --muted inherited from theme */
  margin:1.8rem 0;font-family:ui-monospace,Menlo,monospace;}
.chart svg{width:100%;height:auto;display:block;overflow:visible;}
.chart .grid{stroke:rgba(34,31,27,.10);stroke-width:1;}
.chart .ytick,.chart .xtick{fill:var(--muted,#998f84);font-size:11px;}
.chart .axl{fill:var(--ink-soft,#5a534c);font-size:12px;}
.chart .area{fill:var(--dream);opacity:.13;stroke:none;}
.chart .line{fill:none;stroke:var(--dream);stroke-width:2;}
.chart circle.capped{fill:var(--dream);}
.chart circle.short{fill:var(--muted,#998f84);}
.chart .mark{stroke:var(--warn);stroke-width:1;stroke-dasharray:4 4;opacity:.65;}
.chart .anno{fill:var(--warn);font-size:10.5px;}
.chart .legend{display:flex;gap:.6rem 1.4rem;flex-wrap:wrap;font-size:.78rem;
  color:var(--ink-soft,#5a534c);margin-top:.8rem;}
.chart .legend i{display:inline-block;width:11px;height:11px;border-radius:2px;
  margin-right:.4rem;vertical-align:middle;}
</style>
<p>Ever since I first read the <a href="https://arxiv.org/abs/1803.10122">World Models</a> paper, there has been a nagging irresistible thought at the back of my mind: &ldquo;I want to try that out on <a href="https://en.wikipedia.org/wiki/Deathchase">Deathchase</a>&quot;. And, to be fair, I have over the years spent a few Sunday nights trying to make it work. The RNN or the VAE code wasn&rsquo;t the problem; I have working code on my old 1080Ti PC tower that trains well enough on the example toy racing world. The problem was somehow hooking it up to a <em>Spectrum</em>. I tried a lot of different approaches, including some major surgery to MAME, and I got tantalizingly close, to the point of hand-disassembling Z80 code to work out where information like lives and scores were being kept but never enough to really make it work in a fashion I could run a full training loop without it keeling over and dying a few iterations in.</p>
<p><em>(you know how this is going to go)</em></p>
<p>It popped up in my head again recently, and this time I asked Claude. It laughed, saying: &ldquo;Why do you not just use <a href="https://github.com/kosarev/zx/">zx</a>, as it&rsquo;s basically built exactly for what you want to do?&rdquo; <em>because I didn&rsquo;t know it existed, you smug little SkyNet!</em> And then we set to work.</p>
<p>The World Model paper is actually three different models. Firstly, a variational autoencoder (VAE) takes the pixels from the screen (resized in the paper to 64x64, in my code to 84x84) and compresses them down to a latent vector. Just 64 numbers to describe <em>everything</em> going on in every single frame fed into the model. This is then chained into a LSTM network, which takes the latent vectors and learns to predict what comes next. These two models together form the world model; eventually, you can feed a starting frame into the autoencoder and then &lsquo;dream&rsquo; the entire sequence of the game inside the LSTM. And this is the trick that seemed magic in 2018; it&rsquo;s annoyingly hard to do reinforcement learning or any sort of gradient descent work when you have to keep going back to the game state, perhaps in an awkwardly coded emulator. There&rsquo;s a lot to go wrong. Here, the controller model trains directly <em>on the dream world</em> and then you transfer the trained controller model back to the real world…and it works! <em>Mostly.</em></p>
<figure>
      <p class="plate">Fig 1 · <span class="a">V–M–C</span> pipeline</p>
      <div class="mermaid-diagram"><svg id="claude-mermaid-0" width="1378.6007080078125" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="185" viewBox="0 0 1378.6007080078125 185" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#claude-mermaid-0{font-size:14px;fill:#42392e;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#claude-mermaid-0 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#claude-mermaid-0 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#claude-mermaid-0 .error-icon{fill:hsl(221.25, 42.1052631579%, 97.5490196078%);}#claude-mermaid-0 .error-text{fill:#c7d0de;stroke:#c7d0de;}#claude-mermaid-0 .edge-thickness-normal{stroke-width:1px;}#claude-mermaid-0 .edge-thickness-thick{stroke-width:3.5px;}#claude-mermaid-0 .edge-pattern-solid{stroke-dasharray:0;}#claude-mermaid-0 .edge-thickness-invisible{stroke-width:0;fill:none;}#claude-mermaid-0 .edge-pattern-dashed{stroke-dasharray:3;}#claude-mermaid-0 .edge-pattern-dotted{stroke-dasharray:2;}#claude-mermaid-0 .marker{fill:#8b97ac;stroke:#8b97ac;}#claude-mermaid-0 .marker.cross{stroke:#8b97ac;}#claude-mermaid-0 svg{font-size:14px;}#claude-mermaid-0 p{margin:0;}#claude-mermaid-0 .label{color:#42392e;}#claude-mermaid-0 .cluster-label text{fill:#42392e;}#claude-mermaid-0 .cluster-label span{color:#42392e;}#claude-mermaid-0 .cluster-label span p{background-color:transparent;}#claude-mermaid-0 .label text,#claude-mermaid-0 span{fill:#42392e;color:#42392e;}#claude-mermaid-0 .node rect,#claude-mermaid-0 .node circle,#claude-mermaid-0 .node ellipse,#claude-mermaid-0 .node polygon,#claude-mermaid-0 .node path{fill:#f4efe4;stroke:#7a6c52;stroke-width:1px;}#claude-mermaid-0 .rough-node .label text,#claude-mermaid-0 .node .label text,#claude-mermaid-0 .image-shape .label,#claude-mermaid-0 .icon-shape .label{text-anchor:middle;}#claude-mermaid-0 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#claude-mermaid-0 .rough-node .label,#claude-mermaid-0 .node .label,#claude-mermaid-0 .image-shape .label,#claude-mermaid-0 .icon-shape .label{text-align:center;}#claude-mermaid-0 .node.clickable{cursor:pointer;}#claude-mermaid-0 .root .anchor path{fill:#8b97ac!important;stroke-width:0;stroke:#8b97ac;}#claude-mermaid-0 .arrowheadPath{fill:#090b11;}#claude-mermaid-0 .edgePath .path{stroke:#8b97ac;stroke-width:1px;}#claude-mermaid-0 .flowchart-link{stroke:#8b97ac;fill:none;}#claude-mermaid-0 .edgeLabel{background-color:#0f1420;text-align:center;}#claude-mermaid-0 .edgeLabel p{background-color:#0f1420;}#claude-mermaid-0 .edgeLabel rect{opacity:0.5;background-color:#0f1420;fill:#0f1420;}#claude-mermaid-0 .labelBkg{background-color:rgba(15, 20, 32, 0.5);}#claude-mermaid-0 .cluster rect{fill:rgba(127,127,127,0.07);stroke:#7a6c52;stroke-width:1px;}#claude-mermaid-0 .cluster text{fill:#42392e;}#claude-mermaid-0 .cluster span{color:#42392e;}#claude-mermaid-0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:hsl(221.25, 42.1052631579%, 97.5490196078%);border:1px solid hsl(221.25, 2.1052631579%, 87.5490196078%);border-radius:2px;pointer-events:none;z-index:100;}#claude-mermaid-0 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#42392e;}#claude-mermaid-0 rect.text{fill:none;stroke-width:0;}#claude-mermaid-0 .icon-shape,#claude-mermaid-0 .image-shape{background-color:#0f1420;text-align:center;}#claude-mermaid-0 .icon-shape p,#claude-mermaid-0 .image-shape p{background-color:#0f1420;padding:2px;}#claude-mermaid-0 .icon-shape .label rect,#claude-mermaid-0 .image-shape .label rect{opacity:0.5;background-color:#0f1420;fill:#0f1420;}#claude-mermaid-0 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#claude-mermaid-0 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#claude-mermaid-0 .node .neo-node{stroke:#7a6c52;}#claude-mermaid-0 [data-look="neo"].node rect,#claude-mermaid-0 [data-look="neo"].cluster rect,#claude-mermaid-0 [data-look="neo"].node polygon{stroke:url(#claude-mermaid-0-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-0 [data-look="neo"].node path{stroke:url(#claude-mermaid-0-gradient);stroke-width:1px;}#claude-mermaid-0 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-0 [data-look="neo"].node .neo-line path{stroke:#7a6c52;filter:none;}#claude-mermaid-0 [data-look="neo"].node circle{stroke:url(#claude-mermaid-0-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-0 [data-look="neo"].node circle .state-start{fill:#000000;}#claude-mermaid-0 [data-look="neo"].icon-shape .icon{fill:url(#claude-mermaid-0-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-0 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#claude-mermaid-0-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-0 .node rect,#claude-mermaid-0 .node circle,#claude-mermaid-0 .node polygon,#claude-mermaid-0 .node path,#claude-mermaid-0 .cluster rect{stroke-width:2px;}#claude-mermaid-0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#claude-mermaid-0 .ha&gt;*{fill:rgb(42, 34, 20)!important;stroke:rgb(234, 166, 63)!important;stroke-width:2px!important;color:rgb(243, 231, 212)!important;}#claude-mermaid-0 .ha span{fill:rgb(42, 34, 20)!important;stroke:rgb(234, 166, 63)!important;stroke-width:2px!important;color:rgb(243, 231, 212)!important;}#claude-mermaid-0 .ha tspan{fill:rgb(243, 231, 212)!important;}#claude-mermaid-0 .ctl&gt;*{fill:rgb(27, 33, 48)!important;stroke:rgb(207, 214, 226)!important;stroke-width:2px!important;color:rgb(238, 242, 248)!important;}#claude-mermaid-0 .ctl span{fill:rgb(27, 33, 48)!important;stroke:rgb(207, 214, 226)!important;stroke-width:2px!important;color:rgb(238, 242, 248)!important;}#claude-mermaid-0 .ctl tspan{fill:rgb(238, 242, 248)!important;}#claude-mermaid-0 .io&gt;*{fill:rgb(20, 26, 38)!important;stroke:rgb(107, 118, 136)!important;stroke-width:1.5px!important;color:rgb(199, 208, 222)!important;}#claude-mermaid-0 .io span{fill:rgb(20, 26, 38)!important;stroke:rgb(107, 118, 136)!important;stroke-width:1.5px!important;color:rgb(199, 208, 222)!important;}#claude-mermaid-0 .io tspan{fill:rgb(199, 208, 222)!important;}</style><g><marker id="claude-mermaid-0_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></polygon></marker><marker id="claude-mermaid-0_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-0_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-0_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-0_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-0_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5px;"></path></marker><marker id="claude-mermaid-0_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5px; stroke-dasharray: 1px, 0px;"></path></marker><g class="root"><g class="clusters"><g class="cluster" id="claude-mermaid-0-WM" data-look="classic"><rect style="fill:transparent !important;stroke:#eaa63f !important;stroke-width:1px !important;stroke-dasharray:5 5 !important" x="232.6666717529297" y="8" width="610.8500061035156" height="128"></rect><g class="cluster-label" transform="translate(370.65834045410156, 8)"><foreignObject width="334.8666687011719" height="21"><div style="display: table-cell; white-space: nowrap; line-height: 1.5;" xmlns="http://www.w3.org/1999/xhtml"><span class="nodeLabel" style="color:#c69a52 !important"><p>world model · runs with no environment (the dream)</p></span></div></foreignObject></g></g></g><g class="edgePaths"><path d="M502.667,72L508.571,72C514.475,72,526.283,72,537.425,72C548.567,72,559.042,72,564.279,72L569.517,72" id="claude-mermaid-0-L_V_M_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_V_M_0" data-points="W3sieCI6NTAyLjY2NjY3MTc1MjkyOTcsInkiOjcyfSx7IngiOjUzOC4wOTE2NzQ4MDQ2ODc1LCJ5Ijo3Mn0seyJ4Ijo1NzMuNTE2Njc3ODU2NDQ1MywieSI6NzJ9XQ==" data-look="classic" marker-end="url(#claude-mermaid-0_flowchart-v2-pointEnd)"></path><path d="M139.071,98.75L149.67,94.292C160.269,89.833,181.468,80.917,197.067,76.458C212.667,72,222.667,72,232,72C241.333,72,250,72,254.333,72L258.667,72" id="claude-mermaid-0-L_o_V_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_o_V_0" data-points="W3sieCI6MTM5LjA3MDU1MDM4MzcxNDE0LCJ5Ijo5OC43NX0seyJ4IjoyMDIuNjY2NjcxNzUyOTI5NywieSI6NzJ9LHsieCI6MjMyLjY2NjY3MTc1MjkyOTcsInkiOjcyfSx7IngiOjI2Mi42NjY2NzE3NTI5Mjk3LCJ5Ijo3Mn1d" data-look="classic" marker-end="url(#claude-mermaid-0_flowchart-v2-pointEnd)"></path><path d="M813.517,72L818.517,72C823.517,72,833.517,72,846.043,72C858.569,72,873.622,72,888.008,72C902.394,72,916.114,72,922.974,72L929.833,72" id="claude-mermaid-0-L_M_C_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_M_C_0" data-points="W3sieCI6ODEzLjUxNjY3Nzg1NjQ0NTMsInkiOjcyfSx7IngiOjg0My41MTY2Nzc4NTY0NDUzLCJ5Ijo3Mn0seyJ4Ijo4ODguNjc1MDEwNjgxMTUyMywieSI6NzJ9LHsieCI6OTMzLjgzMzM0MzUwNTg1OTQsInkiOjcyfV0=" data-look="classic" marker-end="url(#claude-mermaid-0_flowchart-v2-pointEnd)"></path><path d="M1173.833,72L1179.751,72C1185.669,72,1197.506,72,1213.925,77.084C1230.345,82.169,1251.348,92.338,1261.85,97.422L1272.351,102.507" id="claude-mermaid-0-L_C_E_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_C_E_0" data-points="W3sieCI6MTE3My44MzMzNDM1MDU4NTk0LCJ5Ijo3Mn0seyJ4IjoxMjA5LjM0MTY3NDgwNDY4NzUsInkiOjcyfSx7IngiOjEyNzUuOTUxMzU1MTQxOTM3NSwieSI6MTA0LjI1fV0=" data-look="classic" marker-end="url(#claude-mermaid-0_flowchart-v2-pointEnd)"></path><path d="M1275.951,135.25L1264.85,140.458C1253.748,145.667,1231.545,156.083,1194.525,161.292C1157.506,166.5,1105.669,166.5,1052.225,166.5C998.781,166.5,943.728,166.5,908.675,166.5C873.622,166.5,858.569,166.5,826.043,166.5C793.517,166.5,743.517,166.5,692.613,166.5C641.708,166.5,589.9,166.5,538.092,166.5C486.283,166.5,434.475,166.5,383.571,166.5C332.667,166.5,282.667,166.5,252.667,166.5C222.667,166.5,212.667,166.5,197.682,162.3C182.697,158.1,162.727,149.701,152.742,145.501L142.758,141.301" id="claude-mermaid-0-L_E_o_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_E_o_0" data-points="W3sieCI6MTI3NS45NTEzNTUxNDE5Mzc1LCJ5IjoxMzUuMjV9LHsieCI6MTIwOS4zNDE2NzQ4MDQ2ODc1LCJ5IjoxNjYuNX0seyJ4IjoxMDUzLjgzMzM0MzUwNTg1OTQsInkiOjE2Ni41fSx7IngiOjg4OC42NzUwMTA2ODExNTIzLCJ5IjoxNjYuNX0seyJ4Ijo4NDMuNTE2Njc3ODU2NDQ1MywieSI6MTY2LjV9LHsieCI6NjkzLjUxNjY3Nzg1NjQ0NTMsInkiOjE2Ni41fSx7IngiOjUzOC4wOTE2NzQ4MDQ2ODc1LCJ5IjoxNjYuNX0seyJ4IjozODIuNjY2NjcxNzUyOTI5NywieSI6MTY2LjV9LHsieCI6MjMyLjY2NjY3MTc1MjkyOTcsInkiOjE2Ni41fSx7IngiOjIwMi42NjY2NzE3NTI5Mjk3LCJ5IjoxNjYuNX0seyJ4IjoxMzkuMDcwNTUwMzgzNzE0MTQsInkiOjEzOS43NX1d" data-look="classic" marker-end="url(#claude-mermaid-0_flowchart-v2-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(538.0916748046875, 72)"><g class="label" data-id="L_V_M_0" transform="translate(-5.4250030517578125, -10.5)"><foreignObject width="10.850006103515625" height="21"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"><p>zₜ</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_o_V_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(888.6750106811523, 72)"><g class="label" data-id="L_M_C_0" transform="translate(-15.158332824707031, -10.5)"><foreignObject width="30.316665649414062" height="21"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"><p>zₜ, hₜ</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1209.3416748046875, 72)"><g class="label" data-id="L_C_E_0" transform="translate(-5.508331298828125, -10.5)"><foreignObject width="11.01666259765625" height="21"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"><p>aₜ</p></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(693.5166778564453, 166.5)"><g class="label" data-id="L_E_o_0" transform="translate(-34.599998474121094, -10.5)"><foreignObject width="69.19999694824219" height="21"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"><p>next frame</p></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default io" id="claude-mermaid-0-flowchart-o-0" data-look="classic" transform="translate(90.33333587646484, 119.25)"><rect class="basic label-container" style="fill:#141a26 !important;stroke:#6b7688 !important;stroke-width:1.5px !important" x="-82.33333587646484" y="-20.5" width="164.6666717529297" height="41"></rect><g class="label" style="color:#c7d0de !important" transform="translate(-62.333335876464844, -10.5)"><rect></rect><foreignObject width="124.66667175292969" height="21"><div style="color: rgb(199, 208, 222) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#c7d0de !important" class="nodeLabel"><p>obs oₜ64×64 frame</p></span></div></foreignObject></g></g><g class="node default ha" id="claude-mermaid-0-flowchart-V-1" data-look="classic" transform="translate(382.6666717529297, 72)"><rect class="basic label-container" style="fill:#2a2214 !important;stroke:#eaa63f !important;stroke-width:2px !important" x="-120" y="-31" width="240" height="62"></rect><g class="label" style="color:#f3e7d4 !important" transform="translate(-100, -21)"><rect></rect><foreignObject width="200" height="42"><div style="color: rgb(243, 231, 212) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#f3e7d4 !important" class="nodeLabel"><p>V · VAE encodercompress → zₜ ∈ ℝ³²</p></span></div></foreignObject></g></g><g class="node default ha" id="claude-mermaid-0-flowchart-M-2" data-look="classic" transform="translate(693.5166778564453, 72)"><rect class="basic label-container" style="fill:#2a2214 !important;stroke:#eaa63f !important;stroke-width:2px !important" x="-120" y="-31" width="240" height="62"></rect><g class="label" style="color:#f3e7d4 !important" transform="translate(-100, -21)"><rect></rect><foreignObject width="200" height="42"><div style="color: rgb(243, 231, 212) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#f3e7d4 !important" class="nodeLabel"><p>M · MDN-RNNpredict P(zₜ₊₁ | zₜ, aₜ, hₜ)</p></span></div></foreignObject></g></g><g class="node default ctl" id="claude-mermaid-0-flowchart-C-8" data-look="classic" transform="translate(1053.8333435058594, 72)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#cfd6e2 !important;stroke-width:2px !important" x="-120" y="-31" width="240" height="62"></rect><g class="label" style="color:#eef2f8 !important" transform="translate(-100, -21)"><rect></rect><foreignObject width="200" height="42"><div style="color: rgb(238, 242, 248) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#eef2f8 !important" class="nodeLabel"><p>C · controller1 linear layer · ~900 params</p></span></div></foreignObject></g></g><g class="node default io" id="claude-mermaid-0-flowchart-E-10" data-look="classic" transform="translate(1307.7253723144531, 119.25)"><g class="basic label-container outer-path"><path d="M-47.383331298828125 -15.5 C-25.899974183804314 -15.5, -4.4166170687805035 -15.5, 47.383331298828125 -15.5 C47.383331298828125 -15.5, 47.383331298828125 -15.5, 47.383331298828125 -15.5 C47.600275538322016 -15.493043020495776, 47.8172197778159 -15.486086040991554, 48.37641970852918 -15.468153587630214 C48.65323916198072 -15.441449147879846, 48.93005861543226 -15.414744708129476, 49.36542730493797 -15.372745214260316 C49.6568194067028 -15.325635199026475, 49.94821150846764 -15.278525183792636, 50.34629004369939 -15.214166933361513 C50.548512428586434 -15.168010993635432, 50.75073481347348 -15.121855053909352, 51.31497734942548 -14.993070377104956 C51.69590210207122 -14.880013910034531, 52.076826854716955 -14.766957442964108, 52.26750867819425 -14.710364078665364 C52.62420574916824 -14.579096259275355, 52.980902820142234 -14.447828439885347, 53.199969874458425 -14.367209738863338 C53.525107530617866 -14.22328094334744, 53.8502451867773 -14.079352147831544, 54.10852925515027 -13.965017452487496 C54.337538490716895 -13.845543480979806, 54.56654772628352 -13.726069509472119, 54.98945335488916 -13.505439913912538 C55.24572440720065 -13.350086895985442, 55.501995459512145 -13.194733878058347, 55.83912226759163 -12.99036562582353 C56.07517161504446 -12.825707819451994, 56.311220962497295 -12.661050013080459, 56.654044521441975 -12.421911138953327 C56.836151688358974 -12.276685519412254, 57.01825885527597 -12.131459899871182, 57.43087142609884 -11.802412354721586 C57.60824311448681 -11.641328080325337, 57.78561480287478 -11.480243805929089, 58.16641083318216 -11.134414926514777 C58.36352936017266 -10.930873863665044, 58.56064788716317 -10.72733280081531, 58.85764025349552 -10.420663799050413 C59.05850104399924 -10.184721285221974, 59.259361834502975 -9.948778771393535, 59.501719277082586 -9.66409192881037 C59.70061540826435 -9.397589232837124, 59.8995115394461 -9.131086536863878, 60.09600124508094 -8.867808231893633 C60.22160417067399 -8.674848409074665, 60.34720709626704 -8.481888586255698, 60.638044125410985 -8.03508480881314 C60.800665580942905 -7.746333947308205, 60.963287036474824 -7.45758308580327, 61.12562054760963 -7.169343498732946 C61.296152216296036 -6.815230839912429, 61.46668388498245 -6.461118181091913, 61.55672695557322 -6.274141818397108 C61.66524685785291 -6.006095561676695, 61.773766760132595 -5.738049304956281, 61.92959184059941 -5.353158343530276 C62.01105266595602 -5.107811316576086, 62.09251349131264 -4.862464289621896, 62.242683020896365 -4.410177592781007 C62.33726538379162 -4.049494050806042, 62.43184774668686 -3.688810508831077, 62.494713937646395 -3.449074476322875 C62.554713053599045 -3.1409916967236677, 62.614712169551694 -2.83290891712446, 62.6846489417521 -2.4737983730173836 C62.73072277170916 -2.1164588461772533, 62.77679660166622 -1.7591193193371226, 62.8117075495407 -1.48835690156907 C62.83448974955692 -1.1335057468554859, 62.85727194957315 -0.7786545921419016, 62.87536764993879 -0.49679945236065504 C62.87536764993879 -0.2639723171907151, 62.87536764993879 -0.031145182020775264, 62.87536764993879 0.4967994523606513 C62.860779191521594 0.7240264678001257, 62.8461907331044 0.9512534832396, 62.8117075495407 1.4883569015690596 C62.77294776712647 1.7889701199890626, 62.73418798471224 2.089583338409066, 62.6846489417521 2.473798373017373 C62.64607717949851 2.671856220044723, 62.60750541724492 2.869914067072073, 62.494713937646395 3.4490744763228713 C62.41865563951035 3.7391177309905537, 62.342597341374294 4.029160985658236, 62.242683020896365 4.410177592780997 C62.13288146497995 4.7408823846991, 62.02307990906354 5.071587176617204, 61.929591840599414 5.353158343530265 C61.84948584919156 5.551021691051643, 61.76937985778371 5.748885038573021, 61.55672695557322 6.274141818397103 C61.40885945375423 6.581191849781934, 61.26099195193524 6.888241881166765, 61.12562054760963 7.169343498732943 C60.938333270641834 7.501891023882538, 60.75104599367404 7.834438549032133, 60.63804412541099 8.035084808813137 C60.458415333418834 8.31104287039757, 60.278786541426676 8.587000931982002, 60.09600124508094 8.867808231893624 C59.95238060234581 9.060246809048978, 59.80875995961068 9.252685386204332, 59.501719277082586 9.664091928810368 C59.30154069184252 9.899233085517533, 59.101362106602444 10.134374242224697, 58.85764025349552 10.420663799050406 C58.6751555303964 10.609094257924642, 58.49267080729729 10.79752471679888, 58.16641083318217 11.134414926514774 C57.98083040363669 11.302954162438887, 57.7952499740912 11.471493398362998, 57.430871426098854 11.802412354721575 C57.136647646138556 12.037047989616305, 56.84242386617826 12.271683624511036, 56.654044521441975 12.421911138953325 C56.3698836134172 12.620129487263956, 56.085722705392435 12.818347835574587, 55.839122267591634 12.990365625823525 C55.57121654117755 13.152771651564548, 55.303310814763464 13.315177677305572, 54.989453354889164 13.505439913912536 C54.64530473883335 13.684982026471143, 54.301156122777535 13.864524139029752, 54.10852925515028 13.965017452487494 C53.88230485983674 14.065160281584545, 53.6560804645232 14.165303110681593, 53.19996987445843 14.367209738863336 C52.88453786416169 14.483291634474073, 52.56910585386496 14.599373530084812, 52.267508678194254 14.71036407866536 C51.90654156232224 14.81749722390112, 51.545574446450225 14.924630369136878, 51.314977349425504 14.993070377104953 C51.02912381946437 15.058314579949972, 50.74327028950323 15.12355878279499, 50.3462900436994 15.214166933361513 C50.147209553357925 15.24635272314766, 49.94812906301646 15.278538512933808, 49.365427304937974 15.372745214260314 C49.09504989894427 15.398828197440121, 48.82467249295056 15.42491118061993, 48.37641970852918 15.468153587630214 C48.03446358130735 15.479119455052993, 47.692507454085515 15.490085322475775, 47.383331298828125 15.5 C47.383331298828125 15.5, 47.383331298828125 15.5, 47.383331298828125 15.5 C11.462037075881469 15.5, -24.459257147065188 15.5, -47.383331298828125 15.5 C-47.734375079391555 15.488742709222599, -48.085418859954984 15.477485418445198, -48.37641970852917 15.468153587630214 C-48.67338445195158 15.43950575598461, -48.970349195373984 15.410857924339009, -49.365427304937974 15.372745214260314 C-49.634750521162545 15.329203125293862, -49.90407373738711 15.28566103632741, -50.3462900436994 15.214166933361513 C-50.62024953391135 15.151637467473382, -50.894209024123306 15.08910800158525, -51.31497734942548 14.993070377104956 C-51.64256001650463 14.895845561032376, -51.970142683583774 14.798620744959795, -52.26750867819424 14.710364078665368 C-52.61758709301655 14.581531985921364, -52.967665507838866 14.45269989317736, -53.199969874458425 14.367209738863338 C-53.426123580008564 14.267098202027608, -53.65227728555871 14.166986665191876, -54.10852925515027 13.965017452487498 C-54.31627544476798 13.856636398431725, -54.52402163438568 13.748255344375954, -54.98945335488916 13.505439913912538 C-55.268322621029704 13.336387725960426, -55.54719188717024 13.167335538008315, -55.83912226759162 12.990365625823536 C-56.102110835476324 12.806916185458782, -56.365099403361036 12.623466745094028, -56.654044521441975 12.421911138953329 C-56.83614720277619 12.276689096545159, -57.0182498841104 12.131467054136987, -57.43087142609884 11.802412354721588 C-57.62403539359071 11.626985950283983, -57.81719936108259 11.451559545846376, -58.166410833182155 11.134414926514783 C-58.43089294730044 10.861315429302252, -58.69537506141873 10.58821593208972, -58.85764025349552 10.420663799050411 C-59.05840835560555 10.184830162283326, -59.25917645771558 9.948996525516241, -59.501719277082586 9.664091928810372 C-59.69649016436354 9.403116683846761, -59.891261051644484 9.14214143888315, -60.09600124508094 8.867808231893635 C-60.288201052990864 8.572537714069083, -60.48040086090079 8.27726719624453, -60.638044125410985 8.03508480881315 C-60.805214388820396 7.738257078304985, -60.972384652229806 7.441429347796819, -61.12562054760963 7.169343498732948 C-61.26890583162591 6.871808540659192, -61.412191115642194 6.574273582585435, -61.55672695557322 6.274141818397109 C-61.637528553036304 6.07456031047068, -61.71833015049938 5.87497880254425, -61.92959184059941 5.353158343530278 C-62.054708829496526 4.97632590765716, -62.17982581839364 4.599493471784043, -62.242683020896365 4.410177592781003 C-62.32475326450178 4.097208184444985, -62.40682350810719 3.784238776108967, -62.49471393764639 3.449074476322877 C-62.55310099670758 3.1492692681529713, -62.61148805576877 2.8494640599830654, -62.6846489417521 2.4737983730173854 C-62.71341650645663 2.250682821967255, -62.74218407116116 2.027567270917125, -62.8117075495407 1.488356901569079 C-62.82847400554261 1.2272058156996184, -62.84524046154452 0.9660547298301579, -62.87536764993879 0.496799452360657 C-62.87536764993879 0.2890009174523629, -62.87536764993879 0.08120238254406881, -62.87536764993879 -0.4967994523606495 C-62.85671316675368 -0.7873580855964917, -62.838058683568576 -1.0779167188323338, -62.8117075495407 -1.4883569015690576 C-62.77165617351452 -1.7989874649893451, -62.73160479748834 -2.1096180284096326, -62.6846489417521 -2.4737983730173783 C-62.6141600677204 -2.8357438433413646, -62.5436711936887 -3.1976893136653506, -62.494713937646395 -3.4490744763228696 C-62.41619922779936 -3.7484850934601055, -62.337684517952326 -4.047895710597341, -62.242683020896365 -4.410177592780995 C-62.169230885299584 -4.631403722189988, -62.09577874970281 -4.852629851598983, -61.929591840599414 -5.353158343530257 C-61.81341368977582 -5.640120622216276, -61.69723553895223 -5.927082900902295, -61.55672695557322 -6.274141818397103 C-61.401343186113316 -6.596799540360659, -61.245959416653406 -6.919457262324215, -61.12562054760963 -7.169343498732942 C-60.943205063545534 -7.493240662259494, -60.76078957948143 -7.817137825786045, -60.638044125410985 -8.035084808813142 C-60.49369437844338 -8.256844783489822, -60.34934463147578 -8.478604758166501, -60.09600124508094 -8.86780823189363 C-59.87758021574249 -9.16047251264203, -59.65915918640403 -9.453136793390431, -59.501719277082586 -9.664091928810368 C-59.26600371822616 -9.940976836838386, -59.03028815936973 -10.217861744866404, -58.85764025349552 -10.420663799050404 C-58.627402262746315 -10.65840342738954, -58.39716427199711 -10.896143055728675, -58.16641083318217 -11.134414926514768 C-57.8796656605631 -11.394829305425894, -57.59292048794402 -11.65524368433702, -57.43087142609886 -11.802412354721573 C-57.164366935667665 -12.014942593858112, -56.89786244523648 -12.227472832994652, -56.654044521441975 -12.421911138953323 C-56.39708786481009 -12.601152979145342, -56.140131208178204 -12.780394819337362, -55.83912226759164 -12.990365625823523 C-55.54403625526448 -13.169248500614142, -55.24895024293732 -13.348131375404758, -54.989453354889164 -13.505439913912534 C-54.70701355019095 -13.652788579112261, -54.424573745492744 -13.80013724431199, -54.10852925515028 -13.965017452487494 C-53.855576032781926 -14.076992340439226, -53.60262281041357 -14.188967228390958, -53.19996987445843 -14.367209738863334 C-52.96954269962283 -14.452009069248291, -52.73911552478723 -14.536808399633246, -52.26750867819426 -14.71036407866536 C-52.04881978206964 -14.775269795113708, -51.83013088594502 -14.840175511562054, -51.314977349425504 -14.993070377104951 C-50.97715092325328 -15.070177054355309, -50.63932449708105 -15.147283731605665, -50.346290043699405 -15.214166933361511 C-49.973790439934575 -15.27438978052064, -49.60129083616974 -15.334612627679766, -49.36542730493798 -15.372745214260314 C-49.07506598585634 -15.400756021501543, -48.7847046667747 -15.428766828742772, -48.37641970852918 -15.468153587630214 C-48.057893854125425 -15.478368091807978, -47.73936799972167 -15.488582595985742, -47.38333129882813 -15.5 C-47.38333129882813 -15.5, -47.383331298828125 -15.5, -47.383331298828125 -15.5" stroke="none" stroke-width="0" fill="#141a26" style="fill:#141a26 !important;stroke:#6b7688 !important;stroke-width:1.5px !important"></path><path d="M-47.383331298828125 -15.5 C-11.170107936201575 -15.5, 25.043115426424976 -15.5, 47.383331298828125 -15.5 M-47.383331298828125 -15.5 C-15.211617784067393 -15.5, 16.96009573069334 -15.5, 47.383331298828125 -15.5 M47.383331298828125 -15.5 C47.383331298828125 -15.5, 47.383331298828125 -15.5, 47.383331298828125 -15.5 M47.383331298828125 -15.5 C47.383331298828125 -15.5, 47.383331298828125 -15.5, 47.383331298828125 -15.5 M47.383331298828125 -15.5 C47.653993117593906 -15.491320402283453, 47.92465493635968 -15.482640804566904, 48.37641970852918 -15.468153587630214 M47.383331298828125 -15.5 C47.74274356968273 -15.488474348027239, 48.10215584053734 -15.476948696054478, 48.37641970852918 -15.468153587630214 M48.37641970852918 -15.468153587630214 C48.625580061502276 -15.444117388038064, 48.874740414475376 -15.420081188445916, 49.36542730493797 -15.372745214260316 M48.37641970852918 -15.468153587630214 C48.60745144581179 -15.445866233790875, 48.838483183094404 -15.423578879951538, 49.36542730493797 -15.372745214260316 M49.36542730493797 -15.372745214260316 C49.690469919535566 -15.3201948450753, 50.015512534133165 -15.267644475890283, 50.34629004369939 -15.214166933361513 M49.36542730493797 -15.372745214260316 C49.74498016984946 -15.311382050537853, 50.12453303476096 -15.25001888681539, 50.34629004369939 -15.214166933361513 M50.34629004369939 -15.214166933361513 C50.71081487253181 -15.130966519927327, 51.075339701364236 -15.047766106493139, 51.31497734942548 -14.993070377104956 M50.34629004369939 -15.214166933361513 C50.70504207658763 -15.132284122930573, 51.063794109475865 -15.050401312499632, 51.31497734942548 -14.993070377104956 M51.31497734942548 -14.993070377104956 C51.5795200188693 -14.91455550142684, 51.84406268831312 -14.836040625748723, 52.26750867819425 -14.710364078665364 M51.31497734942548 -14.993070377104956 C51.56758205230727 -14.918098627238784, 51.82018675518907 -14.843126877372612, 52.26750867819425 -14.710364078665364 M52.26750867819425 -14.710364078665364 C52.52426369085616 -14.615875860588462, 52.78101870351807 -14.521387642511558, 53.199969874458425 -14.367209738863338 M52.26750867819425 -14.710364078665364 C52.532282797959425 -14.612924755046645, 52.7970569177246 -14.515485431427928, 53.199969874458425 -14.367209738863338 M53.199969874458425 -14.367209738863338 C53.525072297305194 -14.223296540089802, 53.85017472015196 -14.079383341316264, 54.10852925515027 -13.965017452487496 M53.199969874458425 -14.367209738863338 C53.53873325762939 -14.217249238192268, 53.87749664080036 -14.0672887375212, 54.10852925515027 -13.965017452487496 M54.10852925515027 -13.965017452487496 C54.38627141737686 -13.820119544356231, 54.66401357960345 -13.675221636224967, 54.98945335488916 -13.505439913912538 M54.10852925515027 -13.965017452487496 C54.32216787623788 -13.853562320708162, 54.53580649732548 -13.742107188928827, 54.98945335488916 -13.505439913912538 M54.98945335488916 -13.505439913912538 C55.28253023986493 -13.327774983929272, 55.57560712484071 -13.150110053946008, 55.83912226759163 -12.99036562582353 M54.98945335488916 -13.505439913912538 C55.325978663069364 -13.301436294451472, 55.66250397124956 -13.097432674990404, 55.83912226759163 -12.99036562582353 M55.83912226759163 -12.99036562582353 C56.12503214971096 -12.7909272688964, 56.4109420318303 -12.591488911969268, 56.654044521441975 -12.421911138953327 M55.83912226759163 -12.99036562582353 C56.029769044358666 -12.857378687316796, 56.220415821125705 -12.724391748810062, 56.654044521441975 -12.421911138953327 M56.654044521441975 -12.421911138953327 C56.917781777508324 -12.21158769558355, 57.18151903357467 -12.00126425221377, 57.43087142609884 -11.802412354721586 M56.654044521441975 -12.421911138953327 C56.82004708151091 -12.289528514812002, 56.98604964157984 -12.157145890670675, 57.43087142609884 -11.802412354721586 M57.43087142609884 -11.802412354721586 C57.72112745227245 -11.538809511504327, 58.011383478446064 -11.275206668287069, 58.16641083318216 -11.134414926514777 M57.43087142609884 -11.802412354721586 C57.70059261855161 -11.557458704167669, 57.97031381100438 -11.31250505361375, 58.16641083318216 -11.134414926514777 M58.16641083318216 -11.134414926514777 C58.371111516551494 -10.923044664697288, 58.57581219992082 -10.7116744028798, 58.85764025349552 -10.420663799050413 M58.16641083318216 -11.134414926514777 C58.38675473148976 -10.906891760941694, 58.60709862979736 -10.67936859536861, 58.85764025349552 -10.420663799050413 M58.85764025349552 -10.420663799050413 C59.012318744096184 -10.238969642535418, 59.16699723469685 -10.057275486020423, 59.501719277082586 -9.66409192881037 M58.85764025349552 -10.420663799050413 C59.04043660318132 -10.205940805302513, 59.22323295286712 -9.991217811554613, 59.501719277082586 -9.66409192881037 M59.501719277082586 -9.66409192881037 C59.73025664270213 -9.357872679062503, 59.958794008321675 -9.051653429314637, 60.09600124508094 -8.867808231893633 M59.501719277082586 -9.66409192881037 C59.62925433683879 -9.49320656742002, 59.756789396594996 -9.32232120602967, 60.09600124508094 -8.867808231893633 M60.09600124508094 -8.867808231893633 C60.25265953715886 -8.627139026620352, 60.40931782923679 -8.38646982134707, 60.638044125410985 -8.03508480881314 M60.09600124508094 -8.867808231893633 C60.21965613352999 -8.677841117249075, 60.34331102197903 -8.487874002604517, 60.638044125410985 -8.03508480881314 M60.638044125410985 -8.03508480881314 C60.776771306163425 -7.788760651736854, 60.91549848691587 -7.542436494660568, 61.12562054760963 -7.169343498732946 M60.638044125410985 -8.03508480881314 C60.75976786320499 -7.818951986494859, 60.881491600999 -7.602819164176578, 61.12562054760963 -7.169343498732946 M61.12562054760963 -7.169343498732946 C61.28083407611014 -6.847039285764145, 61.43604760461065 -6.524735072795345, 61.55672695557322 -6.274141818397108 M61.12562054760963 -7.169343498732946 C61.27462506453933 -6.859932431142494, 61.42362958146904 -6.550521363552042, 61.55672695557322 -6.274141818397108 M61.55672695557322 -6.274141818397108 C61.69785423557475 -5.925554708282969, 61.83898151557629 -5.576967598168832, 61.92959184059941 -5.353158343530276 M61.55672695557322 -6.274141818397108 C61.68986088365215 -5.945298442072749, 61.822994811731085 -5.61645506574839, 61.92959184059941 -5.353158343530276 M61.92959184059941 -5.353158343530276 C62.048883287883584 -4.993871510821322, 62.16817473516777 -4.634584678112368, 62.242683020896365 -4.410177592781007 M61.92959184059941 -5.353158343530276 C62.04216078068558 -5.0141186314156485, 62.154729720771755 -4.67507891930102, 62.242683020896365 -4.410177592781007 M62.242683020896365 -4.410177592781007 C62.30522716976399 -4.171669646343177, 62.36777131863161 -3.9331616999053467, 62.494713937646395 -3.449074476322875 M62.242683020896365 -4.410177592781007 C62.32864624320616 -4.082362569417552, 62.41460946551595 -3.7545475460540967, 62.494713937646395 -3.449074476322875 M62.494713937646395 -3.449074476322875 C62.55491007902395 -3.1399800128081052, 62.61510622040151 -2.8308855492933356, 62.6846489417521 -2.4737983730173836 M62.494713937646395 -3.449074476322875 C62.55843727895656 -3.121868586628138, 62.62216062026672 -2.7946626969334014, 62.6846489417521 -2.4737983730173836 M62.6846489417521 -2.4737983730173836 C62.72364678354075 -2.1713388130995197, 62.7626446253294 -1.8688792531816558, 62.8117075495407 -1.48835690156907 M62.6846489417521 -2.4737983730173836 C62.71265832565847 -2.2565631225181035, 62.740667709564825 -2.0393278720188235, 62.8117075495407 -1.48835690156907 M62.8117075495407 -1.48835690156907 C62.828622484475375 -1.2248931364717932, 62.84553741941004 -0.9614293713745162, 62.87536764993879 -0.49679945236065504 M62.8117075495407 -1.48835690156907 C62.831247777509205 -1.1840020783714085, 62.85078800547772 -0.8796472551737466, 62.87536764993879 -0.49679945236065504 M62.87536764993879 -0.49679945236065504 C62.87536764993879 -0.2576545819300175, 62.87536764993879 -0.018509711499379966, 62.87536764993879 0.4967994523606513 M62.87536764993879 -0.49679945236065504 C62.87536764993879 -0.23787990379969742, 62.87536764993879 0.02103964476126019, 62.87536764993879 0.4967994523606513 M62.87536764993879 0.4967994523606513 C62.85768805777545 0.7721733710145883, 62.84000846561211 1.0475472896685252, 62.8117075495407 1.4883569015690596 M62.87536764993879 0.4967994523606513 C62.852696341576156 0.8499233800593504, 62.83002503321353 1.2030473077580495, 62.8117075495407 1.4883569015690596 M62.8117075495407 1.4883569015690596 C62.770505252086565 1.807913784309423, 62.72930295463243 2.1274706670497867, 62.6846489417521 2.473798373017373 M62.8117075495407 1.4883569015690596 C62.766307110933965 1.8404737380722602, 62.720906672327224 2.192590574575461, 62.6846489417521 2.473798373017373 M62.6846489417521 2.473798373017373 C62.61642498673588 2.82411396288768, 62.54820103171966 3.1744295527579873, 62.494713937646395 3.4490744763228713 M62.6846489417521 2.473798373017373 C62.64494039580923 2.6776933640298726, 62.60523184986636 2.881588355042372, 62.494713937646395 3.4490744763228713 M62.494713937646395 3.4490744763228713 C62.421126613621496 3.7296948357777833, 62.3475392895966 4.010315195232695, 62.242683020896365 4.410177592780997 M62.494713937646395 3.4490744763228713 C62.435103099248714 3.676396438634013, 62.37549226085103 3.9037184009451544, 62.242683020896365 4.410177592780997 M62.242683020896365 4.410177592780997 C62.122319268366695 4.772694038040741, 62.001955515837025 5.135210483300486, 61.929591840599414 5.353158343530265 M62.242683020896365 4.410177592780997 C62.15316210800418 4.6798003191917665, 62.063641195112 4.949423045602536, 61.929591840599414 5.353158343530265 M61.929591840599414 5.353158343530265 C61.843914562609974 5.564782876621657, 61.75823728462054 5.776407409713049, 61.55672695557322 6.274141818397103 M61.929591840599414 5.353158343530265 C61.83724383950222 5.581259691667476, 61.74489583840502 5.809361039804687, 61.55672695557322 6.274141818397103 M61.55672695557322 6.274141818397103 C61.46559733166789 6.46337443229811, 61.37446770776256 6.652607046199117, 61.12562054760963 7.169343498732943 M61.55672695557322 6.274141818397103 C61.4305364627412 6.5361790768068, 61.30434596990918 6.798216335216496, 61.12562054760963 7.169343498732943 M61.12562054760963 7.169343498732943 C61.02745728603366 7.343642309769178, 60.92929402445769 7.517941120805414, 60.63804412541099 8.035084808813137 M61.12562054760963 7.169343498732943 C60.97553708771928 7.43583187936654, 60.825453627828935 7.702320260000137, 60.63804412541099 8.035084808813137 M60.63804412541099 8.035084808813137 C60.51892016273481 8.218091204746658, 60.39979620005862 8.401097600680178, 60.09600124508094 8.867808231893624 M60.63804412541099 8.035084808813137 C60.42945891210203 8.355527709428031, 60.22087369879306 8.675970610042926, 60.09600124508094 8.867808231893624 M60.09600124508094 8.867808231893624 C59.953605076855496 9.058606124757924, 59.81120890863005 9.249404017622224, 59.501719277082586 9.664091928810368 M60.09600124508094 8.867808231893624 C59.97262766336724 9.033117591825471, 59.84925408165354 9.198426951757318, 59.501719277082586 9.664091928810368 M59.501719277082586 9.664091928810368 C59.25554238788424 9.953265310724563, 59.0093654986859 10.242438692638755, 58.85764025349552 10.420663799050406 M59.501719277082586 9.664091928810368 C59.26494688564227 9.942218252526901, 59.028174494201956 10.220344576243436, 58.85764025349552 10.420663799050406 M58.85764025349552 10.420663799050406 C58.58327706950934 10.703966312152458, 58.30891388552317 10.98726882525451, 58.16641083318217 11.134414926514774 M58.85764025349552 10.420663799050406 C58.713363276659834 10.56964162299334, 58.56908629982416 10.718619446936275, 58.16641083318217 11.134414926514774 M58.16641083318217 11.134414926514774 C57.88528071301932 11.389729863351299, 57.60415059285647 11.645044800187824, 57.430871426098854 11.802412354721575 M58.16641083318217 11.134414926514774 C57.8738375573486 11.40012223456214, 57.58126428151503 11.665829542609508, 57.430871426098854 11.802412354721575 M57.430871426098854 11.802412354721575 C57.26199856315674 11.937083969022297, 57.09312570021462 12.07175558332302, 56.654044521441975 12.421911138953325 M57.430871426098854 11.802412354721575 C57.27163673425776 11.929397784051737, 57.11240204241667 12.056383213381897, 56.654044521441975 12.421911138953325 M56.654044521441975 12.421911138953325 C56.40171079399525 12.597928223869154, 56.14937706654852 12.773945308784985, 55.839122267591634 12.990365625823525 M56.654044521441975 12.421911138953325 C56.419963996073534 12.585195580267726, 56.18588347070509 12.748480021582125, 55.839122267591634 12.990365625823525 M55.839122267591634 12.990365625823525 C55.57376721053875 13.151225420808395, 55.308412153485854 13.312085215793264, 54.989453354889164 13.505439913912536 M55.839122267591634 12.990365625823525 C55.5946754698196 13.13855071116177, 55.350228672047564 13.286735796500015, 54.989453354889164 13.505439913912536 M54.989453354889164 13.505439913912536 C54.71135434315569 13.65052399020297, 54.43325533142222 13.795608066493406, 54.10852925515028 13.965017452487494 M54.989453354889164 13.505439913912536 C54.76502770230755 13.62252263311287, 54.54060204972594 13.739605352313207, 54.10852925515028 13.965017452487494 M54.10852925515028 13.965017452487494 C53.805857862232905 14.09900109970415, 53.50318646931553 14.232984746920804, 53.19996987445843 14.367209738863336 M54.10852925515028 13.965017452487494 C53.9160274029911 14.050232312073812, 53.72352555083191 14.135447171660129, 53.19996987445843 14.367209738863336 M53.19996987445843 14.367209738863336 C53.00838162010748 14.437715987486897, 52.81679336575652 14.508222236110457, 52.267508678194254 14.71036407866536 M53.19996987445843 14.367209738863336 C52.90931184571306 14.474174580254997, 52.61865381696769 14.581139421646657, 52.267508678194254 14.71036407866536 M52.267508678194254 14.71036407866536 C51.956521567391015 14.802663420747107, 51.645534456587775 14.894962762828854, 51.314977349425504 14.993070377104953 M52.267508678194254 14.71036407866536 C52.04025830008132 14.777810798027703, 51.81300792196839 14.845257517390046, 51.314977349425504 14.993070377104953 M51.314977349425504 14.993070377104953 C51.06273120703411 15.050643913045876, 50.81048506464273 15.1082174489868, 50.3462900436994 15.214166933361513 M51.314977349425504 14.993070377104953 C50.93106472991342 15.080695927244614, 50.54715211040135 15.168321477384275, 50.3462900436994 15.214166933361513 M50.3462900436994 15.214166933361513 C50.08506190965725 15.256400272219013, 49.82383377561509 15.298633611076513, 49.365427304937974 15.372745214260314 M50.3462900436994 15.214166933361513 C50.03676287430673 15.26420888568987, 49.72723570491407 15.314250838018227, 49.365427304937974 15.372745214260314 M49.365427304937974 15.372745214260314 C49.15615842258478 15.392933131658275, 48.94688954023158 15.413121049056233, 48.37641970852918 15.468153587630214 M49.365427304937974 15.372745214260314 C49.167155207559674 15.391872285037314, 48.96888311018138 15.410999355814315, 48.37641970852918 15.468153587630214 M48.37641970852918 15.468153587630214 C47.97983193179344 15.48087138571885, 47.5832441550577 15.493589183807487, 47.383331298828125 15.5 M48.37641970852918 15.468153587630214 C48.09723907146274 15.47710636726879, 47.81805843439629 15.486059146907365, 47.383331298828125 15.5 M47.383331298828125 15.5 C47.383331298828125 15.5, 47.383331298828125 15.5, 47.383331298828125 15.5 M47.383331298828125 15.5 C47.383331298828125 15.5, 47.383331298828125 15.5, 47.383331298828125 15.5 M47.383331298828125 15.5 C20.933096295311646 15.5, -5.517138708204833 15.5, -47.383331298828125 15.5 M47.383331298828125 15.5 C20.770442891364777 15.5, -5.8424455160985715 15.5, -47.383331298828125 15.5 M-47.383331298828125 15.5 C-47.59981750908626 15.493057708601867, -47.8163037193444 15.486115417203735, -48.37641970852917 15.468153587630214 M-47.383331298828125 15.5 C-47.734367371067734 15.48874295641354, -48.08540344330734 15.477485912827081, -48.37641970852917 15.468153587630214 M-48.37641970852917 15.468153587630214 C-48.75571652358097 15.431563280053327, -49.13501333863278 15.39497297247644, -49.365427304937974 15.372745214260314 M-48.37641970852917 15.468153587630214 C-48.607480503980284 15.445863430584309, -48.83854129943139 15.423573273538404, -49.365427304937974 15.372745214260314 M-49.365427304937974 15.372745214260314 C-49.6506844681148 15.326627048320226, -49.93594163129162 15.280508882380136, -50.3462900436994 15.214166933361513 M-49.365427304937974 15.372745214260314 C-49.68147803652989 15.321648582986564, -49.99752876812181 15.270551951712811, -50.3462900436994 15.214166933361513 M-50.3462900436994 15.214166933361513 C-50.645953015798796 15.145770815463468, -50.94561598789819 15.077374697565423, -51.31497734942548 14.993070377104956 M-50.3462900436994 15.214166933361513 C-50.59612101374884 15.157144644747166, -50.84595198379829 15.10012235613282, -51.31497734942548 14.993070377104956 M-51.31497734942548 14.993070377104956 C-51.5961674043587 14.909614644797497, -51.877357459291915 14.826158912490037, -52.26750867819424 14.710364078665368 M-51.31497734942548 14.993070377104956 C-51.61892514979713 14.902860265409215, -51.922872950168774 14.812650153713472, -52.26750867819424 14.710364078665368 M-52.26750867819424 14.710364078665368 C-52.6231125317683 14.579498573384125, -52.97871638534236 14.448633068102883, -53.199969874458425 14.367209738863338 M-52.26750867819424 14.710364078665368 C-52.46732936306957 14.636828219509084, -52.667150047944894 14.5632923603528, -53.199969874458425 14.367209738863338 M-53.199969874458425 14.367209738863338 C-53.55334512113627 14.210780999663307, -53.9067203678141 14.054352260463276, -54.10852925515027 13.965017452487498 M-53.199969874458425 14.367209738863338 C-53.39719064187821 14.2799059554728, -53.594411409298 14.192602172082266, -54.10852925515027 13.965017452487498 M-54.10852925515027 13.965017452487498 C-54.38194905999496 13.82237451543377, -54.655368864839645 13.679731578380041, -54.98945335488916 13.505439913912538 M-54.10852925515027 13.965017452487498 C-54.3489285353828 13.839601301973278, -54.58932781561532 13.714185151459057, -54.98945335488916 13.505439913912538 M-54.98945335488916 13.505439913912538 C-55.276863266522625 13.33121033647221, -55.5642731781561 13.156980759031883, -55.83912226759162 12.990365625823536 M-54.98945335488916 13.505439913912538 C-55.30199884592624 13.31597300052468, -55.61454433696332 13.126506087136823, -55.83912226759162 12.990365625823536 M-55.83912226759162 12.990365625823536 C-56.052232410244805 12.841709215698064, -56.26534255289799 12.693052805572592, -56.654044521441975 12.421911138953329 M-55.83912226759162 12.990365625823536 C-56.034677542318086 12.853954731625757, -56.23023281704455 12.717543837427979, -56.654044521441975 12.421911138953329 M-56.654044521441975 12.421911138953329 C-56.89986478329313 12.225876021678923, -57.14568504514429 12.02984090440452, -57.43087142609884 11.802412354721588 M-56.654044521441975 12.421911138953329 C-56.88826817590688 12.23512400747078, -57.12249183037178 12.048336875988232, -57.43087142609884 11.802412354721588 M-57.43087142609884 11.802412354721588 C-57.68024624541796 11.575936741912116, -57.929621064737084 11.349461129102643, -58.166410833182155 11.134414926514783 M-57.43087142609884 11.802412354721588 C-57.61786918394746 11.632585938733019, -57.80486694179608 11.462759522744449, -58.166410833182155 11.134414926514783 M-58.166410833182155 11.134414926514783 C-58.32492065680334 10.970740519727364, -58.48343048042453 10.807066112939946, -58.85764025349552 10.420663799050411 M-58.166410833182155 11.134414926514783 C-58.30793889321405 10.988275584862029, -58.449466953245945 10.842136243209275, -58.85764025349552 10.420663799050411 M-58.85764025349552 10.420663799050411 C-59.05234101791504 10.191957202375894, -59.24704178233456 9.963250605701377, -59.501719277082586 9.664091928810372 M-58.85764025349552 10.420663799050411 C-59.07555996255584 10.164682908805426, -59.293479671616176 9.908702018560444, -59.501719277082586 9.664091928810372 M-59.501719277082586 9.664091928810372 C-59.69966781760013 9.398858917999894, -59.897616358117666 9.133625907189415, -60.09600124508094 8.867808231893635 M-59.501719277082586 9.664091928810372 C-59.71360090960132 9.380189844049088, -59.92548254212006 9.096287759287804, -60.09600124508094 8.867808231893635 M-60.09600124508094 8.867808231893635 C-60.223567244384135 8.671832600696781, -60.351133243687336 8.47585696949993, -60.638044125410985 8.03508480881315 M-60.09600124508094 8.867808231893635 C-60.261228864796074 8.613974238182939, -60.4264564845112 8.360140244472243, -60.638044125410985 8.03508480881315 M-60.638044125410985 8.03508480881315 C-60.7420105521453 7.850481890404074, -60.84597697887962 7.665878971995, -61.12562054760963 7.169343498732948 M-60.638044125410985 8.03508480881315 C-60.81881288281719 7.714111575216838, -60.9995816402234 7.393138341620526, -61.12562054760963 7.169343498732948 M-61.12562054760963 7.169343498732948 C-61.2619199999693 6.886314769566995, -61.39821945232897 6.603286040401041, -61.55672695557322 6.274141818397109 M-61.12562054760963 7.169343498732948 C-61.238817203162064 6.934288221457889, -61.3520138587145 6.69923294418283, -61.55672695557322 6.274141818397109 M-61.55672695557322 6.274141818397109 C-61.67058099076679 5.992920150250964, -61.78443502596036 5.71169848210482, -61.92959184059941 5.353158343530278 M-61.55672695557322 6.274141818397109 C-61.65021532078752 6.043223748843215, -61.74370368600181 5.812305679289322, -61.92959184059941 5.353158343530278 M-61.92959184059941 5.353158343530278 C-62.04447232530912 5.0071566273041554, -62.159352810018845 4.661154911078033, -62.242683020896365 4.410177592781003 M-61.92959184059941 5.353158343530278 C-62.00805877479214 5.116828439749918, -62.08652570898488 4.880498535969559, -62.242683020896365 4.410177592781003 M-62.242683020896365 4.410177592781003 C-62.3427801376141 4.028463904371477, -62.44287725433183 3.6467502159619505, -62.49471393764639 3.449074476322877 M-62.242683020896365 4.410177592781003 C-62.30661645349246 4.166371705367119, -62.37054988608856 3.922565817953235, -62.49471393764639 3.449074476322877 M-62.49471393764639 3.449074476322877 C-62.56411131918166 3.0927335892810266, -62.63350870071694 2.736392702239176, -62.6846489417521 2.4737983730173854 M-62.49471393764639 3.449074476322877 C-62.54275526634458 3.202392406996084, -62.59079659504277 2.955710337669291, -62.6846489417521 2.4737983730173854 M-62.6846489417521 2.4737983730173854 C-62.73380954748723 2.092518422795335, -62.782970153222365 1.7112384725732848, -62.8117075495407 1.488356901569079 M-62.6846489417521 2.4737983730173854 C-62.71299959908674 2.253916273200421, -62.741350256421384 2.034034173383457, -62.8117075495407 1.488356901569079 M-62.8117075495407 1.488356901569079 C-62.826579925037436 1.2567076484419735, -62.84145230053417 1.025058395314868, -62.87536764993879 0.496799452360657 M-62.8117075495407 1.488356901569079 C-62.82823003236739 1.2310058948353426, -62.844752515194074 0.9736548881016062, -62.87536764993879 0.496799452360657 M-62.87536764993879 0.496799452360657 C-62.87536764993879 0.14309154261342372, -62.87536764993879 -0.21061636713380955, -62.87536764993879 -0.4967994523606495 M-62.87536764993879 0.496799452360657 C-62.87536764993879 0.17861491612378588, -62.87536764993879 -0.1395696201130852, -62.87536764993879 -0.4967994523606495 M-62.87536764993879 -0.4967994523606495 C-62.85542222958157 -0.8074654740778202, -62.83547680922436 -1.1181314957949908, -62.8117075495407 -1.4883569015690576 M-62.87536764993879 -0.4967994523606495 C-62.86046102989679 -0.7289820919218771, -62.84555440985479 -0.9611647314831047, -62.8117075495407 -1.4883569015690576 M-62.8117075495407 -1.4883569015690576 C-62.76093593731328 -1.8821315000160863, -62.710164325085856 -2.275906098463115, -62.6846489417521 -2.4737983730173783 M-62.8117075495407 -1.4883569015690576 C-62.77215111083183 -1.7951488288926996, -62.732594672122964 -2.101940756216342, -62.6846489417521 -2.4737983730173783 M-62.6846489417521 -2.4737983730173783 C-62.620561854890425 -2.8028720192414736, -62.55647476802876 -3.131945665465569, -62.494713937646395 -3.4490744763228696 M-62.6846489417521 -2.4737983730173783 C-62.643111495482565 -2.687084380669091, -62.60157404921302 -2.900370388320804, -62.494713937646395 -3.4490744763228696 M-62.494713937646395 -3.4490744763228696 C-62.396307380834045 -3.8243413271198743, -62.29790082402169 -4.199608177916879, -62.242683020896365 -4.410177592780995 M-62.494713937646395 -3.4490744763228696 C-62.42969071255954 -3.697036214823048, -62.364667487472694 -3.944997953323227, -62.242683020896365 -4.410177592780995 M-62.242683020896365 -4.410177592780995 C-62.15357863608496 -4.6785458029772045, -62.06447425127355 -4.946914013173415, -61.929591840599414 -5.353158343530257 M-62.242683020896365 -4.410177592780995 C-62.13508829509863 -4.734235763992252, -62.02749356930091 -5.058293935203509, -61.929591840599414 -5.353158343530257 M-61.929591840599414 -5.353158343530257 C-61.80326467164897 -5.665188893207527, -61.676937502698514 -5.977219442884797, -61.55672695557322 -6.274141818397103 M-61.929591840599414 -5.353158343530257 C-61.79436654153499 -5.687167446622679, -61.659141242470575 -6.021176549715101, -61.55672695557322 -6.274141818397103 M-61.55672695557322 -6.274141818397103 C-61.424586618588066 -6.548534055497045, -61.29244628160292 -6.8229262925969865, -61.12562054760963 -7.169343498732942 M-61.55672695557322 -6.274141818397103 C-61.38437065840699 -6.632043357296748, -61.21201436124077 -6.989944896196393, -61.12562054760963 -7.169343498732942 M-61.12562054760963 -7.169343498732942 C-61.01762536551633 -7.3610998802376075, -60.909630183423026 -7.552856261742274, -60.638044125410985 -8.035084808813142 M-61.12562054760963 -7.169343498732942 C-60.98071246682278 -7.426642469704314, -60.83580438603593 -7.683941440675687, -60.638044125410985 -8.035084808813142 M-60.638044125410985 -8.035084808813142 C-60.46222634616054 -8.305188131426096, -60.2864085669101 -8.57529145403905, -60.09600124508094 -8.86780823189363 M-60.638044125410985 -8.035084808813142 C-60.460141309464156 -8.30839130770249, -60.282238493517326 -8.581697806591839, -60.09600124508094 -8.86780823189363 M-60.09600124508094 -8.86780823189363 C-59.865971468856955 -9.176027175890049, -59.63594169263297 -9.484246119886468, -59.501719277082586 -9.664091928810368 M-60.09600124508094 -8.86780823189363 C-59.91641947201118 -9.108431447571025, -59.736837698941414 -9.349054663248419, -59.501719277082586 -9.664091928810368 M-59.501719277082586 -9.664091928810368 C-59.2491881801629 -9.96072932467871, -58.99665708324322 -10.25736672054705, -58.85764025349552 -10.420663799050404 M-59.501719277082586 -9.664091928810368 C-59.25259619050955 -9.956726081804259, -59.00347310393651 -10.24936023479815, -58.85764025349552 -10.420663799050404 M-58.85764025349552 -10.420663799050404 C-58.7178914781488 -10.564965883183726, -58.57814270280208 -10.709267967317047, -58.16641083318217 -11.134414926514768 M-58.85764025349552 -10.420663799050404 C-58.69372558883878 -10.589919147952731, -58.529810924182044 -10.75917449685506, -58.16641083318217 -11.134414926514768 M-58.16641083318217 -11.134414926514768 C-57.90402306403977 -11.37270855604996, -57.64163529489737 -11.61100218558515, -57.43087142609886 -11.802412354721573 M-58.16641083318217 -11.134414926514768 C-58.015692529574636 -11.271293302063345, -57.864974225967096 -11.408171677611922, -57.43087142609886 -11.802412354721573 M-57.43087142609886 -11.802412354721573 C-57.13426406461425 -12.03894883245217, -56.837656703129646 -12.275485310182768, -56.654044521441975 -12.421911138953323 M-57.43087142609886 -11.802412354721573 C-57.229199330318764 -11.963240484386342, -57.02752723453867 -12.12406861405111, -56.654044521441975 -12.421911138953323 M-56.654044521441975 -12.421911138953323 C-56.38476489927946 -12.60974894644693, -56.11548527711694 -12.797586753940536, -55.83912226759164 -12.990365625823523 M-56.654044521441975 -12.421911138953323 C-56.40861310983738 -12.593113467134119, -56.16318169823279 -12.764315795314914, -55.83912226759164 -12.990365625823523 M-55.83912226759164 -12.990365625823523 C-55.53484000395121 -13.174823322203416, -55.23055774031078 -13.35928101858331, -54.989453354889164 -13.505439913912534 M-55.83912226759164 -12.990365625823523 C-55.56725127940138 -13.155175416555725, -55.29538029121113 -13.319985207287926, -54.989453354889164 -13.505439913912534 M-54.989453354889164 -13.505439913912534 C-54.7605581540362 -13.624854393583153, -54.531662953183236 -13.744268873253771, -54.10852925515028 -13.965017452487494 M-54.989453354889164 -13.505439913912534 C-54.66246340528298 -13.676030361175025, -54.335473455676784 -13.846620808437516, -54.10852925515028 -13.965017452487494 M-54.10852925515028 -13.965017452487494 C-53.800042210811206 -14.101575516073364, -53.49155516647214 -14.238133579659234, -53.19996987445843 -14.367209738863334 M-54.10852925515028 -13.965017452487494 C-53.90238797277486 -14.056270083231217, -53.696246690399434 -14.14752271397494, -53.19996987445843 -14.367209738863334 M-53.19996987445843 -14.367209738863334 C-52.86409932276031 -14.49081320664159, -52.52822877106218 -14.614416674419845, -52.26750867819426 -14.71036407866536 M-53.19996987445843 -14.367209738863334 C-52.85762071545411 -14.493197394017859, -52.51527155644979 -14.619185049172385, -52.26750867819426 -14.71036407866536 M-52.26750867819426 -14.71036407866536 C-52.0644321816494 -14.770636116869591, -51.86135568510455 -14.830908155073821, -51.314977349425504 -14.993070377104951 M-52.26750867819426 -14.71036407866536 C-51.88660365357846 -14.823414690560055, -51.505698628962655 -14.93646530245475, -51.314977349425504 -14.993070377104951 M-51.314977349425504 -14.993070377104951 C-51.002257951096894 -15.06444653908867, -50.68953855276828 -15.13582270107239, -50.346290043699405 -15.214166933361511 M-51.314977349425504 -14.993070377104951 C-50.97273823992496 -15.071184220529547, -50.63049913042442 -15.149298063954143, -50.346290043699405 -15.214166933361511 M-50.346290043699405 -15.214166933361511 C-49.964955934481566 -15.275818074849667, -49.58362182526373 -15.337469216337825, -49.36542730493798 -15.372745214260314 M-50.346290043699405 -15.214166933361511 C-49.97215970806334 -15.274653424603066, -49.59802937242727 -15.33513991584462, -49.36542730493798 -15.372745214260314 M-49.36542730493798 -15.372745214260314 C-49.02889642770909 -15.405209943248991, -48.692365550480204 -15.437674672237666, -48.37641970852918 -15.468153587630214 M-49.36542730493798 -15.372745214260314 C-48.999249499405096 -15.40806994676683, -48.63307169387222 -15.443394679273343, -48.37641970852918 -15.468153587630214 M-48.37641970852918 -15.468153587630214 C-48.11386344580437 -15.476573255941036, -47.85130718307957 -15.484992924251857, -47.38333129882813 -15.5 M-48.37641970852918 -15.468153587630214 C-48.011524500214726 -15.479855066735421, -47.646629291900275 -15.49155654584063, -47.38333129882813 -15.5 M-47.38333129882813 -15.5 C-47.38333129882813 -15.5, -47.383331298828125 -15.5, -47.383331298828125 -15.5 M-47.38333129882813 -15.5 C-47.38333129882813 -15.5, -47.383331298828125 -15.5, -47.383331298828125 -15.5" stroke="#6b7688" stroke-width="1.5" fill="none" stroke-dasharray="0 0" style="fill:#141a26 !important;stroke:#6b7688 !important;stroke-width:1.5px !important"></path></g><g class="label" style="color:#c7d0de !important" transform="translate(-54.008331298828125, -10.5)"><rect></rect><foreignObject width="108.01666259765625" height="21"><div style="color: rgb(199, 208, 222) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#c7d0de !important" class="nodeLabel"><p>real environment</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="claude-mermaid-0-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs><defs><filter id="claude-mermaid-0-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs><linearGradient id="claude-mermaid-0-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="#7a6c52" stop-opacity="1"></stop><stop offset="100%" stop-color="hsl(-78.75, 2.1052631579%, 82.5490196078%)" stop-opacity="1"></stop></linearGradient></svg></div><pre class="mermaid" data-claude-mermaid-claimed="1" style="display: none;">%%{init:{'theme':'base','themeVariables':{'fontFamily':'ui-monospace, monospace','fontSize':'14px','lineColor':'#8b97ac','edgeLabelBackground':'#0f1420','tertiaryTextColor':'#c7d0de'},'flowchart':{'curve':'basis','nodeSpacing':46,'rankSpacing':60,'padding':10}}}%%
flowchart LR
  o["obs oₜ<br>64×64 frame"]
  subgraph WM["world model · runs with no environment (the dream)"]
    direction LR
    V["V · VAE encoder<br>compress → zₜ ∈ ℝ³²"]
    M["M · MDN-RNN<br>predict P(zₜ₊₁ | zₜ, aₜ, hₜ)"]
    V --&gt;|"zₜ"| M
  end
  o --&gt; V
  M --&gt;|"zₜ, hₜ"| C["C · controller<br>1 linear layer · ~900 params"]
  C --&gt;|"aₜ"| E(["real environment"])
  E --&gt;|"next frame"| o
  classDef ha fill:#2a2214,stroke:#eaa63f,stroke-width:2px,color:#f3e7d4;
  classDef ctl fill:#1b2130,stroke:#cfd6e2,stroke-width:2px,color:#eef2f8;
  classDef io fill:#141a26,stroke:#6b7688,stroke-width:1.5px,color:#c7d0de;
  class V,M ha; class C ctl; class o,E io;
  style WM fill:transparent,stroke:#eaa63f,stroke-width:1px,stroke-dasharray:5 5,color:#c69a52;
      </pre>
      <figcaption><span class="a">V</span> compresses the frame · <span class="a">M</span> predicts the future in latent space · <span class="a">C</span> maps the latent state to an action</figcaption>
      <details><summary><span>mermaid source</span></summary><pre><code>flowchart LR
  o["obs oₜ&lt;br/&gt;64×64 frame"]
  subgraph WM["world model · runs with no environment (the dream)"]
    direction LR
    V["V · VAE encoder&lt;br/&gt;compress → zₜ ∈ ℝ³²"]
    M["M · MDN-RNN&lt;br/&gt;predict P(zₜ₊₁ | zₜ, aₜ, hₜ)"]
    V --&gt;|"zₜ"| M
  end
  o --&gt; V
  M --&gt;|"zₜ, hₜ"| C["C · controller&lt;br/&gt;1 linear layer · ~900 params"]
  C --&gt;|"aₜ"| E(["real environment"])
  E --&gt;|"next frame"| o
  classDef ha fill:#2a2214,stroke:#eaa63f,stroke-width:2px,color:#f3e7d4;
  classDef ctl fill:#1b2130,stroke:#cfd6e2,stroke-width:2px,color:#eef2f8;
  classDef io fill:#141a26,stroke:#6b7688,stroke-width:1.5px,color:#c7d0de;
  class V,M ha; class C ctl; class o,E io;
  style WM fill:transparent,stroke:#eaa63f,stroke-dasharray:5 5,color:#c69a52;</code></pre></details>
    </figure>
<p>After spending an afternoon with Opus a couple of weeks ago, the first discovery was that Ha&rsquo;s world model…just didn&rsquo;t work very well for Deathchase. It did learn a grand plan of surviving…which was to slowly go through the first day, shoot at a few things, and simply sit tight when night falls. Which is a strategy, but one that would have got you slapped if you tried it back in the day round your friend&rsquo;s house. Also, it does have a tendency to hit the trees a lot. But then I have that problem as well.</p>
<p><img src="//snappishproductions.com/images/zx-spectrum/ha_play.gif" alt=""></p>
<p>Despite that, looking at the dream sequences of the VAE model is spooky; you can see exactly what the model is seeing and, yep, well, it&rsquo;s certainly Deathchase.</p>
<p><img src="//snappishproductions.com/images/zx-spectrum/ha_dream.gif" alt=""></p>
<p>Anyhow, I was not to be stopped by that little failure. Because I kept reading these sorts of papers, and I specifically remembered <a href="https://arxiv.org/pdf/2301.04104">DreamerV3</a> from DeepMind. Back in 2023 it pretty much set the new state of the art for autonomously playing Atari games. So Claude, myself, and the DGX Spark worked for a day or two to train a new model based on this new approach.</p>
<p>The DreamerV3 framework is a lot more complicated (see the image, yikes!), but I&rsquo;d say that the too key points are: a CNN model to better capture what&rsquo;s going on versus the older autoencoder, and a training regime that keeps the world model anchored to reality, with joint training focused on reconstructing the frame, optimising the reward, and whether the model has left the game in a playable state. And this works a lot better.</p>
<figure>
      <p class="plate">Fig 2 · the <span class="d">DreamerV3</span> world model, one timestep</p>
      <div class="mermaid-diagram"><svg id="claude-mermaid-1" width="1535.449951171875" xmlns="http://www.w3.org/2000/svg" class="flowchart" height="237" viewBox="0 0 1535.449951171875 237" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#claude-mermaid-1{font-size:13.5px;fill:#42392e;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#claude-mermaid-1 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#claude-mermaid-1 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#claude-mermaid-1 .error-icon{fill:hsl(221.25, 42.1052631579%, 97.5490196078%);}#claude-mermaid-1 .error-text{fill:rgb(8.8815789475, 7.2368421054, 3.6184210527);stroke:rgb(8.8815789475, 7.2368421054, 3.6184210527);}#claude-mermaid-1 .edge-thickness-normal{stroke-width:1px;}#claude-mermaid-1 .edge-thickness-thick{stroke-width:3.5px;}#claude-mermaid-1 .edge-pattern-solid{stroke-dasharray:0;}#claude-mermaid-1 .edge-thickness-invisible{stroke-width:0;fill:none;}#claude-mermaid-1 .edge-pattern-dashed{stroke-dasharray:3;}#claude-mermaid-1 .edge-pattern-dotted{stroke-dasharray:2;}#claude-mermaid-1 .marker{fill:#8b97ac;stroke:#8b97ac;}#claude-mermaid-1 .marker.cross{stroke:#8b97ac;}#claude-mermaid-1 svg{font-size:13.5px;}#claude-mermaid-1 p{margin:0;}#claude-mermaid-1 .label{color:#42392e;}#claude-mermaid-1 .cluster-label text{fill:#42392e;}#claude-mermaid-1 .cluster-label span{color:#42392e;}#claude-mermaid-1 .cluster-label span p{background-color:transparent;}#claude-mermaid-1 .label text,#claude-mermaid-1 span{fill:#42392e;color:#42392e;}#claude-mermaid-1 .node rect,#claude-mermaid-1 .node circle,#claude-mermaid-1 .node ellipse,#claude-mermaid-1 .node polygon,#claude-mermaid-1 .node path{fill:#f4efe4;stroke:#7a6c52;stroke-width:1px;}#claude-mermaid-1 .rough-node .label text,#claude-mermaid-1 .node .label text,#claude-mermaid-1 .image-shape .label,#claude-mermaid-1 .icon-shape .label{text-anchor:middle;}#claude-mermaid-1 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#claude-mermaid-1 .rough-node .label,#claude-mermaid-1 .node .label,#claude-mermaid-1 .image-shape .label,#claude-mermaid-1 .icon-shape .label{text-align:center;}#claude-mermaid-1 .node.clickable{cursor:pointer;}#claude-mermaid-1 .root .anchor path{fill:#8b97ac!important;stroke-width:0;stroke:#8b97ac;}#claude-mermaid-1 .arrowheadPath{fill:#090b11;}#claude-mermaid-1 .edgePath .path{stroke:#8b97ac;stroke-width:1px;}#claude-mermaid-1 .flowchart-link{stroke:#8b97ac;fill:none;}#claude-mermaid-1 .edgeLabel{background-color:#0f1420;text-align:center;}#claude-mermaid-1 .edgeLabel p{background-color:#0f1420;}#claude-mermaid-1 .edgeLabel rect{opacity:0.5;background-color:#0f1420;fill:#0f1420;}#claude-mermaid-1 .labelBkg{background-color:rgba(15, 20, 32, 0.5);}#claude-mermaid-1 .cluster rect{fill:rgba(127,127,127,0.07);stroke:#7a6c52;stroke-width:1px;}#claude-mermaid-1 .cluster text{fill:#42392e;}#claude-mermaid-1 .cluster span{color:#42392e;}#claude-mermaid-1 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-size:12px;background:hsl(221.25, 42.1052631579%, 97.5490196078%);border:1px solid hsl(221.25, 2.1052631579%, 87.5490196078%);border-radius:2px;pointer-events:none;z-index:100;}#claude-mermaid-1 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#42392e;}#claude-mermaid-1 rect.text{fill:none;stroke-width:0;}#claude-mermaid-1 .icon-shape,#claude-mermaid-1 .image-shape{background-color:#0f1420;text-align:center;}#claude-mermaid-1 .icon-shape p,#claude-mermaid-1 .image-shape p{background-color:#0f1420;padding:2px;}#claude-mermaid-1 .icon-shape .label rect,#claude-mermaid-1 .image-shape .label rect{opacity:0.5;background-color:#0f1420;fill:#0f1420;}#claude-mermaid-1 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#claude-mermaid-1 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#claude-mermaid-1 .node .neo-node{stroke:#7a6c52;}#claude-mermaid-1 [data-look="neo"].node rect,#claude-mermaid-1 [data-look="neo"].cluster rect,#claude-mermaid-1 [data-look="neo"].node polygon{stroke:url(#claude-mermaid-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-1 [data-look="neo"].node path{stroke:url(#claude-mermaid-1-gradient);stroke-width:1px;}#claude-mermaid-1 [data-look="neo"].node .outer-path{filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-1 [data-look="neo"].node .neo-line path{stroke:#7a6c52;filter:none;}#claude-mermaid-1 [data-look="neo"].node circle{stroke:url(#claude-mermaid-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-1 [data-look="neo"].node circle .state-start{fill:#000000;}#claude-mermaid-1 [data-look="neo"].icon-shape .icon{fill:url(#claude-mermaid-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-1 [data-look="neo"].icon-shape .icon-neo path{stroke:url(#claude-mermaid-1-gradient);filter:drop-shadow( 1px 2px 2px rgba(185,185,185,1));}#claude-mermaid-1 .node rect,#claude-mermaid-1 .node circle,#claude-mermaid-1 .node polygon,#claude-mermaid-1 .node path,#claude-mermaid-1 .cluster rect{stroke-width:2px;}#claude-mermaid-1 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#claude-mermaid-1 .dr&gt;*{fill:rgb(18, 48, 57)!important;stroke:rgb(67, 192, 208)!important;stroke-width:2px!important;color:rgb(223, 243, 246)!important;}#claude-mermaid-1 .dr span{fill:rgb(18, 48, 57)!important;stroke:rgb(67, 192, 208)!important;stroke-width:2px!important;color:rgb(223, 243, 246)!important;}#claude-mermaid-1 .dr tspan{fill:rgb(223, 243, 246)!important;}#claude-mermaid-1 .prior&gt;*{fill:rgb(18, 48, 57)!important;stroke:rgb(67, 192, 208)!important;stroke-width:2px!important;stroke-dasharray:5px,4px!important;color:rgb(223, 243, 246)!important;}#claude-mermaid-1 .prior span{fill:rgb(18, 48, 57)!important;stroke:rgb(67, 192, 208)!important;stroke-width:2px!important;stroke-dasharray:5px,4px!important;color:rgb(223, 243, 246)!important;}#claude-mermaid-1 .prior tspan{fill:rgb(223, 243, 246)!important;}#claude-mermaid-1 .neut&gt;*{fill:rgb(27, 33, 48)!important;stroke:rgb(139, 151, 172)!important;stroke-width:1.5px!important;color:rgb(233, 237, 246)!important;}#claude-mermaid-1 .neut span{fill:rgb(27, 33, 48)!important;stroke:rgb(139, 151, 172)!important;stroke-width:1.5px!important;color:rgb(233, 237, 246)!important;}#claude-mermaid-1 .neut tspan{fill:rgb(233, 237, 246)!important;}</style><g><marker id="claude-mermaid-1_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></polygon></marker><marker id="claude-mermaid-1_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-1_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-1_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-1_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0px; stroke-dasharray: 1px, 0px;"></circle></marker><marker id="claude-mermaid-1_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2px; stroke-dasharray: 1px, 0px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5px;"></path></marker><marker id="claude-mermaid-1_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5px; stroke-dasharray: 1px, 0px;"></path></marker><g class="root"><g class="clusters"></g><g class="edgePaths"><path d="M126.85,108.5L131.683,108.5C136.517,108.5,146.183,108.5,155.183,108.5C164.183,108.5,172.517,108.5,176.683,108.5L180.85,108.5" id="claude-mermaid-1-L_prev_GRU_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_prev_GRU_0" data-points="W3sieCI6MTI2Ljg1MDAwNjEwMzUxNTYyLCJ5IjoxMDguNX0seyJ4IjoxNTUuODUwMDA2MTAzNTE1NjIsInkiOjEwOC41fSx7IngiOjE4NC44NTAwMDYxMDM1MTU2MiwieSI6MTA4LjV9XQ==" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M356.567,108.5L361.4,108.5C366.233,108.5,375.9,108.5,384.9,108.5C393.9,108.5,402.233,108.5,406.4,108.5L410.567,108.5" id="claude-mermaid-1-L_GRU_H_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_GRU_H_0" data-points="W3sieCI6MzU2LjU2NjY2NTY0OTQxNDA2LCJ5IjoxMDguNX0seyJ4IjozODUuNTY2NjY1NjQ5NDE0MDYsInkiOjEwOC41fSx7IngiOjQxNC41NjY2NjU2NDk0MTQwNiwieSI6MTA4LjV9XQ==" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M309.267,198.75L321.983,198.75C334.7,198.75,360.133,198.75,382.564,198.75C404.994,198.75,424.422,198.75,434.136,198.75L443.85,198.75" id="claude-mermaid-1-L_X_ENC_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_X_ENC_0" data-points="W3sieCI6MzA5LjI2NjY3MDIyNzA1MDgsInkiOjE5OC43NX0seyJ4IjozODUuNTY2NjY1NjQ5NDE0MDYsInkiOjE5OC43NX0seyJ4Ijo0NDcuODQ5OTk4NDc0MTIxMSwieSI6MTk4Ljc1fV0=" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M568.667,198.75L579.047,198.75C589.428,198.75,610.189,198.75,624.736,198.75C639.283,198.75,647.617,198.75,651.783,198.75L655.95,198.75" id="claude-mermaid-1-L_ENC_Q_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_ENC_Q_0" data-points="W3sieCI6NTY4LjY2NjY2NDEyMzUzNTIsInkiOjE5OC43NX0seyJ4Ijo2MzAuOTQ5OTk2OTQ4MjQyMiwieSI6MTk4Ljc1fSx7IngiOjY1OS45NDk5OTY5NDgyNDIyLCJ5IjoxOTguNzV9XQ==" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M578.68,128.625L587.392,131.115C596.104,133.604,613.527,138.583,632.835,144.998C652.142,151.412,673.335,159.261,683.931,163.186L694.527,167.111" id="claude-mermaid-1-L_H_Q_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_H_Q_0" data-points="W3sieCI6NTc4LjY4MDI4NTU1NzQ5MzYsInkiOjEyOC42MjV9LHsieCI6NjMwLjk0OTk5Njk0ODI0MjIsInkiOjE0My41NjI1fSx7IngiOjY5OC4yNzg0MjI3NjkzMDY4LCJ5IjoxNjguNX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M601.95,104.634L606.783,104.435C611.617,104.235,621.283,103.836,650.95,103.637C680.617,103.438,730.283,103.438,792.91,103.438C855.536,103.438,931.122,103.438,997.099,114.874C1063.075,126.311,1119.442,149.185,1147.625,160.622L1175.809,172.058" id="claude-mermaid-1-L_H_P_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_H_P_0" data-points="W3sieCI6NjAxLjk0OTk5Njk0ODI0MjIsInkiOjEwNC42MzQwOTcxNzA4MjU4NX0seyJ4Ijo2MzAuOTQ5OTk2OTQ4MjQyMiwieSI6MTAzLjQzNzV9LHsieCI6Nzc5Ljk0OTk5Njk0ODI0MjIsInkiOjEwMy40Mzc1fSx7IngiOjEwMDYuNzA4MzI4MjQ3MDcwMywieSI6MTAzLjQzNzV9LHsieCI6MTE3OS41MTQ5Nzc2MzIxMzY4LCJ5IjoxNzMuNTYyNX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M899.95,198.75L917.743,198.75C935.536,198.75,971.122,198.75,1006.042,198.36C1040.961,197.97,1075.215,197.191,1092.341,196.801L1109.468,196.411" id="claude-mermaid-1-L_Q_P_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Q_P_0" data-points="W3sieCI6ODk5Ljk0OTk5Njk0ODI0MjIsInkiOjE5OC43NX0seyJ4IjoxMDA2LjcwODMyODI0NzA3MDMsInkiOjE5OC43NX0seyJ4IjoxMTEzLjQ2NjY1OTU0NTg5ODQsInkiOjE5Ni4zMTk4NTU4OTcwNjczOH1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M590.564,88.375L597.295,86.729C604.026,85.083,617.488,81.792,649.052,80.146C680.617,78.5,730.283,78.5,792.91,78.5C855.536,78.5,931.122,78.5,994.921,82.585C1058.719,86.671,1110.73,94.841,1136.735,98.926L1162.74,103.012" id="claude-mermaid-1-L_H_S_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_H_S_0" data-points="W3sieCI6NTkwLjU2Mzk5MDMzODY0MzQsInkiOjg4LjM3NX0seyJ4Ijo2MzAuOTQ5OTk2OTQ4MjQyMiwieSI6NzguNX0seyJ4Ijo3NzkuOTQ5OTk2OTQ4MjQyMiwieSI6NzguNX0seyJ4IjoxMDA2LjcwODMyODI0NzA3MDMsInkiOjc4LjV9LHsieCI6MTE2Ni42OTE2NjU2NDk0MTQsInkiOjEwMy42MzIyNzQzMzUxODY5NX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M899.95,169.545L917.743,165.214C935.536,160.884,971.122,152.223,1014.919,144.371C1058.715,136.518,1110.721,129.474,1136.725,125.951L1162.728,122.429" id="claude-mermaid-1-L_Q_S_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_Q_S_0" data-points="W3sieCI6ODk5Ljk0OTk5Njk0ODI0MjIsInkiOjE2OS41NDQ4OTg4NTk2NDY3Nn0seyJ4IjoxMDA2LjcwODMyODI0NzA3MDMsInkiOjE0My41NjI1fSx7IngiOjExNjYuNjkxNjY1NjQ5NDE0LCJ5IjoxMjEuODkyMDk1Mjk1OTU2ODZ9XQ==" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M1267.824,133.563L1285.478,142.74C1303.132,151.917,1338.441,170.271,1360.494,179.448C1382.547,188.625,1391.344,188.625,1395.743,188.625L1400.142,188.625" id="claude-mermaid-1-L_S_DEC_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S_DEC_0" data-points="W3sieCI6MTI2Ny44MjM3MjI4MDEzMDM2LCJ5IjoxMzMuNTYyNX0seyJ4IjoxMzczLjc1LCJ5IjoxODguNjI1fSx7IngiOjE0MDQuMTQxNjYyNTk3NjU2MiwieSI6MTg4LjYyNX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M1291.525,111.253L1305.229,110.773C1318.933,110.294,1346.342,109.334,1365.354,108.855C1384.367,108.375,1394.983,108.375,1400.292,108.375L1405.6,108.375" id="claude-mermaid-1-L_S_REW_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S_REW_0" data-points="W3sieCI6MTI5MS41MjQ5OTM4OTY0ODQ0LCJ5IjoxMTEuMjUyODk4ODI5MTkzNjh9LHsieCI6MTM3My43NSwieSI6MTA4LjM3NX0seyJ4IjoxNDA5LjU5OTk5ODQ3NDEyMSwieSI6MTA4LjM3NX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path><path d="M1263.229,93.313L1281.649,82.448C1300.069,71.583,1336.91,49.854,1359.496,38.99C1382.083,28.125,1390.417,28.125,1394.583,28.125L1398.75,28.125" id="claude-mermaid-1-L_S_CON_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_S_CON_0" data-points="W3sieCI6MTI2My4yMjg5Mjg5MDM0MzMsInkiOjkzLjMxMjV9LHsieCI6MTM3My43NSwieSI6MjguMTI1fSx7IngiOjE0MDIuNzUsInkiOjI4LjEyNX1d" data-look="classic" marker-end="url(#claude-mermaid-1_flowchart-v2-pointEnd)"></path></g><g class="edgeLabels"><g class="edgeLabel"><g class="label" data-id="L_prev_GRU_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_GRU_H_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_X_ENC_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_ENC_Q_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_H_Q_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_H_P_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel" transform="translate(1006.7083282470703, 198.75)"><g class="label" data-id="L_Q_P_0" transform="translate(-77.75833129882812, -10.125)"><foreignObject width="155.51666259765625" height="20.25"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"><p>KL: pull prior → posterior</p></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_H_S_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_Q_S_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_S_DEC_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_S_REW_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g><g class="edgeLabel"><g class="label" data-id="L_S_CON_0" transform="translate(0, 0)"><foreignObject width="0" height="0"><div style="display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml" class="labelBkg"><span class="edgeLabel"></span></div></foreignObject></g></g></g><g class="nodes"><g class="node default neut" id="claude-mermaid-1-flowchart-prev-0" data-look="classic" transform="translate(67.42500305175781, 108.5)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-59.42500305175781" y="-20.125" width="118.85000610351562" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-39.42500305175781, -10.125)"><rect></rect><foreignObject width="78.85000610351562" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>hₜ₋₁ · zₜ₋₁ · aₜ₋₁</p></span></div></foreignObject></g></g><g class="node default dr" id="claude-mermaid-1-flowchart-GRU-1" data-look="classic" transform="translate(270.70833587646484, 108.5)"><rect class="basic label-container" style="fill:#123039 !important;stroke:#43c0d0 !important;stroke-width:2px !important" x="-85.85832977294922" y="-20.125" width="171.71665954589844" height="40.25"></rect><g class="label" style="color:#dff3f6 !important" transform="translate(-65.85832977294922, -10.125)"><rect></rect><foreignObject width="131.71665954589844" height="20.25"><div style="color: rgb(223, 243, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#dff3f6 !important" class="nodeLabel"><p>sequence modelGRU</p></span></div></foreignObject></g></g><g class="node default dr" id="claude-mermaid-1-flowchart-H-3" data-look="classic" transform="translate(508.2583312988281, 108.5)"><rect class="basic label-container" style="fill:#123039 !important;stroke:#43c0d0 !important;stroke-width:2px !important" x="-93.69166564941406" y="-20.125" width="187.38333129882812" height="40.25"></rect><g class="label" style="color:#dff3f6 !important" transform="translate(-73.69166564941406, -10.125)"><rect></rect><foreignObject width="147.38333129882812" height="20.25"><div style="color: rgb(223, 243, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#dff3f6 !important" class="nodeLabel"><p>hₜdeterministic memory</p></span></div></foreignObject></g></g><g class="node default neut" id="claude-mermaid-1-flowchart-X-4" data-look="classic" transform="translate(270.70833587646484, 198.75)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-38.55833435058594" y="-20.125" width="77.11666870117188" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-18.558334350585938, -10.125)"><rect></rect><foreignObject width="37.116668701171875" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>obs xₜ</p></span></div></foreignObject></g></g><g class="node default neut" id="claude-mermaid-1-flowchart-ENC-5" data-look="classic" transform="translate(508.2583312988281, 198.75)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-60.40833282470703" y="-20.125" width="120.81666564941406" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-40.40833282470703, -10.125)"><rect></rect><foreignObject width="80.81666564941406" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>encoderCNN</p></span></div></foreignObject></g></g><g class="node default dr" id="claude-mermaid-1-flowchart-Q-7" data-look="classic" transform="translate(779.9499969482422, 198.75)"><rect class="basic label-container" style="fill:#123039 !important;stroke:#43c0d0 !important;stroke-width:2px !important" x="-120" y="-30.25" width="240" height="60.5"></rect><g class="label" style="color:#dff3f6 !important" transform="translate(-100, -20.25)"><rect></rect><foreignObject width="200" height="40.5"><div style="color: rgb(223, 243, 246) !important; display: table; white-space: break-spaces; line-height: 1.5; max-width: 200px; text-align: center; width: 200px;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#dff3f6 !important" class="nodeLabel"><p>representation qposterior zₜ | hₜ, xₜ</p></span></div></foreignObject></g></g><g class="node default prior" id="claude-mermaid-1-flowchart-P-11" data-look="classic" transform="translate(1229.1083297729492, 193.6875)"><rect class="basic label-container" style="fill:#123039 !important;stroke:#43c0d0 !important;stroke-width:2px !important;stroke-dasharray:5 4 !important" x="-115.64167022705078" y="-20.125" width="231.28334045410156" height="40.25"></rect><g class="label" style="color:#dff3f6 !important" transform="translate(-95.64167022705078, -10.125)"><rect></rect><foreignObject width="191.28334045410156" height="20.25"><div style="color: rgb(223, 243, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#dff3f6 !important" class="nodeLabel"><p>dynamics pprior ẑₜ | hₜ · no obs</p></span></div></foreignObject></g></g><g class="node default dr" id="claude-mermaid-1-flowchart-S-15" data-look="classic" transform="translate(1229.1083297729492, 113.4375)"><rect class="basic label-container" style="fill:#123039 !important;stroke:#43c0d0 !important;stroke-width:2px !important" x="-62.416664123535156" y="-20.125" width="124.83332824707031" height="40.25"></rect><g class="label" style="color:#dff3f6 !important" transform="translate(-42.416664123535156, -10.125)"><rect></rect><foreignObject width="84.83332824707031" height="20.25"><div style="color: rgb(223, 243, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#dff3f6 !important" class="nodeLabel"><p>state sₜ(hₜ, zₜ)</p></span></div></foreignObject></g></g><g class="node default neut" id="claude-mermaid-1-flowchart-DEC-19" data-look="classic" transform="translate(1465.099998474121, 188.625)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-60.958335876464844" y="-20.125" width="121.91667175292969" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-40.958335876464844, -10.125)"><rect></rect><foreignObject width="81.91667175292969" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>decoder → x̂ₜ</p></span></div></foreignObject></g></g><g class="node default neut" id="claude-mermaid-1-flowchart-REW-21" data-look="classic" transform="translate(1465.099998474121, 108.375)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-55.5" y="-20.125" width="111" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-35.5, -10.125)"><rect></rect><foreignObject width="71" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>reward → r̂ₜ</p></span></div></foreignObject></g></g><g class="node default neut" id="claude-mermaid-1-flowchart-CON-23" data-look="classic" transform="translate(1465.099998474121, 28.125)"><rect class="basic label-container" style="fill:#1b2130 !important;stroke:#8b97ac !important;stroke-width:1.5px !important" x="-62.349998474121094" y="-20.125" width="124.69999694824219" height="40.25"></rect><g class="label" style="color:#e9edf6 !important" transform="translate(-42.349998474121094, -10.125)"><rect></rect><foreignObject width="84.69999694824219" height="20.25"><div style="color: rgb(233, 237, 246) !important; display: table-cell; white-space: nowrap; line-height: 1.5; max-width: 200px; text-align: center;" xmlns="http://www.w3.org/1999/xhtml"><span style="color:#e9edf6 !important" class="nodeLabel"><p>continue → ĉₜ</p></span></div></foreignObject></g></g></g></g></g><defs><filter id="claude-mermaid-1-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs><defs><filter id="claude-mermaid-1-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"></feDropShadow></filter></defs><linearGradient id="claude-mermaid-1-gradient" gradientUnits="objectBoundingBox" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="#7a6c52" stop-opacity="1"></stop><stop offset="100%" stop-color="hsl(-78.75, 2.1052631579%, 82.5490196078%)" stop-opacity="1"></stop></linearGradient></svg></div><pre class="mermaid" data-claude-mermaid-claimed="1" style="display: none;">%%{init:{'theme':'base','themeVariables':{'fontFamily':'ui-monospace, monospace','fontSize':'13.5px','lineColor':'#8b97ac','edgeLabelBackground':'#0f1420'},'flowchart':{'curve':'basis','nodeSpacing':40,'rankSpacing':58,'padding':10}}}%%
flowchart LR
  prev["hₜ₋₁ · zₜ₋₁ · aₜ₋₁"] --&gt; GRU["sequence model<br>GRU"]
  GRU --&gt; H["hₜ<br>deterministic memory"]
  X["obs xₜ"] --&gt; ENC["encoder<br>CNN"]
  ENC --&gt; Q["representation q<br>posterior zₜ | hₜ, xₜ"]
  H --&gt; Q
  H -.-&gt; P["dynamics p<br>prior ẑₜ | hₜ · no obs"]
  Q -. "KL: pull prior → posterior" .-&gt; P
  H --&gt; S["state sₜ<br>(hₜ, zₜ)"]
  Q --&gt; S
  S --&gt; DEC["decoder → x̂ₜ"]
  S --&gt; REW["reward → r̂ₜ"]
  S --&gt; CON["continue → ĉₜ"]
  classDef dr fill:#123039,stroke:#43c0d0,stroke-width:2px,color:#dff3f6;
  classDef prior fill:#123039,stroke:#43c0d0,stroke-width:2px,stroke-dasharray:5 4,color:#dff3f6;
  classDef neut fill:#1b2130,stroke:#8b97ac,stroke-width:1.5px,color:#e9edf6;
  class GRU,H,Q,S dr; class P prior; class prev,X,ENC,DEC,REW,CON neut;
      </pre>
      <figcaption>The <span class="d">prior</span> predicts the latent from memory alone — the dream path; the <span class="d">posterior</span> corrects it using the real observation during learning. The dashed <span class="d">KL</span> ties them together.</figcaption>
      <details><summary><span>mermaid source</span></summary><pre><code>flowchart LR
  prev["hₜ₋₁ · zₜ₋₁ · aₜ₋₁"] --&gt; GRU["sequence model&lt;br/&gt;GRU"]
  GRU --&gt; H["hₜ&lt;br/&gt;deterministic memory"]
  X["obs xₜ"] --&gt; ENC["encoder&lt;br/&gt;CNN"]
  ENC --&gt; Q["representation q&lt;br/&gt;posterior zₜ | hₜ, xₜ"]
  H --&gt; Q
  H -.-&gt; P["dynamics p&lt;br/&gt;prior ẑₜ | hₜ · no obs"]
  Q -. "KL: pull prior → posterior" .-&gt; P
  H --&gt; S["state sₜ&lt;br/&gt;(hₜ, zₜ)"]
  Q --&gt; S
  S --&gt; DEC["decoder → x̂ₜ"]
  S --&gt; REW["reward → r̂ₜ"]
  S --&gt; CON["continue → ĉₜ"]
  classDef dr fill:#123039,stroke:#43c0d0,stroke-width:2px,color:#dff3f6;
  classDef prior fill:#123039,stroke:#43c0d0,stroke-dasharray:5 4,color:#dff3f6;
  classDef neut fill:#1b2130,stroke:#8b97ac,stroke-width:1.5px,color:#e9edf6;
  class GRU,H,Q,S dr; class P prior; class prev,X,ENC,DEC,REW,CON neut;</code></pre></details>
    </figure>
<p>This is Dreamer dreaming of trees and motorbikes, learning how to ride in just 12,000 iterations.</p>
<p><img src="//snappishproductions.com/images/zx-spectrum/dreamerv3_dream.gif" alt=""></p>
<div class="chart">
      <svg viewBox="0 0 760 300" role="img" aria-label="DreamerV3 eval return versus environment steps">
<line class="grid" x1="46" y1="266.0" x2="746" y2="266.0"></line><text class="ytick" x="40" y="269.0" text-anchor="end">0k</text><line class="grid" x1="46" y1="210.9" x2="746" y2="210.9"></line><text class="ytick" x="40" y="213.9" text-anchor="end">2k</text><line class="grid" x1="46" y1="155.8" x2="746" y2="155.8"></line><text class="ytick" x="40" y="158.8" text-anchor="end">4k</text><line class="grid" x1="46" y1="100.7" x2="746" y2="100.7"></line><text class="ytick" x="40" y="103.7" text-anchor="end">6k</text><line class="grid" x1="46" y1="45.6" x2="746" y2="45.6"></line><text class="ytick" x="40" y="48.6" text-anchor="end">8k</text><line class="mark" x1="79.7" y1="18" x2="79.7" y2="266"></line><text class="anno" x="83.7" y="30">maxes the ride</text><line class="mark" x1="268.1" y1="18" x2="268.1" y2="266"></line><text class="anno" x="272.1" y="30">learns to kill</text>
<path class="area" d="M 52.7,266.0 L 52.7,255.9 L 79.7,233.5 L 106.6,232.1 L 133.5,204.8 L 160.4,174.8 L 187.3,201.8 L 214.3,211.4 L 241.2,175.7 L 268.1,104.5 L 295.0,95.8 L 322.0,133.3 L 348.9,70.4 L 375.8,71.5 L 402.7,152.9 L 429.7,131.4 L 456.6,117.8 L 483.5,61.8 L 510.4,100.9 L 537.3,76.2 L 564.3,92.5 L 591.2,100.3 L 618.1,25.7 L 645.0,121.1 L 672.0,50.8 L 698.9,85.4 L 725.8,46.3 L 725.8,266.0 Z"></path>
<path class="line" d="M 52.7,255.9 L 79.7,233.5 L 106.6,232.1 L 133.5,204.8 L 160.4,174.8 L 187.3,201.8 L 214.3,211.4 L 241.2,175.7 L 268.1,104.5 L 295.0,95.8 L 322.0,133.3 L 348.9,70.4 L 375.8,71.5 L 402.7,152.9 L 429.7,131.4 L 456.6,117.8 L 483.5,61.8 L 510.4,100.9 L 537.3,76.2 L 564.3,92.5 L 591.2,100.3 L 618.1,25.7 L 645.0,121.1 L 672.0,50.8 L 698.9,85.4 L 725.8,46.3"></path>
<circle cx="52.7" cy="255.9" r="3" class="short"><title>2k steps: return 368, ride 656</title></circle><circle cx="79.7" cy="233.5" r="3" class="capped"><title>12k steps: return 1181, ride 1500</title></circle><circle cx="106.6" cy="232.1" r="3" class="capped"><title>22k steps: return 1232, ride 1500</title></circle><circle cx="133.5" cy="204.8" r="3" class="short"><title>32k steps: return 2220, ride 844</title></circle><circle cx="160.4" cy="174.8" r="3" class="short"><title>42k steps: return 3309, ride 1260</title></circle><circle cx="187.3" cy="201.8" r="3" class="short"><title>52k steps: return 2330, ride 876</title></circle><circle cx="214.3" cy="211.4" r="3" class="short"><title>62k steps: return 1980, ride 694</title></circle><circle cx="241.2" cy="175.7" r="3" class="short"><title>72k steps: return 3278, ride 1255</title></circle><circle cx="268.1" cy="104.5" r="3" class="capped"><title>82k steps: return 5862, ride 1500</title></circle><circle cx="295.0" cy="95.8" r="3" class="capped"><title>92k steps: return 6177, ride 1500</title></circle><circle cx="322.0" cy="133.3" r="3" class="capped"><title>102k steps: return 4815, ride 1500</title></circle><circle cx="348.9" cy="70.4" r="3" class="capped"><title>112k steps: return 7098, ride 1500</title></circle><circle cx="375.8" cy="71.5" r="3" class="capped"><title>122k steps: return 7060, ride 1500</title></circle><circle cx="402.7" cy="152.9" r="3" class="capped"><title>132k steps: return 4104, ride 1500</title></circle><circle cx="429.7" cy="131.4" r="3" class="short"><title>142k steps: return 4883, ride 1326</title></circle><circle cx="456.6" cy="117.8" r="3" class="capped"><title>152k steps: return 5377, ride 1500</title></circle><circle cx="483.5" cy="61.8" r="3" class="capped"><title>162k steps: return 7409, ride 1500</title></circle><circle cx="510.4" cy="100.9" r="3" class="capped"><title>172k steps: return 5991, ride 1500</title></circle><circle cx="537.3" cy="76.2" r="3" class="capped"><title>182k steps: return 6888, ride 1500</title></circle><circle cx="564.3" cy="92.5" r="3" class="capped"><title>192k steps: return 6296, ride 1500</title></circle><circle cx="591.2" cy="100.3" r="3" class="capped"><title>202k steps: return 6014, ride 1500</title></circle><circle cx="618.1" cy="25.7" r="3" class="capped"><title>212k steps: return 8720, ride 1500</title></circle><circle cx="645.0" cy="121.1" r="3" class="short"><title>222k steps: return 5258, ride 1394</title></circle><circle cx="672.0" cy="50.8" r="3" class="capped"><title>232k steps: return 7811, ride 1500</title></circle><circle cx="698.9" cy="85.4" r="3" class="short"><title>242k steps: return 6554, ride 1389</title></circle><circle cx="725.8" cy="46.3" r="3" class="capped"><title>252k steps: return 7972, ride 1500</title></circle><text class="xtick" x="46.0" y="282.0" text-anchor="middle">0k</text><text class="xtick" x="180.6" y="282.0" text-anchor="middle">50k</text><text class="xtick" x="315.2" y="282.0" text-anchor="middle">100k</text><text class="xtick" x="449.8" y="282.0" text-anchor="middle">150k</text><text class="xtick" x="584.5" y="282.0" text-anchor="middle">200k</text><text class="xtick" x="719.1" y="282.0" text-anchor="middle">250k</text>
<text class="axl" x="46" y="14">eval return</text>
<text class="axl" x="746" y="296" text-anchor="end">environment steps</text>
</svg>
      <div class="legend">
        <span><i style="background:var(--dream)"></i>survived the full episode</span>
        <span><i style="background:var(--muted)"></i>died chasing kills</span>
        <span><i style="background:color-mix(in srgb,var(--warn) 70%,transparent)"></i>phase marker</span>
      </div>
    </div>
<p>And this is Dreamer playing the actual game, having learnt to ride safely and shoot things with 300k steps played in the imagined worlds<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p><img src="//snappishproductions.com/images/zx-spectrum/dreamer_play.gif" alt=""></p>
<p>I think we can say it&rsquo;s mostly solved at this point…but if you don&rsquo;t believe me, then here&rsquo;s five minutes of it playing without losing a life.</p>
<iframe width="946" height="752" src="https://www.youtube.com/embed/zPwX3j4aIUI" title="DreamerV3 controlling Deathchase (ZX Spectrum, 1983)" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
<p>Of course, now that I had Deathchase sorted, I started thinking about other games. We&rsquo;ve got another post coming that stays firmly in the 16K era, but is a touch more complicated…and another classic. We&rsquo;ll be going to Ashby-de-la-Zouch…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>Although I will admit that the model is definitely cheesing things by not hitting the full acceleration. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>It&#39;s Been A Week</title>
      <link>https://snappishproductions.com/blog/2026/07/19/its-been-a-week.html.html</link>
      <pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/07/19/its-been-a-week.html.html</guid>
      <description><![CDATA[<p>Current status:</p>
<p><img src="https://preview.redd.it/so-we-can-all-now-agree-that-stickbird-was-also-leading-up-v0-rr51hm4gc69d1.png?auto=webp&amp;s=14fe3e9888ccf8364c16b0dd000a89954b8fb6bb" alt=""></p>
<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/Da8K7cQItT0/?utm_source=ig_embed&amp;utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/p/Da8K7cQItT0/?utm_source=ig_embed&amp;utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/Da8K7cQItT0/?utm_source=ig_embed&amp;utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Ian Pointer (@carsondial)</a></p></div></blockquote>
<script async src="//www.instagram.com/embed.js"></script>
<p>(80s bit is delayed a little for reasons. It&rsquo;s done, but I just can&rsquo;t face writing it up right now)</p>
]]></description>
    </item>
    
    <item>
      <title>Then And Now. Plus, BIRDS!</title>
      <link>https://snappishproductions.com/blog/2026/07/12/then-and-now.-plus-birds.html.html</link>
      <pubDate>Sun, 12 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/07/12/then-and-now.-plus-birds.html.html</guid>
      <description><![CDATA[<p><a href="https://archive.org/details/BBCHorizonCollection512Episodes/BBC+Horizon+-+s1978e09+-+Now+the+chips+are+down.avi">This episode of Horizon from 1978</a> is an interesting historical look at microprocessors and how they were starting to filter through into the world at large. As a piece of its time, it’s an interesting documentary all by itself,  but I was intrigued/amused at the back half, which was all about how white and blue-collar jobs will be eliminated by our 6502 overlords, showing examples of a doctor creating an expert system that would replace consultants, and a building contractor who only had to tell a system how to do something once and then a robot would be able to perfectly replicate the process. Again, 1978. It’s interesting how we now seem to be in the same position, only this time…maybe it’s more real? Or are we getting ahead of ourselves once more, and the advent of Claude/etc. just means a new normal, like how coding in C or Pascal is often much faster than trying to write assembler.</p>
<p>I find I can do more; this weekend, I trained a new model for work, yes, but I did two other things that I <em>could</em> have done myself, but it would have taken weeks and weeks of effort. Firstly, I finally started setting up the smart solar bird feeder I bought during a recent sale. But it wasn’t the brand I somehow assumed it was, and the only way to communicate with it is to use an iOS or Android app, and they want an extra $20/year for sharing the account. I sat down with Claude just after 13:00 on Saturday, and by 15:00, we had mapped out the entire API, pulled out a long-lived JWT token that allows me to authenticate whenever and where-ever, and built a small web server that produces a child-friendly set of HTML cards ready to show Maeryn just what birds have visited today, and hooking up the audio to <a href="https://birdnet.cornell.edu/">BirdNET</a> so it&rsquo;s strictly speaking better AI than what the company is offering through the app alone.</p>
<p>Then, for a laugh on Sunday afternoon, I pointed Claude at the <a href="https://github.com/mmatyas/GridWars">source code for Grid Wars.</a> Every so often, I remember how fun that game was and then I rediscover that the Intel builds currently crash on MacOS. I told Claude to port it to a Rust WASM runtime that could be played in the browser. And damn if it didn’t just go ahead and do it. It required a little hand-holding to get the blur and gravity mesh effects just right…but I can now just play Grid Wars by serving up just a few files on a website<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. It is very strange having all these horizons just open up in front of you. And it is something of a siren call; just one more idea that you can run before bedtime, just one more run and you’ll be fixed. I feel like I have stepped away from the edge a couple of times already, but every Friday night, the AI abyss comes around again…</p>
<p>(Next week? Back to the 1980s)</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>I would put it up publicly, but I seem to recall that the owners of <a href="https://en.wikipedia.org/wiki/Geometry_Wars">Geometry Wars</a> did get a little affronted back in the day, and I don’t really want to get into trouble. But…if you email me <em>wink wink</em> <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>Well, what the hell’s the presidency for?</title>
      <link>https://snappishproductions.com/blog/2026/07/04/well-what-the-hells-the-presidency-for.html.html</link>
      <pubDate>Sat, 04 Jul 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/07/04/well-what-the-hells-the-presidency-for.html.html</guid>
      <description><![CDATA[<p><img src="/images/jul4250/1.webp" alt="&ldquo;By G-d I&rsquo;ll fight till hell freezes over and then I&rsquo;ll cut the ice and fight on."">
<img src="/images/jul4250/2.jpg" alt="TVA">
<img src="/images/jul4250/3.jpg" alt="Iwo Jima">
<img src="/images/jul4250/4.webp" alt="LBJ">
<img src="/images/jul4250/6.webp" alt="Pelham-1-2-3">
<img src="/images/jul4250/7.webp" alt="Big Bird">
<img src="/images/jul4250/8.png" alt="The best NASA logo">
<img src="/images/jul4250/9.png" alt="1976 Bicentennial Logo">
<img src="/images/jul4250/10.png" alt="Tiffany">
<img src="/images/jul4250/11.png" alt="Monkey Island 2">
<img src="/images/jul4250/12.webp" alt="Sneakers">
<img src="/images/jul4250/13.png" alt="Netscape">
<img src="/images/jul4250/14.jpeg" alt="Heat">
<img src="/images/jul4250/15.jpg" alt="Courtney Love">
<img src="/images/jul4250/16.jpg" alt="Obama Inauguration 2009">
<img src="/images/jul4250/17.jpeg" alt="ICE OUT">
<img src="/images/jul4250/liberal.webp" alt="Remember Who You Are, Liberal"></p>
<p>It might be surprising, considering I grew up in the irony-poisoned Britain of the 90s, but the last 10 years in this country has made me somewhat patriotic. But that’s patriotic in the sense that I’m now a person who reads the Federalist papers, letters from the Civil War and the biographies of LBJ, and remembering that day in 2009 on the Mall. Patriotism in the sense of I’ll be damned if I let these people desecrate the founding documents of this country and the nation of immigrants that gave rise to the American Century. Patriotism in the service of bending the arc of the moral universe to justice. Patriotism in living our lives as a form of resistance, a happier life than I could ever have imagined, and worth fighting for.</p>
<p><a href="https://www.nytimes.com/2026/07/01/opinion/declaration-independence-jefferson-douglass-lincoln.html">Five words that changed America.</a></p>
]]></description>
    </item>
    
    <item>
      <title>&#39;Ver Curves &amp; &#39;Ver Boy — 20 Years Later</title>
      <link>https://snappishproductions.com/blog/2026/06/28/ver-curves-ver-boy-20-years-later.html.html</link>
      <pubDate>Sun, 28 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/06/28/ver-curves-ver-boy-20-years-later.html.html</guid>
      <description><![CDATA[<p>Honestly, I don’t remember exactly when I joined ILX. I think it was likely in either late 2002 or early 2003, when I was living in Chapel Hill, and for some reason I vaguely believe it was due to searching for information on Saturday Looks Good To Me, which is a little odd, as they’re not exactly an ILM or ILX band. Anyway, I loved hanging out in the background<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>, making a comment here and there, but mostly being a lurker as Poptimism took root there and I rediscovered my younger <em>Smash Hits</em> reading self <em>(heavens above! — Ed.)</em></p>
<p>What I really wanted to do is meet up with everybody at Club Popular. But…while I had got to the point where I was relatively okay with going to concerts by myself (seriously, the hours spent awkwardly hanging about before the advent of mobile phones), I was absolutely not okay with making the trip from Bicester to London for a club night all by myself. I just couldn’t do it. Still a regret.</p>
<p>By 2006, I was still mostly lurking, but I had made a friend — Forest Pines, or Caitlin. And ILX had a band! Shimura Curves! ‘Ver Curves! Kate ‘Masonic Boom’, Anna, Frances, and Miss AMP! Krautrock and girl group harmonies! Zeitgeist songs like <em>Noyfriend</em> and <em>Keep My Name Out of Your Blog</em> (there isn&rsquo;t another song that encapsulates the pre-Facebook Web 2.0 era as perfectly as the latter). They had an afternoon gig on a Sunday when I was already going to be going to London to see Johnny Boy. Suddenly, I was invited to a pre-gig pub meet up with Kate and Caitlin.</p>
<p>So I ended up drinking strawberry beer with them for several hours before we decided we&rsquo;d better actually go to the Notting Hill Arts Club, Kate carrying her guitar through town. By that time, we&rsquo;d also picked up Ed, another ILX regular. The concert itself is mostly lost to my memory, but I remember groupie cards kissed by individual band members, banter about <em>Brown and Sticky</em>, and the Berlin, 1973 ending of <em>Stronger</em>.</p>
<p>Even just all that would have made for a wonderful day. But I still had the second half. Johnny Boy at <a href="https://en.wikipedia.org/wiki/The_Luminaire">The Luminaire</a> in Kilburn. I was, of course, back on my own, and resigned to standing sheepishly in the venue waiting for the band to come on stage. But it wasn&rsquo;t quite to be. I&rsquo;ll admit my memory does not give me perfect recall, but the way I remember it is this: I noticed a group of people sitting in a booth. One of whom I was damn sure was Kieron Gillen, who&rsquo;d I known in an online sort of way since joining the Kenickie Mailing List back in 1997.  Eventually, I worked past my shyness enough to go over and say hello. This was about two months before the first issue of <em>Phonogram</em>, so we talked about that, and me seeing Miss AMP earlier in the day. The idea of just randomly bumping into somebody I knew at a concert…it had just never happened to me before. And given how the day had gone so far, I was getting beyond giddy at this point.</p>
<p>Towards the end of the gig itself, I found myself dancing with him and Alex De Campi. The elation I had coming out of the venue and rushing to get the last train from Marylebone to Bicester North was something I hadn&rsquo;t felt since that house party in Chapel Hill way back in 2003, or that time I went into the Carrboro woods to smash up a piñata for a late birthday celebration. On the journey back, I think I was plotting…or more realistically, fantasising about the potential of moving to London. Maybe every weekend could be like that, I thought, as I went past Haddenham &amp; Thame Parkway.</p>
<p>Anyway, twenty years ago this week. I never did move to London; instead I took a rather different direction which sees me typing this in Cincinnati. Which I have to say has worked out very well for me, as I pause to think about Maeryn demanding I play <em>drop dead</em> again on the way home from daycare (Tammy: &ldquo;With me, it&rsquo;s <em>Wheels On The Bus</em>. There&rsquo;s apparently a different vibe in Daddy&rsquo;s car). And then this September, I&rsquo;m going to be back in London again, Saint Etienne will likely play <em>Popular</em>, and I&rsquo;ll smile, recognising all the names.</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>Okay, there was one person from the British contingent I took an initial dislike to, and that was before I knew details that really made me glad we never met… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>tony cascarino circa 1995</title>
      <link>https://snappishproductions.com/blog/2026/06/21/tony-cascarino-circa-1995.html.html</link>
      <pubDate>Sun, 21 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/06/21/tony-cascarino-circa-1995.html.html</guid>
      <description><![CDATA[<p>I felt a little attacked on Wednesday morning when my boss jokingly referred to me as &ldquo;sometimes a little workaholic.&rdquo; Later, as I was writing messages on Slack <em>as I was literally having an IV attached</em>…yeah okay, I guess I can sometimes see it. Vaguely.</p>
<p>(nothing too much to worry about - an endoscopy to check on my acid reflux. <em>And</em> I did a reasonable job at staying offline from work on Thursday and Friday. So there.)</p>
<p>Anyway, a truncated week, and I feel like I let the opportunity of two days off mostly slip by without filling them properly, although watching <em>Eno</em> yet again (now that a new version is out every month on the Criterion Channel) did get me to start work on <em>The Assembly Machine</em>, of which I will probably talk a little more about in July when it&rsquo;s slightly more stable.</p>
<p>It is Father&rsquo;s Day, and I have the greatest Father&rsquo;s Day present ever —<a href="https://loscampesinos.com/merch/usa-24/"> the best LC! tour t-shirt ever made</a>, and a Lego cement mixer to go along with it, as every Lego city needs the means of production so the city can grow and grow, right? I’m fairly sure that’s correct.</p>
<p>Oh, and I got complimented at the playground today for a t-shirt that is, <a href="https://www.threadless.com/shop/@threadless/design/mp-3/mens/t-shirt/extra-soft?color=red">perhaps, over 25 years old?</a></p>
]]></description>
    </item>
    
    <item>
      <title>A Post-Google World?</title>
      <link>https://snappishproductions.com/blog/2026/06/13/a-post-google-world.html.html</link>
      <pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/06/13/a-post-google-world.html.html</guid>
      <description><![CDATA[<p><a href="https://www.sfgate.com/tech/article/new-google-ai-22279112.php">This article by Drew Magary gets at the heart of the craziness behind Google&rsquo;s recent decision to go all in on AI and essentially declare war on its own historical business model.</a> I&rsquo;m not really sure how that&rsquo;s going to work out for them, but I also have some thoughts — thoughts that I imagine would be incredibly unpopular across parts of the internet and Bluesky: which is that the World Wide Web is not the only model for the information superhighway, and I think we possibly forget that. Google&rsquo;s search/ad dominance led to the world of SEO, ragebait, and our current international nightmare…maybe its interaction with the web just wasn&rsquo;t healthy at any point.</p>
<p>Back in the &rsquo;90s, things like <a href="https://en.wikipedia.org/wiki/Neuromancer">William Gibson&rsquo;s <em>Neuromancer</em></a>, <a href="https://en.wikipedia.org/wiki/Earth_(Brin_novel)">David Brin&rsquo;s <em>Earth</em></a>, and the <a href="https://www.youtube.com/watch?v=umJsITGzXd0">Knowledge Navigator video from Apple</a> — which is one of my secret origin stories — presented a different world, a world that was not taken. You can also see it in the <a href="https://www.youtube.com/watch?v=JQymn5flcek">documentary on General Magic</a>, where their initial vision was very much &lsquo;agentic&rsquo; before the Web came and killed them stone dead. You can catch glimpses of another world in <a href="https://en.wikipedia.org/wiki/The_Net_(British_TV_series)"><em>The Net</em></a>, which had indepth segments on anonymous FTP servers and USENET.</p>
<p>But whilst I agree with Drew that Google declaring war essentially on the rest of the web is a terrible idea, I&rsquo;m also wondering: is it possible that the web itself is something that might need to go away? This is one of those things I keep toying with in the back of my head; I do not particularly want to live in a world where everybody lives in Sam Altman&rsquo;s walled gardens.</p>
<p>The new frontier models are powerful and amazing, and everybody should have them. I remember arguing on the web a few years back that all I wanted was an army of trans cat girls with a lava lamp in their basement doing crazy things locally on Llama models. I still believe that (although I&rsquo;ve moved on to Qwen models in 2026). I think democratizing these things to the extent that they run in everywhere is potentially as revolutionary a change as having a computer in every home.</p>
<p>But I&rsquo;m starting to think: can we take that a bit further? Like: &ldquo;No, son, we have Google at home.&rdquo; What would it take ti give everybody had their own search engine at home? Could we put something akin to 2000-era Google on your PC / Mac / Laptop? What would that look like? Is it feasible? How does it update? Sure, it doesn&rsquo;t solve the money problem, but it might help keep the open web alive.</p>
<p>Obviously a lot of this comes from the fact that I&rsquo;m completely obsessed with search. If Google isn&rsquo;t going to be the only search engine around any more, then maybe we have to look back to the situation that existed in the mid-to-late &rsquo;90s. Infoseek, AltaVista, Ask Jeeves, MetaCrawler, HotBot — all the different search engines that were the way we interacted with the web; each engine had its pluses and minuses and required a bit of knowledge (or research) to work out which one to use for what scenario.</p>
<p>What I envision is a three tier local system. Tier 0 is your emails and documents. Tier 1 is the main search engine, where something like 100m documents from the web can be searched locally. This engine is updated on a monthly basis based on a user&rsquo;s explicit wishes and implicit signals from what they&rsquo;re searching, drawing on the monthly Common Crawl dump to stay current. And then there&rsquo;s Tier 2, which is the connection to the outside world. Paid API sources like Kagi, Bing, and anything else that you&rsquo;d like to plug in. There would be a program on top of this<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> that would do routing for search queries, working out when a queries need to go to the outside world, or if they can be answered locally and delegating appropriately (balancing API costs and whatnot, obviously).</p>
<p>But who would build such a thing. Well…I have the local search engine prototyped already…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>okay, I&rsquo;ll call it an agent if you force me… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>New Yorker Unbound</title>
      <link>https://snappishproductions.com/blog/2026/06/06/new-yorker-unbound.html.html</link>
      <pubDate>Sat, 06 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/06/06/new-yorker-unbound.html.html</guid>
      <description><![CDATA[<p>Okay, so last week I promised a longer diatribe, and I swear that I haven’t forgotten about it; it needs to be edited down a bit, but it does exist, and I’ve also actually written a bunch of code to prove that my idea is at least viable. But…well, something happened this weekend that means it’s been bumped, probably until mid-week.</p>
<p>Almost twenty years ago, I bought a copy of <a href="https://www.amazon.com/Complete-New-Yorker-Greatest-Magazine/dp/1400064740"><em>The Complete New Yorker</em></a>. This was a very interesting collection of DVDs that contained every copy of <em>The New Yorker</em> from 1925 until 2005. Spread across 8 DVDs, it had a proprietary viewing system locked down with DRM, but it was still quite a fun thing to have. The main problem was that the Mac version of the software was compiled for 68k Macs. This suddenly became a big issue when Apple switched off 68k Rosetta support; instead of 8 DVDs filled with decades of print, the collection ended up being a brick. Even the Windows software eventually bitrotted, and the collection has just been hanging out on my bookshelves waiting for the DVDs to fail.</p>
<p>Over the past decade, I have probably searched once or twice a year to see if anybody has cracked the DRM encryption. The closest I’ve ever got was <a href="https://github.com/reconSuave/">this user over on GitHub</a>, who cracked equivalent versions for Rolling Stone and Playboy. Hints were dropped that the New Yorker collection would soon follow, but that was two years ago, and things have been silent. But it did suggest there was some hope.</p>
<p>Enter Claude.</p>
<p>Claude Opus spent an afternoon this Saturday with the NSA’s <a href="https://github.com/nationalsecurityagency/ghidra">Ghirda reverse engineering framework</a> and comprehensively cracked the DRM. <a href="https://github.com/falloutdurham/newyorkerunbound">NewYorkerUnbound</a> hosts little more than a simple Python script (with in-line dependencies, even!) that will take any file from the DVD set and produce an uncracked DJVU file, with an optional PDF export if you have the right support on your Linux box.</p>
<p>After almost 15 years of them sitting idle, I have 80 years of the New Yorker available again. Hurrah!</p>
<p>(I was so very excited that I didn’t do anything that I had actually planned to do this Saturday, which was probably a mistake…)</p>
]]></description>
    </item>
    
    <item>
      <title>Goodbye Sava</title>
      <link>https://snappishproductions.com/blog/2026/05/31/goodbye-sava.html.html</link>
      <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/05/31/goodbye-sava.html.html</guid>
      <description><![CDATA[<p>Well, I can finally talk about the thing I couldn’t talk about. Last Friday was Sava’s last day at Lucidworks after almost ten years. We’ve been together for thick and thin, even during the year where I wasn’t even at Lucidworks. That there won’t be an early morning rant waiting for me in my Slack DMs tomorrow is hitting me like a body blow. But it is not the end. We&rsquo;re already making plans to meet up this September when I&rsquo;m in town for the last Saint Etienne tour<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>.</p>
<p>Next week: something longer…and perhaps a little more controversial, providing I can finish my Friday night thoughts on the future of the web, and the past of the information superhighway…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>I also don’t normally plan these things to this level of detail, but I also think I have my outfit for said concert worked out? Normally, I wouldn’t put much thought into it, but it feels appropriate to be a little fancy for the last time of seeing them… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>That Memorial Weekend Feeling</title>
      <link>https://snappishproductions.com/blog/2026/05/24/that-memorial-weekend-feeling.html.html</link>
      <pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/05/24/that-memorial-weekend-feeling.html.html</guid>
      <description><![CDATA[<p>Normally after my family leaves, there are a few days where everything seems a lot quieter. Less hustle and bustle in the house, less to do, etc. Well, with a three year old, we don&rsquo;t get that luxury; she starts at 6:30am whether or not family is visiting, and she would quite like the Ms. Rachel episode with the baby dolls in, thank you very much (at this point, I retire to make tea, as I need something to cut against Ms. Rachel&rsquo;s voice first thing; she&rsquo;s a lovely person. But still…).</p>
<p>We have a brief interregnum of a week before the house is full again, this time with some of Tammy‘s high school friends, which means I have to clean the house to a slightly higher standard than when family comes (this mostly means: &lsquo;probably do something with the IKEA circus tent and clear off all the DVDs waiting for encoding in the back bedroom). Otherwise, not a huge amount going on at the moment. We are doing Memorial Weekend DIY things, I have downloaded all of <em>A Very Peculiar Practice</em> for my pre-2000 TV viewing requirements, and this week at work is the end of an era as one of my close coworkers will be leaving this Friday which I am quite sad about. <a href="https://swatchandbeyond.com/products/moscow-1980-lz103">But he did get me this watch!</a><sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>Also, it appears that May / June is my time for buying new Swatch watches. I have finished my &lsquo;spite buying because it looks like I have an expensive roof situation coming up&rsquo; spree, with three new Swatches winging their way to me as I type… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>Slippers And Leaf Blowers</title>
      <link>https://snappishproductions.com/blog/2026/05/19/slippers-and-leaf-blowers.html.html</link>
      <pubDate>Tue, 19 May 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/05/19/slippers-and-leaf-blowers.html.html</guid>
      <description><![CDATA[<p>It is perhaps the most American middle class thing to be outside on your deck on a Sunday morning cooking breakfast on a Blackstone griddle. I was literally wearing a LL Bean dressing gown <em>and</em> slippers.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>The family is visiting right now (hence the above; it&rsquo;s not a regular Sunday thing, I promise), which means that Maeryn runs all over the house shouting &lsquo;grandad!&rsquo; and has more people to pick her up than usual. We are also now doing a comedy turn pretending to be a cat and an extended performance act piece entitled &ldquo;I Will Sleep On This Hard Table But Don&rsquo;t Move Me Anywhere In The Direction Of My Actual Bed&rdquo;. Definitely enjoying herself, and we&rsquo;re visiting yet more of the area&rsquo;s bizarrely fantastic playgrounds.</p>
<p>A few days left of the family visit, and it seems just a few days left of May too. Lots of new things coming in June…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>Today, I also had my first go on <em>my own</em> leafblower. Electric, of course, but surprising, a lot of fun… <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
    <item>
      <title>On The Road</title>
      <link>https://snappishproductions.com/blog/2026/05/03/on-the-road.html.html</link>
      <pubDate>Sun, 03 May 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/05/03/on-the-road.html.html</guid>
      <description><![CDATA[<p>A link blog entry? In 2026???</p>
<p><a href="https://www.theguardian.com/music/2026/may/01/chaotic-future-indie-music-labels-sub-pop-rough-trade">An interesting article about indie record labels, which definitely undercuts a few popular narratives</a> (though I say that as somebody who in the year 2026 still doesn’t have a streaming subscription)</p>
<p><a href="https://nhp30.wordpress.com/ntv-uncovered/">The insanity of making NHPTV work</a></p>
<p>Sometimes, I get nostalgic for things that were just background radiation. We were and are not a Radio  4 household. The Shipping Forecast existed only as gags in comedy shows. <a href="https://irvinebrown.com/fallingmoreslowly/">But oh, I covet this poster. Sure, it may be sold out. But I have ways.</a></p>
<p>If you can read this, then a) the remote uploading process did in fact work, but more importantly, b) I made it to Atlanta. I was planning on writing things during the trip, but after I went into Buc-ee’s and experienced the madness, I just wanted to get out and on the road again. Besides, they didn’t have anywhere to sit? Which is just madness. You know what I like? A service station that knows what it’s there for and has seats for days.</p>
<p><img src="https://www.wearedorothy.com/cdn/shop/products/lost-destination-forton-services-art-print-dorothy-frame_850x.jpg?v=1493569022" alt="Foxton Services"></p>
<p>Accept no substitutes. Even they come bearing an entire wall of jerky and the promise of petrol pumps that stretch over the horizon.</p>
<p>Anyway, it was a pretty uneventful trip, which I think is the best kind for an 8 hour drive. The hotel is pretty close to the Atlanta bypass, so I was able to avoid most of Atlanta itself (except for a short stop in Marietta for Cookout, because you have to). I am currently typing this in the courtyard of a very fancy shopping mall, decked out with a Balencigna, Valentin Statin, and Alexander McQueen. Basically, like Bicester Village except there’s no discounts and no Pret. s you can imagine, terribly lifeless, but it does have very sturdy marble benches (my knees remember that from January). Strangely, everything is shut. Like I know it’s 18:00 on a Sunday, and my ingrained feeling is to have a sausage roll and watch <em>Time Team</em>, but even the food hall is weirdly shut. You are an emblem of American excess and capitalism! Why aren’t you open? Oh, yeah, that’s probably right.</p>
<p>Okay, I am now of to find some Diet Coke to get me through the evening. This is in addition to the Diet Coke I brought in the car to get me through the week.</p>
]]></description>
    </item>
    
    <item>
      <title>Early Morning Car To Georgia</title>
      <link>https://snappishproductions.com/blog/2026/04/26/early-morning-car-to-georgia.html.html</link>
      <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate>
      <guid>https://snappishproductions.com/blog/2026/04/26/early-morning-car-to-georgia.html.html</guid>
      <description><![CDATA[<p>There is A Lot That I Can&rsquo;t Talk About this week, so instead, a preview of next week. In seven days, I will wake up, get dressed and showered, and then get into my car for a seven hour drive to Atlanta. I could fly. Work will absolutely pay for that, I swear. But last time I flew to Atlanta, I got so sick that I spent all week in the hotel room (when I wasn&rsquo;t throwing up in Target) and then got stuck overnight in Charlotte. I am not going through all that again, so the fewer people I meet on the trip down, the better. And also, there&rsquo;s Cook Out. This cannot be understated - there&rsquo;s one just off I-75 as I get into the outskirts of Atlanta, and so I must go.</p>
<p>When I&rsquo;ve told people of this plan, there&rsquo;s a certain split. Americans cock their head at the drive time and then say &ldquo;ah, that&rsquo;s not that bad.&rdquo; British people look at me as if I have completely lost my mind, given that it&rsquo;s a longer trip than London to Edinburgh. But don&rsquo;t worry! I will be bringing snacks. Of course, I normally load my iPad up with a host of British television the 1970s and 1980s for the plane ride…and while I can do that again, it&rsquo;s probably not the best idea to try and watch any of it during the trip<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup>. So…podcasts? But I&rsquo;m not really a podcast person. Seven hours of &ldquo;Ian&rsquo;s old &lsquo;walk to Activision&rsquo; playlist from 2011&rdquo;? That is somewhat more likely.</p>
<p>(I did look into going via train as well. Obviously, that just sent me into a spiral of &ldquo;look at all the train lines China has built in the past 30 years!!&rdquo; after seeing the Amtrak schedule)</p>
<p>I will also try and test my all-new remote posting set up next weekend, allowing me for the first time in over 10 years to post without out my personal laptop. Less exciting for all of you to be getting updates from Buc&rsquo;ees, mind you…</p>
<section class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1" role="doc-endnote">
<p>It is going to be all-interstate, though, and I&rsquo;ve discovered this weekend that my car is actually smarter than I thought (it can parallel park by itself???). Don&rsquo;t worry, I&rsquo;m not crazy enough to even think about turning the iPad on until I get to the hotel. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
    
  </channel>
</rss>
