Shellsharks Blogroll - BlogFlock 2026-07-14T04:01:58.190Z BlogFlock Adepts of 0xCC, destructured, Aaron Parecki, fLaMEd, Trail of Bits Blog, Westenberg, James' Coffee Blog, gynvael.coldwind//vx.log (pl), joelchrono, Evan Boehs, Kev Quirk, cool-as-heck, Posts feed, Sophie Koonin, <span>Songs</span> on the Security of Networks, cmdr-nova@internet:~$, Johnny.Decimal, Werd I/O, Robb Knight, Molly White, Hey, it's Jason!, Terence Eden’s Blog Commute to the gym & a gifted album - W28 - Joel's Log Files https://joelchrono.xyz/blog/w28 2026-07-14T02:00:00.000Z <p>And well, here is another weeknote for y’all to update you on what I’m up to. I’m still following the World Cup, I have done a return to the gym and even went on a Saturday.</p> <ul> <li> <p>⚽ Norway lost against England, so now the stakes are clear. No Latinos want Argentina to win again for some reason, and same goes for me, if England took Mexico out, they better get to the finals and snatch that cup. You got this Bellingham.</p> </li> <li> <p>🎨 Continued making a few more themes for the Nintendo 3DS, I made a theme for Terranigma—another SNES game I love—and another one based on TechDweeb’s iconic themes for retro handhelds!</p> </li> <li> <p>🛡️Purchased some stuff from AliExpress which arrived today, including a case for my 3DS styled after <em>Monster Hunter</em>, a glass panel replacement for the upper screen, a screen protector and an analog stick cap replacement, in case the rubber of mine dies like it often happens.</p> </li> <li> <p>🚲 Went to the gym on Saturday, and I did so riding my bike! Which means is the first time I left it locked without direct line of sight. I also had the bright idea of doing leg day. Riding back home was alright, but my legs and lower back have been achy for a while, send help.</p> </li> <li> <p>📱 Wrote a blogpost already, but yeah, I <a href="/blog/how-i-lost-my-phone/">lost my phone</a> for a whole day, and it was quite the stressful time. It’s all in the past by now, almost as if nothing had ever happened, time sure is weird.</p> </li> <li> <p>🛍️ Because of Summer vacation time, all of my family is now together yet again—so all the siblings are back here to annoy me!—that basically means we went window shopping to the mall again (and also buying some things too). My wallet is very light.</p> </li> <li> <p>💿 Acquired a new album for my Bandcamp collection! <a href="https://rozn.bandcamp.com/album/time-once-lost-remastered/"><em>Time Once Lost (Remastered)</em> by Rozen</a>. This was actually a gift from <a href="https://bojidar-bg.dev">Bojidar</a> because of my birthday—it took a while because Bandcamp screwed up—and it’s actually kind of crazy. It’s a bunch of remixes based on <em>The Legend of Zelda: Majora’s Mask</em> and <strong>IT RULES.</strong> Listening to it as I type this post.</p> </li> <li> <p>🎧 Besides that album I returned to a <em>Welcome to Night Vale</em> and some really interesting episodes of <em>99% Invisible</em></p> </li> </ul> <p><img src="/assets/img/blogs/2026-07-13-week.webp" alt="Collage of the Week" /></p> <h2 id="gaming">Gaming</h2> <p>This was a varied week when it comes to the devices I played. Playtime on my Nintendo 3DS, PSP, Nintendo Switch and my phone too!</p> <h3 id="started">Started</h3> <ul> <li><strong>Black Rock Shooter</strong> is a PSP exclusive I saw mentioned for the first time on the TWG Discord, since its graphical artstyle is one of the best in the system. We play as a cute/edgy black-haired anime girl with amnesia who is Humanity’s last hope in an apocalyptic future where machines are taking over. The game is a sort of rail shooter RPG where I move across stages and get close to the enemies to enter combat, which consists of shooting at them with a huge gun that the protagonist effortlessly carries somehow. It seems to follow the rule of cool pretty well, I’m interested in the story too, as the stakes are rather high! only completed like 5 missions so far.</li> </ul> <h3 id="ongoing">Ongoing</h3> <ul> <li><strong>Fire Emblem Awakening</strong> has become much more complicated now that I realized how pairing up characters together to make them get married affects the events in the game! The story has become very interesting now with some revelations I kind of saw coming but with implications far bigger than I thought. For now, I’m having fun! But definitely needed a little break, which is why I started BRS.</li> </ul> <h3 id="finished">Finished</h3> <ul> <li> <p><strong>Monument Valley: Forgotten Shores</strong> was another DLC of the original <em>Monument Valley</em> and I really love how different the theme of each level was. The artistic style of this title is unmatched and timeless. Beautiful isometric themes with super creative levels that really broke my brain even more than the original levels and <em>Ida’s Dream</em>. That final eight level was truly something else, I had to find help for a part of it, but other than that, basically a sequel in an on itself—I’ll definitely play the other two games too!</p> </li> <li> <p><strong>Transistor</strong> is over, and it was very, very good. This game came before Hades and you can tell how it inspired it. The gameplay was very good in my opinion, a weird mix of action and turn based combat that kind of felt like <em>Into the Breach</em></p> </li> </ul> <h2 id="reading">Reading</h2> <ul> <li> <p><strong>Kingdom</strong> - Up to chapter 873. After finishing <em>Shikimori’s Not Just a Cutie</em> I was missing something more focused on action stuff and decided to return here. As always, it does not dissapoint, the Hi Shin Unit is going on the offensive now, as well as some other armies, but the great general and enemy of Qin, Riboku, seems to have a plan to make everyone understand his true might as a strategist.</p> </li> <li> <p><strong>Blue Lock</strong> - Up to chapter 353. Blue Lock’s next opponent is England, and they continue to discuss how to face off against them. There’s a bit of an unexpected visit that shakes the team a bit, but fun stuff is happening!</p> </li> <li> <p><strong>Spy x Family</strong> - Up to chapter 137. After Loid manages to escape the hilarious scenario of the previous arc, he’s way too exhausted and ends up in the hospital, where her fellow spy coworker—who has a huge crush on him—ends up trying to fulfill some super dangerous mission to earn his attention, but Anya doesn’t want any of it, other than candy.</p> </li> </ul> <h2 id="watching">Watching</h2> <p>I wanted to watch the sheep detectives movie but my siblings watched it without me first and I haven’t had a chance to see it on my own. However, I saw another masterpiece.</p> <ul> <li><strong>Megamind</strong> - I already watched this film this year, but this is one of those films that you just can’t help but love. What a fantastic film this is, both hilarious and actually epic. The best animated superhero film after <em>The Incredibles</em>. Way better than <em>Despicable Me</em>.</li> </ul> <h2 id="around-the-web">Around the Web</h2> <h3 id="blog-posts">Blog posts</h3> <ul> <li><a href="https://tiramisu.bearblog.dev/world-cup-philly/">i went to the world cup and all i got was my umbrella taken away</a> - a thoughtful slice of life from tiramisu reflecting on the world cup, football and the experience of it all!</li> <li><a href="https://neilzone.co.uk/2026/07/holiday-reading-mostly-from-standard-ebooks/">Holiday reading, mostly from Standard eBooks</a> - Neil shares some rather curious reads he chose from the public domain, I just like seeing people mention Standard Ebooks in the wild.</li> <li><a href="https://brennan.day/is-the-juice-worth-the-squeeze/">Is the Juice Worth the Squeeze?</a> - An piece from Brennan that shares some wisdom I hadn’t seen worded in such a way, it definitely got me thinking and I think you should check it out as well.</li> <li><a href="https://louplummer.lol/i-know-everything/">I Know Everything About You</a> - Lou shares some life experiences related to his skill—one I’m jealous of—to actually remember details about people and their life.</li> <li><a href="https://syls.blog/my-nintendo-3ds-xl/">My Nintendo 3DS XL</a> - Syl wrote a wonderful piece inspired by my own post on the 3DS. I loved the pictures and especially the pendants she shared, lots of personality in a single photo. I should get some charms for my handhelds too…</li> </ul> <h3 id="youtube">YouTube</h3> <ul> <li><a href="https://youtu.be/Pe-hTq0eTSU">I Made My LEGO Gameboy Actually Playable!</a> - I am aware of Natalie’s design using real Game Boy parts, but this alternative isn’t bad either! Good stuff.</li> <li><a href="https://youtu.be/6gqZ4UPbbBY">Designing My Dream Retro Handheld</a> - Ross has made this epic video where he shares a wishlist of features for the ultimate 4:3 handheld. I agree with pretty much every single point. It will probably never happen.</li> <li><a href="https://youtu.be/kZVX7PHbqJ4">Ammo Counters</a> - Oh man, this challenge is always a joy, and this retrospective on videogame ammo counters was incredible. The whole evolution of the mechanic until the modern day.</li> <li><a href="https://youtu.be/lmTIzxpkmac">Nintendo Was Right</a> - After Sony announcing that physical media will die, it seems like, as bad as Nintendo is, they are the least bad of them all, which I guess deserves some respect nowadays.</li> </ul> <p>This is day 96 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Commute to the gym & a gifted album - W28">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/116916038995903818">Reply on Fediverse</a> </p> Finished reading Wasteland Warlords 5 - Molly White's activity feed 6a55962f91f30f1ebee06849 2026-07-14T01:51:43.000Z <article class="entry h-entry hentry"><header><div class="description">Finished reading: </div></header><div class="content e-content"><div class="book h-entry hentry"><a class="book-cover-link" href="https://www.mollywhite.net/reading/books?search=Wasteland%20Warlords%205"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1701969603i/203421116.jpg" alt="Cover image of Wasteland Warlords 5" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Wasteland Warlords</i> series, book <span class="series-number">5</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">Wasteland Warlords 5</i> </div><div class="byline">by <span class="p-author h-card">James A. Hunter</span> and <span class="p-author h-card">Eden Hudson</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2024">2024</time>. 131 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-07-12">July 12, 2026</time>; completed July 12, 2026. </div></div></div></div></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-07-14T01:51:43+00:00" title="July 14, 2026 at 1:51 AM UTC">July 14, 2026 at 1:51 AM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=fantasy" title="See all books tagged "fantasy"" rel="category tag">fantasy</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=humor" title="See all books tagged "humor"" rel="category tag">humor</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=litrpg" title="See all books tagged "litRPG"" rel="category tag">litRPG</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=post_apocalyptic" title="See all books tagged "post-apocalyptic"" rel="category tag">post-apocalyptic</a>. </div></div></footer></article> Finished reading Wasteland Warlords 4 - Molly White's activity feed 6a5595fa91f30f1ebee06823 2026-07-14T01:50:50.000Z <article class="entry h-entry hentry"><header><div class="description">Finished reading: </div></header><div class="content e-content"><div class="book h-entry hentry"><a class="book-cover-link" href="https://www.mollywhite.net/reading/books?search=Wasteland%20Warlords%204"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1701969907i/203421361.jpg" alt="Cover image of Wasteland Warlords 4" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Wasteland Warlords</i> series, book <span class="series-number">4</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">Wasteland Warlords 4</i> </div><div class="byline">by <span class="p-author h-card">James A. Hunter</span> and <span class="p-author h-card">Eden Hudson</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2024">2024</time>. 141 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-07-10">July 10, 2026</time>; completed July 11, 2026. </div></div></div></div></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-07-14T01:50:50+00:00" title="July 14, 2026 at 1:50 AM UTC">July 14, 2026 at 1:50 AM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=fantasy" title="See all books tagged "fantasy"" rel="category tag">fantasy</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=humor" title="See all books tagged "humor"" rel="category tag">humor</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=litrpg" title="See all books tagged "litRPG"" rel="category tag">litRPG</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=post_apocalyptic" title="See all books tagged "post-apocalyptic"" rel="category tag">post-apocalyptic</a>. </div></div></footer></article> Somewhere, I'm online and listening to music - Posts feed https://www.coryd.dev/posts/2026/somewhere-im-online-and-listening-to-music 2026-07-13T22:24:00.000Z <div class="e-content"><p>I&#39;ve had the song I&#39;m currently listening to and, if idle, the last song played displayed on my home page for a while now. Initially, it was powered by <a href="https://www.last.fm">last.fm</a>. As I&#39;ve <a href="https://www.coryd.dev/posts/2025/evolving-my-personal-music-scrobbler">built</a> <a href="https://www.coryd.dev/posts/2024/building-a-scrobbler-using-plex-webhooks-edge-functions-and-blob-storage">my</a> <a href="https://www.coryd.dev/posts/2024/tracking-the-music-i-listen-to">own</a> <a href="https://www.coryd.dev/posts/2024/improving-my-self-hosted-scrobbling-implementation">scrobbler</a>, I populated the element from my own data. The static implementation is straightforward: I store each listen as a record, when a listen is inserted, the cache is cleared and warmed and an update is displayed.</p> <p>What I&#39;ve been kicking around as an idea has been to have a live progress display to complement this. I implemented something like this briefly while using <a href="https://jellyfin.org">Jellyfin</a> to listen to music, but Jellyfin&#39;s webhooks weren&#39;t made for a live update like this.</p> <p>I&#39;ve been using a <a href="https://www.coryd.dev/snippets/navidrome-scrobbling-plugin-2026-02-18-15-37-35">Navidrome plugin to scrobble to my own API</a> and this was a good opportunity to try and expand on it. Luckily, Navidrome added a <code>playback_report</code> method in v0.62 with exactly the data I needed: <code>state</code>, <code>position_ms</code>, <code>playback_rate</code>, and the track duration. When I&#39;d attempted this with Jellyfin, I&#39;d done so by advancing every single tick using a webhook payload. In this case, I&#39;m pushing an anchor — position, playback rate, duration — and the bar&#39;s motion is a CSS animation with a negative delay, so the browser interpolates. A new fragment only lands when the live state diverges from the predicted state: pause, seek or track change. Paused playback differs in display, but it&#39;s simply an anchor with a frozen rate.</p> <p>The other challenge here is that I wanted this to work without JavaScript. JavaScript can enhance the implementation, but it should be enhanced from a state where progress is already updated live on the page. This is also what I first shipped: the now playing display on its own document, the connection to which is held open while being loaded in an <code>iframe</code>.</p> <p>The iframe works and it works without Javascript, but there&#39;s a cost: if the response never completes, the page never stops loading. Everything works. It&#39;s cosmetic. JavaScript lets us paper over that as an enhancement.</p> <aside> <p>I&#39;d tried setting <code>loading=&#34;lazy&#34;</code> on the <code>iframe</code>, but that only exempts the frame while it&#39;s out of view — this is above the fold.</p> </aside> <p>The enhancement here took the form of server-sent events. The same fragments the <code>iframe</code> gets — byte for byte, same markup, same CSS — but sent to an <code>EventSource</code>. A background fetch written into a mount point on the page. No loading spinner and the JavaScript-free implementation acts as the <code>noscript</code> fallback.</p> <h2 id="four-failures">Four failures</h2> <ol> <li>Caddy&#39;s <code>encode zstd gzip</code> compressed the now playing event stream and compressing a never-ending response buffers it. Setting <code>flush_interval -1</code> didn&#39;t prevent compression buffering. Excluding the route from <code>encode</code> fixed the buffering behavior.</li> <li>The <code>iframe</code> hid a layout bug: long titles could run past the widget layout. A grid item&#39;s default <code>min-inline-size: auto</code> sets the floor at its own <code>min-content</code> and a <code>nowrap</code> line of text will grow unbounded. Setting <code>min-inline-size: 0</code> on a flex child does not mitigate this. Moving the enhanced version of the widget out of the iframe exposed this bug.</li> <li>View transition clashes: I animate album cover images when navigating from a page with one to the dedicated album page. I&#39;m displaying the album cover in the now playing widget and <em>may</em> display it elsewhere on my home and music index pages. These transition names are derived using the album URL but the browser aborts transitions when there&#39;s a duplicate name. So, if there&#39;s a copy of the same album cover outside of the widget, I remove the widget&#39;s transition and fallback to the default page level transition.</li> <li>The outstanding one: if I quit <a href="https://www.coryd.dev/posts/2025/i-made-a-music-app">my music app</a>, I&#39;ll end up displaying the wrong track until I transition tracks. This is an edge case, but it&#39;s one I&#39;d like to solve. If I pause a track, quit, open and resume, Navidrome stops emitting reports. Resuming the track doesn&#39;t resolve the issue either.</li> </ol> <p>The last bug may be self-inflicted too, I&#39;m not sure. I had a bug fix release queued for Cadence and dropped in an update to report now-playing status and progress reporting. I&#39;m pretty confident in that implementation, but I&#39;m no fan of absolutes.</p> <p>An edge case aside, this has been working well and by well I mean that if I visit my site while I&#39;m listening to music the metadata and progress all lines up.</p> <div id="np-mount" class="np-mount"></div><noscript><iframe class="block-now-playing-frame" src="https://www.coryd.dev/now-playing/stream" title="Now playing" loading="lazy"></iframe></noscript><p>I&#39;ve also been thinking about <em>why</em> I built this and the answer to that has been simple: it&#39;s fun. Remember going to a friend&#39;s MySpace page and seeing what tracks they had pinned? What autoplayed through your speakers in a blast, to the dismay of everyone else in earshot? I miss that. That was fun.</p> <p>I guess this is a tribute to a more personalized, less standardized and sterile web. On its face, it&#39;s a widget, but the motivation is to recreate things that I enjoyed and still do. It&#39;s an indicator of presence — somewhere I&#39;m online and listening to music. Not unlike an AIM status message, perhaps?</p> </div> 📝 2026-07-13 23:22: Every time I look at Sven's blog I get jealous. I loved his previous design... - Kev Quirk https://kevquirk.com/2026-07-13-2322 2026-07-13T22:22:00.000Z <p>Every time I look at Sven's blog I get jealous. I loved his previous design so much I copied it (with his permission). His new design is <em>so</em> fun and it's making me want to make mine more fun (no copying this time though).</p> <p>I'm just not sure I have the time at the moment. 🤔</p> <p><a href="https://svbck.blog/" rel="noopener noreferrer">https://svbck.blog/</a></p> <div class="email-hidden"> <hr /> <p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p> <p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-07-13%2023%3A22">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-07-13-2322#comments">leave a comment</a>.</p> </div> Climate.gov was destroyed. Open data saved it. - Werd I/O 6a5535f8ad6ac20001d46975 2026-07-13T19:01:12.000Z <p>Link: <a href="https://19thnews.org/2026/07/noaa-climate-data-website/"><em>Trump dismantled a federal climate website. These women rebuilt it., by Jenae Barnes at The 19th</em></a></p><p>This shouldn&#x2019;t have been necessary, but is still wonderful to see. Climate.gov had been the go-to resource for climate data, but it went offline when the Trump Administration radically cut NOAA&#x2019;s funding. <a href="https://19thnews.org/2026/07/noaa-climate-data-website/">At that point</a>:</p><blockquote>&#x201C;[Rebecca] Lindsey joined forces with former NOAA employees Anna Eshelman, and Mary Lindsey, her older sister, to become the core team behind the deactivated site&#x2019;s successor, <a href="https://climate.us">Climate.us</a>, preserving over 15 years of key climate data and resources. The trove features key maps, educational materials and climate indicator reports, including the now-deleted Fifth National Climate Assessment, the government&#x2019;s most comprehensive analysis of climate change that was at risk of being lost to the public.&#x201D;</blockquote><p>This is possible because US government data is public domain by law. Had it not been available under a permissive license, the administration&#x2019;s act of vandalism would have meant the data was gone for good. But because it was, the datasets can find a new home.</p><p>It&#x2019;s a joy to use. <a href="https://www.climate.us/climatedashboard">Check out the climate dashboard</a>, which tracks numbers like the <a href="https://www.climate.us/news-features/understanding-climate/climate-change-arctic-sea-ice-summer-minimum">total area of the Arctic Ocean that was at least 15% ice-covered each September</a>. It also hosts a set of <a href="https://www.climate.us/teaching">resources for teaching climate and energy</a>. The <a href="https://www.climate.us/maps-data/dataset-gallery">dataset gallery</a> includes crucial information like <a href="https://www.climate.us/maps-data/dataset/noaa-voices-oral-history-archives">the NOAA&#x2019;s archive of oral histories from people whose lives were affected by climate change</a>.</p><p>But it&#x2019;s also precarious. The whole thing relies on donations to keep it afloat, which is really what tax dollars are for. Still, for the moment it&#x2019;s wonderful to see people pick up the slack when government is no longer doing its job. In the absence of government support, archives like this are works of journalism in themselves: ways to help us make stronger decisions. They deserve stronger support, and ultimately, we all deserve the restoration of such important government infrastructure.</p> [RSS Club] Half a million steps is about 10 marathons - Terence Eden’s Blog https://shkspr.mobi/blog/?p=73094 2026-07-13T11:34:09.000Z <p><mark>Shhh! RSS Club posts are only available to feed subscribers. Keep the secret!</mark></p> <p>I'm not a big fan of the "Quantified Self" movement, but since buying <a href="https://shkspr.mobi/blog/2025/08/i-bought-a-16-smartwatch-just-because-it-used-usb-c/">a ridiculously cheap smartwatch</a>, I've been interested to see just how many steps I take per day.</p> <p>During <a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/">our recent Interrail holiday</a>, we travelled about 6,400 Km by train over 49 days. But how much did we cover by foot?</p> <p>My watch pairs with the Open Source app Gadgetbridge rather than the crappy app made by the manufacturer. Sadly, Gadgetbridge doesn't have a simple way to export data in a usable format. Instead, it spews out a database dump and asks you to <a href="https://gadgetbridge.org/internals/development/data-management/#steps-per-day">run SQL commands to get information out</a>.</p> <p>After a bit of swearing at the command-line, I got my daily step count. I didn't <em>always</em> wear my watch, but this is accurate enough for my purposes.</p> <p>In seven weeks, I took 545,453 steps.</p> <p>The average stride length for someone my height is around 80 cm.</p> <p>So that's a total of about 436,362 metres</p> <p>A marathon is about 42 Km.</p> <p>No wonder I feel knackered. I think I need a holiday to recover!</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73094&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Rust-proof your code with our new Testing Handbook chapter - Trail of Bits Blog https://blog.trailofbits.com/2026/07/13/rust-proof-your-code-with-our-new-testing-handbook-chapter/ 2026-07-13T11:00:00.000Z &lt;p&gt;We’ve added a new chapter to our &lt;a href="https://appsec.guide/"&gt;Testing Handbook&lt;/a&gt;: a comprehensive guide to security testing Rust programs. This chapter covers the tools and techniques we use at Trail of Bits to validate the security of Rust programs and systems.&lt;/p&gt; &lt;div id="rust-banner-code"&gt; &lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f0f0f0;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-rust" data-lang="rust"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;fn&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#06287e"&gt;main&lt;/span&gt;()&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;{(&lt;span style="color:#666"&gt;|&lt;/span&gt;f:&lt;span style="color:#007020"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;dyn&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#007020"&gt;Fn&lt;/span&gt;(&lt;span style="color:#902000"&gt;u128&lt;/span&gt;)-&amp;gt;&lt;span style="color:#007020"&gt;Box&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;dyn&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020"&gt;Iterator&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;&lt;/span&gt;Item&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#902000"&gt;char&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;gt;+&lt;/span&gt;&lt;span style="color:#007020"&gt;&amp;#39;static&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;gt;|&lt;/span&gt;f(&lt;span style="color:#666"&gt;*&lt;/span&gt;[&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;(&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x7B736D70683F73&lt;/span&gt;&lt;span style="color:#902000"&gt;u128&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;64&lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x7A6A6D7C3F7A667D&lt;/span&gt;),&lt;span style="color:#666"&gt;&amp;amp;&lt;/span&gt;(&lt;span style="color:#40a070"&gt;0x7B736D&lt;/span&gt;&lt;span style="color:#902000"&gt;u128&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;&lt;span style="color:#666"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;64&lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x70683F7073737A77&lt;/span&gt;)][((std::hint:: &lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0e84b5;font-weight:bold"&gt;black_box&lt;/span&gt;(&lt;span style="color:#40a070"&gt;0.0&lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;f64&lt;/span&gt;)&lt;span style="color:#666"&gt;/&lt;/span&gt;&lt;span style="color:#40a070"&gt;0.0&lt;/span&gt;).to_bits()&lt;span style="color:#666"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;63&lt;/span&gt;)&lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#902000"&gt;usize&lt;/span&gt;])&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;.for_each(&lt;span style="color:#666"&gt;|&lt;/span&gt;c&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#06287e"&gt;print!&lt;/span&gt;(&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#70a0d0"&gt;{c}&lt;/span&gt;&lt;span style="color:#4070a0"&gt;&amp;#34;&lt;/span&gt;)))(&lt;span style="color:#007020"&gt;Box&lt;/span&gt;::leak(&lt;span style="color:#007020"&gt;Box&lt;/span&gt;::new(&lt;span style="color:#666"&gt;|&lt;/span&gt;n: &lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#902000"&gt;u128&lt;/span&gt;&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#007020"&gt;Box&lt;/span&gt;::new(std::iter::successors(&lt;span style="color:#007020"&gt;Some&lt;/span&gt;(n),&lt;span style="color:#666"&gt;|&amp;amp;&lt;/span&gt;n&lt;span style="color:#666"&gt;|&lt;/span&gt;&lt;span style="color:#007020"&gt;Some&lt;/span&gt;(n&lt;span style="color:#666"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;8&lt;/span&gt;)&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#bbb"&gt;&lt;/span&gt;).take_while(&lt;span style="color:#666"&gt;|&amp;amp;&lt;/span&gt;n&lt;span style="color:#666"&gt;|&lt;/span&gt;n&lt;span style="color:#666"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color:#40a070"&gt;0&lt;/span&gt;).map(&lt;span style="color:#666"&gt;|&lt;/span&gt;n&lt;span style="color:#666"&gt;|&lt;/span&gt;((n&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#902000"&gt;u8&lt;/span&gt;)&lt;span style="color:#666"&gt;^&lt;/span&gt;&lt;span style="color:#40a070"&gt;0x1F&lt;/span&gt;)&lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;&lt;span style="color:#902000"&gt;char&lt;/span&gt;))&lt;span style="color:#007020;font-weight:bold"&gt;as&lt;/span&gt;&lt;span style="color:#bbb"&gt; &lt;/span&gt;_)))}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;h2 id="whats-in-the-chapter"&gt;What’s in the chapter&lt;/h2&gt; &lt;p&gt;The chapter starts with a security overview of what Rust’s guarantees do and don’t cover, including underappreciated issues like unwind safety, nondeterminism, and arithmetic errors. This leads into an overview of dynamic analysis, which covers a range of boosters for unit tests, how to use Miri to detect undefined behavior, property testing with &lt;code&gt;proptest&lt;/code&gt;, coverage measurement, and mutation testing. The static analysis section then covers Clippy in depth, including a list of our favorite lints.&lt;/p&gt; &lt;p&gt;Beyond tooling, the chapter also covers what we’ve learned from auditing Rust codebases directly. Our gotchas and footguns checklist is a great reference for manual code reviews, and will help you find subtle issues like &lt;code&gt;a &amp;amp; b == c&lt;/code&gt; having different operator precedence than in C. The memory zeroization section offers three solutions to the tricky problem of guaranteeing that secrets are erased from memory.&lt;/p&gt; &lt;p&gt;Finally, the specialized testing sections cover tools like Kani (a model checker), and the supply chain section covers the full toolchain for vetting dependencies.&lt;/p&gt; &lt;h2 id="still-oxidizing"&gt;Still oxidizing&lt;/h2&gt; &lt;p&gt;We’ve also &lt;a href="https://github.com/trailofbits/skills/tree/main/plugins/rust-review"&gt;released rust-review&lt;/a&gt;, a Claude Code plugin for automated Rust security reviews. Co-built with Aptos Labs, it targets over a dozen bug classes, from memory safety and concurrency hazards to FFI pitfalls and async cancellation issues. It’s a fast way to catch security issues in a Rust codebase before they make it to audit.&lt;/p&gt; &lt;p&gt;Our goal is to keep the handbook current as the Rust ecosystem evolves. If your favorite tool or gotcha isn’t covered, &lt;a href="https://github.com/trailofbits/testing-handbook"&gt;submit a PR&lt;/a&gt;. And if you need help securing your Rust systems, &lt;a href="https://www.trailofbits.com/contact/"&gt;contact us&lt;/a&gt;.&lt;/p&gt; There And Back Again - The Weblog of fLaMEd https://flamedfury.com/posts/there-and-back-again/ 2026-07-13T08:00:00.000Z <p>What’s going on, Internet? This was meant to be the April wrap-up. It’s now the middle of July, so let’s call it the autumn-into-winter wrap-up and pretend that was the plan all along, lol.</p> <p>Autumn kicked off with <a href="https://flamedfury.com/posts/happy-easter-2026/">Easter</a> down in Martinborough and a batch of <a href="https://flamedfury.com/posts/hot-cross-buns/">hot cross buns</a>. I managed to get to three gigs in three months: <a href="https://flamedfury.com/posts/mgk-at-the-spark-arena/">MGK at Spark Arena</a>, <a href="https://flamedfury.com/posts/split-enz-at-spark-arena/">Split Enz at Spark Arena</a>, and a solo night out for <a href="https://flamedfury.com/posts/home-brew-presents-last-week/">Home Brew performing Last Week at the Auckland Town Hall</a>. I’m so happy I got to see Home Brew perform live, finally after all these years. Auckland has been really good for me being able to get out to gigs more frequently.</p> <p>More recently, this month we escaped a rainy afternoon at <a href="https://flamedfury.com/posts/kelly-tarltons/">Kelly Tarlton’s</a>. The following weekend we headed south to <a href="https://www.butterflycreek.co.nz/" rel="noopener">Butterfly Creek</a> and spent the afternoon there. My first time visiting and really enjoyed it. It’s part butterfly sanctuary, part farm, part zoo, part adventure playground, and part dinosaur kingdom, lol. There’s a lot going on. We spent around 30 minutes in the butterfly house while my son stood super still in an attempt to have a butterfly land on him. So cute, but didn’t work out for him this time.</p> <p>Then finally the weekend just been we spent a long weekend <a href="https://flamedfury.com/posts/manawatia-a-matariki/">on Waiheke for Matariki</a>. We spent Friday on the beach, hot chocolate and fluffies at the beach cafe, late lunch at The HEKE, and a bus trip to Oneroa for ice cream. Saturday we spent the morning at the Ostend Markets, back to the beach, then back to the beach cafe for an early dinner and to watch the All Blacks Italy game.</p> <p>When I last wrote about books, it was all about reading <a href="https://flamedfury.com/posts/damn-i-can-still-read/">eBooks again</a>. Since then I’ve got through nine books, with only <a href="https://flamedfury.com/bookshelf/a-darkness-returns/">A Darkness Returns</a> being an eBook. Highlights of these books were <a href="https://flamedfury.com/bookshelf/the-new-girl/">The New Girl</a> and <a href="https://flamedfury.com/bookshelf/leave-before-you-go/">Leave Before You Go</a> by Emily Perkins, <a href="https://flamedfury.com/bookshelf/platform-decay/">Platform Decay</a> by Martha Wells and the return to James S. A. Corey’s new universe <a href="https://flamedfury.com/bookshelf/the-faith-of-beasts/">The Faith of Beasts</a>.</p> <p>I also read <a href="https://flamedfury.com/bookshelf/the-lean-startup/">The Lean Startup</a>, <a href="https://flamedfury.com/bookshelf/blood-ties-world-of-warcraft/">Blood Ties</a>, <a href="https://flamedfury.com/bookshelf/famesick/">Famesick</a>, <a href="https://flamedfury.com/bookshelf/don-t-burn-anyone-at-the-stake-today/">Don’t Burn Anyone at the Stake Today</a> but mostly didn’t finish these.</p> <p>The record shelf did some damage this quarter, 20 new arrivals. June was basically an Olivia Rodrigo situation, and each gig sent me home with its record: MGK’s Lost Americana, True Colours after Split Enz, and Last Week on pink vinyl after the Home Brew show.</p> <div class="grid" style="--grid-min-item-size: 12rem;"> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/carry-on-heliacal-sun/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/carry-on-heliacal-sun.webp" alt="Chris Cornell - Carry On album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/rnzo-szn/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/rnzo-szn.webp" alt="RNZŌ - RNZŌ SZN album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/the-joy-of-living-translucent-purple/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/the-joy-of-living-translucent-purple.webp" alt="Amamelia - The Joy Of Living album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/encore-20th-anniversary-blue-edition/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/encore-20th-anniversary-blue-edition.webp" alt="Eminem - Encore album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/lost-americana-azure-blue/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/lost-americana-azure-blue.webp" alt="MGK - Lost Americana album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/oxymoron-silver-and-ultra-clear/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/oxymoron-silver-and-ultra-clear.webp" alt="Schoolboy Q - Oxymoron album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/up-here-translucent-blue/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/up-here-translucent-blue.webp" alt="The Bluey Music Team - Up Here album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/gangsta-s-paradise-blue/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/gangsta-s-paradise-blue.webp" alt="Coolio - Gangsta's Paradise album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/true-colours-yellow/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/true-colours-yellow.webp" alt="Split Enz - True Colours album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/little-wide-open-peach/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/little-wide-open-peach.webp" alt="Kevin Morby - Little Wide Open album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/last-week-pink/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/last-week-pink.webp" alt="Home Brew - Last Week album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/ascending/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/ascending.webp" alt="Clear Path Ensemble - Ascending album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/3-dream-pop/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/3-dream-pop.webp" alt="Britney Spears - 3 album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/coast-arcade-blue-marbled/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/coast-arcade-blue-marbled.webp" alt="Coast Arcade - Coast Arcade album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/walk-of-fame-reborn-translucent-blue/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/walk-of-fame-reborn-translucent-blue.webp" alt="Miley Cyrus - Walk Of Fame / Reborn album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/drivers-license-burning-down-the-house-translucent-red/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/drivers-license-burning-down-the-house-translucent-red.webp" alt="Olivia Rodrigo - Drivers License / Burning Down The House album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/sour-sour-purple/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/sour-sour-purple.webp" alt="Olivia Rodrigo - Sour album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/you-seem-pretty-sad-for-a-girl-so-in-love-pretty-sad-pink/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/you-seem-pretty-sad-for-a-girl-so-in-love-pretty-sad-pink.webp" alt="Olivia Rodrigo - You Seem Pretty Sad For A Girl So In Love album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/decemberunderground-transparent-smoke/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/decemberunderground-transparent-smoke.webp" alt="AFI - Decemberunderground album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> <article class="record-card hypercard-effect"> <a href="https://flamedfury.com/recordshelf/records/zips-galore-solid-yellow/" class="record-card__link"> <img src="https://covers.shelf.flamedfury.com/records/zips-galore-solid-yellow.webp" alt="+++! - ZIPS GALORE album cover" class="record-card__image" loading="lazy" width="400" height="400" /> </a> </article> </div> <p>I guess the other thing with three months to cover is that I got through <strong>a lot</strong> of media. Highlights being <a href="https://trakt.tv/shows/outer-banks" rel="noopener">Outer Banks</a>. I wrote up <a href="https://flamedfury.com/posts/outer-banks-2020-seasons-one-and-two/">seasons one and two</a> and have since torn through season three and halfway through season four as I write this. Such a fun show. I realised as I started season three that this reminds me of the recent Tomb Raider games or the older Uncharted games which I loved playing.</p> <p>The other big binge was <a href="https://trakt.tv/shows/hacks" rel="noopener">Hacks</a>, all five seasons, 47 episodes. I had an absolute blast with this show. It was sitting there waiting to be watched for literal years and I finally sat down and blasted through it.</p> <p>Another standout was <a href="https://trakt.tv/shows/tulsa-king" rel="noopener">Tulsa King</a>, got through the last two seasons quickly. I wasn’t expecting to enjoy this show so much!</p> <p><a href="https://trakt.tv/shows/the-boys" rel="noopener">The Boys</a> wrapped up with season five. I think I was satisfied with how it ended? Yeah, I think so. I also got through <a href="https://trakt.tv/shows/fallout" rel="noopener">Fallout</a> season two quickly, can’t wait for the next. And also wrapping up was <a href="https://trakt.tv/shows/euphoria" rel="noopener">Euphoria</a> which messily wrapped up with season three. This season was kinda bat shit, not sure whether I enjoyed it or not, but happy I don’t have to think about it any more.</p> <p>Keeping up with the weeklies and new seasons: <a href="https://trakt.tv/shows/house-of-the-dragon" rel="noopener">House of the Dragon</a> season three, <a href="https://trakt.tv/shows/x-men-97" rel="noopener">X-Men '97</a> season two, and <a href="https://trakt.tv/shows/power-book-iii-raising-kanan" rel="noopener">Power Book III: Raising Kanan</a> season five. This season we’re really seeing Kanan turning into how we saw him in Ghost.</p> <p>I’m also slowly working through <a href="https://trakt.tv/shows/only-murders-in-the-building" rel="noopener">Only Murders in the Building</a> season five with my wife and in-laws when we are able to sit down together and watch an episode.</p> <p>Eighteen movies since March. The highlights though. I caught <a href="https://trakt.tv/movies/project-hail-mary-2026" rel="noopener">Project Hail Mary</a> at the theatre with my brother-in-law before it stopped showing. Finally caught up with <a href="https://trakt.tv/movies/the-fantastic-4-first-steps-2025" rel="noopener">The Fantastic 4: First Steps</a> to make sure I’m up to speed with the road to Avengers: Doomsday. I was excited to see <a href="https://trakt.tv/movies/the-devil-wears-prada-2-2026" rel="noopener">The Devil Wears Prada 2</a> as the first always had a special nostalgic place in my heart.</p> <p><a href="https://trakt.tv/movies/anniversary-2025" rel="noopener">Anniversary</a> was an unexpected sleeper, I was not expecting what this movie ended up being after watching the trailer.</p> <p><a href="https://trakt.tv/movies/don-t-ever-stop-2024" rel="noopener">Don’t Ever Stop</a>, a fantastic documentary on Tony De Vit. This was especially good as a hardhouse fan and hearing legends of the scene talk about their interactions with Tony and memories of the origins of what became the hardhouse scene in the UK.</p> <p><a href="https://trakt.tv/movies/the-drama-2026" rel="noopener">The Drama</a> was an interesting one, and to be honest I thought the other woman’s secret she shared was way worse than Zendaya’s. Locking a kid in a fridge in the forest and not telling anyone is wild. Get out of here.</p> <p>And the rest… <a href="https://trakt.tv/movies/office-romance-2026" rel="noopener">Office Romance</a>, <a href="https://trakt.tv/movies/mile-end-kicks-2026" rel="noopener">Mile End Kicks</a>, <a href="https://trakt.tv/movies/a-real-pain-2024" rel="noopener">A Real Pain</a>, <a href="https://trakt.tv/movies/eenie-meanie-2025" rel="noopener">Eenie Meanie</a>, <a href="https://trakt.tv/movies/carolina-caroline-2026" rel="noopener">Carolina Caroline</a>, <a href="https://trakt.tv/movies/stone-cold-fox-2025" rel="noopener">Stone Cold Fox</a>. I don’t think I watched any I didn’t like.</p> <p>The bookmarks kept flowing while the blog was quiet. The best of them are already rounded up in the <a href="https://flamedfury.com/posts/link-dump-may-2026/">May</a> and <a href="https://flamedfury.com/posts/link-dump-june-2026/">June</a> link dumps, so I won’t repeat them here. Check out the <a href="https://flamedfury.com/bookmarks/">bookmarks page</a> for even more.</p> <p>Around the web? I can’t remember if I shared this already, but I participated with <a href="https://ctrl-c.club/~loghead/zine/Ctrl-ZINE.Issue.24.pdf" rel="noopener">issue 24</a> of the <a href="https://ctrl-c.club/~loghead/zine/" rel="noopener">Ctrl-ZINE</a>. Go give that a read! I also finally sat down with Manu to answer his <a href="https://zacharykai.net/notes/pb/flamed/" rel="noopener">People And Blogs</a> questions. Manu has also hung up his hat since founding and running the series for the last few years and <a href="https://zacharykai.net/" rel="noopener">Zachary Kai</a> has picked up the reins. You can find the <a href="https://zacharykai.net/notes/pb/" rel="noopener">archive here</a>.</p> <p><a href="https://jamesg.blog/" rel="noopener">James</a> has recently started a new podcast, <a href="https://web-weaving.jamesg.blog/" rel="noopener">Wonders of Web Weaving</a> which is 9 episodes deep as of writing. Catch up on all of them if you haven’t already, and if you keep listening you might hear yours truely in a week or two 😉</p> <p>Website wise, there’s plenty going on under the hood while I prepare for the 2027 redesign. Really looking forward to sharing this with you all soon. There’ve been a few improvements around the site, but you’ll see most of the changes when I roll out the new design.</p> <p>I did sit down and <a href="https://flamedfury.com/guides/11ty-homepage-neocities-2026/">refresh my 11ty and Neocities guide</a>. I’m really pleased with all the great feedback I’ve received from this one, especially with all the people who have successfully managed to build a website using 11ty with it.</p> <hr /> <p>Sweeet, laters 🤙</p> <p>Hey, thanks for reading this post in your feed reader! Want to chat? <a href="mailto:hello@flamedfury.com?subject=RE: There And Back Again">Reply by email</a> or add me on <a href="xmpp:flamed@omg.lol">XMPP</a>, or send a <a href="https://flamedfury.com/posts/there-and-back-again/#webmention">webmention</a>. Check out the <a href="https://flamedfury.com/posts/">posts archive</a> on the website.</p> 📝 2026-07-13 08:12: Haven't worn this watch for months, but it's such a fun one to wear in... - Kev Quirk https://kevquirk.com/2026-07-13-0812 2026-07-13T07:12:00.000Z <p>Haven't worn this watch for months, but it's such a fun one to wear in summer. Beautiful dial and a Seiko movement that will probably outlive me.</p> <p><img loading="lazy" src="https://kevquirk.com/content/images/2026-07-13-0812/1000010344.webp" alt="1000010344" /></p> <div class="email-hidden"> <hr /> <p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p> <p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-07-13%2008%3A12">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-07-13-0812#comments">leave a comment</a>.</p> </div> ‘Repeat that, repeat’ (Collaborative writing) - James' Coffee Blog https://jamesg.blog/2026/07/13/repeat-that-repeat 2026-07-13T00:00:00.000Z <p><a href="https://kedara.eu/"><em>Ruben</em></a><em> and I are doing a collaborative writing challenge where we both write our thoughts on the poem “Repeat that, repeat” by Gerard Manley Hopkins. We’re not trying to do an academic formal analysis, rather share our own thoughts. </em><a href="https://kedara.eu/repeat-that-repeat/" rel="noreferrer"><em>You can read Ruben's post on his website</em></a><em>.</em></p><p><em>If you are interested in writing your thoughts on the poem on your website, you are most welcome! </em><a href="https://jamesg.blog/email" rel="noreferrer"><em>Email me</em></a><em> if you write your own reflections, and I’ll add a link to your post if you write one at the bottom of this article.</em></p><h2 id="the-poem">The poem</h2> <!--kg-card-begin: html--> <br/> <!--kg-card-end: html--> <blockquote>Repeat that, repeat,<br/>Cuckoo, bird, and open ear wells, heart-springs, delightfully sweet,<br/>With a ballad, with a ballad, a rebound<br/>Off trundled timber and scoops of the hillside ground, hollow hollow hollow ground:<br/>The whole landscape flushes on a sudden at a sound.</blockquote><p><em>Source: </em><a href="https://en.wikisource.org/wiki/Poems_of_Gerard_Manley_Hopkins/Repeat_that,_repeat"><em>WikiSource</em></a><em>.</em></p><h2 id="my-thoughts">My thoughts</h2><p>I have heard people talk about the musicality of poetry – how the poetry sounds when read – but I have never explicitly thought about how a poem can encourage you to think of sounds. I am not sure if that was the intention with this poem, but the words “Repeat that, repeat” make me think of sound.</p><p>When I started to think about the phrase “Repeat that, repeat”, I thought of the ephemerality of sound: how sound exists and then fades away. To what extent is the call of a cuckoo the same the next time it calls? Does it sound the same to me but would be fundamentally different with a trained ear? I wonder.</p><p>The poem contains several examples of repetition: the use of “ballad” twice, the use of “hollow” thrice. Reading the last two lines, I had to look up the word “trundled”. It means rolled. Rolling is cyclical. Ballads have repeated lines; there is some degree of cyclicality in there, too. The more I read, the more I see repetition at all levels.</p><p>Then, the final line uses the word “sudden,” which evokes a moment rather than a cycle. It feels like I am being invited to stop for a moment to think about the sound, rather than to get caught up in the flow of Nature.</p><p>I see musical words in the second two lines: “hollow” can evoke sound, “flushes” is like the flood of water. Earlier in the poem, “ear wells” is used. “Ear” evokes listening; “wells” reminds me of water. “heart-springs” – a term I have never read before – contains “springs”, which also evokes water and flowing. This poem seems to flow on and on: when I get to the end, I want to go back to the beginning. Almost like a ballad. </p><p>The use of “whole landscape” toward the end makes me think of the all-encompassing nature of sound: a sound can take the centre stage in our view of the world, to the extent that the view of the landscape changes as we hear a new sound. Now that I think about it, the landscape changes with sound, too: the call of a cuckoo may encourage another to move, the sound of water flowing indicates that water is moving; the sound radiates through the air.</p><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a1a6bc9a9e2fe905',t:'MTc4MzkyOTQ0NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://en.wikisource.org/wiki/Poems_of_Gerard_Manley_Hopkins/Repeat_that,_repeat">WikiSource</a> <a class="tag" href="https://jamesg.blog/email">Email me</a> <a class="tag" href="https://kedara.eu/">Ruben</a> <a class="tag" href="https://kedara.eu/repeat-that-repeat/">You can read Ruben's post on his website</a> The Trump administration is subpoenaing journalists to reveal sources. Their data security is more important than ever. - Werd I/O 6a53abc59a650a00018af417 2026-07-12T14:59:17.000Z <p>Link: <a href="https://www.nytimes.com/2026/07/11/us/politics/white-house-patel-investigation-times.html?unlocked_article_code=1.xFA.9q52.ZL9VNq1-BClg&amp;smid=url-share"><em>White House Directed Patel to Oversee Investigation Involving Times Reporting, by Devlin Barrett, Glenn Thrush, and Maggie Haberman at the New York Times</em></a></p><p>The White House personally directed FBI Director Kash Patel to <a href="https://www.nytimes.com/2026/07/11/business/media/new-york-times-trump-subpoenas.html">issue subpoenas to journalists reporting on the President&#x2019;s new Qatari-gifted Air Force One</a>.</p><blockquote>&#x201C;The White House&#x2019;s deep involvement in the case came after officials said that President Trump was enraged about the coverage of the Qatari-donated plane, which The Times reported Thursday lacks the same defensive countermeasures of the previous Air Force One.&#x201D;</blockquote><p>These subpoenas were delivered by hand to some of the reporters at home, echoing <a href="https://www.theguardian.com/us-news/2026/jan/14/fbi-raid-washington-post-hannah-natanson">the FBI&#x2019;s raid of a Washington Post engagement reporter&#x2019;s home</a> earlier this year. In both cases, it&#x2019;s highly likely that these were attempts to discover who leaked information to their respective newsrooms.</p><p>There&#x2019;s lots to say about first amendment issues here, and commentators like <a href="https://dankennedy.net/2026/07/11/from-the-trump-regime-to-a-rogue-judge-in-new-jersey-the-first-amendment-is-under-assault/">Dan Kennedy at Media Nation</a> have pertinent thoughts. It&#x2019;s clear that journalism is under attack by the administration, and <a href="https://www.npr.org/2025/04/25/nx-s1-5377624/pam-bondi-reporters-subpoena-leaks">they rescinded rules that protected journalists in leak investigations last year</a>. The <a href="https://pressfreedomtracker.us/">US Press Freedom Tracker</a> is a sobering read. But it&#x2019;s also important to take a moment to talk about the technology side of this story.</p><p>When the administration wants to issue a subpoena to a newsroom, it has a few avenues available to it. The first is to issue it directly to the newsroom or to its reporters, as they did here. In some ways, this is the best outcome: then the newsroom knows about the subpoena and can actively fight it in court.</p><p>The other avenue is to subpoena the newsroom&#x2019;s service providers. If source information is stored unencrypted on a service like Google Workspace, the administration could subpoena Google. If a gag order is added &#x2014; which might well happen if it&#x2019;s a criminal subpoena or labeled a matter of national security &#x2014; then the newsroom would never find out and have the chance to fight it. This is true even if the service provider nominally promises to notify the newsrooms about subpoenas: a gag order is a gag order.</p><p>Larger newsrooms have strong data security practices for this reason: they know to create policies and architectures which force subpoenas to come through them. But not every newsroom has the capacity to build a strong security strategy. Which means for every story we hear about that involves these newsrooms, there may be many more that took place in secret.</p><p><a href="https://freedom.press/digisec/">The Freedom of the Press Foundation maintains digital security resources and runs training for newsrooms</a> and <a href="https://freedom.press/digisec/blog/source-protection/">specific advice about source protection</a>. <a href="https://www.eff.org/issues/security-education">The EFF also has some great resources</a>. More resources are out there. But there is more of a need than ever for every newsroom to make sure they have access to someone who can advise them on digital security both holistically and on a case-by-case basis. Not every newsroom can afford a permanent member of staff, but finding access to some kind of resource is vital.</p><p>Likewise, journalism funders should focus on providing access to experts, understanding that these issues are existential for the organizations they fund. Not only is this an attack on press freedoms, but it&#x2019;s also an attack on trust. Every newsroom can do its reporting because sources feel safe to reach out to it; if their safety is in question, they may be less likely to leak, and we may be less likely to read the stories that help us make good democratic decisions. That&#x2019;s what the administration seems to be banking on.</p> Another Ridiculous Interrail Holiday - 6,379Km and 13 Countries over 7 weeks - Terence Eden’s Blog https://shkspr.mobi/blog/?p=73007 2026-07-12T11:34:43.000Z <p>Last year, my wife and I went on a <a href="https://shkspr.mobi/blog/2025/06/5025-km-21-journeys-and-10-countries-in-30-days-an-interrailing-adventure/">5,025 Km Interrail adventure</a>. We got the month-long unlimited pass and saw 10 Countries in 30 Days. That was a bit too intense. So this year we got the 15 travel days in 2 months package. We grabbed the 1st class tickets when they went on sale in December.</p> <p>Here's how our journey ended up:</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/Long-Interrail-Journey.webp" alt="A map of Europe with several countries connected by a black line." width="1526" height="1505" class="alignnone size-full wp-image-73008"> <p>The trip included two ferries - one overnight - which had a small Interrail discount. In total we spent approximately 40 hours on trains over a 7 week trip.</p> <p>This blog post looks at the practicalities of the journey and the experience we had while travelling. You are free to decide which cities you want to visit and which you want to skip. This worked (mostly) for us - you should write a blog post about your own experiences.</p> <h2 id="london-to-brussels"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#london-to-brussels">London To Brussels</a></h2> <p>Eurostar St Pancras is dangerously crowded and needs tearing down. You can use <a href="https://www.realtimetrains.co.uk/search/detailed/gb-nr:STP?stp=WVS&amp;show=all&amp;order=wtt&amp;toc=ES">RealTimeTrains to see your departure platform before it is announced</a> - that's useful for avoiding some of the queues.</p> <p>The first-class service in Eurostar is lovely (even if it doesn't get you access to the lounge). Unfortunately, you need to book vegan meals a few days in advance - a deadline I missed. The veggie option was fine though.</p> <p>Made it to Brussels where we hit our first snag.</p> <h2 id="brussels-to-hamburg"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#brussels-to-hamburg">Brussels to Hamburg</a></h2> <p>We'd booked some of our tickets months in advance. What we hadn't realised is that construction work had been announced and our train would be getting is much later than we anticipated.</p> <p>Neither Interrail (who we booked the seat reservations through) nor DB (who had our contact details) thought to tell us about the change in journey. Nevertheless, we jumped on a train and had a pleasant enough trip up to Germany.</p> <p>The Interrail refund form is ridiculously complicated and asks for various screenshots. There really ought to be a big "DB Screwed Up" button for an instant refund. Still, after a couple of days the refund came through.</p> <h2 id="hamburg-to-copenhagen"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#hamburg-to-copenhagen">Hamburg to Copenhagen</a></h2> <p>There's a DB lounge at the station. We received suspicious stares at our Interrail passes which then necessitated deep examination of our seat reservation by two people. Begrudgingly they let us in. There were comfortable seats and some free drinks. It was mostly quiet until various children started crying.</p> <p>The train was gentle and slow. 1st class got a snack included - veggie but not vegan. For the first time since leaving the UK there were passport checks which were friendly.</p> <p>At one point there was a quiet announcement in German. We didn't think much of it until everyone started getting off the train. Turns out one of the carriages had suffered a failure and we were turfed out at Nyborg. Approximately 1,000 passengers attempted to board the next available train - it looked like an utter crush. So we waited for the one after that.</p> <p>We were treated to a train with spectacular panoramic windows as it went over The Bridge.</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/big-windows.webp" alt="Standing in front of a big window with the water behind us." width="1024" height="1439" class="aligncenter size-full wp-image-73015"> <p>A friendly guard told us where to change. Arrived a little late and filled in the Interrail compensation form again.</p> <h2 id="copenhagen-to-goteborg"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#copenhagen-to-goteborg">Copenhagen to Göteborg</a></h2> <p>The lounge in Copenhagen was basic but fine. A few bowls of fruit and a coffee machine but nothing else. Weirdly no train display.</p> <p>The train had power sockets on the ceiling - along with headphone jacks! Was a little strange seeing cables dripping down from the ceiling. The 1st class seats were a little roomier than standard, but not much in it. Ticket inspector looked confused at Interrail passes but didn't challenge us.</p> <h2 id="goteborg-to-oslo"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#goteborg-to-oslo">Göteborg to Oslo</a></h2> <p>Trains were frequent enough that we didn't bother with advance seat reservations. No 1st class, but the quiet zone was spacious enough. Again, a brief glance at the tickets rather than scanning them.</p> <p>I was heartily impressed to see snack vending machines on a train! Better than someone pushing a cart through I reckon.</p> <h2 id="oslo-to-stockholm"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#oslo-to-stockholm">Oslo to Stockholm</a></h2> <p>There were no signs on seats to say reserved and the service was very full. But we got our seats without a problem. There was free fruit and tea / water in the 1st class carriage. WiFi speeds were excellent.</p> <h2 id="stockholm-to-helsinki-overnight-ferry"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#stockholm-to-helsinki-overnight-ferry">Stockholm to Helsinki (overnight ferry)</a></h2> <p>Annoyingly, the ferry terminal is a rather long distance from the nearest tram stop which was a bit of an arse.</p> <p>The check-in to the ferry warns of extra costs if you have the temerity to use the staffed counters - but the automatic check in wouldn't work with our tickets. They wanted to check that we were eligible for the Interrail discount, so we showed them the app - we didn't have to spend a travel day though. They printed out our tickets and didn't charge us extra.</p> <p>The boat itself was gorgeous. Obviously not full - many of the bars were empty and the disco was dead - but surprisingly they put on a full song and dance show as entertainment. We'd made reservations at one of the fancy restaurants, which was perfectly nice. It was breathtakingly beautiful outside.</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/ferry.webp" alt="Two of us looking out over the islands." width="1024" height="729" class="aligncenter size-full wp-image-73017"> <p>The room was basic, but much easier to sleep in than an overnight train. Unfortunately, I fucked up with the timezones. Stockholm is UTC+1 and Helsinki is at UTC+2. I set my alarm an hour too early!</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/timezone.webp" alt="Two clocks. One has a Finnish flag, the other a Swedish flag." width="1024" height="326" class="aligncenter size-full wp-image-73016"> <p>The breakfast buffet was very well stocked for veggie and vegans. Massive queue before opening but not too crowded.</p> <h2 id="helsinki-to-tallinn-day-ferry"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#helsinki-to-tallinn-day-ferry">Helsinki to Tallinn (day ferry)</a></h2> <p>Terminal was a short walk from the tram. It was spacious and had plenty of seating. Again we couldn't use the automated check in and had to show our Interrail apps. Ferry was small but plenty of room to sit or go shopping.</p> <h2 id="tallinn-to-riga"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#tallinn-to-riga">Tallinn to Riga</a></h2> <p>Slightly confusing process to buy the tickets as they only went on sale a few weeks before departure. No seat reservations for the first half of the journey - we were slightly worried by the number of people waiting for the three-carriage train. In the end there was plenty of space. Again, 1st class a bit roomier than standard but not dramatically so.</p> <p>The ticket inspector gave a confused look at the Interrail pass and issued us with a receipt for €0.00!</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/zero-receipt.webp" alt="A receipt for €0." width="480" class="aligncenter size-full wp-image-73013"> <p>The train had an onboard ticket vending machine with contactless payments and, delightfully, some bowls of water for dogs.</p> <p>We changed at Valga which was simple - literally walk across the platform to the waiting train. It was a little more crowded, but plenty of seats.</p> <h2 id="riga-to-vilnius"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#riga-to-vilnius">Riga to Vilnius</a></h2> <p>1st class was a bit crowded but pleasant until the boomer Brits started ignoring the quiet carriage signs. They were shut up by the guard. Complimentary sparkling water.</p> <h2 id="vilnius-to-warsaw"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#vilnius-to-warsaw">Vilnius to Warsaw</a></h2> <p>There is a VIP lounge in Vilnius - but it is little more than a quiet space with a loo and water fountain. All the snacks and hot drinks were chargeable. We didn't actually have access to it this trip - but the Riga to Vilnius trip did. We scanned our previous ticket reservations to get in.</p> <p>We weren't able to book seats - because the service said it was sold out. However the train was half empty. No 1st class, but there was WiFi and power, so no complaints from me.</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/rain.webp" alt="Liz looking out into the rain." width="1024" height="771" class="aligncenter size-full wp-image-73018"> <p>On having our tickets checked we were told that there <em>was</em> 1st class, but we couldn't use it with our Interrail passes. As with most European trains, announcements were in English.</p> <p>The change at Mockava was easy - we walked to the next platform. We'd booked seats in a little 6 seater cabin - sadly the air con was little more than homeopathic. Even cracking open the window did nothing but waft hot air over us. Fairly full train, toilets were adequate, but the heat was stifling. Even worse, no WiFi!</p> <p>The train occasionally stopped for several minutes at a time. The crew just opened the doors to let a breeze in - very little health-and-safety culture here!</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/Open-doors.webp" alt="Door opening on to the track." width="1024" height="1360" class="aligncenter size-full wp-image-73019"> <p>Mind you, we also saw people crossing the tracks to get to their platform. Yikes!</p> <p>There were passport checks by armed guards. Brief and inoffensive.</p> <h2 id="warsaw-to-berlin"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#warsaw-to-berlin">Warsaw to Berlin</a></h2> <p>Despite the extreme heat, it left on time. This 6 berth 1st class carriage was a bit bigger than the last - and the aircon actually worked.</p> <p>We were treated to complementary water, juice, and a vegan snack bar! The train driver sounded their horn at every opportunity which wasn't exactly relaxing.</p> <h2 id="berlin-to-munchen"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#berlin-to-munchen">Berlin to München</a></h2> <p>No vegan currywurst on the DB menu any more 😭.</p> <p>Annoyingly, we were kicked off at Nuremberg - despite most announcements being made in English this one wasn't, but we figured it out. A train came fairly quickly, so we weren't too late.</p> <h2 id="munchen-to-verona"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#munchen-to-verona">München to Verona</a></h2> <p>There is a 1st class DB lounge but it isn't open to OBB/Interrail scum. Luckily there were plenty of food options for vegans in station. No vegan currywurst on train but several other options.</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/munchen.jpg" alt="Train display board." width="1008" height="759" class="aligncenter size-full wp-image-73012"> <p>This was one of two reservations which <em>demanded</em> that it be printed out onto paper and under <em>no circumstances</em> would it be accepted from a screen. That was a lie. Showing the code on-screen was fine.</p> <h2 id="verona-to-milan"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#verona-to-milan">Verona to Milan</a></h2> <p>Such a frequent service that no reservations were needed. Annoyingly, the train windows were covered with graffiti so it was impossible to see out. Ticket inspector barely glanced at our tickets. WiFi didn't work. Crowded and a bit noisy. Air con just about coped with the heat.</p> <h2 id="milan-to-basel"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#milan-to-basel">Milan to Basel</a></h2> <p>The Interrail app seemed certain that we had to change a dozen times for this journey. Instead, I found a direct train to Olten. The 1st class seats were massive and had a handy compartment for smaller bags. Windows were huge. Again, our passes and reservation were barely glanced at.</p> <p>As we arrived in Olten there was a train a couple of platforms away which was direct to Basel. Bit of a dash to get it. No 1st class, but it was a double-decker so we got to sit upstairs, which is just as good!</p> <h2 id="basel-to-paris"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#basel-to-paris">Basel to Paris</a></h2> <p>The only thing better than 1st class is <em>upstairs</em> on 1st! Big comfy reclining seats. Packed train with not much luggage space. As ever with trains travelling to France, there were warnings about labelling luggage correctly but no one seemed to do it. Zero vegan options on board. C'est la vie!</p> <h2 id="paris-to-london"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#paris-to-london">Paris to London</a></h2> <p>What a blessing to witness so many people's first ever attempt to queue for a train 🙄</p> <p>Mad queues to get in to the departure lounge - but the train departed and arrived on time. I'd remembered to pre-book a vegan option which was tasty and also included a dairy-free chocolate bar. Eurostar's WiFi is shit but 5G worked OK.</p> <h2 id="whats-next"><a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/#whats-next">What's Next?</a></h2> <p>Doing Interrail trips like this is brilliant. The trains are usually a lot more relaxing than flying, it's more convenient to arrive in a city centre, and they're less polluting.</p> <p>Would we do a trip like this again? It's certain <em>a lot</em> of travel. We weren't very spontaneous - most of the trip was planned out way in advance, along with hotels. Having 2-4 days in each place is like taking a series of minibreaks, which is delightful. But it can be <em>exhausting</em>. I don't want to complain that my diamond tiara is too tight, but there comes a point where there is such a thing a <em>too much holiday</em>.</p> <p>We still have several more European countries to visit; although not all are easy to get to by train. Perhaps we'll fly in somewhere, take the train around, then fly back? Or spend a week <em>only</em> in one country?</p> <p>If you have tips for further adventures - please let us know!</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73007&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 📝 2026-07-12 10:08: It's a beautiful morning here in North Wales. My wife has taken our youngest to... - Kev Quirk https://kevquirk.com/2026-07-12-1008 2026-07-12T09:08:00.000Z <p>It's a <em>beautiful</em> morning here in North Wales. My wife has taken our youngest to his cricket match, and our oldest is upstairs playing with his Lego out of the heat.</p> <p>Me? I'm sitting in the sunroom, listening to the goats and chickens, with a coffee and book.</p> <p>Perfect Sunday morning.</p> <p><img loading="lazy" src="https://kevquirk.com/content/images/2026-07-12-1008/1000010332.webp" alt="1000010332" /></p> <p><img loading="lazy" src="https://kevquirk.com/content/images/2026-07-12-1008/1000010331.webp" alt="1000010331" /></p> <div class="email-hidden"> <hr /> <p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p> <p>You can <a href="mailto:19gy@qrk.one?subject=%F0%9F%93%9D%202026-07-12%2010%3A08">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-07-12-1008#comments">leave a comment</a>.</p> </div> Winter - James' Coffee Blog https://jamesg.blog/2026/07/11/winter 2026-07-11T00:00:00.000Z <p>Speaking of trains, I tell a story of Winter to my friend, of the train that stopped in the village station on an evening so cold my fellow passengers and I could see our breaths. The local pub offered refuge to all those who wanted to sit in the warmth. I wanted to feel a bit more of the cold – to see my breath; to feel all the parts of me. Anxiety warms the cold, too.</p><p>Reflecting on the story of Winter, in the cold, there was nothing but warmth. My hands were likely almost immovable, frozen by the chilly air. Despite the cold, I was accompanied by the words of another friend, and the pub opened and in the darkness there was melody and community and story. We shared an experience.</p><p>I think of the Winter on my walks: of the peaceful paths on cold mornings where the sun doesn’t rise until later. I think of Winter while I yearn for a cup of tea on a day too warm to drink one. I think of Winter when I least expect it.</p><p>I am not much closer to the question I have sat with for months: Why does Winter stay with me in spring and summer days? Perhaps it is the contrast: between the cold and the warmth, and the journey we all go through with Nature every year, progressing through the seasons – our season(s). Or is there something else I am yet to see when I look inward and outward and inward again?</p><p>I love the chills and clear skies of Winter, but I wouldn’t want to miss Summer for the world. Winter and Summer are what they are because they exist together. Collectively, all seasons bring forth the colours of the year.</p><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a1977d9fcc820864',t:'MTc4Mzc2OTU3OQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> Designing a listen later pipeline - Posts feed https://www.coryd.dev/posts/2026/designing-a-listen-later-pipeline 2026-07-10T22:13:00.000Z <div class="e-content"><p>I&#39;ve had this long, long running relationship with bookmarking and read it later services. I&#39;ll commit to one, excited about whatever feature set it offers and then, without fail, my list grows and grows and grows and grows. I archive things to reset, repeat and then move to a different service. The only thing that&#39;s ever worked has been listening to articles as audio when I have a spare moment. Sometimes it&#39;s background noise but, generally, I absorb things better as audio.</p> <p>Pocket (RIP) was arguably the best at this: it parsed articles beautifully, audio playback was pleasant and it queued things reliably. <a href="https://instapaper.com">Instapaper</a> worked fairly well but went through periods of stagnation before its current renaissance. Having Siri read pages to you in Safari also works so long as it&#39;s not interrupted and the article isn&#39;t too long (it&#39;s awful at persisting position and long articles simply fail part way through).</p> <aside> <p>Readwise Reader deserves an honorable mention here but, when I last tried it, it didn&#39;t support queueing and starting one article at a time is tedious.</p> </aside> <p>I&#39;ve been saving links to <a href="https://linkding.link">linkding</a> long enough to invest in <a href="https://www.coryd.dev/posts/2026/ribbon-a-linkding-client">building a client</a>. My initial iteration of this pipeline consisted of saving items manually from <a href="https://freshrss.org">FreshRSS</a> to linkding and then having a headless node app poll linkding, fetch unread links and parse them to audio and upload them to <a href="https://audiobookshelf.org">audiobookshelf</a>. The pipeline I&#39;ve arrived at is similar, but with significant refinements and infrastructure changes.</p> <h2 id="a-custom-rss-reader">A custom RSS reader</h2> <p>Everything I&#39;ve been building for myself lately has been built in <a href="https://go.dev">Go</a> and <a href="https://preactjs.com">Preact</a>. It&#39;s fast, robust and has been a good learning experience. I love different parts of a number of different RSS readers and <a href="https://feedbin.com">Feedbin</a> is as close to perfect as they get. I wanted something I could easily self-host and build as many or as few features as I wanted.</p> <p>What I built isn&#39;t terribly unique: it polls feeds, lets me manage them and organize them into folders. I didn&#39;t bother to implement starring (I&#39;ve never used it in the near two decades I&#39;ve used RSS). I built support for the following:</p> <ul> <li>Proxying images</li> <li>Fetching full text</li> <li>Detecting feed health</li> <li>Loading YouTube embeds using <code>youtube-nocookie.com</code></li> <li>Stripping query params used for tracking</li> <li>First class linkding integration</li> <li>Rules targeting items saved to linkding (handy for stripping publication titles and such from titles)</li> <li>Rules targeting title/description/content in feed items</li> <li>All the keyboard shortcuts I could possibly want</li> </ul> <p>I&#39;m sure I&#39;m missing some. What this also allows me to do is configure rules targeting everything from a feed and save it to linkding without me having to see or triage it. I love and pay for <a href="https://404media.co">404 Media</a>, so everything they publish gets saved automatically.<sup id="fnref:1" class="footnote-ref">1</sup></p> <h2 id="a-ui-for-my-audio-engine">A UI for my audio engine</h2> <p>The initial version of my audio engine that processed saved items was a blunt instrument. It parsed everything, unaltered, to audio. Failures were in <a href="https://www.docker.com">Docker</a> logs and all configuration lived in a <code>.env</code> file. A workhorse, but one that wasn&#39;t the easiest thing in the world to navigate.</p> <p>I went about building a UI for it (guess which stack I used). It&#39;s, more or less, a dashboard with an indicator of whether it&#39;s processing, some high level stats, a bunch of tabs and, in each tab, a table. What this allows me to do is see what&#39;s been processed recently, links that failed (which I can re-run or archive if it was a permanent failure — typically 403s), all history and so forth. I can view logs in the UI and manage users (of which I&#39;m the only one).</p> <p>The most compelling part of this, to me, are the cookies and rules features. The former lets me dig cookies for paywalled sites (see 404 Media) out of my browser, save them and send them when I fetch a link from the site. The latter lets me apply rules to fetch text before it&#39;s processed into audio. This is helpful removing blurbs that are included in every article for a site so I don&#39;t have to listen to it every single time.</p> <p>The underlying process to fetch text runs every 5 minutes. Links are accessed using curl and text is parsed using <a href="https://codeberg.org/readeck/go-readability/src/branch/v2"><code>go-readability</code></a>. If go-readability extracts fewer than 100 characters (usually a page that needs JavaScript to render) it falls back to the Wayback Machine&#39;s snapshot, which was crawled by a real browser. Fetches are restricted to http/https so a hostile link can&#39;t redirect curl into <code>file://</code> and read something local, and the output size is capped.</p> <figure class="drawing"><button type="button" class="lightbox-trigger bare" data-lightbox="lb-5d35da2" aria-haspopup="dialog"><img src="https://cdn.coryd.dev/tts-pipeline-svg-b317b75c.svg" alt="Where there&#39;s a feed, there&#39;s audio to be made." loading="lazy"/></button><dialog id="lb-5d35da2" class="lightbox-dialog" aria-label="Where there&#39;s a feed, there&#39;s audio to be made."><button type="button" class="lightbox-close overlay-icon-btn" aria-label="Close"></button><img src="https://cdn.coryd.dev/tts-pipeline-svg-b317b75c.svg" alt="Where there&#39;s a feed, there&#39;s audio to be made." loading="lazy"/></dialog><figcaption>Where there&#39;s a feed, there&#39;s audio to be made.</figcaption></figure><h2 id="making-things-listenable">Making things listenable</h2> <p>Narration is handled using <a href="https://github.com/OHF-Voice/piper1-gpl">Piper</a> and the <a href="https://huggingface.co/rhasspy/piper-voices/tree/main/en/en_US/lessac/high">lessac-high voice model</a>. I&#39;m piping Piper&#39;s<sup id="fnref:2" class="footnote-ref">2</sup> stdout straight into FFmpeg&#39;s stdin through an <code>io.Pipe</code>, with no WAV written to the disk. Audio output is tagged using <a href="https://pkg.go.dev/github.com/bogem/id3v2/v2">id3v2</a> — this maps to what Audiobookshelf expects for podcasts. The episode title is the article title, the author is a generic <code>TTS Bot</code>, the podcast title is <code>Articles</code> to keep things grouped coherently and so on.</p> <p>The interesting part of tagging the audio is that Audiobookshelf reads ID3&#39;s date frames loosely enough that doing it by the spec breaks it. A proper four-digit year in <code>TYER</code> dates every episode to December 31st of the year before. The blunt fix is to write the same full date into <code>TYER</code>, <code>TDAT</code> and <code>TDRC</code> and let it sort itself out.</p> <h2 id="dont-build-a-podcast-feed">Don&#39;t build a podcast feed</h2> <p>This isn&#39;t a traditional podcast, so there&#39;s no need for a podcast feed. Instead, my TTS app writes tagged MP3s into a directory Audiobookshelf watches, then calls the ABS API to trigger a scan. Listening in Audiobookshelf provides all of the conveniences you&#39;d expect: resume across devices, mark as finished and your choice of clients.</p> <p>When enabled, the app checks ABS for completed episodes and deletes them from the disk. This prevents storage from growing out of control over time.</p> <hr/> <p>Now, I check my RSS feed like I always have but I can triage less knowing that some feeds are <em>always</em> saved. Anything else I save will land in my Audiobookshelf client the next time I have a free moment to listen.</p> <div class="footnotes" role="doc-endnotes"><hr/><ol><li id="fn:1"><p>Well, almost everything — I filter out podcast announcements. ↩︎</p> </li><li id="fn:2"><p>Piping Piper haha. ↩︎</p> </li></ol></div></div> Super Mario Bros Wonder - Joel's Log Files https://joelchrono.xyz/blog/super-mario-bros-wonder 2026-07-10T15:00:00.000Z <p><em>This is a review for a game I finished in <a href="/blog/march-2025-summary/">March 2025</a>. I just felt compelled to write about it now, I guess.</em></p> <p>It’s really weird that I chose not to review this one when I rolled credits on it, because it really is a fantastic return to form for the franchise. <em>Super Mario Bros Wonder</em> is a game I completed with my friends almost completely. A title that became one of many choices to try whenever my friends were up to the task.</p> <p>For so long, the Mario 2D platformers were stuck in a weird place. All of them since the original DS title that added the “New” to the name felt like a rehash of what came before. The artistic direction just didn’t age very well and looked rather basic.</p> <p>I played some of the original on a borrowed DS back in the day, out of an R4 card, I obviously tried the Wii version, which was rather popular. I remember giving it a go during a birthday party, in one of those fancy birthday places you can rent that come with gaming rooms and giant bouncy castles. There was a Wii there and I shared controllers with random kids beating a couple of levels together.</p> <p>Years ago I also tried <em>New Super Mario Bros U</em>. A friend of mine had it at the time, and it was a period of my life where I only had my PSP. I wanted some multiplayer stuff and both this and <em>Super Smash Bros U</em> proved ideal. I have a faint memory of playing <em>New Super Mario Bros 2</em> on a 3DS actually… but not much.</p> <p><em>Super Mario Bros 1, 2 and 3</em> look extremely different from each other, and the same goes for <em>Super Mario World</em> and <em>Yoshi’s Island</em>! As long as the moustache and overalls are present, all of them were recognizable and iconic Mario Games.</p> <p>While none of the “New” Super Mario titles were bad—in fact, they all had excellent level design and very fun mechanics!—all of them lacked an identity of their own.</p> <p>Super Mario Bros Wonder gives everything a fresh coat of paint, it is fantastically animated and it does not really miss. Every little detail is <em>wonderful</em> and <em>whimsical</em> and made with <em>passion</em>. It’s noticeable everywhere and I can’t help but love it.</p> <p>Another thing I enjoyed where the extra power ups, I liked becoming an Elephant and breaking blocks left and right. I never fully understood the Drill Mushroom, but going underground and to roof tops was actually fun and felt great, the classic power ups are there too, and the animations for them are a joy to watch. Trapping enemies in bubbles was funny, not gonna lie.</p> <p>The game was also very approachable in the way you could complete levels, and replayable too, thanks to badges which gave you extra moves or helped you out in some way, like the Parachute Cap, that allowed you to control jumps better, the Wall Climb that was a lifesaver when you could barely reach a platform, and of course the Dolphin Kick, to swim super fast on underwater levels. There were many others that were fun to use.</p> <p>The multiplayer was chaotic in the best of ways, and the wonder seeds only multiplied that feeling every time. Some times we played the online mode, and seeing other people running around was a joy. Everyone was actually helpful and I got saved by strangers more than once.</p> <p>I wonder how many people still run through it today, I should visit some of the levels I didn’t fully finish to see!</p> <p>Definitely a highlight of the Switch library. I really recommend it!</p> <p>This is day 97 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Super Mario Bros Wonder">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/idcomments">Reply on Fediverse</a> </p> TOEM - Joel's Log Files https://joelchrono.xyz/blog/toem 2026-07-10T14:55:00.000Z <p><em>This is a review for a game I finished in <a href="/blog/february-2025-summary/">February 2025</a>. I just felt compelled to write about it now, I guess.</em></p> <p>This is one of those chill and cozy types, a photography game where there really is not a lot of pressure or challenge. It was the debut game from <em>Something We Made</em> and you are a young photographer who is tasked by mom (or grandma? can’t remember) to take a picture up a mountain of a phenomenon called “TOEM”.</p> <p>To get to that mountain you have to take a bus, and to pay for the ticket you have get stamps, which you get by completing quests, all of them require you to photograph certain things in your current location, and the bus will give you a ride to a new place after you collect enough stamps.</p> <p>This game was an absolute joy, it looks really nice, with a style similar to <em>Paper Mario</em>, where characters are flat and 2D, in a basic 3D environment. The whole thing is also in black and white.</p> <p>I found the challenges to be extremely fun, the game has an isometric perspective, which you can rotate to reveal certain angles, and expose things hidden from plain sight. You can also use the camera mode to look in places the regular perspective won’t allow. For example, to photograph a balloon in the sky which is not visible otherwise.</p> <p>There’s also a puzzle element aspect to things, with certain areas being unaccesible until you figure out how to get it. It often is as simply as bringing a photo of something, TOEM also features outfits, where you can style your character however you want, and of course, this is also a mechanic, of the game, where you will be required to disguise yourself, or to wear something specific to access an area.</p> <p>The game is extremely short, but it really has a lot of charm, the dialogue is thoughtful and warm and the characters you meet, while simple, are still always nice to see. There’s some who you’ll see throughout the game, doing side quests with their own objectives for which they’ll often require your helps.</p> <p>Since the quests are basically a to-do list, I actually felt compelled to do every single one of them, I got rewards and I felt great doing it. This is a game I got for free because of a Steam code, so I also played it on my laptop (a rare ocurrence) and got every single achievement for it, with some online help for the most obscure ones, not gonna lie.</p> <p>At last, reaching the top of that mountain is definitely an wonderful experience you owe yourself to try, or maybe the journey is what it’s all about?</p> <p>Highly recommended if you want a chill time, some nice music and a cozy vibe for a couple evenings, since it’s super short! This is day 96 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=TOEM">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/idcomments">Reply on Fediverse</a> </p> God of War: Chains of Olympus - Joel's Log Files https://joelchrono.xyz/blog/god-of-war-chains-of-olympus 2026-07-10T14:50:00.000Z <p><em>This is a review for a game I finished in <a href="/blog/february-2025-summary/">February 2025</a>. I just felt compelled to write about it now, I guess.</em></p> <p>This is honestly a game that I don’t know how to explain that much. It’s God of War, everyone knows how a classic God of War plays right? Probably not everyone I guess.</p> <p>If you don’t, God of War is a button masher, however, it is a button masher with a lot of style and combos! The game is known for its epic battles against hordes of enemies and is basically a power fantasy. You are literally the God of War, after all.</p> <p>Kratos is a very angry character, and he is also kind of cool. He is tasked by the greek gods to do many things—I think he’s not the God of War yet or something?—and has to kill every enemy that crosses his path.</p> <p>I know I just called it a button masher, but there’s an actual science behind it, there really are a lot of weapons and movesets you will be unlocking as the game goes on. Different enemies require very different appraoches, some can only be damaged in a certain way, some can entangle you and you need to break free from their grasp, and there are many of them! You can upgrade your weapons and moves, as well as obtain new ones as the story continues. Keep the hits coming, and you will gain extra points and XP and fill up meters and all of that good stuff that makes your brain happy!</p> <p>The game also features a lot of locations, both real cities from Ancient Greece, as well as locations from greek myths, such as Tartarus or the fields of Elysium. I should note that the game is extremely linear, an adventure on rails that I actually really enjoyed. Not having to worry or get too lost was nice to see.</p> <p>Besides the combat, the game contains plenty of puzzles, some of them kind of ingenious, but I have to say I found them a bit out of place sometimes, especially because certain things were just kind of slow to do, such as pushing blocks or using certain levers. They kind of got in the way of the fast paced action during combat, and Kratos’s prowess was relegated to pushing buttons in a specific way (some actions were a bit hard to trigger).</p> <p>The art of the game is incredible, and the fact that it’s all running on a handheld from 2005 boggles my mind, it just looks gorgeous, even if it has a bit of that “everything is brown” problem that some older “realistic” games suffered from. Enemy design, the animation of every attack and combo, the art and statues all over the place, the fiels of Elysium itself or the giant structures you’ll fight through. It’s all just fantastic.</p> <p>Again, story-wise, it’s not really <em>weak</em>, but it’s not really that important. I have seen video essays about this game, detailing the story of Kratos’ journey and downfall for revenge, and I guess it is there, but this is also a PSP game that happens between some other games that I have never played, so I had no real stakes to care about. There was one scene that was actually really interesting though, so I’ll not spoil it as it’s rather nice to see.</p> <p><em>God of War: Chains of Olympus</em> still plays like a charm, though <em>Ghost of Sparte</em>, the second title for the PSP is technically superior in everyway, this is only noticeable once you compare them. I really had fun with it and recommend giving it a try. Do make sure to level up and get good at the combos though, and keep your health in check, some fights in some checkpoints can get very tedious if you are stuck in a bad state and have to reload a previous save further back. I guess that’s my one complaint, but it’s part of the challenge anyway, lower the difficulty and enjoy the power fantasy if you want that instead.</p> <p>This is day 95 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=God of War: Chains of Olympus">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/idcomments">Reply on Fediverse</a> </p> Notable links: July 10, 2026 - Werd I/O 6a50f50d9a650a00018aefd8 2026-07-10T13:42:43.000Z <img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/07/getty-images-UGBW39Tmiy4-unsplash.jpg" alt="Notable links: July 10, 2026"><p><em>Most Fridays, I share a handful of pieces that caught my eye at the intersection of technology, media, and society.</em></p><p><em>Did someone forward this to you? </em><a href="https://werd.io/notable-links-july-3-2026/#/portal" rel="noreferrer"><em>Subscribe for free</em></a><em>.</em></p><hr><h3 id="chicago-public-media-launching-community-website-%E2%80%94-chicagocom-%E2%80%94-in-the-fall"><a href="https://chicago.suntimes.com/media/2026/07/08/chicago-public-media-launching-community-website-chicago-com-fall" rel="noreferrer">Chicago Public Media launching community website &#x2014; chicago.com &#x2014; in the fall</a></h3><p>In an increasingly AI-dominated information landscape, real trusted communities and relationships will be the way to build trust and loyalty &#x2014; I&#x2019;m convinced of it, <a href="https://newpublic.org/afterthefeed">and organizations like New_ Public agree</a>. So it was exciting to see Chicago Public Media take a huge step towards building a community platform.</p><blockquote>The site will include Chicago-area information, civic and cultural resources, community-sourced knowledge and opportunities for audience participation, the nonprofit said Wednesday. It will also curate headlines from the Sun-Times, WBEZ and other news sources.</blockquote><p>This will be a familiar argument to regular readers:</p><blockquote>For independent journalism to &#x201C;truly service the public &#x2026; we should have digital infrastructure that is also steered by public media companies,&#x201D; Chicago Public Media CEO Melissa Bell said. The news industry &#x201C;has ceded a lot of distribution to places like Facebook and X, formerly known as Twitter, and I think that has done a disservice to centering civic discourse in a healthy way.&#x201D;</blockquote><p>We&#x2019;ve seen other platforms release similar efforts effectively. The Newsmast Foundation <a href="https://democratictech.fund/stories/newsmast/">builds community-first social media apps on open protocols</a> for newsrooms that include <a href="https://www.journalism.co.uk/bristol-cable-launches-hybrid-news-and-social-networking-app-in-bid-to-double-membership-2/">The Bristol Cable</a> and <a href="https://findoutmedia.substack.com/p/find-out-social-is-live">Find Out Media</a>. <a href="https://surf.social">Flipboard&#x2019;s Surf platform</a> powers curated social feeds, again built on open social web protocols, for the likes of <a href="https://404media.surf.social/">404 Media</a> and <a href="https://rollingstonepolitics.surf.social/">Rolling Stone</a> (as well as my own <a href="https://speakingtruthtopower.surf.social/">curated non-profit US news feed</a>). And Canada&#x2019;s <a href="https://www.villagemedia.ca/">Village Media</a> serves <a href="https://www.spaces.ca/">13 local social networks through its SPACES platform</a>.</p><p>But this is the first time we&#x2019;ve seen a single social platform rolled out by a public media company at this scale. Chicago Public Media was gifted the underlying chicago.com domain and will be rolling it out to neighborhoods and suburbs throughout the area. It sounds like each community will be highlighted (perhaps with its own feed), with an attached hub that covers the entire region.</p><p>Clearly, this is an experiment, but I&#x2019;m delighted to see a public media innovator explore these ideas at this scale. I see it as vindication for the idea that building stronger community applications into the public media model is a path towards a more trusted future for local journalism. I&#x2019;ll be watching very closely, and I&#x2019;m curious to see who dives in next.</p><hr><h3 id="your-saas-metrics-are-a-result-not-a-strategy"><a href="https://news.crunchbase.com/saas/metrics-unit-economics-questions-sagie/" rel="noreferrer">Your SaaS Metrics Are A Result, Not A Strategy</a></h3><p>I still subscribe to sites like <a href="https://news.crunchbase.com/" rel="noreferrer">Crunchbase News</a> from my time in startup-land; although it&#x2019;s been a while since I&#x2019;ve run the financial side of a business, I&#x2019;m interested, and I know that I&#x2019;ll run one again. I see stories like this and wonder: what would it look like for a newsroom to think this way? In startups, these metrics are known top to bottom, but I&#x2019;ve rarely heard business teams talk about <a href="https://executiveeducation.wharton.upenn.edu/thought-leadership/wharton-online-insights/why-customer-lifetime-value-matters/">LTV</a> (customer Life Time Value), <a href="https://www.paddle.com/resources/customer-acquisition-cost">CAC</a> (Customer Acquisition Cost), or even <a href="https://www.salesforce.com/sales/revenue-lifecycle-management/annual-recurring-revenue-arr/">ARR</a> (Annual Recurring Revenue).</p><p>This may be happening in finance and fundraising teams, but the culture of talking about customers / donors in teams more widely often simply isn&#x2019;t there: metrics aren&apos;t communicated, dashboards aren&apos;t made available, the concepts of the metrics themselves are not explained. Not everyone should be thinking about this all the time &#x2013; the firewall between business and editorial is important to maintain &#x2013; but in order to make sharp prioritization and experimentation decisions, the business side should be much more customer / donor focused than they often are.</p><p>Beyond that, this piece points out, rightly, that metrics are not strategy: they&#x2019;re the measurable outcome of your strategy. They&#x2019;re important tools to help you figure out cause and effect and improve your revenue efficiency, but they are not the underlying mechanism.</p><p>Interesting provocation here from the author:</p><blockquote>&#x201C;The Rule of 4 adds a simple durability check: ARR growth divided by annual customer churn should be above four. If it is low, growth may be hiding a leaking bucket.<br><br>[The board should ask:] are we growing on top of a loyal customer base, or replacing customers we should have kept?&#x201D;</blockquote><p>Growth in annual recurring revenue &#x2014; the portion of your revenue that is from recurring customers like subscribers or monthly / annual donors &#x2014; is expressed as a percentage. So is churn: what percentage of customers (paid subscribers, members, recurring donors) cancel their commitments and don&#x2019;t return?</p><p>How many newsrooms have those numbers handy? What would it take to measure them? Which systems are missing that would let you do that?</p><p>There is <em>so much</em> that newsrooms &#x2014; including non-profit publications &#x2014; can learn from for-profit startups and other businesses. There&#x2019;s a lot to be gained by sharing knowledge from those other domains. Figuring out which metrics successful businesses track and mapping the data gaps inside a newsroom is a good place to start.</p><hr><h3 id="how-kalshi-infects-the-news"><a href="https://www.publicnotice.co/p/kalshi-cnn-cnbc" rel="noreferrer">How Kalshi infects the news</a></h3><p>Kalshi&#x2019;s deals with newsrooms seem to be paying dividends for the company:</p><blockquote>&#x201C;Since December CNBC has published 58 articles that do little more than advertise the existence of a Kalshi market related to a news event. [&#x2026;] Since April, CNBC has employed a <a href="https://www.cnbc.com/davis-giangiulio/">dedicated reporter</a> to produce these articles. CNBC also maintains a <a href="https://www.cnbc.com/markets/prediction-markets/">page</a> on its website featuring Kalshi prediction markets selected by CNBC editors, along with its web coverage. [&#x2026;] In at least 22 cases, CNBC has written about Kalshi and not disclosed its financial conflict.&#x201D;</blockquote><p><a href="https://www.axios.com/2025/12/02/cnn-kalshi-prediction-market-data">CNN doesn&#x2019;t pay for access</a>, and instead is <a href="https://www.newyorker.com/news/the-lede/americas-betting-craze-has-spread-to-its-news-networks?_sp=bc5180fe-4e8b-4c96-a107-44eca35ac553.1783442134229">paid to exclusively promote Kalshi</a>. <a href="https://www.publicnotice.co/p/kalshi-cnn-cnbc">CNBC reporting carries a disclosure</a> which states that its relationship goes further: &#x201C;CNBC and Kalshi have a commercial relationship that includes customer acquisition and a minority investment.&#x201D; CNBC will gain financially if its coverage leads to more signups or a growth in Kalshi&#x2019;s valuation. CNN&#x2019;s is a simpler paid placement, but both deals are aggressive ways for Kalshi to compete with Polymarket, which has been making similar deals with newsrooms like Yahoo Finance.</p><p>This is even happening when markets are not significant enough to be newsworthy. <a href="https://www.newyorker.com/news/the-lede/americas-betting-craze-has-spread-to-its-news-networks?_sp=bc5180fe-4e8b-4c96-a107-44eca35ac553.1783442134229">As the New Yorker noted in December</a>:</p><blockquote>&#x201C;When Enten lauded the benefits of analyzing betting odds, on air the other day, he failed to mention that only several hundred thousand dollars had been bet on that particular market. Kalshi&#x2019;s odds provided good fodder for television, but, statistically speaking, they didn&#x2019;t say much.&#x201D;</blockquote><p>It reminds me of the deals Twitter made with newsrooms relatively early in its life. Suddenly, almost out of nowhere, anchors read out tweets on the news, and shows promoted their official Twitter accounts over their websites. This didn&#x2019;t happen organically: Twitter partnerships teams made deals behind the scenes to ensure their product was showcased well. It was one of the first times that a web startup impactfully executed on a media strategy, and startups have built on that pattern ever since.</p><p>Here, rather than serving a social network, money is changing hands for newsrooms to promote gambling markets &#x2014; and in CNBC&#x2019;s case, they will make more money if more people gamble. It&#x2019;s obviously weirder, and the incentives here would pull at traditional newsroom ethics in an uncomfortable way even if adequate disclosures were published. This comes at an unfortunate time when trust in news is falling quickly, and newsrooms like CNN are increasingly seen as serving their owners rather than bastions of trustworthy reporting. These Kalshi deals are weird, and an obvious conflict of interest that will likely drive people to trust the news even less than they do today.</p><p>The Reuters Institute&#x2019;s 2026 Digital News Report found that <a href="https://reutersinstitute.politics.ox.ac.uk/digital-news-report/2026">70% of respondents think media owners and corporate parents exert undue influence on the news</a>. As more of these sorts of deals are made, and as trust in news continues to decline, newsrooms are going to need to more overtly state that their coverage is free from this sort of sponsored content. Stronger, more transparent ethics statements, and louder conversations about how reporting decisions are made, will help some newsrooms to explain how they stand apart from these dynamics. In the meantime, CNN and CNBC are helping to drive trust in media into the gutter.</p><hr><h3 id="ai-content-is-everywhere-on-social-media-especially-linkedin"><a href="https://www.pangram.com/blog/ai-in-your-feed" rel="noreferrer">AI Content Is Everywhere on Social Media, Especially LinkedIn</a></h3><p>This is one of the core effects of AI: even when people are not engaging with AI-generated content directly, it&#x2019;s hard to avoid. Our feeds are increasingly full of AI slop.</p><blockquote>&#x201C;AI-generated content appeared across all social media platforms in our data set. The average AI rate across all scanned items was 13.8%, but specific rates varied by platform and item length. On four out of five platforms, longer content was more likely to be AI-generated than shortform content. Across all platforms, one in four longform items (25.72% of items over 250 words) were fully AI-generated.&#x201D;</blockquote><p>Specifically, long-form content on LinkedIn was 41% likely to be AI-generated, which shouldn&#x2019;t surprise anyone who&#x2019;s browsed LinkedIn lately. Medium was 31% likely and X was 29% likely. Open social web platforms like Bluesky and Mastodon don&#x2019;t seem to have been a part of the dataset, but I think it would be foolish to assume they&#x2019;re immune.</p><p>Some caveats here: the analysis was done by Pangram, which builds a browser extension and back-end tech that attempts to detect AI-generated content. That&#x2019;s an imperfect process, and there are no tools that are completely reliable at making this distinction. False positives and false negatives have been common with these tools, although <a href="https://www.pangram.com/blog/all-about-false-positives-in-ai-detectors">Pangram claims a 0.01% false positive rate</a>. So take it with a pinch of salt, but it&#x2019;s reasonable to assume that these numbers are <em>directionally</em> true.</p><p>All of this serves to drive trust in these platforms even lower. Increasingly, people on platforms like LinkedIn are being lazy writers and using AI to produce content that you don&#x2019;t want to put the effort into. I generally think that if you can&#x2019;t be bothered to write something, it&#x2019;s not reasonable to ask people to read it; still, there may be some value in AI <em>assisted</em> writing, depending on the piece and how it was produced. (That kind of AI content, by the way, was not really measured by this test.) But AI has also led to a lot of outright spam making its way into people&#x2019;s feeds in order to shamelessly build clout and advertising revenue.</p><p>Both things are making these platforms unusable, which in turn is driving people to smaller communities and group chats with people they <em>know</em> they can trust. I believe that&#x2019;s going to be a big trend: AI leading to a noticeable drop in quality that drives people away from the platforms where it&#x2019;s allowed to thrive. In that world, platforms that foster trusted relationships and communities will win.</p><p><em>Via </em><a href="https://www.404media.co/linkedin-and-x-are-flooded-with-ai-spam-browsing-data-suggests/"><em>404 Media, which has characteristically great coverage of the story</em></a><em>.</em></p>