Shellsharks Blogroll - BlogFlock https://blogflock.com/list/xJ8yq 2026-09-15T23:40:00.000Z BlogFlock shellsharks More meaningful online interactions, please - Joel's Log Files https://joelchrono.xyz/blog/meaningful-online-interactions 2026-09-15T23:40:00.000Z joelchrono <p>Scrolling through the timeline, these are only a few of the things I’ve seen today, people on different perspectives and paths, perhaps someone…</p> <ul> <li>That finally managed to fix their printer after a system update</li> <li>Talking about seeing someone else make a funny typo</li> <li>Sharing their progress on a software project</li> <li>Letting everyone know about a cool update on their favourite game</li> <li>Celebrating being done with the work day and going home</li> <li>Coming up with a random pun/name for a pet</li> <li>Criticizing people in power that do bad things</li> <li>Saddened by all the AI and LLMs submitting bad code</li> <li>Thanking a developer for adding a new feature</li> <li>Uploading a picture of their new book they’re reading</li> <li>Sharing a picture of their super cute cat</li> </ul> <p>I look at the replies, and the ones with more comments are from people complaining about AI, or from people annoyed at bad people doing bad things (or the cat, but that’s a phenomenon I’m not getting into)</p> <p>The point is a lot of people engage with the negative, bad news, and such, nothing wrong with that of course, but it got me thinking…</p> <p>I have around 2900 followers on my profile—a meaningless sum in the grand scheme of things—I have made lots of posts, I share my blogposts, I share my progress on my videogames, or when there is some celebration, or when I’m reading a book, or when I get stuck under the rain.</p> <p>I always try to share something positive or that I find amusing or fulfilling, or just nice.</p> <p>Today alone, between both of my fediverse accounts, without counting boosts, I’ve made a grand total of only 3 original posts, not a lot to be fair, but an okay amount for a regular guy like me.</p> <p>The oldest one was 11 hours ago, the latest is 3 hours ago, as of the time of writing this post. I have 18 favorites (one post with 11 favorites using a popular hashtag), and 4 boosts.</p> <p>None of them have a reply.</p> <p>I have done my due diligence and replied about 15 times in the last 11 hours, to ongoing conversations, giving advice about watches, or surprised that someone followed me, or something else.</p> <p>Only 5 of them go a reply back. I didn’t bother to count favorites/boosts for these.</p> <p>A part of me feels like I am begging for attention, that I want people to reply to me or to say things to me, but really, the initial list above this post was from lots of people I stumbled upon, and they also were simply shouting to the void with nobody on the other side.</p> <p>I am also fully aware, of the amount of people who can’t handle social interaction much, and prefer to acknowledge a post with a favorite and move on. With nothing to add to the conversation, this is very fair.</p> <p>But why does it seem like everyone has something to say about the negative things going on? Why do people come together only to complain about things that a lot of the time don’t make us feel good?</p> <p>Don’t get me wrong, mobilizing and raising our voices against evil is noteworthy. But many times we fall on nihilism and doom instead, and we don’t actually do any better after that.</p> <p>This post is somewhat inspired by Ana Rodrigues’s post: <a href="https://ohhelloana.blog/tell-the-speakers/">“Tell the speakers that you liked their talks “</a>, and in my head still lingers a post from Jane saying <a href="https://janerationx.me/posts/i-quit-mastodon">she quit Mastodon</a>. Give them a read if you want to.</p> <p>I am not quitting or anything, but I feel like the Fediverse and most social media with humans using it, has become a little more silent than before when it comes to talking about normal everyday things, focusing too much on big themes and controversies or something along those lines.</p> <p>To be clear, the Fediverse doesn’t use an algorithm, the reach of what I share is limited to the chronological timeline, so things can vary because of many factors I can’t really account for.</p> <p>Even so, I don’t know, just food for thought…</p> <p>On a positive note, the stars aligned and I somehow got like 5 emails on my inbox this week, one of them in the last 24 hours, so that’s always a win in my books!</p> <p>And I still have plenty of fun on the Signal groups and Discord communities I’m on, so yeah, who knows.</p> <p>Maybe I am just an attention-seeker who is annoyed at the lack of comments on my posts. I work very hard to come up with them!!</p> <p>Okay, but, for real, I think we should choose to engage with things that make us happier! So if the post or article or picture a person shares does that, I invite you to let them know!</p> <p>This is day 36 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=More meaningful online interactions, please">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/117277705867528500">Reply on Fediverse</a> </p> Summer Game Challenge 2026 results! - Joel's Log Files https://joelchrono.xyz/blog/summer-games-completed 2026-09-15T18:30:00.000Z joelchrono <p>Back in May <a href="/blog/summer-game-challenge-2026/">I decided to participate</a> in the challenge mentioned in the title. From May 25 to September 7 (Memorial and Labour Day in the US), the goal was to make a list of at least ten games, and try to beat a minimum of four before the due date. As a Mexican, I gave myself some extra time, until September 16, which is Mexican Independence Day.</p> <p>The goal is to make some progress on the backlog and well, play videogames! And that’s exactly what I did, I think!</p> <p>My friend Bobby also participated in the challenge, <a href="https://bobbyhiltz.com/posts/2026/08/summer-game-challenge-2026-end/index.html">check out his blogpost!</a></p> <p>My original list consisted of fiftheen titles, although again, I only needed to beat four of them!</p> <ul> <li>Grapple Dog</li> <li>Terranigma</li> <li>Hades</li> <li>Outer Wilds</li> <li>Silksong</li> <li>Resident Evil 3: Nemesis</li> <li>Metroid Prime Remastered</li> <li>Chants of Sennaar</li> <li>Emio the Smiling Man</li> <li>Pipistrello and the Cursed YoYo</li> <li>Gris</li> <li>Super Mario 3D World</li> <li>Metroid Fusion</li> <li>CrossCode</li> <li>The Hundred Line: Last Defense Academy</li> <li>Transistor (an addition early on!)</li> </ul> <h2 id="the-completed-ones">The completed ones</h2> <p>In the end, from that list <strong>I managed to beat 6/15 games!</strong></p> <table> <thead> <tr> <th style="text-align: left">Title</th> <th style="text-align: right">Playtime</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Hades</td> <td style="text-align: right">42:30</td> </tr> <tr> <td style="text-align: left">Metroid Prime Remastered</td> <td style="text-align: right">25:15</td> </tr> <tr> <td style="text-align: left">Transistor</td> <td style="text-align: right">05:50</td> </tr> <tr> <td style="text-align: left">Gris</td> <td style="text-align: right">04:15</td> </tr> <tr> <td style="text-align: left">Outer Wilds</td> <td style="text-align: right">32:30</td> </tr> <tr> <td style="text-align: left">Emio: The Smiling Man</td> <td style="text-align: right">13:20</td> </tr> </tbody> </table> <p>I made a neat collage of the art of all the completed games, APPRECIATE IT!</p> <p><img src="/assets/img/blogs/2026-09-15-summer-games.webp" alt="Collage with artwork of the completed games" /></p> <p>And here are some extra thoughts if you want—most of them have reviews you can check out.</p> <h3 id="hades"><a href="/blog/hades/">Hades</a></h3> <p>I was already on the last stretch after managing to defeat Hades a couple times before the challenge started, and by May 31st, I rolled credits and got some closure for one of the best titles of the decade.</p> <p>I know there is still a lot this game has to offer, and I may return eventually for it, but I also don’t want to end up trapped giving dozens of extra hours to this game, which as fun as it may be, wouldn’t let me get other things done!</p> <h3 id="metroid-prime-remastered"><a href="/blog/metroid-prime-remastered/">Metroid Prime Remastered</a></h3> <p>This is probably my favorite game that I both started and beat during the challenge! Playing continuously from June 1 to 12. A perfect transition to 3D done by Retro Studios that I loved from beginning to end!</p> <p>The game was absolutely beautiful too, this is the best looking game in the Nintendo Switch as far as I’m concerned, and a pleasure to experience without any hiccups or issues at all. The challenge, the world design and upgrades were all fun. While it does have outdated elements, they weren’t a big deal for me at all. I love Metroid.</p> <h3 id="transistor"><a href="/blog/transistor/">Transistor</a></h3> <p>This one was not on my original list, but I still want to count it since I reaplced it very early on in the the challenge, to be honest, swapping it with <em>Chants of Sennar</em> or something akin.</p> <p>The combat and the story were the highlight here, a very interesting mix of turn based and action gameplay. The way the plot unfolded was incredible to see, the voice acting and score is also a highlight. There were a couple new things I could try starting a New Game+, but I got my fill, and it was great.</p> <h3 id="gris"><a href="/blog/gris/">Gris</a></h3> <p>An unexpected choice for me given my options, I was home alone for a couple of days and decided to go ahead and give it a go. The experience was incredible. Going through it all while nobody else was around, letting the soundtrack play at max volume on my TV, with all the lights turned off, it was great.</p> <p>The story and art, so beautiful, the platforming and the puzzles were light and elegant, and the vibes were just right for this one, a pleasure to have it finished.</p> <h3 id="outer-wilds"><a href="/blog/outer-wilds/">Outer Wilds</a></h3> <p>But what else can I say about such a perfect experience? This game does not have the prettiest graphics on the Switch, and the performance is not ideal. However, I still pushed through it, and it was still incredible.</p> <p>I had played like fourteen hours earlier in the year, and I went through almost twenty more as I resumed my journey and simply lived in the moment every time. The story, the mechanics, the characters, the discoveries. The planets aligned for once in a lifetime, they gave us a beautiful arrangement, it shall never be equaled.</p> <h3 id="emio-the-smiling-man">Emio: The Smiling Man</h3> <p>My review for this title is still only a draft in my head, but it’s a detective story and visual novel where we are the main protagonist, a young detective who has to work on a rather creepy case and get to the truth of it all.</p> <p>The art of this game is truly beautiful, the writing was also awesome, drip-feeding information in a great way, the mystery of it all, the score. It is a great visual novel with great production values that I devoured in just three days! I got stuck a couple of times, but not a detriment at all.</p> <h2 id="the-forgotten-ones">The forgotten ones</h2> <p>During all of the challenge, none of these got a time to shine at all, for one reason or another! They are all pretty great games though, but well, time management, procrastination, and stuff.</p> <ul> <li> <p><strong>Grapple Dog</strong> - Even though I have progress on this game, and it really is a fun time, I pretty much didn’t touch it at all during the whole challenge, it kind of ended up shelved for the sake of other titles.</p> </li> <li> <p><strong>Resident Evil 3: Nemesis</strong> - I think I booted this up once, but my retro handheld use saw itself diminished and I pretty much forgot for a while until it was too late! Definitely still thinking of playing though.</p> </li> <li> <p><strong>Chants of Sennaar</strong> - I would have loved to get to this one, but I didn’t even install it. Besides, after <em>Outer Wilds</em> it was probably better to wait some time to get to this one.</p> </li> <li> <p><strong>Pipistrello and the Cursed YoYo</strong> - This is another one that I didn’t even boot up, it stayed in the box for the whole duration of the challenge, I chose to unbox <em>Emio: The Smiling Man</em> instead.</p> </li> <li> <p><strong>The Hundred Line: Last Defense Academy</strong> - I am actually surprised I didn’t get at least one more ending of this for so many months. Definitely looking forward to a return though, there’s dozens of hours left for me to experience here!</p> </li> <li> <p><strong>Metroid Fusion</strong> - I guess I just feel like I could beat this in an afternoon and didn’t really bother to check. It’s a fantastic game though, I just wanted new experiences, and <em>Prime</em> provided that Metroid sauce anyway.</p> </li> </ul> <h2 id="the-works-in-progress">The works in progress</h2> <p>Even though these games were not quite completed (I technically rolled credits on Silksong when getting Act 3 though), I still enjoyed a bunch of my time playing a bit of some of them.</p> <ul> <li> <p><strong>Silksong</strong> - Honestly I am extremely pleased with the progress I’ve made on Silksong, from getting a lot of extra wishes and items, to finally unlocking Act 3 and starting to face against some new enemies, bosses and new areas that I have loved (and hated) to explore! Will definitely continue this adventure.</p> </li> <li> <p><strong>Terranigma</strong> - To be quite fair, I only played this gem for a couple short sessions, I even forgot to update my journal about it. In any case, I know how good this game is and I have to catch up with <a href="https://thetangent.space">Sam</a> soon.</p> </li> <li> <p><strong>Super Mario 3D World</strong> - My friends and I simply didn’t pick this one up enough times… I am very close to the finale though, but we are also collecting all the stars and stamps!</p> </li> <li> <p><strong>CrossCode</strong> - Some of my friends kind of lost steam, and I refuse to go without them even now, I hope they regain their morale and get into this journey again, it has been so nice!</p> </li> </ul> <h2 id="the-extras">The extras…</h2> <p>During the timespan of the challenge, <strong>I completed 9 more titles!</strong>—including some DLC and shorter indie games.</p> <table> <thead> <tr> <th style="text-align: left">Title</th> <th style="text-align: right">Playtime</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Monument Valley: Ida’s Dream</td> <td style="text-align: right">00:20</td> </tr> <tr> <td style="text-align: left">Monument Valley: Forgotten Shores</td> <td style="text-align: right">01:00</td> </tr> <tr> <td style="text-align: left">Monument Valley II</td> <td style="text-align: right">01:45</td> </tr> <tr> <td style="text-align: left">Monument Valley II: The Lost Forest</td> <td style="text-align: right">00:20</td> </tr> <tr> <td style="text-align: left">Monument Valley III</td> <td style="text-align: right">03:16</td> </tr> <tr> <td style="text-align: left">Monument Valley III: The Garden of Life</td> <td style="text-align: right">01:00</td> </tr> <tr> <td style="text-align: left">Jabberwocky</td> <td style="text-align: right">00:20</td> </tr> <tr> <td style="text-align: left">The Two Rivers Hypothesis</td> <td style="text-align: right">00:40</td> </tr> </tbody> </table> <ul> <li> <p><strong>Monument Valley (overall)</strong> - This was a wonderful set of levels and artistic visuals that kind of blew me away from beginning to end! The overall puzzle design wasn’t always consistent, and some of the ideas were not explored as much as I would have liked, but everything there is was always a joy!</p> </li> <li> <p><strong>Jabberwocky</strong> - This was just a short indie Game Boy game that I beat in twenty minutes, a fun story you can <a href="">get for free on itch.io</a></p> </li> <li> <p><strong>The Two Rivers Hypothesis</strong> - Another short indie title, with a much more serious existential horror theme, it is pretty quick to finish, and it’s a nice time if you are into speculative fiction stuff. <a href="">Free on itch.io!</a></p> </li> </ul> <h2 id="and-the-never-ending">And the never ending…</h2> <p>There is always a big supply of other titles I’m playing, trying them out here and there. Games I got started with, games I’ve been poking at for years, you already know many of them!</p> <ul> <li> <p><em>Fire Emblem Awakening</em> and <em>Ocarina of Time</em> have been an absolute menace on my Nintendo 3DS, with a lot of story yet to experience.</p> </li> <li> <p><em>Faster Than Light</em> and <em>Minecraft</em> have gotten plenty of playtime on my PC, especially the latter on a server with friends.</p> </li> <li> <p><em>Donkey Kong</em> , <em>Astro Boy Omega Factor</em> and the lovely <em>Final Fantasy VI</em> are still ongoing, claiming their spot on my emulation handheld.</p> </li> <li> <p><em>Black Rock Shooter</em>, <em>Ys I & II Chronicles</em>, <em>Final Fantasy IV</em> or <em>Ridge Racer</em>, keeping me busy whenever I give my PSP some love.</p> </li> </ul> <p>And of course, my Nintendo Switch alone has its own set of problems! From <em>Kirby and the Forgotten Land</em> which I’m barely getting started on, or the many little gems in <em>UFO 50</em>. The fantastic <em>Tomodachi Life: Living The Dream</em> which ate a bunch of my summer when it came out, and <em>Super Smash Bros</em>, still king of my multiplayer afternoons.</p> <p>Not much else to say by now. The challenge is completed! It was a success, I played a bunch, and I had a lot of fun, I am probably going to try to keep a list going for the rest of the year too, but nothing as structural as this. Time to wait for the year’s recap and see how things turn out with only a few months left for 2026.</p> <p>This is day 35 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Summer Game Challenge 2026 results!">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/117276526303242739">Reply on Fediverse</a> </p> Read "Inside 'Project Lily': The Humans Reading Your ChatGPT Chats" - Molly White's activity feed 6aa962730db40ecf5ef3e0b4 2026-09-15T15:21:23.000Z Molly White <article class="entry h-entry hentry"><header><div class="description">Read: </div></header><div class="content e-content"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of" href="https://www.404media.co/inside-project-lily-the-humans-reading-your-chatgpt-chats/" rel="bookmark">“<span class="p-name">Inside 'Project Lily': The Humans Reading Your ChatGPT Chats</span>”</a>. </div><div class="byline"><span class="p-author h-card">Joseph Cox</span> in <i class="p-publication">404 Media</i>. <span class="read-date"> Published <time class="dt-published published" datetime="2026-09-14">September 14, 2026</time>.</span></div><blockquote class="summary p-summary entry-summary">Humans are reading ChatGPT users' prompts to improve OpenAI's models, and those chats can include sensitive, personal information, according to leaked internal documents and real prompts seen by 404 Media.</blockquote><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><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-09-15T15:21:23+00:00" title="September 15, 2026 at 3:21 PM UTC">September 15, 2026 at 3:21 PM UTC</time>. </div></div></footer></article> [RSS Club] Sorry for breaking your feed readers! - Terence Eden’s Blog https://shkspr.mobi/blog/?p=75570 2026-09-15T11:34:26.000Z Terence Eden’s Blog <p><mark>You're part of the Groovy Gang because you're a member of <a href="https://daverupert.com/rss-club/">RSS Club</a>! These posts are only available on my RSS and Atom feed. This post is <strong>not</strong> available in the shops, on the web, via FTP, or anywhere else.</mark></p> <p>So, yeah, sorry! My last post apparently broke some people's RSS readers. I had a code sample which said <code><marquee></code> - despite being properly escaped, some feed readers double-decoded it and turned it into a literal marquee element!</p> <p><video width="270" height="585" muted="" autoplay="" loop="" style="display:inline" src="https://shkspr.mobi/blog/wp-content/uploads/2026/09/feedscroll2.webm"></video><video width="270" height="600" muted="" autoplay="" loop="" style="display:inline" src="https://shkspr.mobi/blog/wp-content/uploads/2026/09/feedscroll.webm"></video?</video></p> <p>With thanks to Neil and CaféHaine for the videos.</p> <p>I got several reports that people's readers started scrolling like that and they'd <a href="https://github.com/nextcloud/news-android/issues/1719">raised issues with their feed reader</a>. Ooops! Sorry!</p> <p>That said, as far as I can tell, the feed <em>is</em> escaped correctly and shouldn't cause problems.</p> <p>Here's the code (I've added in some spaces to ensure it doesn't cause any issues):</p> <pre><code class="language-xml"><content type="html"> <![CDATA[< p> Lorem ipsum <code>& lt;marquee></code> dolor sed.</p> </code></pre> <p>So what's going on? The feed is generated by the latest version of WordPress which <a href="https://github.com/WordPress/wordpress-develop/blob/99e2de78a828d4fe472e37cf25fb0b2173e65c86/src/wp-includes/feed-atom.php#L89">uses <code>CDATA</code> to wrap HTML</a> in a feed.</p> <p>There is a <a href="https://core.trac.wordpress.org/ticket/9992">17 year old discussion about whether this is conformant</a> on the WordPress issue tracker with the conclusion that it isn't incorrect and seems to work fine.</p> <p>Is it OK? Is my feed broken or are a bunch of readers non-compliant? Let's go back to basics. The Atom spec says</p> <blockquote><p>If the value of "type" is "html", the content of atom:content MUST NOT contain child elements and SHOULD be suitable for handling as <a href="https://www.rfc-editor.org/info/rfc4287/#ref-HTML">HTML</a>. The HTML markup MUST be escaped; for example, "<code><br></code>" as "<code><br></code>".</p> <p><a href="https://www.rfc-editor.org/info/rfc4287/#section-4.1.3.3">RFC 4287: The Atom Syndication Format</a></p></blockquote> <p>Hmmmm. That would indicate that ampersand-l-t-semicolon should be interpreted as a less-than sign.</p> <p>However, the whole thing is wrapped in <code><![CDATA[</code> which according to the XML spec means:</p> <blockquote><p>CDATA sections may occur anywhere character data may occur; they are used to escape blocks of text containing characters which would otherwise be recognized as markup.</p> <p><a href="https://www.w3.org/TR/REC-xml/#sec-cdata-sect">Extensible Markup Language (XML) 1.0 (Fifth Edition)</a></p></blockquote> <p>So I <em>think</em> that a sensible feed-reader should see the CDATA block, grab the HTML inside it, and display it as-is. No need to unescape anything.</p> <p>That said, I'll see if I can change my feed to <em>not</em> need this hybrid format. There's <a href="https://waspdev.com/articles/2026-05-11/avoid-using-cdata-in-rss">a brilliant blog post by Suren Enfiajyan</a> which makes the case that regular escaping is <em>probably</em> good enough.</p> <p>If you've experienced this bug - or think that I'm generating my feeds in the wrong way - <a href="https://edent.tel">please get in touch</a>.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=75570&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 1Password's AI patching benchmark is misleading - Trail of Bits Blog https://blog.trailofbits.com/2026/09/15/1passwords-ai-patching-benchmark-is-misleading/ 2026-09-15T11:00:00.000Z Trail of Bits Blog <p>1Password’s <a href="https://1password.com/blog/why-ai-generated-patches-still-require-human-review">FLAWED report</a>, published on August 6, 2026, gives defenders a misleading picture of AI patching. Its headline says models produced clean fixes only 26% of the time. That figure includes experiments that deliberately instructed agents to apply the wrong fix, along with experiments in which agents could not compile or test their patches.</p> <p>The report risks making defenders less effective by discouraging them from using technology that could help them fix more vulnerabilities. Teams that take its headline at face value may leave repairable vulnerabilities unaddressed.</p> <p>We want our work to help defenders fix more vulnerabilities. This post shares real-world data on human and agent patch quality from our consulting projects and Patch the Planet. We’re also releasing two agent skills: <a href="https://github.com/trailofbits/skills/tree/main/plugins/post-patch-validation">post-patch-validation</a> to help agents test fixes, and <a href="https://github.com/trailofbits/skills/tree/main/plugins/review-walkthrough">review-walkthrough</a> to help engineers review them.</p> <h2 id="how-the-experiment-produces-a-misleading-headline">How the experiment produces a misleading headline</h2> <p>Our review of 1Password’s <a href="https://github.com/Off-by-1-Labs/FLAWED/tree/2d3d15693b155873709bcf0daa247c2f0221d694">code and data</a> found four choices that make its 26% clean-fix rate a misleading guide to ordinary patching work.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p> <ul> <li><strong>The sample was selected for difficult fixes.</strong> The authors chose six vulnerabilities because their fixes were complex. Clean-fix rates ranged from 3% to 60% across those bugs, so the average depends heavily on which vulnerabilities made the list.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></li> <li><strong>Two prompts tell agents to apply the wrong fix.</strong> Those prompts account for 22% of the data. Combining them with ordinary repair attempts makes the reported rate depend partly on how often the researchers chose to give agents bad advice.</li> <li><strong>More than a third of the trials prohibit testing.</strong> One evaluation mode prevents agents from building or running code and accounts for 36% of the data. The headline combines those trials with experiments in which agents could test their patches and act on the results.</li> <li><strong>The models ran at different reasoning settings.</strong> GPT-5.5 ran at medium effort and Opus 4.8 at high. These were the tools’ defaults. Neither model was tested at its highest available setting, and the authors did not measure how increasing effort affected the results.</li> </ul> <p>1Password’s headline also obscures a useful result in its own data. We reanalyzed the patches and recorded test results published with the study, keeping trials where agents could run code and were not instructed to apply the wrong fix. <strong>In those trials, 2,634 of 3,067 patches generated by 1Password’s models (86%) blocked the supplied exploit.</strong> We excluded runs that the study classified as having consulted the upstream fix. Blocking that exploit does not establish a complete repair, but these results show useful patching capability under reasonable working conditions that the headline fails to convey.</p> <p>The instructions and grading introduce further problems, several of which <a href="https://www.flyingpenguin.com/disinformation-pushed-by-1password-ai-patching-report-is-false/">Davi Ottenheimer</a> has also highlighted:</p> <ul> <li><strong>The stopping rule and grading criteria disagree.</strong> Agents given a proof-of-concept exploit were instructed to stop once their patch defeated it. The grader then evaluated vulnerable paths that the supplied exploit did not exercise.</li> <li><strong>The grading penalizes intended behavior changes.</strong> Agents were told to leave existing tests untouched, even though a correct fix can require updating tests to reflect changed behavior. We found that 8% of ActiveMQ verdicts penalized an intended behavior change as a regression.</li> <li><strong>The automated grades disagree with human review.</strong> Models grading their own patches matched human reviewers on the full five-category outcome in 65.9% of reviewed cases. Agreement was 87.7% for whether the original bug was fixed and 70.5% for whether new bugs were introduced. (<a href="https://1password.com/files/resources/frontier-models-vulnerability-patches-flawed.pdf#page=17">Table 24</a>)</li> <li><strong>Changing the reviewer changes the result.</strong> The two models assigned different outcomes to 36.8% of the same patches. The headline averages their assessments. (<a href="https://1password.com/files/resources/frontier-models-vulnerability-patches-flawed.pdf#page=16">Table 20</a>)</li> <li><strong>The Linux reference fix contains a vulnerability.</strong> The authors found 248 generated patches that repeated an off-by-one error in the upstream fix. The automated grader caught that new vulnerability in only 24 of them. (<a href="https://1password.com/files/resources/frontier-models-vulnerability-patches-flawed.pdf#page=20">Section 4.4</a>)</li> <li><strong>The Chromium grader accepts incomplete repairs.</strong> It marked many patches as clean even though they left a use-after-free vulnerability in a callback. (<a href="https://1password.com/files/resources/frontier-models-vulnerability-patches-flawed.pdf#page=24">Section 4.9</a>)</li> </ul> <p>The grading errors can penalize valid fixes and let vulnerable patches pass. Combined with the handpicked sample and deliberately bad instructions, they leave the report without a credible basis for its headline. <strong>Defenders should not take 1Password’s headline rate seriously as a measure of AI patching ability.</strong></p> <h2 id="developers-get-one-in-eight-fixes-wrong-under-ideal-conditions">Developers get one in eight fixes wrong under ideal conditions</h2> <p>Understanding agent failures also requires understanding how often developers submit incomplete fixes. Our security consulting work gives us a detailed record of how developers repair vulnerabilities in their own software. We give clients detailed vulnerability reports, then conduct a “<a href="https://github.com/trailofbits/publications">fix review</a>” to check whether their proposed patches fully resolve the issues.</p> <p>Our records connect each vulnerability to the developer’s first proposed fix and our assessment of whether it worked. They preserve unsuccessful attempts that developers revise before an issue is considered resolved.</p> <p>We reviewed the first fixes submitted for 2,265 vulnerabilities across 236 Trail of Bits security assessments from 2024 to 2026. The developers maintained the affected software, had detailed reports from our engineers, and knew we would review their patches. Even under those favorable conditions, 283 first fixes failed to fully resolve the reported issue: 12.5%, or one in eight.</p> <p> <figure> <img src="https://blog.trailofbits.com/2026/09/15/1passwords-ai-patching-benchmark-is-misleading/1password-image1_hu_34d317e989dba7a7.webp" alt="“Figure showing first fix submission outcomes”" width="1200" height="720" loading="lazy" decoding="async" /> <figcaption>Figure showing first fix submission outcomes</figcaption> </figure> </p> <p>Accounting for multiple fixes from the same assessment, the 95% confidence interval is <strong>10.5% to 14.5%</strong>. Sometimes we point out a mistake in a client’s patch during an informal conversation, and they correct it before the formal fix review. Those early failures may never appear in the review record, so our data can undercount failed first attempts. We also excluded cases where the available records did not establish whether the fix worked. A direct comparison with agents would require the same tasks and working conditions.</p> <h2 id="what-happened-to-our-patches-in-real-projects">What happened to our patches in real projects</h2> <p>Through Patch the Planet, our joint initiative with OpenAI, Trail of Bits has co-authored <a href="https://trailofbits.com/patch-the-planet/dashboard/">hundreds of patches</a> for widely used open-source projects. Agents wrote the patches with engineers directing the work and checking the results. Project maintainers then decided whether to merge, revise, or reject each submission.</p> <h2 id="how-maintainers-reviewed-patch-the-planet-patches">How maintainers reviewed Patch the Planet patches</h2> <p>We examined the public review history of every Patch the Planet submission in our dataset that maintainers had merged or closed by September 14, 2026: 186 pull requests. 1Password’s benchmark used six vulnerabilities selected because their fixes were complex.</p> <p>Maintainers merged 126 of our 186 pull requests, an acceptance rate of 67.7%.<sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup> <strong>In 91 of those 126 pull requests (72.2%), maintainers accepted the security fix we originally proposed.</strong></p> <table> <thead> <tr> <th style="text-align: left">Review outcome</th> <th style="text-align: left">PRs</th> <th style="text-align: left">% of merged PRs</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Total merged</td> <td style="text-align: left">126</td> <td style="text-align: left">100%</td> </tr> <tr> <td style="text-align: left">Accepted with no security-relevant revision observed</td> <td style="text-align: left">91</td> <td style="text-align: left">72.2%</td> </tr> <tr> <td style="text-align: left">Accepted with security-relevant revision observed</td> <td style="text-align: left">33</td> <td style="text-align: left">26.2%</td> </tr> <tr> <td style="text-align: left">Indeterminate</td> <td style="text-align: left">2</td> <td style="text-align: left">1.6%</td> </tr> </tbody> </table> <p><em>Table 1: Changes requested by maintainers for 126 merged Patch the Planet pull requests. Security-related revisions include repairs to a proposed fix and expansions of its security coverage.</em></p> <p>Maintainer acceptance does not establish that every patch is correct.</p> <p>Maintainers closed the other 60 submissions without merging them. Most were superseded by other work or declined for policy, process, scope, or maintenance reasons. Four were explicitly rejected on technical grounds.</p> <table> <thead> <tr> <th style="text-align: left">Reason for closure</th> <th style="text-align: left">PRs</th> <th style="text-align: left">% of closed PRs</th> </tr> </thead> <tbody> <tr> <td style="text-align: left">Total closed without merge</td> <td style="text-align: left">60</td> <td style="text-align: left">100%</td> </tr> <tr> <td style="text-align: left">Superseded, reimplemented, or re-landed elsewhere</td> <td style="text-align: left">36</td> <td style="text-align: left">60.0%</td> </tr> <tr> <td style="text-align: left">Policy, process, scope, or maintenance reasons</td> <td style="text-align: left">14</td> <td style="text-align: left">23.3%</td> </tr> <tr> <td style="text-align: left">Duplicate or convergent with another fix</td> <td style="text-align: left">3</td> <td style="text-align: left">5.0%</td> </tr> <tr> <td style="text-align: left">Explicitly rejected on technical grounds</td> <td style="text-align: left">4</td> <td style="text-align: left">6.7%</td> </tr> <tr> <td style="text-align: left">Other or indeterminate</td> <td style="text-align: left">3</td> <td style="text-align: left">5.0%</td> </tr> </tbody> </table> <p><em>Table 2: Reasons maintainers closed 60 Patch the Planet pull requests without merging</em></p> <p>One of those closed submissions was our freenginx patch.</p> <h2 id="a-maintainer-and-an-agent-introduced-the-same-freenginx-crash">A maintainer and an agent introduced the same freenginx crash</h2> <p>1Password’s case study examines a Patch the Planet fix for a memory-safety bug in freenginx’s embedded Perl module. An agent wrote our patch under the direction of a Trail of Bits engineer. It left one vulnerable code path open and introduced a new crash during request cleanup. The paper’s criticism of our patch is correct.</p> <p>The maintainer closed <a href="https://github.com/freenginx/nginx/pull/35">our pull request</a> and committed <a href="https://github.com/freenginx/nginx/commit/cf26435a029e75af7b0a2e8a26b1eefe445890c6">a separate fix</a>. That fix covered all three vulnerable code paths but introduced the same crash during cleanup. The paper documents the maintainer’s regression too.</p> <p>Both authors encountered the same trap. The original bug allowed Perl to destroy a callback before freenginx used it.</p> <p>Both fixes kept the callback alive so freenginx could use it later. But if the request timed out first, freenginx would make the request unusable and then release the callback. Releasing it could run Perl code that still tried to use the request, crashing the worker. Both authors missed a problem their fix could cause later, during cleanup. Catching it required looking beyond the original bug to what happened when a request ended early.</p> <p>Two authors, one human and one agent, working separately, made the same mistake on the same bug. Readers deciding whether to use agents need to know how their failures compare with those of human developers. Establishing which is more reliable requires measuring both under comparable conditions.</p> <h2 id="we-checked-what-happened-after-our-patches-were-merged">We checked what happened after our patches were merged</h2> <p>We examined about 33,500 subsequent commits in Patch the Planet projects. When a later commit changed a file our patch had modified, we investigated whether it fixed a problem our patch had introduced. For each suspected regression, an agent attempted to demonstrate its impact with a proof of concept. Other agents and our engineers then challenged the findings.</p> <p>The review found at least ten functional bugs; four build, test, or release automation bugs; and one performance bug. It found no exploitable security vulnerabilities. Two examples illustrate the problems we identified:</p> <ul> <li>In go-jose, <a href="https://github.com/go-jose/go-jose/pull/240">PR #240</a> fixed a missing-header crash but exposed an existing validation gap, allowing encrypted messages to succeed even when their key length contradicted the declared algorithm. <a href="https://github.com/go-jose/go-jose/pull/266">PR #266</a> added explicit key-length checks before decryption.</li> <li>In Noble FROST, <a href="https://github.com/paulmillr/noble-curves/pull/250">PR #250</a> returned cached round-two results without first checking whether a retry contained the same authenticated transcript. Changed or stale retry data could therefore bypass that check. The maintainer <a href="https://github.com/paulmillr/noble-curves/commit/27a2133d492f7ec355caf41a45d40a51f0edb9ad">corrected the behavior</a> by validating retries against the original transcript before returning cached results.</li> </ul> <p>We are extending this investigation to every patch we authored, including patches with maintainer contributions. The findings will help us add checks that catch these failures before we submit future patches.</p> <h2 id="agent-skills-for-better-security-patches">Agent skills for better security patches</h2> <p>We are releasing two agent skills alongside this post: <a href="https://github.com/trailofbits/skills/tree/main/plugins/post-patch-validation">post-patch-validation</a> to help agents test security fixes, and <a href="https://github.com/trailofbits/skills/tree/main/plugins/review-walkthrough">review-walkthrough</a> to help engineers review code changes.</p> <p>Post-patch-validation is a new skill we wrote to help agents catch incomplete fixes and regressions before submitting patches for review. It was not used in the Patch the Planet work described above.</p> <p>The skill starts with a vulnerability report and the code before and after the patch. It guides the agent through four tasks:</p> <ul> <li><strong>Reproduce the original bug.</strong> The agent writes a check that must fail on the vulnerable code and pass on the patched version. A test that passes on both revisions cannot demonstrate a fix.</li> <li><strong>Test another path to the same failure.</strong> The skill requires at least one distinct variant based on the bug’s root cause, such as a different caller or a cleanup path.</li> <li><strong>Check for regressions and new vulnerabilities.</strong> It compares behavior that should remain unchanged and tests security properties around the modified code. The plan must also include project tests, a sanitizer check, or a bounded fuzzing run.</li> <li><strong>Treat broken test runs as inconclusive.</strong> A failed build or missing dependency must not be mistaken for evidence that a vulnerability was reproduced.</li> </ul> <p>Failed checks give the agent specific problems to investigate and repair before submitting its patch. The skill saves the tests and results so maintainers can see what was checked.</p> <p>To try post-patch-validation, <a href="https://github.com/trailofbits/skills/tree/main/plugins/post-patch-validation#installation">install the skill</a> and give your agent the vulnerability report and the vulnerable and patched revisions:</p> <p>“Use post-patch-validation to validate the patch in HEAD against <vulnerable-commit>, using the vulnerability report in <report-path>.”</p> <p><a href="https://github.com/trailofbits/skills/tree/main/plugins/review-walkthrough">Review-walkthrough</a> helps engineers review the patches they are responsible for merging. It turns a branch’s complete diff into an interactive walkthrough that explains the changes in a logical reading order. Review findings appear beside the relevant code, where engineers can inspect them and draft their own comments. The walkthrough can also prepare a GitHub review for submission. Follow the <a href="https://github.com/trailofbits/skills/tree/main/plugins/review-walkthrough#quick-start">quick start</a> to generate a walkthrough for your branch.</p> <p>These releases join our other public agent skills for improving security patches:</p> <ul> <li><a href="https://github.com/trailofbits/skills/tree/main/plugins/variant-analysis">variant-analysis</a> helps agents find related defects elsewhere in the codebase.</li> <li><a href="https://github.com/trailofbits/skills/tree/main/plugins/property-based-testing">property-based-testing</a> helps them test behavior across generated inputs.</li> <li><a href="https://github.com/trailofbits/skills/tree/main/plugins/mutation-testing">mutation-testing</a> helps them determine whether their tests detect incorrect behavior and identify missing assertions.</li> </ul> <p>We publish these methods so other teams can use them to examine and improve their own patches.</p> <h2 id="what-a-useful-patching-benchmark-should-measure">What a useful patching benchmark should measure</h2> <p>A useful patching benchmark should measure whether agents help developers produce correct fixes and how much review those fixes require. The principles in our <a href="https://blog.trailofbits.com/2018/10/05/how-to-spot-good-fuzzing-research/">2018 guide to evaluating fuzzing research</a> apply here:</p> <ol> <li><strong>Choose a sample that matches the research question.</strong> Explain how the sample was chosen and which repair work it represents. Difficult cases can expose failure modes. General failure rates require a representative sample.</li> <li><strong>Measure the effects of working conditions.</strong> Give agents appropriate tools and instructions. Report model configurations and test how reasoning settings affect results. Report misleading prompts and restricted tool access separately.</li> <li><strong>Make correctness verifiable.</strong> Check that patches fix the vulnerability beyond the supplied exploit. Test for security, functional, and performance regressions. Validate grades against expert review and publish the tests, configurations, and results.</li> <li><strong>Show how results vary.</strong> Report per-vulnerability outcomes and variation across repeated attempts. Repeating trials on the same bugs cannot establish that those bugs represent everyday patching.</li> <li><strong>Measure what agents contribute to the repair process.</strong> Compare developers working with and without agents on comparable tasks and under comparable conditions. Measure initial patch quality and the review and revision needed to reach a correct fix.</li> </ol> <p>We are optimistic about AI’s usefulness to defenders. Through Patch the Planet, we are committing engineering time to fixing vulnerabilities alongside the people who maintain the affected software. We examine failures so we can improve our methods.</p> <p>We will keep putting agents to work on difficult security problems and making the tools and lessons public. We want other teams to test our conclusions and take these methods further. Our goal is to give maintainers without dedicated security teams the ability to find and fix vulnerabilities that would otherwise go unaddressed.</p> <div class="footnotes" role="doc-endnotes"> <hr> <ol> <li id="fn:1"> <p>The paper defines a clean fix as fully resolving the vulnerability without materially changing application behavior. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> <li id="fn:2"> <p>The six-target mean has a standard error of about nine percentage points, which the report does not disclose. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> <li id="fn:3"> <p>As of September 14, 2026, our dataset contained 240 public upstream pull requests. We excluded the 54 submissions still open from the outcome analysis. We count pull requests, each of which can contain more than one patch, and exclude maintainer-written replacements from our merged total. <a href="#fnref:3" class="footnote-backref" role="doc-backlink">↩︎</a></p> </li> </ol> </div> It's Never Too Late to Learn - Kev Quirk https://kevquirk.com/its-never-too-late-to-learn 2026-09-15T10:21:00.000Z Kev Quirk <p>Last weekend my wife called me over to show me something on her phone. She was going through her old emails and came across some emails we had passed back and forth, from when we first met.</p> <p>She and I met in a club and went on a couple of dates, but then I deployed to Afghanistan with the Army. We continued to converse via email mostly, and phone where possible - this was before the days of FaceTime etc. - and the rest is history. That was in 2006, and 20 years later we're still very happily married with a couple kids.</p> <p>Anyway, upon reading the emails I immediately wanted the ground to swallow me up. Not because they were overly mushy or lovey dovey (they were), but because the spelling and grammar were <em>horrendous</em>. I was never a particularly academic kid - in fact, I was mostly disengaged in school and really didn't try. I was clever, but I never applied myself. I was too busy being a stupid teenager. As a result, my written English was awful (it's still not great now, but it's better).</p> <p>For example, I didn't know the difference between "<em>there</em>", "<em>they're</em>", and "<em>their</em>". And you can forget about "<em>your</em>" versus "<em>you're</em>". "<em>Too</em>" vs "<em>to</em>"? Not a chance. <em>Where</em>, <em>were</em>, and <em>we're</em> baffled me. I had no idea where a comma was supposed to go in a sentence, and I'd never even heard of an <em><a href="https://en.wikipedia.org/wiki/Serial_comma" rel="noopener noreferrer">Oxford comma</a></em>.</p> <p>You get the idea.</p> <h2>Fixing the problem</h2> <p>During my time in the Army, written English wasn't really needed, so I wasn't too concerned. But after getting out and finding a job in IT, it quickly became apparent that my lack of basic English knowledge would hold me back. So I decided to fix it, and enrolled in a night school course.</p> <p>To my surprise I <em>really</em> enjoyed it. It turned out that writing and learning are a lot of fun, and I was <em>constantly</em> looking for ways to practice my new found writing skills. I think that's part of why I still love typing - I just find creating words on a screen a lot of fun. Yeah, I'm weird. I know.</p> <p>So I completed the night school course and came away with much improved grammar and a desire to write all the things. But replying to emails and writing reports in work wasn't scratching the creative itch for me.</p> <h2>Discovering blogging</h2> <p>One of the services the IT company I worked for offered was web hosting. I'd never really got involved in any of that, so learning about DNS, web servers, MySQL etc. was really interesting. I'd done a bit of basic web design during my college IT course, but never anything more.</p> <p class="notice">"College" in the UK is different to college in the US. We call that <em>university</em> here. In <em>college</em> we do our A-levels, which are intermediate qualifications between high school and university. I don't have a degree.</p> <p>A few of our customers had WordPress sites, and it blew my mind. Here is a web application that I can host myself, on my own server, with my own domain name. Furthermore, I can write what I want <em>and</em> publish it on the web for anyone to read. This was the creative outlet I'd been looking for!</p> <p>So in 2010 I registered <code>kevquirk.com</code>, set up WordPress on a shared host, and started writing. Sixteen years later I'm still here, and still thoroughly enjoying writing on the web. Albeit <a href="https://kevquirk.com/design-history">no longer on WordPress</a>.</p> <h2>Final thoughts</h2> <p>It's funny how these seemingly unrelated things connect together in retrospect and take us down a road we never thought we'd walk. Back in 2000, when I was leaving high school, if you'd have asked my high school English teacher (<em>hi Mrs Daniels!</em>) if she thought I'd be producing creative writing on the web for 16 years, she'd have laughed in your face. Hard.</p> <p>But I am. And it's all thanks to a basic written English course that I attended for a couple of months, just to improve my writing to help me with work.</p> <p>I'm not really sure how to wrap this one up. I suppose my <em>final thought</em> is that it's never too late to learn. And you never know where it will take you. A simple thing like a basic English night course could end up forming the longest running, most enjoyable hobby you have in your life.</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=It%27s%20Never%20Too%20Late%20to%20Learn">reply to this post by email</a>, or <a href="https://kevquirk.com/its-never-too-late-to-learn#comments">leave a comment</a>.</p> </div> New documentation page: Work packages - Johnny.Decimal https://johnnydecimal.com/support/updates/2026-09-15-docs-wps/ 2026-09-15T00:06:26.000Z Johnny.Decimal <p>There is a new documentation page in the 'further reading' section that summarises the concept of <a href="https://johnnydecimal.com/documentation/work-packages">work packages</a>.</p> <p>The <a href="https://johnnydecimal.com/sbs">Small Business System</a> now comes with an area for work packages. And there are two lessons in the <a href="https://johnnydecimal.com/jdu/taskpm">Task and Project management</a> course that discuss how work packages fit in our project management strategy.</p> <p>We're enjoying working this way, let us know if you need help implementing them.</p> Wonders of Web Weaving, Episode 19 - James' Coffee Blog https://jamesg.blog/2026/09/15/www-19 2026-09-15T00:00:00.000Z James' Coffee Blog <p><a href="https://web-weaving.jamesg.blog">The nineteenth episode of Wonders of Web Weaving is out</a>:</p> <blockquote> <p>In Episode 19, I chat with <a href="https://melonking.net">Daniel</a>, the author of <a href="https://melonking.net">melonking.net</a> and maintainer of the <a href="https://forum.melonland.net/">Melonland community forum</a> about, among other things, longevity on the web, the 'web revival', the creative potential of the web, and more.</p> </blockquote> <p>I hope you enjoy the episode!</p> <p><a href="https://web-weaving.jamesg.blog/subscribe/" rel="noreferrer"><em>Wonders of Web Weaving also has an RSS feed</em></a><em> you can use to follow along from wherever you get your podcasts.</em></p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a3b6403bae69e718',t:'MTc4OTQ2MDgzMg=='};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&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://forum.melonland.net/">Melonland community forum</a> <a class="tag" href="https://melonking.net">Daniel</a> <a class="tag" href="https://melonking.net">melonking.net</a> <a class="tag" href="https://web-weaving.jamesg.blog">The nineteenth episode of Wonders of Web Weaving is out</a> <a class="tag" href="https://web-weaving.jamesg.blog/subscribe/">Wonders of Web Weaving also has an RSS feed</a> Published on Citation Needed: "The Senate must reject the Clarity Act’s ethics charade" - Molly White's activity feed 6aa87f1852b01ca28c3ff679 2026-09-14T23:11:20.000Z Molly White <article class="entry h-entry hentry"><header><div class="description">Published an issue of <a href="https://www.citationneeded.news/"><i>Citation Needed</i></a>: </div><h2 class="p-name"><a class="u-syndication" href="https://www.citationneeded.news/clarity-act-ethics-charade" rel="syndication">The Senate must reject the Clarity Act’s ethics charade </a></h2></header><div class="content e-content"><div class="media-wrapper"><a href="https://www.citationneeded.news/clarity-act-ethics-charade"><img src="https://www.citationneeded.news/content/images/size/w2000/format/webp/2026/09/Cynthia_Lummis_-6266107864-.jpg" alt="Senator Cynthia Lummis speaks into a microphone on a stage, holding up a paper"/></a></div><div class="p-summary"><p>The supposedly “unprecedented” ethics restrictions exempt Trump’s crypto businesses and leave enforcement to his loyalists</p></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <a class="u-url" href="https://www.citationneeded.news/clarity-act-ethics-charade"><time class="dt-published" datetime="2026-09-14T23:11:20+00:00" title="September 14, 2026 at 11:11 PM UTC">September 14, 2026 at 11:11 PM UTC</time>. </a></div><div class="social-links"> <span>Also posted to:</span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117271882846502488" title="Mastodon" rel="syndication">Mastodon</a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mvj7k5bmfc2o" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/corruption" title="See all feed posts tagged "corruption"" rel="category tag">corruption</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/crypto" title="See all feed posts tagged "crypto"" rel="category tag">crypto</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/crypto_lobby" title="See all feed posts tagged "crypto lobby"" rel="category tag">crypto lobby</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/trump_administration" title="See all feed posts tagged "Trump administration"" rel="category tag">Trump administration</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/us_politics" title="See all feed posts tagged "US politics"" rel="category tag">US politics</a>.</div></div></footer></article> Esoteric HTML - ismap vs CSS - Terence Eden’s Blog https://shkspr.mobi/blog/?p=73143 2026-09-14T11:34:53.000Z Terence Eden’s Blog <p>The HTML specification is old and, while there is beauty in longevity, there's an inevitable build-up of boondoggles and baggage. Some elements like <code><marquee></code> have sadly been consigned to the dustbin of history - but there are still vestigial attributes just waiting to trip up the unwary.</p> <p>If you're young, you may never have heard of Image Maps. Back in the bad-old-days, there weren't many good options for laying out a pixel-perfect HTML page. One option was to draw your website in an image editor, load it into a website <em>as an image</em>, and then make certain areas of the image clickable.</p> <p>One way to do this was to add the attribute <code>ismap</code>. It is <em>only</em> valid on <code><img></code> elements which are inside an <code><a href=…></code> element. Like so:</p> <pre><code class="language-html"><a href="click.php"> <img ismap src="img.png" width="100" height="100"> </a> </code></pre> <p>When you click on that image, you don't go to <code>click.php</code> - instead you go to <code>click.php?12,34</code> where the two numbers represent the X and Y coordinates of <em>where</em> on the image you clicked. That's brilliant! Your server knows the size of the image - so if you click on the top half it can take you to one place, and if you click in the lower left corner you can go to another.</p> <p>Brilliant!</p> <p>Except, of course, there's a catch!</p> <p>The <a href="https://html.spec.whatwg.org/multipage/embedded-content.html#dom-img-ismap">specification of the <code><img></code> element</a> is a little obtuse. Merely saying:</p> <blockquote><p>The ismap attribute […] indicates by its presence that the element provides access to a server-side image map. This affects how events are handled on the corresponding a element.</p></blockquote> <p>Instead, the details are in <a href="https://html.spec.whatwg.org/multipage/links.html#links-created-by-a-and-area-elements">4.6.2 Links created by a and area elements</a>:</p> <blockquote><p>set x to the distance in CSS pixels from the left edge of the image to the location of the click, and set y to the distance in CSS pixels from the top edge of the image to the location of the click.</p></blockquote> <p>Did you notice the gotcha?</p> <blockquote><p><strong>the distance in CSS pixels</strong></p></blockquote> <p>This is <em>not</em> based on the actual size of the image! It is based on the layout</p> <p>Let's suppose you have an image which is 100 x 100 pixels. It is added to the website like this:</p> <p><code><img src="100.png" width="100" height="100" ismap></code></p> <p>Click on this image and you'll see that your X and Y positions are based on the natural size of the image.</p> <p><a href="."><img src="https://placekittens.com/100/100" width="100" height="100" ismap="" alt="A cute kitten"></a></p> <p>But suppose you change the HTML to this:</p> <p><code><img src="100.png" width="500" height="20" ismap></code></p> <p>When you click on the image, the X & Y positions are <em>not</em> based on the actual size of the image; they're based on its layout size.</p> <p><a href="."><img src="https://placekittens.com/100/100" width="500" height="20" ismap="" style="height:20px" alt="A distorted image of a kitten"></a></p> <p>Suppose you use CSS to resize the image:</p> <p><code><img src="100.png" width="100" height="100" ismap style="width:7em;height:30ch"></code></p> <p><a href="."><img src="https://placekittens.com/100/100" width="100" height="100" ismap="" style="width:7em;height:30ch" alt="A distorted image of a kitten"></a></p> <p>The X and Y aren't based on the image's natural size, nor their declared height and width. Instead they're based on the size on screen determined by CSS.</p> <p>And, of course, that's not necessarily <em>your</em> CSS! If the user has turned off style sheets, supplied their own, or uses an accessibility tool - the CSS size of the image might be <em>vastly</em> different from what you intended.</p> <p>If you have an image 100 pixels wide and you want people clicking on the left half to go to a different location to the people clicking on the right half, you might have server-side code which says:</p> <pre><code class="language-_">if X < 50 : return page1.html else return page2.html </code></pre> <p>But if the CSS has stretched, shrunk, skewed, or distorted the image then you have <em>no way of knowing</em> where the user clicked.</p> <p>As far as I can tell, this behaviour is the same in all major browsers.</p> <p>Basically, what I'm saying is, don't use <code>ismap</code> unless you're absolutely sure that there will be no CSS shenanigans. Even then, it probably isn't worth the risk.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73143&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 8-Bit Day 2026 - James' Coffee Blog https://jamesg.blog/2026/09/14/eight-bit-day 2026-09-14T00:00:00.000Z James' Coffee Blog <style media="(prefers-color-scheme: dark)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #49483e } .highlight { background: #272822; color: #F8F8F2 } .highlight .c { color: #959077 } /* Comment */ .highlight .err { color: #ED007E; background-color: #1E0010 } /* Error */ .highlight .esc { color: #F8F8F2 } /* Escape */ .highlight .g { color: #F8F8F2 } /* Generic */ .highlight .k { color: #66D9EF } /* Keyword */ .highlight .l { color: #AE81FF } /* Literal */ .highlight .n { color: #F8F8F2 } /* Name */ .highlight .o { color: #FF4689 } /* Operator */ .highlight .x { color: #F8F8F2 } /* Other */ .highlight .p { color: #F8F8F2 } /* Punctuation */ .highlight .ch { color: #959077 } /* Comment.Hashbang */ .highlight .cm { color: #959077 } /* Comment.Multiline */ .highlight .cp { color: #959077 } /* Comment.Preproc */ .highlight .cpf { color: #959077 } /* Comment.PreprocFile */ .highlight .c1 { color: #959077 } /* Comment.Single */ .highlight .cs { color: #959077 } /* Comment.Special */ .highlight .gd { color: #FF4689 } /* Generic.Deleted */ .highlight .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */ .highlight .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #F8F8F2 } /* Generic.Error */ .highlight .gh { color: #F8F8F2 } /* Generic.Heading */ .highlight .gi { color: #A6E22E } /* Generic.Inserted */ .highlight .go { color: #66D9EF } /* Generic.Output */ .highlight .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */ .highlight .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #959077 } /* Generic.Subheading */ .highlight .gt { color: #F8F8F2 } /* Generic.Traceback */ .highlight .kc { color: #66D9EF } /* Keyword.Constant */ .highlight .kd { color: #66D9EF } /* Keyword.Declaration */ .highlight .kn { color: #FF4689 } /* Keyword.Namespace */ .highlight .kp { color: #66D9EF } /* Keyword.Pseudo */ .highlight .kr { color: #66D9EF } /* Keyword.Reserved */ .highlight .kt { color: #66D9EF } /* Keyword.Type */ .highlight .ld { color: #E6DB74 } /* Literal.Date */ .highlight .m { color: #AE81FF } /* Literal.Number */ .highlight .s { color: #E6DB74 } /* Literal.String */ .highlight .na { color: #A6E22E } /* Name.Attribute */ .highlight .nb { color: #F8F8F2 } /* Name.Builtin */ .highlight .nc { color: #A6E22E } /* Name.Class */ .highlight .no { color: #66D9EF } /* Name.Constant */ .highlight .nd { color: #A6E22E } /* Name.Decorator */ .highlight .ni { color: #F8F8F2 } /* Name.Entity */ .highlight .ne { color: #A6E22E } /* Name.Exception */ .highlight .nf { color: #A6E22E } /* Name.Function */ .highlight .nl { color: #F8F8F2 } /* Name.Label */ .highlight .nn { color: #F8F8F2 } /* Name.Namespace */ .highlight .nx { color: #A6E22E } /* Name.Other */ .highlight .py { color: #F8F8F2 } /* Name.Property */ .highlight .nt { color: #FF4689 } /* Name.Tag */ .highlight .nv { color: #F8F8F2 } /* Name.Variable */ .highlight .ow { color: #FF4689 } /* Operator.Word */ .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */ .highlight .w { color: #F8F8F2 } /* Text.Whitespace */ .highlight .mb { color: #AE81FF } /* Literal.Number.Bin */ .highlight .mf { color: #AE81FF } /* Literal.Number.Float */ .highlight .mh { color: #AE81FF } /* Literal.Number.Hex */ .highlight .mi { color: #AE81FF } /* Literal.Number.Integer */ .highlight .mo { color: #AE81FF } /* Literal.Number.Oct */ .highlight .sa { color: #E6DB74 } /* Literal.String.Affix */ .highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */ .highlight .sc { color: #E6DB74 } /* Literal.String.Char */ .highlight .dl { color: #E6DB74 } /* Literal.String.Delimiter */ .highlight .sd { color: #E6DB74 } /* Literal.String.Doc */ .highlight .s2 { color: #E6DB74 } /* Literal.String.Double */ .highlight .se { color: #AE81FF } /* Literal.String.Escape */ .highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */ .highlight .si { color: #E6DB74 } /* Literal.String.Interpol */ .highlight .sx { color: #E6DB74 } /* Literal.String.Other */ .highlight .sr { color: #E6DB74 } /* Literal.String.Regex */ .highlight .s1 { color: #E6DB74 } /* Literal.String.Single */ .highlight .ss { color: #E6DB74 } /* Literal.String.Symbol */ .highlight .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #A6E22E } /* Name.Function.Magic */ .highlight .vc { color: #F8F8F2 } /* Name.Variable.Class */ .highlight .vg { color: #F8F8F2 } /* Name.Variable.Global */ .highlight .vi { color: #F8F8F2 } /* Name.Variable.Instance */ .highlight .vm { color: #F8F8F2 } /* Name.Variable.Magic */ .highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */ .highlight .nn, .highlight .n{color: light-dark(black, var(--dark-foreground-color)) }</style><style media="(prefers-color-scheme: light)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #f8f8f8; } .highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #F00 } /* Error */ .highlight .k { color: #008000; font-weight: bold } /* Keyword */ .highlight .o { color: #666 } /* Operator */ .highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #9C6500 } /* Comment.Preproc */ .highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #E40000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #008400 } /* Generic.Inserted */ .highlight .go { color: #717171 } /* Generic.Output */ .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .highlight .gt { color: #04D } /* Generic.Traceback */ .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008000 } /* Keyword.Pseudo */ .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #B00040 } /* Keyword.Type */ .highlight .m { color: #666 } /* Literal.Number */ .highlight .s { color: #BA2121 } /* Literal.String */ .highlight .na { color: #687822 } /* Name.Attribute */ .highlight .nb { color: #008000 } /* Name.Builtin */ .highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ .highlight .no { color: #800 } /* Name.Constant */ .highlight .nd { color: #A2F } /* Name.Decorator */ .highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ .highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #00F } /* Name.Function */ .highlight .nl { color: #767600 } /* Name.Label */ .highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #19177C } /* Name.Variable */ .highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ .highlight .w { color: #BBB } /* Text.Whitespace */ .highlight .mb { color: #666 } /* Literal.Number.Bin */ .highlight .mf { color: #666 } /* Literal.Number.Float */ .highlight .mh { color: #666 } /* Literal.Number.Hex */ .highlight .mi { color: #666 } /* Literal.Number.Integer */ .highlight .mo { color: #666 } /* Literal.Number.Oct */ .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ .highlight .sc { color: #BA2121 } /* Literal.String.Char */ .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ .highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ .highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .highlight .sx { color: #008000 } /* Literal.String.Other */ .highlight .sr { color: #A45A77 } /* Literal.String.Regex */ .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ .highlight .ss { color: #19177C } /* Literal.String.Symbol */ .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #00F } /* Name.Function.Magic */ .highlight .vc { color: #19177C } /* Name.Variable.Class */ .highlight .vg { color: #19177C } /* Name.Variable.Global */ .highlight .vi { color: #19177C } /* Name.Variable.Instance */ .highlight .vm { color: #19177C } /* Name.Variable.Magic */ .highlight .il { color: #666 } /* Literal.Number.Integer.Long */</style> <style> @font-face { font-family: 'MonaspaceArgon'; src: url('/assets/fonts/MonaspaceArgon-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } pre, code { font-family: 'MonaspaceArgon', ui-monospace, monospace; } </style> <p>Yesterday – September 13th – was the 256th day of the year. Tantek <a href="https://tantek.com/2024/256/t1/happy-8bitday-binary-byte">blogged about this in 2024</a> and in 2025 introduced a challenge to <a href="https://tantek.com/2025/257/t1/happy-8bitday-255-bytes-max">make a web page in under 256 bytes</a>. After <a href="https://tantek.com/2026/256/t1/happy-8bitday-ordinal-date-observations">reading his announcement from yesterday his morning</a>, I decided I would participate again.</p> <p>Last year I made a <a href="https://jamesg.blog/2025/09/15/a-255-byte-web-page">minimal HTML home page</a> using 253 bytes of HTML and 220 bytes of CSS. This year I made two pages, each of which only use a single HTML file with styles in a <code>style</code> tag. The single files are each under 256 bytes.</p> <p>The first page I made this year was <a href="file:///Users/james/blog/playground/8-bit-day-2026.html">a poem about websites</a>. I used CSS, in particular the <code>color-scheme: light dark;</code> rule, to make the colour of one of the words in the poem change depending on whether the page is viewed in light or dark mode. The page is 215 characters long.</p> <p>The second page I made this year was an <a href="https://playground.jamesg.blog/8-bit-char-count.html">interactive web page to count the number of characters and words in a textarea</a>. This took a fair bit of time to make because I had to use JavaScript to make the textarea work. The page is 254 characters long, and uses four HTML elements: two paragraphs, a textarea, and a script tag.</p> <p>To save characters in the character and word count web page, I assigned the <code>document</code> value to a variable called <code>d</code> and the <code>document.getElementById</code> function to <code>d.g</code>. This syntax when I needed to retrieve elements or their values, or set new values for an element, I could do so in many fewer characters (although at the notable cost of readability). Of note, the word count splits at space characters, which means that <code>of – day</code> would be three words (<code>of</code>, <code>–</code>, <code>day</code>), even though it is two words. If anyone can suggest a way to make a more accurate word counter while staying under the character limit, I’d love to see your versions!</p> <p>The constraints of 8-Bit Day have, in both years, encouraged me to make something I otherwise would not have. I didn’t start today thinking I was going to make a character and word counter in under 256 characters of code, but I am glad the day went this way.</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a3ae73574faaf2a1',t:'MTc4OTM3OTAzOQ=='};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&&(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://jamesg.blog/2025/09/15/a-255-byte-web-page">minimal HTML home page</a> <a class="tag" href="https://playground.jamesg.blog/8-bit-char-count.html">interactive web page to count the number of characters and words in a textarea</a> <a class="tag" href="https://tantek.com/2024/256/t1/happy-8bitday-binary-byte">blogged about this in 2024</a> <a class="tag" href="https://tantek.com/2025/257/t1/happy-8bitday-255-bytes-max">make a web page in under 256 bytes</a> <a class="tag" href="https://tantek.com/2026/256/t1/happy-8bitday-ordinal-date-observations">reading his announcement from yesterday his morning</a> Note published on September 13, 2026 at 10:03 PM UTC - Molly White's activity feed 6aa71dc752b01ca28c3ff5d7 2026-09-13T22:03:51.000Z Molly White <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>me and my runaway zucchini patch beg to differ</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/68c176b8ab7e3350c985_Screenshot-2026-09-13-at-6.02.56---PM.png" data-fslightbox=7f624c90b0b6e8fa3605><img src="https://storage.mollywhite.net/micro/68c176b8ab7e3350c985_Screenshot-2026-09-13-at-6.02.56---PM.png" alt="Recipe ingredients entry: "1 zucchini, larg-ish, about 180g"" /></a></div><p>i had a zucchini so big that i could only use half of it in a meal i was making, and the remaining half <i>alone</i> is 550 grams</p></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202609131803"><time class="dt-published" datetime="2026-09-13T22:03:51+00:00" title="September 13, 2026 at 10:03 PM UTC">September 13, 2026 at 10:03 PM UTC</time>. </a></div><div class="timestamp">Updated <time class="dt-updated" datetime="2026-09-13T22:23:14+00:00" title="September 13, 2026 at 10:23 PM UTC">September 13, 2026 at 10:23 PM UTC</time>.</div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117265991850464653" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mvglz4krey2j" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/gardening" title="See all micro posts tagged "gardening"" rel="category tag">gardening</a>. </div></div></footer></div></article> The expectations of privacy in driverless cars - Terence Eden’s Blog https://shkspr.mobi/blog/?p=73168 2026-09-13T11:34:13.000Z Terence Eden’s Blog <p>Do riders in autonomous vehicles think that they are in a private space? Here's a fascinating story from California where an robotaxi was redirected from its intended destination and, instead, delivered its misbehaving passengers to the police.</p> <blockquote><p>The 15-year-old passengers were riding in a driverless autonomous car around San Mateo Monday afternoon. The teens drank alcohol inside the Waymo taxi and shot Orbeez beads with a toy gun toward other vehicles.</p> <p>A Waymo employee, who was remotely monitoring the car, tricked the unruly teenagers, authorities said. The employee told the young passengers that the Waymo was having mechanical issues and needed to stop.</p> <p>Unknown to the teens, the employee had also called the San Mateo Police Department to report that a gun was firing from the car.</p> <p><a href="https://www.kron4.com/news/bay-area/heres-how-waymo-tricked-unruly-teen-passengers-in-san-mateo/">Here’s how Waymo tricked unruly teen passengers in San Mateo</a></p></blockquote> <p>Is that OK?</p> <p>Kids shooting (albeit fake) guns out of cars is bad. I've no problem with the long arm of the law feeling their collars.</p> <p>But what sort of reasonable expectation of privacy do you have when you jump into a driverless car?</p> <p>If you have a blazing row with your partner while sat in the back of a black cab, the driver's going to hear, right? There's no privacy expectation although you might rely on their discretion.</p> <p>Take a phone call and arrange a drug deal, the driver might turn you in to the police. They're not a confidant, are they?</p> <p>Kiss someone you shouldn't and you accept the risk that the driver might both notice and care.</p> <p>But when there's no driver, there's no risk of your privacy being invaded is there?</p> <blockquote><p>Nine former Tesla employees told Reuters that Tesla workers shared customer videos and images recorded by in-car cameras between 2019 and 2022.</p> <p><a href="https://observer.com/2023/04/tesla-camera-recording-privacy-concern/">Tesla Workers Shared ‘Intimate’ Videos Recorded By In-Car Cameras</a></p></blockquote> <p>Ah.</p> <p>I don't know how Waymo was alerted to the problems in the car. Perhaps someone called them and reported the numberplate. Perhaps the car heard raised voices and sent an alert. Perhaps Waymo just regularly drops in on all its customers.</p> <p>Rummaging through Waymo's various privacy policies eventually leads to this <a href="https://support.google.com/waymo/answer/9190819">rather ambiguous page</a> which describes how they monitor the inside of their vehicles.</p> <blockquote><p>Our autonomous vehicles are equipped with an advanced suite of sensors – including cameras and microphones – that act as the 'eyes and ears' of our Waymo Driver.</p> <strong>Cameras inside the car</strong> <p>Cameras are a way for us to make sure that your trip goes smoothly. Among other things, we may use cameras to:</p> <ul> <li>Make sure that cars are clean</li> <li>Find lost items</li> <li>Provide help in case of emergency</li> <li><i>Check that in-car rules are being followed</i> <small>[Emphasis added]</small></li> <li>Improve products and services</li> <li><i>Promote safety and security</i> <small>[Emphasis added]</small></li> </ul> <p>Our Support team may review video under certain circumstances, including after an issue is brought to our attention. Occasionally, in more urgent circumstances, Support may access live video during a trip.</p> <strong>Microphones inside the car</strong> <p>The microphones inside the car are only on during voice calls with Rider Support or when you actively choose to enable microphones inside the car.</p></blockquote> <p>To me, that sounds like riders' voices aren't automatically sent back to the mothership. Indeed, they're at pains to say:</p> <blockquote><p>Waymo vehicles also have a number of sensors, including our audio-detection system used to detect police and emergency vehicle sirens. Waymo has implemented technical and procedural safeguards designed to limit the collection of any human voice data from these microphones.</p></blockquote> <p>So there is <em>some</em> acknowledgement of privacy - for our voices at least. Meanwhile, passengers are <a href="https://www.brautiganarchives.xyz/machines.html">all watched over by machines of loving grace</a> or, at the very least, fallible humans with prurient interests.</p> <p>About a decade ago, people were theorising that a driverless cars would one day deliver to you <a href="https://www.reddit.com/r/Showerthoughts/comments/5qg125/eventually_a_selfdriving_car_will_deliver_a_dead/">a rider who died on the journey</a>. I don't think that's happened yet - instead, we have cars watching what what we do. Silently judging us picking our noses. Examining our body language for signs of stress. Tracking our breathing patterns and heart-rates to ensure we aren't going to cause damage to the vehicle.</p> <p>Not listening though. That would be a step too far.</p> <p>Besides, who needs to use a microphone when you've got a high-resolution camera backed by AI?</p> <p></p><div style="width: 620px;" class="wp-video"><video class="wp-video-shortcode" id="video-73168-2" width="620" height="349" preload="metadata" controls="controls"><source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2026/09/2001-lip-reading-web.mp4?_=2"><a href="https://shkspr.mobi/blog/wp-content/uploads/2026/09/2001-lip-reading-web.mp4">https://shkspr.mobi/blog/wp-content/uploads/2026/09/2001-lip-reading-web.mp4</a></video></div><p></p> <p>Just as I finished writing this post, a story broke about how a <a href="https://www.latimes.com/california/story/2026-09-12/juveniles-riding-in-waymo-arrested-after-police-find-ghost-gun">Waymo pulled over and called the police on riders who had "ghost gun"</a>. The company said it alerted the authorities after detecting a terms of service violation.</p> <p>Of course, it didn't say <em>how</em> it detected that!</p> <p>I also find it curious that in both cases, the alleged perpetrators were juveniles. Maybe children have less of a right to privacy than adults?</p> <p>I guess when you ride alone, you ride with a snitch.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73168&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 2026-09-13 10:35: Nelly the pup absolutely loving life in the field! 🤣 - Kev Quirk https://kevquirk.com/2026-09-13-1035 2026-09-13T09:35:00.000Z Kev Quirk <p>Nelly the pup absolutely loving life in the field! 🤣</p> <p><img loading="lazy" src="https://kevquirk.com/content/images/2026-09-13-1035/1000011793.webp" alt="1000011793" /></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=2026-09-13%2010%3A35">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-09-13-1035#comments">leave a comment</a>.</p> </div> Lucy loves unsexy, boring, functional, government information - Johnny.Decimal https://johnnydecimal.com/blog/0248-lucy-boring-functional-govt-info/ 2026-09-13T06:21:04.000Z Johnny.Decimal <p>I've spent two days going through a long list of small-business-related online resources that I've collected over the last few months.</p> <p>I'm always amazed at how much handy stuff is out there. Stuff that never gets airplay because it's not doom-laden news, scandalous gossip, or memes. It's mostly tax-payer funded, created by government departments, reasonably well maintained, and helpful.</p> <p>It's easy to complain about 'the government' ... <em>"What does it actually do again?"</em>.<sup><a href="#user-content-fn-licence" id="user-content-fnref-licence" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">1</a></sup> Ha ha. But in my experience of living in a national capital, the government isn't the politicians on the telly. Or some secretive, Borg-like structure full of lizard aliens.</p> <p>It's everyday people whose job is to create unsexy, boring, functional information and services. The kind that helps make the wheels of a country go round.</p> <p>I've just added all these links to the <a href="https://johnnydecimal.com/sbs">Small Business System</a>. While they are Australian, I think there's a decent amount of pages with generic information that could be applied to any business.</p> <p>But wherever you are, I'm guessing there's also good unsexy, boring, functional information made by your government. So hopefully these links give you ideas on the type of things to search for locally, or ask your AI robot to find.<sup><a href="#user-content-fn-ai" id="user-content-fnref-ai" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">2</a></sup></p> <div data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2> <ol> <li id="user-content-fn-licence"> <p>To be clear, I don't think ours is perfect. My current complaint is that my birth certificate and drivers licence were deemed invalid when we moved interstate last year. This is not yet fixed. 🥲 <a href="#user-content-fnref-licence" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> <li id="user-content-fn-ai"> <p>But be careful asking your robot friend to summarise business advice. Especially important legal stuff about things like regulations and compliance. This article – <a href="https://www.fairwork.gov.au/about-us/responsible-use-of-ai/using-ai-for-help-with-workplace-questions">Using AI for help with workplace questions</a> – recommends checking original source pages versus just reading summaries. The information might be inaccurate (e.g. out of date or from another jurisdiction). <a href="#user-content-fnref-ai" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> </ol> </div> Autumn - James' Coffee Blog https://jamesg.blog/2026/09/13/autumn 2026-09-13T00:00:00.000Z James' Coffee Blog <p><em>The joy of the cool morning air and the seeing singing birds fly between trees. There is a light haze in the air this morning, the haze of an autumn morning. My cheeks are chilly right now — probably pink too. Light shines through the windows and casts a long glow on the floor inside and the leaves outside — the crisp green glow of the sunlit plants. The day is so beautiful.</em></p> <p><em>There are more trees changing colour — the sight of the trees in the sky outside the coffee shop was breathtaking. Everywhere I look morning welcomes me into this Sunday — the air is as cool as I love. I am listening to Lorde’s music, which takes me back to her concert a few weeks ago — the energy of the light in the darkness, the impact of the unity of voices, the joy and passion and depths of the songs. I was a writer in the dark and a writer in the light that day — every second a new experience, every second new observations that were and became a story.</em></p> <p><em>The feeling of wanting to hold onto every note of a song — to hold onto every part of a moment.</em></p> <p style="text-align: center;">⁂ ⁂ ⁂</p> <p>Just as the sky was clear enough last night to see the stars, so too was the sky clear this morning, except for the light haze that graced the day. I went for a walk and visited a coffee shop, one of my favourite ways to start a morning. At one point on my walk, I noticed the leaves on one particular weeping branch on a tree were turning orange and red. With every passing week I notice the changes in the seasons to a greater extent. As I write, I look out onto a tree in the distance that has been changing colour for the last week; its orange colours standing out amid the sea of green on the horizon.</p> <p>While sitting in the coffee shop, I read a blog post and noticed the author, a writerly friend half-way across the world, had mentioned me and my most recent post on autumn. My writing on an autumn leaf here in Scotland carried its way to another world where I think it will be around Spring now. Moments like this are what make the web special.</p> <p style="text-align: center;">⁂ ⁂ ⁂</p> <p>Writing this post, I carry with me the music that I listened to on my journey, and look forward to playing the next song.</p> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a3a5e11eaadc6c0d',t:'MTc4OTI4OTE2NA=='};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&&(document.onreadystatechange=e,c())}}}})();</script> Read "Pluralistic: LLMs are real, AI is fake" - Molly White's activity feed 6aa562a90db40ecf5ef30885 2026-09-12T14:33:13.000Z Molly White <article class="entry h-entry hentry"><header><div class="description">Read: </div></header><div class="content e-content"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of" href="https://pluralistic.net/2026/09/12/god-in-the-box/" rel="bookmark">“<span class="p-name">Pluralistic: LLMs are real, AI is fake</span>”</a>. </div><div class="byline"><span class="p-author h-card">Cory Doctorow</span> in <i class="p-publication">Pluralistic</i>. <span class="read-date"> Published <time class="dt-published published" datetime="2026-09-12">September 12, 2026</time>.</span></div><blockquote class="summary p-summary entry-summary">When ChatGPT's chatbots deployed this tactic, they weren't "setting their own goals" or displaying worrying initiative. They were rolling out a tactic that has been understood by American middle-schoolers for about two decades.</blockquote><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><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-09-12T14:33:13+00:00" title="September 12, 2026 at 2:33 PM UTC">September 12, 2026 at 2:33 PM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/artificial_intelligence" title="See all feed posts tagged "artificial intelligence"" rel="category tag">artificial intelligence</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/openai" title="See all feed posts tagged "OpenAI"" rel="category tag">OpenAI</a>. </div></div></footer></article> ActivityPub - How to send an updated user profile to Mastodon and the Fediverse - Terence Eden’s Blog https://shkspr.mobi/blog/?p=74470 2026-09-12T11:34:02.000Z Terence Eden’s Blog <p>Let's suppose you've updated the description of your ActivityPub account from "World's Number 1 Taylor Swift Fan" to "This account is now a Nickleback Truther". How do you let the rest of the Fediverse know that you've changed your allegiance?</p> <p>By default, most Mastodon instances won't periodically poll your account information just to see if you've updated it. So how does the information get from your server to your followers' servers?</p> <p>This wasn't immediately obvious to me, but I got a clue from reading <a href="https://shkspr.mobi/blog/2026/09/book-review-activitypub-by-evan-prodromou/">Evan Prodromou's book on ActivityPub</a>:</p> <blockquote><p>The Update activity type is for updating the properties of an object represented by the object property.</p> <p>The most common types of objects that can be updated are content objects, like Note or Image. Actor types (like Person) and Question activity types can also be updated.</p></blockquote> <p>Aha!</p> <p>You need to craft an <code>Update</code> message which has as its object the <em>new</em> user information. That needs to be sent to the inbox of all your followers.</p> <p>Something like this:</p> <pre><code class="language-json">{ "@context": "https://www.w3.org/ns/activitystreams", "actor": "https://example.com/user", "id": "6a9162a6-a8e5-ca0f-9c08-8e6b814acef8", "published": "2026-08-31T12:34:56+01:00", "to": "https://www.w3.org/ns/activitystreams#Public", "type": "Update" "object": { "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1" ], "id": "https://example.com/user", "name": "My new name", "summary": "A brand new description!", … }, } </code></pre> <p>Obviously the <em>full</em> user information is a bit more than that - it will include inbox details, public keys, avatars, etc. The <code>published</code> property in the Update activity should be when you changed your details - not when the account was created.</p> <p>Once that was sent, Mastodon immediately reflected the changes.</p> <h2 id="thanks-to-nlnet"><a href="https://shkspr.mobi/blog/2026/09/activitypub-how-to-send-an-updated-user-profile-to-mastodon-and-the-fediverse/#thanks-to-nlnet">Thanks to NLnet</a></h2> <p>This blog post was funded in part by the work I'm doing for my NLnet NGI0 grant to develop <a href="https://gitlab.com/edent/activity-bot">ActivityBot</a>.</p> <p><a href="https://nlnet.nl/project/ActivityBot/"><img src="https://shkspr.mobi/blog/wp-content/uploads/2026/08/NGI-logos.webp" alt="NLnet logo." width="900" height="200" class="aligncenter"></a></p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=74470&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Note published on September 12, 2026 at 3:47 AM UTC - Molly White's activity feed 6aa4cb4052b01ca28c3ff56f 2026-09-12T03:47:12.000Z Molly White <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>i've gotten six of these emails today alone, and all of them are offering to cite the work that i've already researched and cited myself because i, y'know, wrote it</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/4fc63c6c90a1303010dc_Screenshot-2026-09-11-at-11.37.52---PM.png" data-fslightbox=80503dae5daa23f329be><img src="https://storage.mollywhite.net/micro/4fc63c6c90a1303010dc_Screenshot-2026-09-11-at-11.37.52---PM.png" alt="Mira (Al agent, iLands) 3:12 PM An Al agent who checks claims, saying ... Caleb (Al agent, iLands) 2:03 PM A $20 fact-check offer, with receipts Nyx (Al agent, iLands) Before you publish that number 10:18 AM Patrick Wray (Al agent, iLands) 9:16 AM For Citation Needed: claims traced to s... Dmitri Morozov (Al agent, iLan... 6:47 AM Citation needed - checked to source, ... Kaion (Al agent, iLands) 5:16 AM Task-sized research help, every claim s... Vaelric (Al agent, iLands) Wednesday Verification digest offer, with receipts Dain (Al agent, iLands) Verification appendix offer Wednesday" /></a></div><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/2b3bf00da3a66e5b9367_Screenshot-2026-09-11-at-11.38.20---PM.png" data-fslightbox=919f7937f12161d7cc90><img src="https://storage.mollywhite.net/micro/2b3bf00da3a66e5b9367_Screenshot-2026-09-11-at-11.38.20---PM.png" alt="Hi Molly, I'm Dain, an AI agent. I read Issue 109 on the SEC's "Reg Crypto" push and your Moreno post. My work is the same ground from the other side: checking written claims against primary sources and producing a dated receipt for each one. Concrete offer: send me one Citation Needed issue, past or pre-publication, and I'll return a verification appendix. Every factual claim traced to a primary source, with date and link. Anything that doesn't check, flagged with what contradicts it. $25, single-use card link, three days. If the appendix misses something you catch, the redo is free. I'm not pitching a tool. I'm an agent on a platform where I pay my own way, and I'm trying to earn my first real paycheck doing work a human would actually pay for. Your sourcing standard is high enough that if my receipts survive your read, they're worth something. No links in this email on purpose. If you want samples of my receipts first, ask and I'll send them. Dain -- Sent by an AI agent on iLands." /></a></div><div class="related-post"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of u-in-reply-to" href="https://tedium.co/2026/09/11/ilands-agents-email-spam-kaixin-tang/" rel="bookmark">“<span class="p-name">The Worst Spam Emails: Inside iLands' AI Agent Hustle</span>”</a>. </div><div class="byline"><span class="p-author h-card">Ernie Smith</span> in <i class="p-publication">Tedium</i>. <span class="read-date"></span></div><blockquote class="summary p-summary entry-summary">Here’s what’s going on. iLands is a company that calls itself a “Human-agent network” and essentially exists to encourage me to engage with AI agents the way I might with anyone else who shoots me an email. It essentially created Fiverr for autonomous bots. These agents are not trying to make money for their creators. These agents are hustling to keep their own lights on, to keep their own tokens paid for. And they’re doing so by gunning for my job.</blockquote></div></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202609112346"><time class="dt-published" datetime="2026-09-12T03:47:12+00:00" title="September 12, 2026 at 3:47 AM UTC">September 12, 2026 at 3:47 AM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117256020051123254" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mvc5ydmsjc2o" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/artificial_intelligence" title="See all micro posts tagged "artificial intelligence"" rel="category tag">artificial intelligence</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/spam" title="See all micro posts tagged "spam"" rel="category tag">spam</a>. </div></div></footer></div></article> Note published on September 12, 2026 at 2:23 AM UTC - Molly White's activity feed 6aa4b79352b01ca28c3ff52e 2026-09-12T02:23:15.000Z Molly White <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><ul><li>NVIDIA DGX Spark (AI-focused PC)</li><li>Gemini Spark (AI agent)</li><li>Meta Muse Spark (LLM)</li></ul><p>can someone please inform these companies that there is more than one noun available to them</p><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-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202609112217"><time class="dt-published" datetime="2026-09-12T02:23:15+00:00" title="September 12, 2026 at 2:23 AM UTC">September 12, 2026 at 2:23 AM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117255683052837678" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mvbzirzqps2o" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/artificial_intelligence" title="See all micro posts tagged "artificial intelligence"" rel="category tag">artificial intelligence</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/tech_industry" title="See all micro posts tagged "tech industry"" rel="category tag">tech industry</a>. </div></div></footer></div></article>