Shellsharks Blogroll - BlogFlock https://blogflock.com/list/xJ8yq 2026-09-16T23:27:16.000Z BlogFlock shellsharks Apple Notes now available in the LAS/SBS downloads - Johnny.Decimal https://johnnydecimal.com/blog/0251-apple-notes-download/ 2026-09-16T23:27:16.000Z Johnny.Decimal <p>Our pre-built systems, which come with files for you to build your JDex, have never supported Apple Notes. I tried! You've no idea how hard I tried. But previous versions of Notes just didn't have an import feature that worked. I mean it <em>worked</em> but your notes ended up in 8pt Times New Roman, it looked ridiculous.</p> <p>Well <em>finally</em> Apple spent some of that $5 trillion and they built an import feature that doesn't suck! Yay. You need to be on Tahoe (26) or above – I'm stuck here on Sequoia because I refuse to have Liquid Glass in my life.</p> <p>Anyway. There you go. It's in the folder of JDex downloads, let me know if you have any problems with it. There's a <a href="https://discord.com/channels/822215537589354566/1274252172707495958/1549598025897218109">Discord thread here</a>.</p> How to get a DOI for your blog posts - Terence Eden’s Blog https://shkspr.mobi/blog/?p=74717 2026-09-16T11:34:28.000Z Terence Eden’s Blog <p>Each new post on this blog now has a <a href="https://www.doi.org/">Digital Object Identifier</a>. This post looks at the how and the why of getting one, whether it is useful, and any issues you might experience if you go down this path.</p> <p></p><nav role="doc-toc"><menu><li><h2 id="table-of-contents"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#table-of-contents">Table of Contents</a></h2><menu><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#background">Background</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#getting-a-doi-the-easy-way">Getting a DOI the easy way</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#lets-go-rogue">Let's Go Rogue!</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#automatic-submission-of-new-content">Automatic Submission of New Content</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#manual-submission-of-old-content">Manual Submission of Old Content</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#getting-the-doi">Getting the DOI</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#generating-your-own-doi">Generating your own DOI</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#making-the-doi-discoverable-in-html">Making the DOI discoverable in HTML</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#downsides">Downsides</a><menu><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#loss-of-control">Loss of Control</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#tracking-citations">Tracking Citations</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#licencing">Licencing</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#verification">Verification</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#excluding-content">Excluding Content</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#deleting-content">Deleting Content</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#affiliations">Affiliations</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#more-vanity">More Vanity</a></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#humility">Humility</a></li></menu></li><li><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#is-it-worth-it">Is it worth it?</a></li></menu></li></menu></nav><p></p> <h2 id="background"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#background">Background</a></h2> <p>A few years ago, I documented <a href="https://shkspr.mobi/blog/2021/09/how-to-add-issn-metadata-to-a-web-page/">how to to get an International Standard Serial Number for a blog</a>. An ISSN uniquely identifies a publication, which makes it easier for scholars and researchers to reference it. Getting one depends a little on whether a national institution is willing to accept your application.</p> <p>Similarly, I also got an <a href="https://orcid.org/">ORCiD</a> which is used to uniquely identify researchers. That means it is possible to disambiguate "Einstein, A" the eminent physicist from "Einstein, A" a lovely chap called Allen who researches invasive slugs in Paraguay.</p> <p>My blog posts are <a href="https://shkspr.mobi/blog/citations/">regularly referenced in academic papers, books, conferences, and news articles</a>. The way most scholars cite a work is using a Digital Object Identifier. The idea is that a DOI is a unique and persistent code which can be used to refer to a specific article. If I ever stop using <code>shkspr.mobi</code> as my domain, or re-order my website, the DOI can be redirected to the article's new home. Future scholars will be able to follow a reference more easily than hoping <code>https://example.com/article123</code> still exists.</p> <h2 id="getting-a-doi-the-easy-way"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#getting-a-doi-the-easy-way">Getting a DOI the easy way</a></h2> <p>If you're an academic, your institution will have a paid subscription to a service which will "mint" a new DOI for all your articles.</p> <p>If not, you can upload your paper to a service like arXiv and they'll mint a DOI for you. That's how <a href="https://shkspr.mobi/blog/2023/04/i-got-a-doi-from-arxiv-for-my-msc/">I got a DOI for my MSc</a>.</p> <p>What about people who aren't traditional academics or who want to keep their content on their own website? There are a variety of paid-for services, some of which charge an eye-watering amount of money to create a DOI for you.</p> <p>Or, there's Rogue Scholar.</p> <h2 id="lets-go-rogue"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#lets-go-rogue">Let's Go Rogue!</a></h2> <p>So what is <a href="https://rogue-scholar.org/overview">Rogue-Scholar.org</a>?</p> <blockquote><p>Rogue Scholar is an open access archive and registry for science blogs. It preserves science blog posts, makes them citable via DOI, and ensures their long-term discoverability alongside formal scholarly literature.</p></blockquote> <p>Nifty! My blog <em>just about</em> sneaks in to their "Computer Science" category. They require you to have a full-text feed of your posts. You also need to licence your content to them as Creative Commons Attribution.</p> <p>Applying wasn't too difficult. I filled in their form, then jumped into their Slack. We had a bit of a discussion about what I needed to change in order to be approved.</p> <p>A few days later, I was live at <a href="https://rogue-scholar.org/communities/shkspr/">https://rogue-scholar.org/communities/shkspr/</a></p> <p>Which means, if you visit <a href="https://doi.org/10.59350/395ha-fss97">https://doi.org/10.59350/395ha-fss97</a> you'll be redirected to one of my blog posts.</p> <h2 id="automatic-submission-of-new-content"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#automatic-submission-of-new-content">Automatic Submission of New Content</a></h2> <p>Rogue Scholar automatically polls my feed, ingests my content, and then mints a DOI for every new post they encounter. There's nothing manual I have to do.</p> <p>That's all very well for new content. But I have posts on here going <em>way</em> back to 1986. How can they get discovered and DOI'd?</p> <h2 id="manual-submission-of-old-content"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#manual-submission-of-old-content">Manual Submission of Old Content</a></h2> <p>By default, Rogue Scholar ingested the 40 most recent posts from my blog. Actually, that's not quite accurate. It got the 40 most recently <em>updated</em> posts. As I'd recently edited a few older posts, they got themselves a DOI.</p> <p>I don't know how often Rogue Scholar polls my blog's feed. In my experiments, adding a new post resulted in a DOI being issued a couple of minutes after publication.</p> <p>At the moment, there doesn't seem to be an easy way to add older content. I'm working on a WordPress plugin to retroactively add DOIs and make them discoverable.</p> <h2 id="getting-the-doi"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#getting-the-doi">Getting the DOI</a></h2> <p>The Rogue Scholar API is based on <a href="https://inveniordm.docs.cern.ch/reference/metadata/">InvenioDRM</a>.</p> <p>Retrieving the DOI via their API requires you to make an unauthenticated request to:</p> <p><code>https://rogue-scholar.org/api/records?q=metadata.identifiers.identifier%3A%22https%3A%2F%2Fexample.com%2Fwhatever%22</code></p> <p>That's your URl, wrapped in quotes, and the whole thing URl encoded. <a href="https://rogue-scholar.org/api/records?q=metadata.identifiers.identifier%3A%22https%3A%2F%2Fshkspr.mobi%2Fblog%2F2026%2F09%2Fthe-purpose-of-dns-is-to-spread-scams%2F%22">Visit this example</a>. You can also use your post's GUID.</p> <p>That gets back a rather detailed JSON document. The DOI is noted in several locations, but is easiest to find in hits→hits→0→links→doi</p> <p>It's important to note that <a href="https://rogue-scholar.org/help/versioning">Rogue Scholar generates <em>two</em> DOIs for your post</a>. One for the post, another for the specific version of the post. If you update a post, it should get a new DOI. That way someone can refer to the post where you said your favourite band was the Spice Girls and not the edited one where you changed it to say B*Witched.</p> <p>Alternatively, you can use the CrossRef search if you want to look at HTML results. See <a href="https://search.crossref.org/search/works?q=https%3A%2F%2Fshkspr.mobi%2Fblog%2F2026%2F09%2Fthe-purpose-of-dns-is-to-spread-scams%2F&from_ui=yes">this CrossRef example</a>.</p> <p>As an aside, once you have the DOI, it's possible to create a <em>short</em> DOI at <a href="https://shortdoi.org/">https://shortdoi.org/</a> - I'll be honest, I've never seen these in the wild and <a href="https://www.crossref.org/display-guidelines/#shortdoi">they are not recommended for use</a>. Nevertheless, the API is pretty simple - <a href="https://shortdoi.org/10.59350/395ha-fss97?format=json">https://shortdoi.org/10.59350/395ha-fss97?format=json</a> will return a shorter URl like <a href="https://doi.org/rnjj">https://doi.org/rnjj</a></p> <p>Finally, there's a "vanity" DOI for the entire blog. In my case <a href="https://doi.org/10.59350/shkspr"><code>10.59350/shkspr</code></a>.</p> <h2 id="generating-your-own-doi"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#generating-your-own-doi">Generating your own DOI</a></h2> <p>Your blog posts can self-attest a DOI - when Rogue Scholar sees that in your Atom feed, it will register it on your behalf.</p> <p><a href="https://github.com/inveniosoftware/base32-lib/blob/master/base32_lib/base32.py">The code for generating a valid DOI</a> is relatively straightforward.</p> <ul> <li>Generate a random number between 0 and 1,099,511,627,775.</li> <li>Convert it to a Base 32 string.</li> <li>Add a two character checksum to the end.</li> <li>Prefix it with <code>10.59350/</code></li> </ul> <p>Your new DOI can be made discoverable in your Atom feed by adding this to a post:</p> <pre><code class="language-xml"><id>https://do.org/10.59350/12345-67890</id> </code></pre> <p>Shortly after publication, it will be "minted" and be linkable.</p> <h2 id="making-the-doi-discoverable-in-html"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#making-the-doi-discoverable-in-html">Making the DOI discoverable in HTML</a></h2> <p>How do you semantically add a DOI to your HTML's metadata? By far the most popular citation manager is <a href="https://www.zotero.org/">Zotero</a>. They maintain <a href="https://www.zotero.org/support/dev/exposing_metadata">a page describing the metadata they look for</a>. According to them, this needs to be in your page's <code><head></code>:</p> <pre><code class="language-html"><meta name=citation_doi content=10..../...> </code></pre> <p>They don't say whether it requires the <code>https://doi.org/</code> prefix - but looking at <a href="https://www.mendeley.com/guides/information-for-publishers">Mendeley</a> and <a href="https://help.altmetric.com/en/articles/9806913">AltMetric</a>, it appears not.</p> <p>To use <a href="https://www.dublincore.org/specifications/dublin-core/dcmi-terms/terms/identifier/">DublinCore</a>, the <a href="https://help.altmetric.com/en/articles/9803009">AltMetric recommended syntax</a> is:</p> <pre><code class="language-html"><meta name=DC.Identifier content=doi:10..../...> </code></pre> <p>Within the HTML, there's no specific Microdata syntax, but <a href="https://schema.org/ScholarlyArticle#eg-0399">Schema.org recommends the <code>sameAs</code> property</a>. Something like:</p> <pre><code class="language-html"><a itemprop="sameAs" href="https://doi.org/10.../...">10.../...</a> </code></pre> <h2 id="downsides"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#downsides">Downsides</a></h2> <p>OK, it isn't all flowers and kittens. There are a few things you ought to know before proceeding down this path.</p> <h3 id="loss-of-control"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#loss-of-control">Loss of Control</a></h3> <p>For the IndieWeb / ReDeCentralise / Self-Hosing crowd, it's important to realise that DOI is a somewhat centralised services. Yes, <a href="https://www.doi.org/the-community/existing-registration-agencies/">lots of different orgs can mint a DOI</a>, but as each ID has to be globally unique, doi.org sits in the middle as a benevolent gatekeeper. If DOI.org went bust or became evil, all the <code>https://doi.org/10....</code> links would die. There are many other services like <a href="https://datacite.org/">DataCite</a> and <a href="https://www.crossref.org/">CrossRef</a> which can resolve a DOI - but it might turn out to be a bit fragile.</p> <p>Similarly, if Rogue Scholar ever goes <em>properly</em> rogue then they can redirect my DOI to wherever they like. That level of control is useful if my site disappears; they can redirect to an archive. But if they get hacked, it could redirect somewhere unsavoury.</p> <p>Having my site's content backed-up somewhere is useful but, again, without control or <a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#verification">verification</a> I worry that I might not be able to effectively manage it.</p> <p>I use CSS to control the layout of my work but once it is archived as plain HTML or PDF, that formatting can disappear.</p> <p>I don't know what will happen if I ever change DOI issuer.</p> <h3 id="tracking-citations"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#tracking-citations">Tracking Citations</a></h3> <p>I have a Google Scholar alert set up for my domain <code>shkspr.mobi</code>. That picks up people who make reference to this site. Hurrah! But, if they use <code>https://doi.org/10....</code> rather than <code>https://shkspr.mobi/...</code> I won't get alerted.</p> <p>Luckily, <a href="https://doi.org/10.53731/zyg15-qv911">Rogue Scholar offer Citation Tracking</a> which <em>should</em> autopopulate their API with any backlinks from other sources. I'm yet to discover how that works in practice. I don't think it will give me an email alert though.</p> <p>On a vanity issue, the DOI metadata shows the publisher of my posts as Rogue Scholar's parent organisation - <a href="https://front-matter.de/">Front Matter</a>.</p> <p>If you look at the API response from <a href="https://api.crossref.org/works/10.59350/5ck9b-kjv69">https://api.crossref.org/works/10.59350/5ck9b-kjv69</a> you'll see something like:</p> <pre><code class="language-json">{ "message": { "institution": [ { "name": "Front Matter" } ], "group-title": "Terence Eden's Blog", "publisher": "Front Matter", "DOI": "10.59350/5ck9b-kjv69", "author": [ { "ORCID": "https://orcid.org/0000-0002-9265-9069", "given": "Terence", "family": "Eden" } ] } } </code></pre> <p>Some citation managers will show the publication name as "Terence Eden's Blog" - others as "Front Matter".</p> <h3 id="licencing"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#licencing">Licencing</a></h3> <p>Rogue Scholar has a hard requirement that all content be Creative Commons Attribution (CC BY). There's no ability (yet) to choose different licences. Personally, I prefer Attribution ShareAlike (CC BY-SA). I've allowed Rogue Scholar to use CC BY for my work which, of course, means if you get my posts through them you are also allowed to use CC BY.</p> <p>If you get my work through my own website it is the slightly more restrictive CC BY-SA.</p> <p>Does that make a practical difference? I don't know.</p> <h3 id="verification"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#verification">Verification</a></h3> <p>A DOI is persistent. That doesn't mean it is verifiable. If this blog ever goes offline the DOI will redirect to an archive - but there's no real way to tell that the text in that archive is accurate. There's no hashing or cryptographic signing. Yes, those things are rather brittle, but I think it would be helpful for the long-term integrity of citation chains.</p> <h3 id="excluding-content"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#excluding-content">Excluding Content</a></h3> <p>Suppose there is content you <em>don't</em> want to receive a DOI, what do you do? You'll need to generate an RSS feed which excludes those specific posts.</p> <p>For WordPress, you can do something like <code>/feed/atom/?cat=-1234</code> to exclude posts which have a category with the ID of 1234.</p> <p>There are some filters on the Rogue Scholar site which you might also be able to use.</p> <h3 id="deleting-content"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#deleting-content">Deleting Content</a></h3> <p>I don't think there's a way to delete or retract content from Rogue Scholar's DOI system yet. If you accidentally publish something you didn't mean to, it'll live on in the archives forever.</p> <h3 id="affiliations"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#affiliations">Affiliations</a></h3> <p>My ORCiD lists where I worked on certain dates. Initially, Rogue Scholar linked those to blog posts I wrote during my employment. However, all my posts were written in a personal capacity. It is possible to get those affiliations removed if they are inaccurate.</p> <h3 id="more-vanity"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#more-vanity">More Vanity</a></h3> <p>I initially tried generating DOIs like <code>edent-00f47</code> - although it's a valid Base 32 string with a checksum, it carries semantic meaning (my name) so shouldn't really be used. Ah well! Back to random strings.</p> <h3 id="humility"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#humility">Humility</a></h3> <p>Is this a valid use of the DOI ecosystem? A surprising number of my posts <a href="https://shkspr.mobi/blog/citations">have been referenced in academic papers</a> - but surely not <em>all</em> of my posts are worthy of getting a DOI? The problem is, I don't know when <a href="https://shkspr.mobi/blog/2018/06/how-i-became-leonardo-da-vinci-on-the-blockchain/">a shitpost</a> will hit the zeitgeist and become quoted in papers, books, and articles.</p> <p>It feels a bit self-indulgent and a little pretentious to mint a new DOI for every previous and future post on this site. But it isn't like the DOI system is running out of space, is it?</p> <h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2026/09/how-to-get-a-doi-for-your-blog-posts/#is-it-worth-it">Is it worth it?</a></h2> <p>For me? Yes.</p> <p>I think it is important that <a href="https://doi.org/10.64000/552ec-b8g03">scholarly blogs are properly referenced</a>. True, not <em>all</em> of my posts are cutting-edge research - but I'm always surprised which ones end up in someone's thesis or become part of a set-text.</p> <p>I'm excited to see if this leads to an increase <em>or</em> decrease in my blog's visibility in academia.</p> <p>If you have strong feelings either way about DOIs and/or blogs, please drop a comment in the box.</p> <p>You may cite this post using <a href="https://doi.org/10.59350/5ck9b-kjv69">https://doi.org/10.59350/5ck9b-kjv69</a> 😃</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=74717&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Buy my house! - Werd I/O 6aaa349f59292a0001889bc7 2026-09-16T10:01:56.000Z Werd I/O <img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/148f98e53d6ce71962114f3cddaf4164-uncropped_scaled_within_1536_1152.webp" alt="Buy my house!"><p>This is, perhaps, an unusual post for me in this space, but: I’m selling my home, it's a great house, and I want you to know about it.</p><p><a href="https://redf.in/nsPDEP">7 Windsor Ave, Elkins Park, PA</a> was built in 1925. Set on half an acre of land, it’s a beautiful Tudor home with a ton of space and flexibility. <a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/">The photos speak for themselves.</a></p><p>I loved living here. Its second floor rooms are well-suited to being set up as spacious work-from-home offices, which is what we did — the whole family comfortably worked from the house. I commuted into the offices in Manhattan and DC many times a month, which I found both easy and genuinely fun via train — and the rest of the time I enjoyed the leafy, peaceful neighborhood. It’s very close to schools and daycares, and it felt like a privilege to be able to do drop-off and pick-up on foot.</p><p>I’ve headed west for an opportunity I couldn’t say no to, but it was emotionally hard to part with it. I fell in love with it in many ways — there’s no way I could have this level of space and peace while maintaining proximity to major cities at this price in California.</p> <!--kg-card-begin: html--> <div style="margin-left: auto; margin-right: auto"><blockquote class="instagram-media" data-instgrm-permalink="https://www.instagram.com/reel/DcthrS-PxKI/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="14" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:540px; min-width:326px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:16px;"> <a href="https://www.instagram.com/reel/DcthrS-PxKI/?utm_source=ig_embed&utm_campaign=loading" style=" background:#FFFFFF; line-height:0; padding:0 0; text-align:center; text-decoration:none; width:100%;" target="_blank"> <div style=" display: flex; flex-direction: row; align-items: center;"> <div style="background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;"></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;"></div></div></div><div style="padding: 19% 0;"></div> <div style="display:block; height:50px; margin:0 auto 12px; width:50px;"><svg width="50px" height="50px" viewBox="0 0 60 60" version="1.1" xmlns="https://www.w3.org/2000/svg" xmlns:xlink="https://www.w3.org/1999/xlink"><g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd"><g transform="translate(-511.000000, -20.000000)" fill="#000000"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"/></g></g></g></svg></div><div style="padding-top: 8px;"> <div style=" color:#3897f0; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:550; line-height:18px;">View this post on Instagram</div></div><div style="padding: 12.5% 0;"></div> <div style="display: flex; flex-direction: row; margin-bottom: 14px; align-items: center;"><div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(0px) translateY(7px);"></div> <div style="background-color: #F4F4F4; height: 12.5px; transform: rotate(-45deg) translateX(3px) translateY(1px); width: 12.5px; flex-grow: 0; margin-right: 14px; margin-left: 2px;"></div> <div style="background-color: #F4F4F4; border-radius: 50%; height: 12.5px; width: 12.5px; transform: translateX(9px) translateY(-18px);"></div></div><div style="margin-left: 8px;"> <div style=" background-color: #F4F4F4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;"></div> <div style=" width: 0; height: 0; border-top: 2px solid transparent; border-left: 6px solid #f4f4f4; border-bottom: 2px solid transparent; transform: translateX(16px) translateY(-4px) rotate(30deg)"></div></div><div style="margin-left: auto;"> <div style=" width: 0px; border-top: 8px solid #F4F4F4; border-right: 8px solid transparent; transform: translateY(16px);"></div> <div style=" background-color: #F4F4F4; flex-grow: 0; height: 12px; width: 16px; transform: translateY(-4px);"></div> <div style=" width: 0; height: 0; border-top: 8px solid #F4F4F4; border-left: 8px solid transparent; transform: translateY(-4px) translateX(8px);"></div></div></div> <div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center; margin-bottom: 24px;"> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 224px;"></div> <div style=" background-color: #F4F4F4; border-radius: 4px; flex-grow: 0; height: 14px; width: 144px;"></div></div></a><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/reel/DcthrS-PxKI/?utm_source=ig_embed&utm_campaign=loading" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A post shared by Charlotte Marinello Pellechia (@charpellechia)</a></p></div></blockquote> <script async src="//www.instagram.com/embed.js"></script></div> <!--kg-card-end: html--> <p>Elkins Park is an architecturally significant suburb of Philadelphia: <a href="https://www.bethsholompreservation.org/">Frank Lloyd Wright’s only synagogue</a> and <a href="https://lynnewoodhallpreservation.org/">Lynnewood Hall</a> are both in the neighborhood, and the homes are magnificent. And as I mentioned above, it’s also a very accessible commute into New York City. There’s public transit within a few minutes’ walk, which takes you into Philadelphia, <a href="https://www.amtrak.com/stations/phl">30th Street Station</a>, and <a href="https://www.phl.org/">Philadelphia International Airport</a> without changes. Elkins Park itself has restaurants, a coffee roastery, and <a href="https://openbookphilly.square.site/" rel="noreferrer">a great bookstore</a>. The <a href="https://www.penguinrandomhouse.com/books/612676/crying-in-h-mart-by-michelle-zauner/"><em>Crying in H Mart</em></a> H Mart is also here; the Korean restaurants in the neighborhood are so good that people travel from NYC to eat there. It’s just a few minutes away from Glenside — the <a href="https://www.keswicktheatre.com/">Keswick Theatre</a> there hosts acts like the Magnetic Fields and John Waters — and Jenkintown, which is home to breweries, indie movie houses, and more.</p><p>7 Windsor Ave is represented by Charlotte Pellechia at Kurfiss Sotheby’s. <a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/">You can book a viewing via its Zillow listing</a> or <a href="https://www.sothebysrealty.com/kurfiss/eng/sales/detail/717-l-85065-jc4d2n/7-windsor-avenue-elkins-park-pa-19027">contact Charlotte directly</a>.</p><figure class="kg-card kg-image-card kg-width-wide"><a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/?utm_campaign=zillowwebmessage&utm_medium=referral&utm_source=txtshare"><img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/6a30e9d4e6ab5c105036528c74c35c78-uncropped_scaled_within_1536_1152.webp" class="kg-image" alt="Buy my house!" loading="lazy" width="1440" height="959" srcset="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w600/2026/09/6a30e9d4e6ab5c105036528c74c35c78-uncropped_scaled_within_1536_1152.webp 600w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w1000/2026/09/6a30e9d4e6ab5c105036528c74c35c78-uncropped_scaled_within_1536_1152.webp 1000w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/6a30e9d4e6ab5c105036528c74c35c78-uncropped_scaled_within_1536_1152.webp 1440w" sizes="(min-width: 1200px) 1200px"></a></figure><figure class="kg-card kg-image-card kg-width-wide"><a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/?utm_campaign=zillowwebmessage&utm_medium=referral&utm_source=txtshare"><img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image.png" class="kg-image" alt="Buy my house!" loading="lazy" width="1440" height="960" srcset="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w600/2026/09/image.png 600w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w1000/2026/09/image.png 1000w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image.png 1440w" sizes="(min-width: 1200px) 1200px"></a></figure><figure class="kg-card kg-image-card kg-width-wide"><a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/?utm_campaign=zillowwebmessage&utm_medium=referral&utm_source=txtshare"><img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image-1.png" class="kg-image" alt="Buy my house!" loading="lazy" width="1440" height="959" srcset="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w600/2026/09/image-1.png 600w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w1000/2026/09/image-1.png 1000w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image-1.png 1440w" sizes="(min-width: 1200px) 1200px"></a></figure><figure class="kg-card kg-image-card kg-width-wide"><a href="https://www.zillow.com/homedetails/7-Windsor-Ave-Elkins-Park-PA-19027/9918234_zpid/?utm_campaign=zillowwebmessage&utm_medium=referral&utm_source=txtshare"><img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image-2.png" class="kg-image" alt="Buy my house!" loading="lazy" width="1440" height="1080" srcset="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w600/2026/09/image-2.png 600w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/size/w1000/2026/09/image-2.png 1000w, https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/image-2.png 1440w" sizes="(min-width: 1200px) 1200px"></a></figure> How I organised 15 years worth of passwords (video) - Johnny.Decimal https://johnnydecimal.com/blog/0250-15-years-of-passwords/ 2026-09-16T04:05:35.000Z Johnny.Decimal <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/1227173082?badge=0&autopause=0&player_id=0&app_id=58479" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerpolicy="strict-origin-when-cross-origin" style="position:absolute;top:0;left:0;width:100%;height:100%;" title="W0219 How I organised 15 years worth of passwords"></iframe></div> This week at JDHQ – 2026-09-15 - Johnny.Decimal https://johnnydecimal.com/blog/0249-this-week-2026-09-16/ 2026-09-16T00:31:14.000Z Johnny.Decimal <blockquote> <p>Originally sent to the <a href="https://johnnydecimal.com/support/contact-community/mailing-list-rss-social">mailing list</a> on Tuesday 2026-09-15.</p> </blockquote> <p>Hey everyone. This week: updates to the Small Business System (SBS), thoughts on <em>not</em> using AI to do your creative work, but using it to solve the biggest chore of all: organising your existing stuff into our pre-built systems. I've built that, it works, it's amazing, and you can use it today.</p> <h2 id="sbs-improvements">SBS improvements</h2> <p>Lucy just added a whole bunch of links to the Small Business System. She's into '<a href="https://johnnydecimal.com/blog/0248-lucy-boring-functional-govt-info">unsexy, boring, functional, government information</a>'<sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">1</a></sup> – and she's right: there's <em>so much stuff</em> out there if you go looking for it. We get most of ours from the Australian government; much of it has broader relevance, but if you need help dealing with administration, make yourself familiar with your local, state, and national government's resources. There's more there than you expect, it's often really good, <em>and you've already paid for it</em>!</p> <h2 id="ai-grunt-work-human-creative-stuff">AI: grunt work. Human: creative stuff</h2> <p>Speaking of government advice, Lucy also subscribes to a bunch of newsletters and she noted last week that much of the guidance around AI seems to be to use it for your marketing. I suspect this is advice given without much thought, so I'm not criticising those that give it – they're probably not AI experts, and they're certainly not being paid to be.</p> <p>But: it's awful advice! Your customers can smell AI generated ideas, copy, and images a mile off and we all hate it! <em>You</em> hate it: why would you think your customers wouldn't?</p> <p>As with so much technology advice, I think it's given by people who aren't technologists; who don't understand what you <em>can</em> do with AI, and who, asked to give advice in a newsletter, fall back to the obvious stuff. Everyone understands words and pictures, so they become the go-to.</p> <p>Instead, think about how it can take some of the burden from your back-office chores. The other day I recorded a video showing how I use Johnny.Decimal to keep my password manager organised. (Lucy's editing it now; <a href="https://youtube.com/@johnny.decimal">out soon</a>.) Rather than worry about showing my own data, I wanted to create a bunch of realistic demo logins that I could show without Lucy having to blur them out.</p> <p>AI is <em>amazing</em> at this sort of thing. Because it's technical, repetitive grunt-work. It's work that I <em>could</em> have done, had I wanted to spend two of the most boring hours of my life creating fake logins. Is that a good use of my time? It is not.</p> <p>In the past, you needed to be a computer programmer to do this sort of thing. You needed to know a scripting language. It still <em>helps</em> to have this base knowledge, and we're not yet at the point where you can just say 'computer' into the air and have it know exactly what you want, no mistakes. But we're a long way from me needing to write a script, and I think that's great. It's going to be incredibly democratising. (I recorded a rough video showing that process too.)</p> <p>Get your AI to do the boring work, so you have more time to do the creative stuff. Don't ever give that up.</p> <h2 id="i-can-now-move-you-in-to-life-admin-or-small-business">I can now 'move you in' to Life Admin or Small Business</h2> <p>Speaking of the boring work – what's the hardest part about getting organised? It's doing the work of actually <em>getting organised</em>. What if someone could take your existing stuff, analyse it all, apply all the rules I've developed over the last 15 years, and move it into a fresh copy of the LAS or SBS for you?</p> <p>This is live, now, on the <a href="https://johnnydecimal.com/jdhq/mcp-server">MCP server</a>. I've tested it on my manufactured 'messy company' data set and it scores up in the 90% range.<sup><a href="#user-content-fn-2" id="user-content-fnref-2" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">2</a></sup></p> <p>The bad news is that it can take as long as … half an hour. ;-)</p> <p>Just briefly, because I'll get up a proper blog post shortly, here's what happens.</p> <ol> <li>You connect the server (<a href="https://youtu.be/r-aXuBXEq94">video here</a>). You might need to be using a terminal version of your software, i.e. Claude Code, Codex. The GUI versions might work, I haven't tested.</li> <li>Ask it to help you 'move in' to a new JD system.</li> <li>It'll analyse your system, asking you clarifying questions.</li> <li>It'll download and configure the CLI, my <a href="https://github.com/johnnydecimal/skills">skills</a>, and the LAS or SBS as required.</li> <li>It'll show you, step by step, what it plans to do. You approve, it moves. Job done.</li> </ol> <p>Importantly, I've built it so your LLM doesn't move files directly. It depends on the <a href="https://johnnydecimal.com/jdhq/jd-cli">JD CLI</a> which now has a <strong>jd move</strong> command. That command records a log of every move (at <strong>~/.jd/journal.jsonl</strong>), so you have a full history of everything that happened. Moves are undoable. The <strong>jd</strong> command can't delete files.</p> <p>The overall process is logged at <strong>00.05</strong> in the target system's JDex, and is resumable via this log. You can ask it to move you in category by category and check out partial results.</p> <p>This is still very early, and it's behind a 'beta' flag. Your agent will ask you to turn that on. I'm confident that this won't wreck your life, but as with anything AI, be cautious. LLMs are unpredictable <em>by design</em>. It's what makes them useful. <strong>Have backups</strong>. Seriously, not kidding, have backups.</p> <p>I'd love to hear from you if you use it. I think it's amazing. It needs a Pro account or higher. I've recorded a video, it's in the editing queue.</p> <h2 id="lunch">Lunch?</h2> <p>Last week, we met our first Decimal!<sup><a href="#user-content-fn-3" id="user-content-fnref-3" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">3</a></sup> We caught up for lunch in Sapporo. It was life-affirming, really, to look someone in the eye who uses this thing we make. Next week we're heading to South Korea – let us know if you're there.<sup><a href="#user-content-fn-4" id="user-content-fnref-4" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">4</a></sup></p> <p>Talk soon,<br> j.</p> <div data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2> <ol> <li id="user-content-fn-1"> <p>A strong argument for the Oxford comma. <a href="#user-content-fnref-1" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> <li id="user-content-fn-2"> <p>The messy data generator knows, ideally, in which ID the messy data should be stored. It scores the 'move in' result against this ideal. <a href="#user-content-fnref-2" data-footnote-backref="" aria-label="Back to reference 2" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> <li id="user-content-fn-3"> <p>Actually I met a lovely Decimal in Canberra one time, but I won't count that as it's where we lived, and Lucy wasn't there. Hi, Joel! <a href="#user-content-fnref-3" data-footnote-backref="" aria-label="Back to reference 3" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> <li id="user-content-fn-4"> <p>I'll email you, Caleb. <a href="#user-content-fnref-4" data-footnote-backref="" aria-label="Back to reference 4" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> </ol> </div> 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>