Shellsharks Blogroll - BlogFlock https://blogflock.com/list/xJ8yq 2026-09-11T16:48:53.000Z BlogFlock shellsharks Notable links: September 11, 2026 - Werd I/O 6aa42f81f69db000014cb5db 2026-09-11T16:48:53.000Z Werd I/O <img src="https://storage.ghost.io/c/18/7c/187cc681-d3f3-49fc-87de-b01d06b76821/content/images/2026/09/prakasit-khuansuwan-ikhYJVcWTUc-unsplash.jpg" alt="Notable links: September 11, 2026"><p><em>Most Fridays, I share a handful of pieces that caught my eye at the intersection of technology, media, and society.</em></p><p><em>Did someone forward this to you? </em><a href="https://werd.io/notable-links-august-14-2026/#/portal" rel="noreferrer"><em>Subscribe for free</em></a><em>.</em></p><hr><h3 id="seattle-times-and-newsday-are-the-latest-publications-to-sue-openai-and-microsoft"><a href="https://techcrunch.com/2026/09/05/seattle-times-and-newsday-are-the-latest-publications-to-sue-openai-and-microsoft/" rel="noreferrer">Seattle Times and Newsday are the latest publications to sue OpenAI and Microsoft</a></h3><p>I have some complicated feelings about these ongoing newsroom lawsuits against AI companies. <a href="https://techcrunch.com/2026/09/05/seattle-times-and-newsday-are-the-latest-publications-to-sue-openai-and-microsoft/">The latest comes from The Seattle Times and Newsday</a>. From the lawsuit itself:</p><blockquote>“AI products like ChatGPT and CoPilot are touted as producers of content, but in fact they are rapacious consumers, devouring human-authored content and delivering back to the world copies and derivative imitations of that same original content they consumed to achieve their commercial objectives.”</blockquote><p><a href="https://walledculture.org/us-government-argues-that-fair-use-applies-to-openais-training-of-llms-in-key-copyright-case/">The government has argued that training LLMs is fair use</a>, and organizations like the EFF have agreed with it. <a href="https://www.eff.org/deeplinks/2026/08/eff-courts-dont-rewrite-copyright-over-ai-hype">The EFF’s argument in particular is important to take note of</a>:</p><blockquote>“The “market dilution” theory would eviscerate not only the fair use doctrine, but also other limits on copyright that work specifically to prevent rightsholders from unfairly suppressing competition by claiming broad ownership over tropes, genres, styles, and so on. In other words, publishers would wield unchecked veto power over any expression that might conceivably compete with a work they own.”</blockquote><p>That’s a genuine problem! Expanding the scope of copyright law really does affect free expression. It’s an important concern to bring up — if the market dilution argument held, it could protect all sorts of businesses, both small and multinational.</p><p>No industry deserves to exist for its own sake, and we can’t ask the world to stay still to protect an industry. Systems and methods that work against journalism can’t be illegal in their own right. At the same time, <em>we need journalism</em>. An informed voting population is a prerequisite for a functioning democracy. The implication is that if the old methods no longer allow it to be sustainable, journalism <em>must</em> evolve and find new methods that are. We need information, context, and reporting; we <em>don’t</em> need the businesses that produce those things to operate in the exact same way they do now, or to look similar to how they do today.</p><p>There’s no doubt that AI in its current form takes work that is often independently produced by people with relatively few resources and uses it to enhance models that are controlled by large tech companies with billions of dollars at their disposal, which are often, in turn, <em>controlled</em> by billionaires. It’s a giant transfer of property from people with relatively low power to some of the most powerful people in the world. I think it’s fair to say they’re strip-mining culture to enrich themselves.</p><p>But those power dynamics are not entirely cut and dry. The EFF’s point is, in part, that expanding copyright scope will primarily benefit large corporations like Disney that have often, themselves, applied a chokehold to cultural expression. In preventing strip-mining by some billionaires, there’s a risk of giving new powers to <em>other</em> billionaires.</p><p>Although I want to focus on the power dynamics, there’s also a mechanical objection to consider. LLMs are performing statistical analysis on source material in order to train, and the outputs are created using probabilistic math, not intentional reproduction. We need to retain the ability to analyze creative work for all kinds of reasons, and even index it — consider search engine indices, which I think we generally want to exist so that people can find our work.</p><p>Of course, actual verbatim outputs — or approximate copies thereof — are plagiarism. And the materials LLMs are trained on are often obtained illegally or outside the terms of their licensing agreements: unambiguous theft that needs to be treated accordingly.</p><p><a href="https://authorsguild.org/advocacy/artificial-intelligence/what-authors-need-to-know-about-the-anthropic-settlement/">The Anthropic copyright settlement was about this</a>: it wasn’t that training on books was found to be infringing in itself. In fact, Anthropic was found not liable for this. It was that <em>it stole them</em>. <a href="https://www.anthropiccopyrightsettlement.com/">Anthropic settled for billions of dollars</a>. That’s good in itself, but it turns out — surprise, surprise — that <a href="https://www.nytimes.com/2026/09/05/books/anthropic-settlement-ai-copyright-books.html">many publishers took the money for themselves and didn’t pass them down to authors</a>, even when the rights had reverted <em>to</em> those authors.</p><p>The elephant in the room is that <a href="https://www.techdirt.com/2012/04/10/yes-copyrights-sole-purpose-is-to-benefit-public/">copyright <em>was never</em> designed to protect individual authors</a>: it was designed to benefit the public, with author protections a necessary means to that end. In practice, most journalists, artists, etc, don’t own their work to begin with, and royalties are frequently corporation-to-corporation transfers even without AI.</p><p>The Newsday and Seattle Times lawsuits seek to protect corporate interests in a rapidly-changing market, with journalist reward effectively a trickle-down benefit. That's not to single them out in any way; it's just the industry dynamic. The licensing deals emerging as the market solution — among them <a href="https://openai.com/index/news-corp-and-openai-sign-landmark-multi-year-global-partnership/">OpenAI with News Corp</a>, <a href="https://www.reuters.com/business/media-telecom/global-news-publisher-axel-springer-partners-with-openai-landmark-deal-2023-12-13/">Axel Springer</a>, <a href="https://aboutus.ft.com/press_release/openai">the FT</a>; <a href="https://www.lawfuel.com/how-the-new-york-times-just-changed-the-ai-content-game-forever/">Amazon with the New York Times</a> — are corporate deals. Individual journalists and freelancers whose work constitutes the value see little of it, except in that it’s revenue that theoretically allows their employers to continue to exist and employ them. We probably need a new deal for creators that touches several levels.</p><p>The first is contracts and labor conditions. Unions have a huge part to play on this side of the equation. <a href="https://en.wikipedia.org/wiki/2023_Writers_Guild_of_America_strike">The Writers Guild of America won reasonable AI concessions from studios after their 2023 strike</a>, ensuring that writer compensation couldn’t be diluted if a studio used AI. <a href="https://www.wgacontract.org/the-campaign/summary-of-the-2026-wga-mba">A revised contract</a> this year also gave them written notice rights when studios intend to train models on their work, and a right to discuss compensation.</p><p>That’s great for members of the WGA, but most creative workers aren’t a part of an industry union. If that changed, both publishers and AI vendors would need to negotiate more creator-favorable terms. It seems like it should be a goal.</p><p>The second is infrastructure. We need independent creators to be able to set rights over their work and enforce them. <a href="https://rslstandard.org/press/rsl-standard">Really Simple Licensing</a> is one effort that’s working in this direction: a way to create an ASCAP-like standard for creative work. Notably, though, <a href="https://www.implicator.ai/publishers-demand-payment-from-ai-through-new-licensing-protocol/">not a single major AI vendor has agreed to comply</a>. There are <a href="https://legalblogs.wolterskluwer.com/copyright-blog/collective-licensing-for-gen-ai-training-feasible-or-flawed-part-1/">criticisms of the collective licensing approach generally</a>, and there’s still a platform compensation problem: if Reddit implements RSL, <em>it</em> will receive revenue, but its users who created the licensed content probably won’t.</p><p>The third is law. Our existing rules need to be updated to protect creators, <em>regardless</em> of AI; the advent of generative AI has made it even more important. Publishers must not be able to take all the money from licensing creative work (<a href="https://www.arthurcox.com/knowledge/dsm-directive-and-fair-remuneration-for-authors-and-performers/">the EU’s Digital Single Market Directive</a> is a good model to follow). AI vendors should be transparent about what they’re training on and how. Nobody should be able to steal training material. And rules should be revised to reflect that work can now be trained on and used to generate content at scale, automatically, which has knock-on effects on the public good.</p><p>These are all big topics. The shift we have to contend with is seismic in a way that hasn’t been rivaled since the advent of the web itself (and in some ways the impact on creators and publishers may be bigger than that). Each newsroom lawsuit is a kind of shot across the bow; the substantive conversations we need to be having are more expansive. But, in a political environment where AI vendors are aligned with the administration, and in a world where so many people want to be excited about AI in not very nuanced ways, I wonder if the conversations and actions that would lead to more equitable treatment and compensation for creators will be allowed to happen at all. Newsrooms should protect themselves, but news as an industry should make sure it's looking out for the people who create its value, too.</p><hr><h3 id="lg-tvs-caught-spying-even-when-offline-or-on-standby"><a href="https://www.theverge.com/tech/991190/lg-tv-spying-standby-recording-wi-fi-scanning-gamers-nexus" rel="noreferrer">LG TVs caught spying even when offline or on standby</a></h3><p><a href="https://www.theverge.com/tech/991190/lg-tv-spying-standby-recording-wi-fi-scanning-gamers-nexus">This is an enormous abuse of trust</a>:</p><blockquote>“LG smart TVs are almost constantly logging and uploading data about owners and their homes, even when offline or on standby mode. […] Packet captures showed the TVs scanning the local area network for nearby hardware like phones or smartwatches, as well as logging location data and details of nearby Wi-Fi networks, and feeding the information back to LG Ad Solutions. Perhaps more concerningly, the TVs were capable of recording microphone audio when in standby; this continued even after the TV was disconnected from the internet, with audio files stored offline and uploaded once a connection was restored.”</blockquote><p>Most households invite at least one television into their homes. It’s almost impossible to buy one without smart TV features; because most television shows are streamed over the internet these days, they’re usually online. You could leave the TV offline while connecting it to a separate box like an Apple TV, but it’ll keep nagging you to connect.</p><p>The contract should look like this: you pay for a TV and it shows you stuff. The idea that it will scan your local network for devices, determine what content you like to watch, and maybe even <em>listen to you using a built-in microphone</em> is not something that anybody signs up for. Someone somewhere at LG has been so incentivized to make a graph go up and to the right that they have decided that basic ethical tenets like privacy and transparency aren’t worth holding on to.</p><p>That’s particularly important in a world where the Department of Homeland Security has created <em>Minority Report</em>-style <a href="https://www.404media.co/a-secretive-dhs-predictive-policing-unit-is-analyzing-americans-financial-habits-and-pulling-them-over/">Predictive Intelligence Targeting Teams who instruct police to pull people over based on profiled data like their financial activity</a>, despite there being no evidence that they have committed a crime. Data from disparate sources is routinely bought by law enforcement and agencies like DHS in order to create these sorts of profiles; a connected TV in your home could easily contribute. Are you watching the wrong kind of content? Automatic Content Recognition could rat you out. Are the devices connected to your home network outside of the norm? Up goes a flag.</p><p>So that’s homes. But most offices have TVs installed somewhere, too. Consider that an installed smart TV could easily be snooping on network devices, content, and even video calls conducted over these screens. Some more sophisticated offices will have them set to a less privileged network or insist on them remaining offline; most will dutifully connect them up. The result is a live microphone and content recognition tech installed in newsrooms, universities, non-profits, and businesses around the country.</p><p>Manufacturers like LG can sell this data. They will likely argue that it keeps TV prices down – and maybe that’s true. But <a href="https://decrypt.co/377637/lg-tv-might-be-listening-even-when-off">this reporting comes after LG promised regulators in Texas to stop collecting viewing data without informed consent</a>; <a href="https://atlas21.com/gamers-nexus-says-lg-tvs-capture-audio-and-scan-networks/">there’s a second mic that may continue recording even when the main microphone setting has been turned off</a>. They’ve shown they cannot be trusted. This kind of invisible data gathering should be illegal. Nobody signed up to be spied on; they just want to watch TV.</p><hr><h3 id="ai-safety-is-designed-in-the-west-and-failing-users-everywhere"><a href="https://restofworld.org/2026/ai-safety-bias/" rel="noreferrer">AI safety is designed in the West, and failing users everywhere</a></h3><p>Amnesty International believes that <a href="https://www.amnesty.org/en/latest/news/2022/09/myanmar-facebooks-systems-promoted-violence-against-rohingya-meta-owes-reparations-new-report/">Facebook was complicit in the genocide against the Rohingya people in Myanmar</a>:</p><blockquote>“In 2017, the Rohingya were killed, tortured, raped, and displaced in the thousands as part of the Myanmar security forces’ campaign of ethnic cleansing. In the months and years leading up to the atrocities, Facebook’s algorithms were intensifying a storm of hatred against the Rohingya which contributed to real-world violence.”</blockquote><p>It wasn’t that anyone at Facebook actively wanted to enable a genocide: they just didn’t care about <em>not</em> enabling one. Their teams were warned at least fifteen times, but mitigating this obvious harm was deprioritized in favor of other things. They were focused on their own world, with its epicenter in Menlo Park, California. Ultimately, although Facebook was not the source of the genocide, its use contributed significantly, leading to Rohingya deaths. By prioritizing growth in Myanmar but not staffing for local needs, it invested in its valuation rather than preventing harm in a country it didn’t care about.</p><p>So it’s more than a little concerning to see AI vendors making the same mistakes. As Rina Chandran writes in Rest of World, failures in the Global South caused by Silicon-Valley-centric product development <a href="https://restofworld.org/2026/ai-safety-bias/">are becoming more common</a>:</p><blockquote>“For example, in Tigrinya, spoken by about 9 million people in Eritrea and northern Ethiopia, machine translation rendered smallpox as syphilis, gonorrhea as diabetes and ‘you have been given intravenous antibiotics’ as ‘you have been given intravenous insecticides.’”</blockquote><p>While international efforts like <a href="https://www.gov.uk/government/publications/ai-safety-summit-2023-the-bletchley-declaration/the-bletchley-declaration-by-countries-attending-the-ai-safety-summit-1-2-november-2023">the Bletchley Declaration</a> aim to mitigate what are considered to be frontier risks of AI, it asks for little accountability for the other harms that inevitably arise from product teams that aren’t rooted in the interests, needs, norms, and values of diverse international communities. Those harms can add up to become deep wounds in themselves, but it’s also worth asking another question.</p><p>As Rest of World points out:</p><blockquote>“At the heart of the issue ‘is the question of who gets to define what counts as a safety problem in the first place,’ Elizabeth Orembo, a fellow at Research ICT Africa, a think tank, told <em>Rest of World</em>. Big tech firms tend to focus on model risks such as deception, autonomous behavior, cyber capabilities, and aiding bioweapons, she said. They do not pay much attention to deployment risks including discrimination, exclusion, surveillance, language failures, and the inability of affected communities to seek remediation.”</blockquote><p>Can affected communities be co-owners of those risk frameworks, including the resulting product roadmaps, or are they, once again, just expected to let technology happen to them?</p><p>Facebook was warned fifteen times that it was doing the wrong thing in Myanmar, and still did nothing. AI companies are retreating from even the weak commitments they previously made. They need to be forced to do the right thing: if not by markets and investors, then by international regulation.</p> Weeknote #2017 - Robb Knight • Posts • Atom Feed https://rknight.me/blog/weeknote-2017/ 2026-09-11T15:54:33.000Z Robb Knight <p>The St Jude Fundraiser passed $150k overall and we hit $6k on ours last night. We still have drawing slots available and some sticker news is coming soon. <a href="/stjude">Donate here</a>.</p> <p><a href="https://stopomarchy.neocities.org/">Stop Omarchy</a> is a well-cited resource by Brennan explaining exactly why Omarchy is more than just a Linux distro run by a facist.</p> <p>I caught some of the most recent <a href="https://www.theguardian.com/media/2016/oct/03/dennis-the-menace-beano-cgi-makeover-new-series-cbbc">Dennis the Menace show</a> on TV and I can't believe they made him look like this.</p> <p><a href="https://slam.co/products/the-blueprint?variant=Batch+2&ref=simplebits.com">This dotgrid desk mat</a> is also a whiteboard of sorts. If I didn't always use my <a href="https://relay.fm/stjude">St Jude × Relay</a> mat, I'd be getting one of these. via <a href="https://simplebits.shop">SimpleBits</a></p> <p>I am obsessed with <a href="https://payphonetag.com">payphone tag</a> a game that can only exist because all payphones are <a href="https://www.telstra.com.au/exchange/payphones-free-for-calls-australia">free in Australia</a>. Go check out the map, it's amazing. via <a href="https://listen.hemisphericviews.com/171">Hemispheric Views #171</a>.</p> <p>Veronica, of Veronica Explains, did <a href="https://www.youtube.com/watch?v=53kc2QjGxnY">a great video</a> on setting up a podcast site using Eleventy. Definitely not linking this because I got a mention. Nope.</p> <p>The <a href="https://www.youtube.com/watch?v=wuFfiTEr2yc">Ocarina of Time remake</a> looks pretty good but there's no way I'm buying a Switch 2 just for that. I should go back and actually finish this game, I've never made it past the water temple.</p> <p><a href="https://www.zachleat.com/web/open-graph-easy-build/">Zach came up with</a> a really smart way to have one single opengraph entry point that does all the opengraph images for his site. Furious I didn't think of this.</p> <p>This <a href="https://www.youtube.com/watch?v=a7_dEjHUWa0">breakdown of Iron Man's opening scene</a> is wonderful.</p> <p>Juhis put up a <a href="https://notes.hamatti.org/technology/recipes/simplest-single-file-webring-implementation">single page webring implmentation</a> — always worth keeping things as simple as this if you can.</p> Return to Land of Eem - Joel's Log Files https://joelchrono.xyz/blog/return-to-land-of-eem 2026-09-11T15:40:00.000Z joelchrono <p>Make sure to read the <a href="/blog/my-first-ttrpg/">first adventure of this journey!</a>.</p> <p>Six months after the first campaign. We finally sat around the table once again, and played <em>Land of Eem!</em> for the second time.</p> <p>We had set a couple of dates before to meet up, and even a session zero where some of my players made new characters, but we didn’t get to play for months. After all, when a couple of party members are still of young age, you can only do so much! Plus, we could only align after church and sometimes other activities would take precedence.</p> <p>This time some things are different, I purchased the Deluxe Edition Box Set, and I was able to use the official GM Screen, the map and the pysical core rulebook!</p> <p>The rulebook comes with a starting adventure: <strong>Wally’s Waffles and Rats</strong>, which is quite different from the one included in the Quickstart guide played last time. Spoilers ahead if you plan to play this with your own friends! But don’t worry much, it will not go the same.</p> <p>First off all, I went very much not ready for this. I had the character sheets, I didn’t read them, I had all the rulebook, I didn’t bookmark any important pages for reference before the game.</p> <p>I didn’t remember a lot, I just went straight into the game, hoping for the best, and this is how it went!</p> <h2 id="the-adventure-continues">The adventure continues!</h2> <p>I did a half-decent introduction into the world of <em>Land of Eem</em> once again, focusing on the Used T’Be Forest and <em>Wally’s Waffles and Wourgs</em>. a restaurant that’s about to shutdown, because Wally lost his property deed and some conglomerate wants to claim his terrain as theirs. The whole thing happens during one last celebration, giving Waffles to everyone who comes arond before the bad guys arrive tomorrow to tear it down.</p> <p>The adventure started quickly. The party of characters kind of went straight into the quest without speaking to any of the NPC’s in Wally’s restaurant. I offerend a couple of options and they did chat a bit, but I have to admit I wasn’t doing my best coming up with dialogues of my own and I want to blame the adventure design a bit, since it appears like Wally approaches the party and tells them everything they need from the start (honestly fine for a first adventure though).</p> <p>Of course, I still could have pushed them a bit to participate in some of the activities inside the tavern, like <em>Wally’s Howling Hot Challenge</em>.</p> <p><em>There’s another problem for me when it comes to the English naming scheme of pretty much everything in this fantasy land, since it kinda feels like it references things not in my language, but no biggie.</em></p> <p>Last time I didn’t really bring up the party members, but I saw <a href="https://doserver.top/blog/my-family-went-on-a-quest-and-my-first-time-GMing/">Daniel’s post</a>—he went through this very same adventure with his family so give it a read!!—doing that and I thought I’d steal the format. They introduced to each other and said some things too, though it was not as detailed and a little bit rushed.</p> <ul> <li>Xavi the Bard, played by youngest in the group.</li> <li>Maujii the Gnome, a newcomer on this campaign!</li> <li>Cube the Dungeoneer, played by the oldest in the group, a gelatinous goo.</li> <li>Wibak the Wizard, a new mushroom character from the guy who played Loyal Chum last session.</li> <li>Lyra the Rascal, played by my sister’s <em>boyfriend</em>.</li> </ul> <p><em>Another thing, we kind of forgot the special abilities of each class for most of the adventure, but some things came in handy on a couple of occassions.</em></p> <p>After my party got the info about the deed and those details, they headed into the storage room. For some reason, my party was always scared to go through doors, and they had some trouble deciding who would go first. This is where something like the negative/positive character traits would have come in handy, but I kind of forgot to ask about that.</p> <p>By now, I forgot who entered first, but well, the events are what matters more here. The room was filled with boxes and the like, so my characters did a search, found some strong-smelling mustard, a torch and not much else.</p> <p>Walking there, they stumbled with an underground worm, which bit on the leg of one of the party members. Trying to pull it away, another character slipped and ended up hitting against the corner of a box, that hurt quite a bit, but eventually they managed to scare away the worm-thing.</p> <p><em>The mustard was supposed to be useful to keep animals away, but they never even tried to use it!</em></p> <p>With the torch in hand, they continued forward. They slightly opened the door to a room filled with wine bottles, but they saw some rats and tried to shut the door. However, one of the party members pushed the other, stumbling very close to the now angered rats. They still managed to run away though, and headed elsewhere.</p> <p>The next room was a bit of an office space, with papers, an armor stand, and a bottled ship model, which was actually a magical item that becomes real sized when put in water! The armor in the statue was small, and the gnome in the party decided to keep it. I have to admit I completely forgot how defense and combat at all worked but <em>anyway</em>.</p> <p>There was this huge hole in the wall that appeared to be dug by some animals, it was clear the rats the party saw before would not be the only ones in their way. At the end of the small tunnel, my party found a bloodied dynamite stick, which was a bit creepy, but useful.</p> <p>They were about to get out of that tunnel when the party found themselves on a pickle, the floor ended, and the tunnel could only go down, they would have to descend thirty foot deep. For this they tried to use some rope, an item a character had in their inventory! None of them attempted a jump, they simply tied the gnome to the end of the rope, holding the torch, although they let go of it and it ended up all the way to the bottom. Thanks to a lucky roll, the torch did not go out, at least they saw the bottom now!</p> <p>My party was once again, very scared, and since the rope was long, they decided they would let (or force, honestly) their gnome friend to walk alone forward and shout about whatever he could see in the way.</p> <p>Underground, everything was a network of tunnels, and going through them proved a little challenging while tied to a rope. There were also some rats that showed up, but that Maujii managed to scare off. They tried a couple routes without success and eventually Wibak the Wizard saw fit to use a magic spell!</p> <p>Magic Spells in Land of Eem’s Wizard class work a little weird, but he can basically say whatever he wants and as long as it makes sense for me as GM, I can let it slide. For some reason, his spell said something akin to <em>“let the stars guide our way!”</em> and well, the spell worked! Except that they were underground and there are no stars visible here—the wizard wasn’t very smart.</p> <p>Eventually the gnome walked too far, and nobody noticed they ran out of rope, and that it had fallen to the ground and the gnome pulled it. They were now stuck 30 foot above the ground.</p> <p>At last, they had no rope, but they did have the courage to push Cube the Gelatinous Goo and use his gooey properties to yelp. Using him as a trampoline, everyone managed to jump down almost unscathed. Not without having to scare off a few rats that showed up.</p> <p>They finally made it to a new bifurcation, and they headed to a place full of mushrooms, only to backtrack when the mushrooms turned out to have very sharp teeth.</p> <p>My scared friends went carefully the other way, a dark room with an inky smell and some black thread all over the place… Two of them, the Gnome and the Bard, went forward, only to get stuck on the thread, which turned out to be a black spider web made of ink. Only then they noticed some strange oval-shaped stones, which turned out to be Inkpot Spider Eggs, and at the distance, four eyes opened.</p> <p>Before the creature got any closer, they had the brilliant idea of using the dynamite stick and blow everything up. They didn’t get a good throw and the blast got them unstuck of the web, and thrown away all the way onto the dangerous mushroom field. Thankfully, the rest of the party managed to catch them as they flung, and the spider nest was destroyed!</p> <p>They moved forward, confident in their mission, and here’s where I as the GM, made a bit of a nasty move. The Spider survived, and she was also very much in shock, after seeing how all her eggs were now gone… A conflict started, and it was time for the party to pray for their lives.</p> <p>It’s what I would say except they where exceptionally good at parley, and after a short conversation with the Spider, <del>my sister’s boyfriend</del>, I mean, the Rascal managed to trick her into believing that the neighbouring mushrooms caused the explosion. The Spider told them she still had some eggs but that were stolen by some rats further deep, so the party offered to at least save those, and that way they felt a little less bad about the whole thing.</p> <p>The Spider let them pass and they found themselves in front of a chasm. They had recovered the rope from earlier, so they were able to go through it without much difficulty.</p> <p>In front of them, a cave of crystals shone due to the light of the torch—which has managed to survive the whole way through somehow—soon after, they saw the skeleton of a goblin, with a hat and a document with orders to steal a property deed, from Krog and Sons Inc—another company that also wants Wally’s property. As the party realizes the fortune the presence of the crystals implies, they hear the sound of big steps approaching.</p> <p>A giant rat with a not so giant crown on its head is seen, proclaiming to be the mighty and powerful King Klik. Clearly in possession of the property deed that belongs to Wally. All of my players were kind of scared to get into combat, so they bet everything on parley and did their best to convince King Klik.</p> <p>The players learned that apparently, some of the meat used by Wally for the restaurant was actually made out of rat, which is something the party took very seriously—they wanted to blackmail poor Wally. However, they first had to get the property deed from King Klik.</p> <p>How did they convince the rat to give it away, you ask?</p> <p>Very simple, after a very lucky roll, my <del>evil sister’s boyfriend</del> I mean, the lucky and mischievious Rascal, used the magic bottled ship and inspired King Klik to become the captain of their own pirate ship, with a crew of rats under his command!</p> <p>Somehow, that worked out! They managed to avoid conflict and they were able to recover the lost Spider eggs as well. King Klik and the rest of the rats dug up a new tunnel heading to the south, and we may eventually find what happened to them!</p> <p>Without a lot of trouble left, returning to the surface to meet Wally was easy. The party decided to confront him about the rat meat, but I wasn’t feeling like making Wally such a bad guy and so his innocence was proven after checking the refrigerators.</p> <p>After that ruckus, the party continued to enjoy Waffles for another while, and the adventure was over, for now!</p> <h2 id="finishing-words">Finishing words</h2> <p>Returning to <em>Land of Eem</em> was incredibly fun. With the inclusion of two new players into the party—and the absence of one of them—dynamics definitely changed a little bit.</p> <p>I honestly was feeling guilty about making the Inkpot Spider sentient, and even the party felt bad about the lie. This is a friendly reminder for everyone that <em>setting the tone of the adventure on a Session Zero is very important</em>. This genocidal event did leave everyone feeling uncomfortable, and even though we joked about it and moved on, the rest of the session was a bit sour.</p> <p>There are many ways in which this could have gone better. First, <em>actually understanding conflict</em>. Had I done a better job learning that, I could have conflicts develop in more interesting ways. For a while I forgot about the limited amount of Parley one can do, which is how pretty much everyone in my party got to try and convince the Spider and King Klik through a variety of ways without having to fight at all.</p> <p>If they had gone into regular combat, the Spider would have been a worthy enemy, and I even could have made them promise to save the rest of the eggs or something as a last wish. Making the Spider just a mindless beast would have worked out fine, defeating or making it run away in an environment that is kill or be killed is more easy to justify, without guilt being involved.</p> <p>Some things of note and lessons I learned, even if I may be repeating myself:</p> <ul> <li>I really need to pay more attention to the character traits, and use them to move the story in more fun or chaotic directions</li> <li>Understanding combat, seriously!</li> <li>Handling things better when the party splits up so everyone has something to do or react to.</li> <li>Sticking to an atmosphere everyone is comfortable with.</li> <li>Trying to work around the rolls we get instead of rerolling until I like the result (yeah we did this sometimes).</li> <li>Keeping items in mind! We used the rope and the torch but other useful things were never looked at.</li> <li>Get better at describing environemnts and pushing the players to explore instead of peeking at a room and not going in.</li> <li>Push the party to stay in character, there were a few immersion breaking moments I wish I’d managed better.</li> </ul> <p>However, for something that was very improvised, I’m very happy things worked out okay, I’m not going to be too hard on myself and will simply try to learn!</p> <p>As always, any advice is appreciated! and I hope you enjoyed.</p> <p>This is day 33 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Return to Land of Eem">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/117253323186750063">Reply on Fediverse</a> </p> 2026-09-11 15:02: Because a basic sitemap would be boring! https://kevquirk.com/sitemap - Kev Quirk https://kevquirk.com/2026-09-11-1502 2026-09-11T14:02:00.000Z Kev Quirk <p>Because a basic sitemap would be boring!</p> <p><a href="https://kevquirk.com/sitemap">https://kevquirk.com/sitemap</a></p> <div class="email-hidden"> <hr /> <p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p> <p>You can <a href="mailto:19gy@qrk.one?subject=2026-09-11%2015%3A02">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-09-11-1502#comments">leave a comment</a>.</p> </div> [RSS Club] Sneak peek at new DOI functionality - Terence Eden’s Blog https://shkspr.mobi/blog/?p=74757 2026-09-11T11:34:12.000Z Terence Eden’s Blog <p><mark>If you're reading this, you're part of <a href="https://daverupert.com/rss-club/">RSS Club</a>! A <em>top secret</em> society of cool people who subscribe to my feed. This post is <strong>not</strong> available on the web or via email.</mark></p> <p>I've been playing about with <a href="https://rogue-scholar.org/">Rogue Scholar</a>. It's an open-access publication which allows blogs to get a persistent <a href="https://en.wikipedia.org/wiki/Digital_object_identifier">Digital Object Identifier</a>.</p> <p>If I've set everything up correctly (not a given) then all new posts on this site will be issued with a DOI. Hopefully, this will not include RSS Club posts - as I'd like to keep them as a special private treat just between you and me.</p> <p>I'm in the process of writing a WordPress plugin to retrieve the DOI and add it to posts. I'm not sure if there's a sensible way to add it into an RSS feed, but I'll give it a go.</p> <p>Will this be useful? I don't know. My posts sometimes get <a href="https://shkspr.mobi/blog/citations">referenced in proper academic works</a> - I'm not sure if this'll make any difference to that. But it is nice to experiment with these things.</p> <p>If you have any experience with DOI or Rogue Scholar - please <a href="https://edent.tel/">get in touch</a>.</p> <p>Thanks for being a member of RSS Club - you rock 😃</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=74757&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Two more newsrooms are suing OpenAI. It's complicated. - Werd I/O 6aa3319cf69db000014cb5d4 2026-09-10T22:39:24.000Z Werd I/O <p>Link: <a href="https://techcrunch.com/2026/09/05/seattle-times-and-newsday-are-the-latest-publications-to-sue-openai-and-microsoft/"><em>Seattle Times and Newsday are the latest publications to sue OpenAI and Microsoft, by Anthony Ha in TechCrunch</em></a></p><p>I have some complicated feelings about these ongoing newsroom lawsuits against AI companies. <a href="https://techcrunch.com/2026/09/05/seattle-times-and-newsday-are-the-latest-publications-to-sue-openai-and-microsoft/">The latest comes from The Seattle Times and Newsday</a>. From the lawsuit itself:</p><blockquote>“AI products like ChatGPT and CoPilot are touted as producers of content, but in fact they are rapacious consumers, devouring human-authored content and delivering back to the world copies and derivative imitations of that same original content they consumed to achieve their commercial objectives.”</blockquote><p><a href="https://walledculture.org/us-government-argues-that-fair-use-applies-to-openais-training-of-llms-in-key-copyright-case/">The government has argued that training LLMs is fair use</a>, and organizations like the EFF have agreed with it. <a href="https://www.eff.org/deeplinks/2026/08/eff-courts-dont-rewrite-copyright-over-ai-hype">The EFF’s argument in particular is important to take note of</a>:</p><blockquote>“The “market dilution” theory would eviscerate not only the fair use doctrine, but also other limits on copyright that work specifically to prevent rightsholders from unfairly suppressing competition by claiming broad ownership over tropes, genres, styles, and so on. In other words, publishers would wield unchecked veto power over any expression that might conceivably compete with a work they own.”</blockquote><p>That’s a genuine problem! Expanding the scope of copyright law really does affect free expression. It’s an important concern to bring up — if the market dilution argument held, it could protect all sorts of businesses, both small and multinational.</p><p>No industry deserves to exist for its own sake, and we can’t ask the world to stay still to protect an industry. Systems and methods that work against journalism can’t be illegal in their own right. At the same time, <em>we need journalism</em>. An informed voting population is a prerequisite for a functioning democracy. The implication is that if the old methods no longer allow it to be sustainable, journalism <em>must</em> evolve and find new methods that are. We need information, context, and reporting; we <em>don’t</em> need the businesses that produce those things to operate in the exact same way they do now, or to look similar to how they do today.</p><p>There’s no doubt that AI in its current form takes work that is often independently produced by people with relatively few resources and uses it to enhance models that are controlled by large tech companies with billions of dollars at their disposal, which are often, in turn, <em>controlled</em> by billionaires. It’s a giant transfer of property from people with relatively low power to some of the most powerful people in the world. I think it’s fair to say they’re strip-mining culture to enrich themselves.</p><p>But those power dynamics are not entirely cut and dry. The EFF’s point is, in part, that expanding copyright scope will primarily benefit large corporations like Disney that have often, themselves, applied a chokehold to cultural expression. In preventing strip-mining by some billionaires, there’s a risk of giving new powers to <em>other</em> billionaires.</p><p>Although I want to focus on the power dynamics, there’s also a mechanical objection to consider. LLMs are performing statistical analysis on source material in order to train, and the outputs are created using probabilistic math, not intentional reproduction. We need to retain the ability to analyze creative work for all kinds of reasons, and even index it — consider search engine indices, which I think we generally want to exist so that people can find our work.</p><p>Of course, actual verbatim outputs — or approximate copies thereof — are plagiarism. And the materials LLMs are trained on are often obtained illegally or outside the terms of their licensing agreements: unambiguous theft that needs to be treated accordingly.</p><p><a href="https://authorsguild.org/advocacy/artificial-intelligence/what-authors-need-to-know-about-the-anthropic-settlement/">The Anthropic copyright settlement was about this</a>: it wasn’t that training on books was found to be infringing in itself. In fact, Anthropic was found not liable for this. It was that <em>it stole them</em>. <a href="https://www.anthropiccopyrightsettlement.com/">Anthropic settled for billions of dollars</a>. That’s good in itself, but it turns out — surprise, surprise — that <a href="https://www.nytimes.com/2026/09/05/books/anthropic-settlement-ai-copyright-books.html">many publishers took the money for themselves and didn’t pass them down to authors</a>, even when the rights had reverted <em>to</em> those authors.</p><p>The elephant in the room is that <a href="https://www.techdirt.com/2012/04/10/yes-copyrights-sole-purpose-is-to-benefit-public/">copyright <em>was never</em> designed to protect individual authors</a>: it was designed to benefit the public, with author protections a necessary means to that end. In practice, most journalists, artists, etc, don’t own their work to begin with, and royalties are frequently corporation-to-corporation transfers even without AI.</p><p>The Newsday and Seattle Times lawsuits seek to protect corporate interests in a rapidly-changing market, with journalist reward effectively a trickle-down benefit. The licensing deals emerging as the market solution — among them <a href="https://openai.com/index/news-corp-and-openai-sign-landmark-multi-year-global-partnership/">OpenAI with News Corp</a>, <a href="https://www.reuters.com/business/media-telecom/global-news-publisher-axel-springer-partners-with-openai-landmark-deal-2023-12-13/">Axel Springer</a>, <a href="https://aboutus.ft.com/press_release/openai">the FT</a>; <a href="https://www.lawfuel.com/how-the-new-york-times-just-changed-the-ai-content-game-forever/">Amazon with the New York Times</a> — are corporate deals. Individual journalists and freelancers whose work constitutes the value see little of it, except in that it’s revenue that theoretically allows their employers to continue to exist and employ them. We probably need a new deal for creators that touches several levels.</p><p>The first is contracts and labor conditions. Unions have a huge part to play on this side of the equation. <a href="https://en.wikipedia.org/wiki/2023_Writers_Guild_of_America_strike">The Writers Guild of America won reasonable AI concessions from studios after their 2023 strike</a>, ensuring that writer compensation couldn’t be diluted if a studio used AI. <a href="https://www.wgacontract.org/the-campaign/summary-of-the-2026-wga-mba">A revised contract</a> this year also gave them written notice rights when studios intend to train models on their work, and a right to discuss compensation.</p><p>That’s great for members of the WGA, but most creative workers aren’t a part of an industry union. If that changed, both publishers and AI vendors would need to negotiate more creator-favorable terms. It seems like it should be a goal.</p><p>The second is infrastructure. We need independent creators to be able to set rights over their work and enforce them. <a href="https://rslstandard.org/press/rsl-standard">Really Simple Licensing</a> is one effort that’s working in this direction: a way to create an ASCAP-like standard for creative work. Notably, though, <a href="https://www.implicator.ai/publishers-demand-payment-from-ai-through-new-licensing-protocol/">not a single major AI vendor has agreed to comply</a>. There are <a href="https://legalblogs.wolterskluwer.com/copyright-blog/collective-licensing-for-gen-ai-training-feasible-or-flawed-part-1/">criticisms of the collective licensing approach generally</a>, and there’s still a platform compensation problem: if Reddit implements RSL, <em>it</em> will receive revenue, but its users who created the licensed content probably won’t.</p><p>The third is law. Our existing rules need to be updated to protect creators, <em>regardless</em> of AI; the advent of generative AI has made it even more important. Publishers must not be able to take all the money from licensing creative work (<a href="https://www.arthurcox.com/knowledge/dsm-directive-and-fair-remuneration-for-authors-and-performers/">the EU’s Digital Single Market Directive</a> is a good model to follow). AI vendors should be transparent about what they’re training on and how. Nobody should be able to steal training material. And rules should be revised to reflect that work can now be trained on and used to generate content at scale, automatically, which has knock-on effects on the public good.</p><p>These are all big topics. The shift we have to contend with is seismic in a way that hasn’t been rivaled since the advent of the web itself (and in some ways the impact on creators and publishers may be bigger than that). Each newsroom lawsuit is a kind of shot across the bow; the substantive conversations we need to be having are more expansive. But, in a political environment where AI vendors are aligned with the administration, and in a world where so many people want to be excited about AI in not very nuanced ways, I wonder if the conversations and actions that would lead to more equitable treatment and compensation for creators will be allowed to happen at all. Newsrooms should protect themselves, but they should make sure they’re looking out for the people who create their value, too.</p> Analogue Defaults - Robb Knight • Posts • Atom Feed https://rknight.me/blog/analog-defaults/ 2026-09-10T21:38:32.000Z Robb Knight <p>A few months ago, <a href="https://www.penaddict.com/analog-defaults">Brad came up with analog defaults</a> loosely based on the <a href="https://defaults.rknight.me">Hemispheric Views app defaults</a>. I've been meaning to write mine up but having sat on it for a while I don't think it's worth me having a dedicated page like <a href="/defaults">my app defaults</a> or <a href="/now">/now</a>. My personal usage is better served by my <a href="https://rknight.me/blog/tags/currentlyinked/">#currentlyInked tag</a> for fountain pens and this post as a general overview.</p> <figure><img src="https://cdn.rknight.me/site/2026/analog-defaults-2026-09-10.jpg" alt="A pink pen case with an Octopus on it and next to it are some pens all lined up vertically" /></figure> <p>On a Sunday evening if I have time, I sit down and pick out new pens for the week for each category I carry in my <a href="https://www.rickshawbags.com/fillmore">Rickshaw Filmore</a>.</p> <ul> <li>Fountain pen: I use a single pen each week for my journal although I'll sometimes grab a second one with a different ink colour. Most of my pens are fine or extra fine nib. Currently: Pink Pilot Prera <code>F</code> nib.</li> <li>Pencil: I'm doing more sketches and drawings, especially <a href="https://rknight.me/blog/drawing-for-st-jude-petrichor/">this month</a> and <a href="https://rknight.me/blog/tags/inktober/">next</a>, so I always have a pencil or two on me. Currently: Rotring 600 black.</li> <li>Fineliner: This never changes, Sakura Micron is the only way to fly. Uni Pin is fine in a pinch but it's not what I like. I also enjoy using the <a href="https://tomsstudio.com/products/lumos?variant=49374577426707">Lumos Pro Duo</a>.</li> <li>Standard pen: I switch between ballpoints, gels, whatever tickles my pickle that week. Right now? <a href="https://rknight.me/notes/202609101109">Banana pen</a>.</li> <li>Heading pen: I always use a coloured pen of some kind for headings in my journal. I pick from <a href="https://cultpens.com/collections/sakura-gelly-roll">Gelly Rolls</a>, [Mattehops](<a href="https://www.pentel.co.uk/product/pentel-mattehop-1-0mm-k110/">https://www.pentel.co.uk/product/pentel-mattehop-1-0mm-k110/</a>, <a href="https://www.pentel.co.uk/product/pentel-hybrid-dual-metallic-8-piece-cardboard-wallet-yk110dm-8-m/">Pentel dual metallics</a>, and <a href="https://mildliners.rknight.me/">Mildliners</a>.</li> <li>Journal: I've tried a bunch of different journals but the one I keep coming back to is <a href="https://scribblesthatmatter.co.uk">Scribbles that Matter Pro</a>.</li> </ul> 2026-09-10 13:49: The constant outrage on #Mastodon (and maybe other social sites?) for is so tiring. - Kev Quirk https://kevquirk.com/2026-09-10-1349 2026-09-10T12:49:00.000Z Kev Quirk <p>The <em>constant</em> outrage on #Mastodon (and maybe other social sites?) for <code>[bad thing of the day]</code> is so tiring.</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-10%2013%3A49">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-09-10-1349#comments">leave a comment</a>.</p> </div> Put an AV test at the start of your slides - Terence Eden’s Blog https://shkspr.mobi/blog/?p=68346 2026-09-10T11:34:10.000Z Terence Eden’s Blog <p>For years, I've had a <a href="https://shkspr.mobi/blog/2017/11/put-a-test-card-at-the-start-of-your-slides/">test-card at the start of my slides</a>. Before I start my talk, I can immediately see if the aspect ratio is wrong, colours are off, or any other visual issues with the presentation.</p> <img src="https://shkspr.mobi/blog/wp-content/uploads/2017/10/Test-Card-on-a-screen.jpg" alt="A test card is displaying on a television screen" width="1024" height="768" class="alignleft size-full wp-image-28772"> <p>A few years ago I was invited to give a talk and was assured that the venue was set up for audio as well as video. I dutifully filled my slides with with demo videos containing sound. None of them worked. Somewhere between the HDMI output of the presentation laptop and the speakers, the audio went <abbr title="Absent Without Leave">AWOL</abbr>.</p> <p>Ever since then, I've placed an audio test slide at the start of my presentations. There's <a href="https://www.youtube.com/results?search_query=sound+sync+test">a good range of videos on YouTube</a> - pick one you like, embed it into your slides, and play it before your talk starts.</p> <p>Over the years, I've found the following "bugs" with event AV setups:</p> <ul> <li>No sound.</li> <li>Only left channel working.</li> <li>Severe latency between audio and video.</li> <li>Garbled sound.</li> <li>Sound routing to the room but not the livestream.</li> <li>Feedback / howl around when sound playing.</li> </ul> <p>Whether events are professionally run or community managed, you can never guarantee that sound will work. Add subtitles to your videos. If possible, add a sign-language interpreter. And, if all else fails, hold your microphone to your laptop's speakers.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68346&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Visual; textual - James' Coffee Blog https://jamesg.blog/2026/09/10/visual-textual 2026-09-10T00:00:00.000Z James' Coffee Blog <p>My home page is a poem. I designed it in this way to explore the extent to which a literary medium – a poem – could be used for navigation, for <a href="https://jamesg.blog/2026/08/10/poems-as-wayfinding">way finding</a>. Poems help me see the world differently, to navigate thoughts. So too does navigation: every link is a bridge to a new place, to new thoughts. While the style is unconventional and less clear than traditional navigation bars, I love it. My home page brings me closer to poetry, and reminds me of my love of words.</p> <p>For the last few weeks, I have had an idea in the back of my mind: what if my home page poem had a few icons in the background that served as visual cues to different stanzas in the poem? These icons might make it easier to find particular sections of the poem. The would also add a more visual dimension to the poem. While poems are visual in themselves – the spaces between words and stanzas, indentations, the lengths of lines, the space the poem takes on a page, the typography used, and the symbols used, among other factors, all influence how we read a poem – images add a new dimension.</p> <p>One of the things I love most about the web is that I can ask myself “what would this look like?” and then, through code and tinkering, bring the idea to life. I spent some time this morning searching through <a href="https://phosphoricons.com/">Phosphor Icons</a>, an MIT-licensed icon set I use for, among other things, the icons in my mobile navigation bar. I decided on a flower for the first stanza, which speaks of stories and poems and ideas and joy, a notebook for the second, where my most recent blog posts are listed, and footsteps for the third stanza, which is more about navigation. I am not fully set on footsteps for the third stanza, as they don’t quite relate to the invitation to say hello at the beginning of the stanza. Indeed, part of the creative challenge of this concept is to find an image that matches many words.</p> <p>Here is what I designed:</p> <p><figure><picture><img alt="" loading="lazy" src="https://jamesg.blog/assets/uploads/iconhomepage.png" style=" max-width: 130%;"/></picture></figure></p> <p>Faint blue icons appear on alternating sides of each stanza: right, left, right. The icons are all at slight angles. An opacity is applied so that the icons do not stand out as much as the words in the poem. The icons complement the text in each stanza to varying extents.</p> <p>Thinking about the idea of adding images to a poem brought me back to a list I started curating in the last month of places where words exist next to images. Words appear on album covers as part of the art designed to represent the album. Words appear in front of or near images on book covers. In museums, words appear on some paintings (i.e. signatures, or even, in some cases, stories), next to art (i.e. on information plaques), below art (i.e. on a label on the frame of a painting), and more. Words and images, although separate modalities, appear together so often. Indeed, I have started to add more images to my home page that was originally all-text except for my website mascot; the images I have since added – two buttons – convey information in a way I can’t with words, but also serve as a complement to what is on the page.</p> <p>While I haven’t rolled out this design on my home page – and I’m not sure yet if I will – it has been interesting to explore the intersection of the visual and the textual in this way. Indeed, my poem also explores a third dimension – navigation – through the links it uses. It is fascinating to try and extend a literary medium with the affordances that hypertext allows. What if a poem revealed a piece of art every time you hovered over a stanza?</p> <p>My main reservation with the icon design is that it may distract from the words. But it also creates new visual anchors. There is a lot to think about.</p> <p>This crossing of disciplines relates to a conversation I had earlier this year with an uncle when I mentioned that I don’t think the sciences and the arts are disconnected, but rather are complementary. I can’t remember his exact words, but I was left feeling excited about how someone else also didn’t see them as separate buckets. Similarly, it is interesting to think of words and images not only in the context of each modality, but in the context of all the spaces in between. Indeed, we already have picture books, prose poetry, technical writing, visual communication, and many other forms that combine two concepts or traditions together.</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:'a38db58d9d2ea619',t:'MTc4OTAzNTcyMQ=='};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/2026/08/10/poems-as-wayfinding">way finding</a> <a class="tag" href="https://phosphoricons.com/">Phosphor Icons</a> A Year of Silksong - Joel's Log Files https://joelchrono.xyz/blog/a-year-of-silksong 2026-09-09T18:10:00.000Z joelchrono <p>It’s been a whole year now since <em>Hollow Knight: Silksong</em> finally released, and it has been a <em>delightful</em> journey.</p> <p>I wasn’t there for a lot of the hype around it, I was more than happy playing <a href="/blog/hollow-knight"><em>Hollow Knight</em></a> in the span of a year or so, and beat it only a few days after Silksong was finally released to the public on September 4, 2025, a day after I posted my review.</p> <p>I was perfectly aware of the meme though, and the time it took for this sequel to finally show up, so I was very clearly hyped, and I had decided that I would buy and start <em>Silksong</em> on the very first day, the first time I even considered doing something like that.</p> <p>Waiting in line is something I’ve never done. It has always been a bit of a dream of mine, to wait for a whole day behind the closed doors of a videogame shop, like those old videos on YouTube where people are camping for a whole night just to be among the first to get <em>Halo 2</em> for the Xbox back in the day, though in this case it would be a digital game I guess.</p> <p>Of course, we all know how that went. The servers on every single gaming platform were overwhelmed for hours, as people tried and failed to purchase this twenty dollar game. I was trying to get to it on the Nintendo Switch, but I failed to do so.</p> <p>Thankfully, I was actually at work, and I would have been unable to play the game immediately anyway, so I simply waited until later to purchase it and finally get started with it.</p> <p>The progress I’ve made so far in the span of a year has been… slow. I pick it up when I want and leave it be when I feel like trying something else. I’ve not pushed myself t play it when I don’t want to, and I have even abandoned it for months at a time, until things line up and I can return to it.</p> <p>Most of my progress has been consistently shared on a <a href="https://fosstodon.org/@joel/115148705875759493">long thread</a> that has been around since the game first came out, lots of screenshots and recordings can be seen of the most important steps of my journey through Pharloom.</p> <p>In case you somehow don’t know this, Silksong is a Metroidvania game with Soulslike elements, in case you don’t know what that means, you basically get lost in a world that is gated by hard to reach areas, so you have to get new powers that let you make progress. Oh, and you also have to fight against enemies and bosses that will kill you in three hits. Incredibly fun!</p> <p>At this point I could write a review for the game, but since I’m still going through Act 3, I want to finish that first too. Kind of funny considering I didn’t go through a lot of Hollow Knight, avoiding the Path of Pain and much of the DLC content, but well, things happen, I may even revisit that game later on.</p> <p>As of today, I have been playing this game for over 80 hours, making it the most played title in my Nintendo Switch, surpassing <em>The Hundred Line: Last Defense Academy</em>. Both games still have a bunch of playtime left for me to go through, so I am wondering how long it will be for me to get through it all.</p> <p>Of course, some titles like <em>Minecraft</em> and <em>Monster Hunter Freedom Unite</em> are still hundreds of hours ahead, but they are completely different and I’ve also played them for many years so they have a big advantage.</p> <p>Silksong is a triumph, something truly special that I am really happy to be a part of. Dare I say it’s the only game whose release date I have memorized! So of course I just wanted to yap a little bit about it.</p> <p>Definitely not a game for everyone, even after all the updates that have balanced some of the difficulty, but if you are up for a challenge, it is always worth a try!</p> <figure> <img src="/assets/img/blogs/2026-09-08-silksong.webp" /> <figcaption>Hollow Knight: Silksong, downloading on my Nintendo Switch, a year ago!</figcaption> </figure> <p>This is day 32 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=A Year of Silksong">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/117242545637607826">Reply on Fediverse</a> </p> Greyscale in Doodle Scan - Robb Knight • Posts • Atom Feed https://rknight.me/blog/greyscale-in-doodle-scan/ 2026-09-09T13:46:28.000Z Robb Knight <p>Last night I was reading <a href="https://kokorobot.ca/site/processing_analog_artwork.html">this excellent post</a> about scanning pencil artwork and the first step the artist mentioned is setting the pallette to greyscale. This made me realise how useful that would be on <a href="https://doodlescan.rknight.me">Doodle Scan</a> — the black and white mode is <em>good</em> but only in some circumstances where the drawing is just lines, greyscale would be much more useful for illustrations with colour or shading.</p> <p>Like all the other features on Doodle Scan, it wasn't immediately obvious to me how to do this. After some digging and experimenting with changing RGB values, I realised the <a href="https://www.w3.org/WAI/GL/wiki/Relative_luminance">relative luminance</a> value I use to check for if the colour is light or dark can be rounded with <code>Math.round</code> to get the value I need. So <code>253.123</code> becomes <code>253</code> and I set the RGB value of that pixel to <code>253,253,253</code>.</p> <p>Below are examples of the three colour modes with default settings from <a href="https://doodlescan.rknight.me">Doodle Scan</a> and if you want a drawing a bit like this or anything you want really you can <a href="/stjude">donate to St Jude</a>.</p> <figure><img src="https://cdn.rknight.me/site/2026/doodle-scan-jeff-colour.jpg" alt="A dinosaur on a skateboard with a red shirt, blue shorts, and a yellow box with 12 in the right corner" /><figcaption>Colour version</figcaption></figure> <figure><img src="https://cdn.rknight.me/site/2026/doodle-scan-jeff-greyscale.jpg" alt="A dinosaur on a skateboard with a grey shirt, grey shorts, and a grey box with 12 in the right corner" /><figcaption>Greyscale version</figcaption></figure> <figure><img src="https://cdn.rknight.me/site/2026/doodle-scan-jeff-bw.jpg" alt="A dinosaur on a skateboard with a shirt and shorts which are both black, and a black box with 12 in the right corner" /><figcaption>Black and white version</figcaption></figure> A “proof” of Fermat’s Last Theorem that fits the margin - Trail of Bits Blog https://blog.trailofbits.com/2026/09/09/a-proof-of-fermats-last-theorem-that-fits-the-margin/ 2026-09-09T11:00:00.000Z Trail of Bits Blog <p>Fermat famously claimed to have a “truly marvelous proof” of his <a href="https://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem">Last Theorem</a>, but he never wrote it down, insisting the margin of his page was too narrow to contain it. A few centuries later, Anthropic announced a complete <a href="https://www.anthropic.com/research/formalizing-fermats-last-theorem">formalization of Fermat’s Last Theorem using 13 million lines</a> of Lean code (clearly not what Fermat intended). Luckily, we found a wonderfully cursed <a href="https://github.com/leanprover/lean4/issues/14684">Lean bug</a>, shown below, that suggests the proof may have fit the margin after all. The issue affects all stable versions of Lean up to 4.33.1, and the patch is incorporated in v4.34.0-rc1.</p> <p> <figure> <img src="https://blog.trailofbits.com/2026/09/09/a-proof-of-fermats-last-theorem-that-fits-the-margin/proof-fermat-image_hu_f4c2a5f3789324fb.webp" alt="“Figure showing a “checked” proof of Fermat’s Last Theorem using Lean 4.33.1”" width="1200" height="677" loading="lazy" decoding="async" /> <figcaption>A “checked” proof of Fermat’s Last Theorem using Lean 4.33.1</figcaption> </figure> </p> <p>The blue checkmarks in the screenshot above would suggest that Lean considers this proof correct. This seems odd given the amount of work Sir Andrew Wiles put into this problem and the vast size of Claude’s proof. So what is going on?</p> <p>The “proof” clearly doesn’t make any sense and exploits an issue in Lean. We found the issue while using GPT-5.6 to experiment with a new skill for code review. We want to clarify up front that the issue is not a kernel <a href="https://github.com/leanprover/lean4/pull/14806">soundness issue</a>, but it happens to nicely fit any discussion of strings, lengths, and substrings.</p> <p>The issue affects <code>String.Pos.Raw.extract</code>, Lean’s low-level string-slicing function. When asked to extract a one-byte slice at an <a href="https://github.com/leanprover/lean4/blob/f3b06c705e6c85f5314019d5d3baab0fec5b580c/src/runtime/object.cpp#L2221-L2232">astronomically large position</a>, Lean’s <a href="https://github.com/leanprover/lean4/blob/f3b06c705e6c85f5314019d5d3baab0fec5b580c/src/Init/Data/String/Basic.lean#L3012-L3014">logical definition</a> returns <a href="https://github.com/leanprover/lean4/blob/f3b06c705e6c85f5314019d5d3baab0fec5b580c/src/Init/Data/String/Basic.lean#L3017">the empty string</a>. But the <a href="https://github.com/leanprover/lean4/blob/f3b06c705e6c85f5314019d5d3baab0fec5b580c/src/runtime/object.cpp#L2374">compiled native code</a> returns <a href="https://github.com/leanprover/lean4/blob/f3b06c705e6c85f5314019d5d3baab0fec5b580c/src/runtime/object.cpp#L2376">the entire original string</a>. That disagreement is enough to manufacture a contradiction. Lean’s ordinary evaluator “proves” that the tiny slice was empty, while native evaluation “proves” that the very same slice contained “a truly marvelous proof.” Put those together, and Lean concludes that the empty string equals a non-empty string. And once you have a contradiction, you can prove anything, including Fermat’s Last Theorem.</p> <p>On the bright side, the Lean team was considerably faster than mathematical history. About 90 minutes after we reported the issue, hargoniX opened a fix for the <a href="https://github.com/leanprover/lean4/pull/14687">memory-safety problem</a>, and it was merged roughly three hours after filing. The <a href="https://github.com/leanprover/lean4/pull/14717">remaining semantic mismatch</a> was fixed by Rob23oba five days after the report, closing the issue. We’d like to give a huge shoutout to hargoniX, Rob23oba, and the Lean team for the fast turnaround.</p> <p>As a reminder, when dealing with external proofs, follow Lean’s guidance for <a href="https://lean-lang.org/doc/reference/latest/ValidatingProofs/">validating a Lean proof</a>. In our proof-of-concept code above, <code>#print axioms flt</code> shows <code>'flt' depends on axioms: [propext, Classical.choice, Quot.sound, flt._native.native_decide.ax_1_1]</code>. The extra axiom <code>native_decide</code> adds the compiler to the trusted boundary, and therefore needs to be used with care. Machine-checked proofs will increasingly enable an unprecedented level of trust in mathematical results and critical software. However, more work is needed (e.g., <a href="https://github.com/digama0/lean4lean">lean4lean</a> and <a href="https://arena.lean-lang.org/">alternative kernel implementations</a>) to ensure that proofs aren’t deemed correct through exploitation of issues in theorem provers.</p> <p>Fermat’s theorem took 350+ years to prove. If you don’t want to wait that long for your code to be audited, <a href="https://trailofbits.com/contact/">contact us</a>.</p> JD CLI updated: now creates filesystem folders - Johnny.Decimal https://johnnydecimal.com/blog/0245-jd-cli-now-creates-folders/ 2026-09-09T07:35:50.000Z Johnny.Decimal <p>The <a href="https://johnnydecimal.com/jdhq/jd-cli">JD CLI</a> has been updated.</p> <p>It's migrated from using environment variables to the new <a href="https://johnnydecimal.com/jdhq/configuration">configuration file</a>.</p> <p>Now if you try to <code>jd 11.11</code> to a folder, and that folder doesn't exist, <em>and</em> your JDex is readable by the CLI – i.e. Markdown files on disk, i.e. Obsidian - then it'll create the folder for you.</p> <p>The <a href="https://johnnydecimal.com/jdhq/mcp-server">MCP server</a> has been updated to understand this tool and the configuration file. Just ask it to <code>help me install the jd cli</code>.</p> <p>Here's a short video walkthrough.</p> <div style="padding:56.25% 0 0 0;position:relative;"><iframe src="https://player.vimeo.com/video/1225173783?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="W0213 Navigate your filesystem faster with the JD CLI"></iframe></div> <h2 id="if-you-installed-the-cli-before-today">If you installed the CLI before today</h2> <ol> <li> <p>Pull:</p> <pre class="astro-code astro-code-themes catppuccin-latte synthwave-84" style="--shiki-light:#4c4f69;--shiki-dark:#bbbbbb;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#262335;overflow-x:auto" tabindex="0" data-language="sh"><code><span class="line"><span style="--shiki-light:#1E66F5;--shiki-light-font-style:italic;--shiki-dark:#FE4450;--shiki-dark-font-style:inherit">git</span><span style="--shiki-light:#40A02B;--shiki-dark:#F97E72"> -C</span><span style="--shiki-light:#40A02B;--shiki-dark:#BBBBBB"> ~/.jd/cli</span><span style="--shiki-light:#40A02B;--shiki-dark:#BBBBBB"> pull</span></span></code></pre> </li> <li> <p>In your <code>.zshrc</code> or <code>.bashrc</code>, find these lines. You might only have the first.</p> <pre class="astro-code astro-code-themes catppuccin-latte synthwave-84" style="--shiki-light:#4c4f69;--shiki-dark:#bbbbbb;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#262335;overflow-x:auto" tabindex="0" data-language="sh"><code><span class="line"><span style="--shiki-light:#D20F39;--shiki-light-font-style:italic;--shiki-dark:#36F9F6;--shiki-dark-font-style:inherit">source</span><span style="--shiki-light:#40A02B;--shiki-dark:#BBBBBB"> ~/.jd/cli/jd-nav/jd-nav.sh</span></span> <span class="line"><span style="--shiki-light:#D20F39;--shiki-light-font-style:italic;--shiki-dark:#36F9F6;--shiki-dark-font-style:inherit">source</span><span style="--shiki-light:#40A02B;--shiki-dark:#BBBBBB"> ~/.jd/cli/jd-prompt/jd-prompt.zsh</span></span></code></pre> </li> <li> <p>Replace them both with this line.</p> <pre class="astro-code astro-code-themes catppuccin-latte synthwave-84" style="--shiki-light:#4c4f69;--shiki-dark:#bbbbbb;--shiki-light-bg:#eff1f5;--shiki-dark-bg:#262335;overflow-x:auto" tabindex="0" data-language="sh"><code><span class="line"><span style="--shiki-light:#D20F39;--shiki-light-font-style:italic;--shiki-dark:#36F9F6;--shiki-dark-font-style:inherit">source</span><span style="--shiki-light:#40A02B;--shiki-dark:#BBBBBB"> ~/.jd/cli/jd.sh</span></span></code></pre> </li> <li> <p>Start a new shell.</p> </li> </ol> Second year - James' Coffee Blog https://jamesg.blog/2026/09/09/second-year 2026-09-09T00:00:00.000Z James' Coffee Blog <p>I woke up in excitement this morning. <em>Today is the day I can start to access my course materials for next year.</em> My second year of university doesn’t officially start for another few weeks, but from today I can start reading through the introductory material. I spent the morning reading about the structure of the year in the art history and creative writing modules that I am taking: the course overview, how assignments are structured, the referencing requirements (which are going to get more intense in art history in particular, because I will be citing more artworks), and more.</p> <p>I am writing this in the afternoon, when the excitement from this morning still has not waned. If anything, it has grown more intense. I am so excited for the next year. I started reading the introduction to my creative writing textbook and already started to feel challenged in exactly the way I want. The course overview for the art history module – <em>Art and life before 1800</em> – piqued my interest in several places. In October we’ll be starting with a block on <em>Art and its Environments</em>, where we’ll be studying landscapes and forests and snowscapes and more. I was just thinking yesterday how much I love snowscapes. I wonder what I will learn about them next year. Across all of the art history work for next year, I am especially interested in learning about the role art occupied in society through history, a key theme throughout all of the blocks we will study.</p> <p>In creative writing, the main focuses will be fiction, poetry, and life writing. I am excited for all of these areas. The course also touches on building a writing practice. While I write often anyway, I have already found the exercises in creative writing have pushed me in new ways. This is precisely what I want from studying: to challenge myself and grow my skills in areas that interest me. There will also be materials on professional publication, which, while not a goal I have right now, will surely be interesting.</p> <p>After I caught my breath after a morning of reading, I realised that my first year of university is essentially complete. It will be a few weeks before I get the results from my final assignment, but there is no more work to do for my first year. <em>I did it! I finished my first year!</em> It feels somewhat surreal for my first year to be over, but here we are. Time flies. I am proud of all the work I did in my first year, and am looking forward to the next one.</p> <p>My first year, which was structured as a foundation in the humanities with opportunities to start exploring the subject area(s) we found most interesting in more depth toward the end of the year, was a whirlwind through art history and creative writing and history and religious studies and more. Every week there was something new to study. I studied <em>Jane Eyre</em>, <em>Antigone</em>, the Benin bronzes, <em>Van Gogh</em>, the foundations of Buddhism, and more. While I was eager to get to the art history topics last year, I loved the approach my school took to covering a wide area. It was the inclusion of creative writing in my first year that helped me build more confidence in my writing, especially in fiction, and ultimately led me to change my degree from a sole focus on art history to studying both art history and creative writing. This combination feels right for me.</p> <p>Here’s to another year of studying!</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:'a386a60bfe9b2cae',t:'MTc4ODk2MTY4Ng=='};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> Less YouTube, Bandcamp Friday, Silksong returns - W36 - Joel's Log Files https://joelchrono.xyz/blog/w36 2026-09-08T21:50:00.000Z joelchrono <p>This was one of those weeks where I kind of expanded upon most of the main topics on their own blogposts already, so all I can do is summarize and share the links here! A couple extra things here and there too.</p> <p>Here’s some notes on what happened from September 1 to 7, 2026.</p> <ul> <li> <p>📺 I have decided to <a href="/blog/deleted-youtube-again/">limit my YouTube usage</a> to one hour per day on my phone. I used the <a href="https://unhook.app">Unhook</a> extension on both my phone and my computer, to remove the algorithmic feed and stick to subscriptions only.</p> </li> <li> <p>✂️ Unfortunately that also means I’ve had to cutdown on my Subscriptions! There were a lot of constant videos from certain types of channels that flood that page for some reason. I need to categorize a little more. Of course, I should also use YouTube as a search engine instead of relying on titles and thumbnails to grab my attention.</p> </li> <li> <p>🎙️ Thankfully, no YouTube means I have returned to a few podcasts to have in the background (or while walking) this week! Including <em>Revolutions</em> and <em>The Rest is History</em>.</p> </li> <li> <p>📰 Since I was already cleaning up my YouTube, I also spent some time checking my FreshRSS subscriptions and cleaning up some of the old ones. It is honestly kind of weird to have so many blogs I follow go 404 in the six or so years I’ve been around this bubble. I hope I can continue writing here for many more years.</p> </li> <li> <p>📱 A few weeks ago I switched away from <a href="https://kisslauncher.com">KISS Launcher</a>. My search for an ideal replacement is still undecided, right now I am switching between <a href="https://github.com/tanujnotes/Olauncher">OLauncher</a> and <a href="https://github.com/VaibhavLakhera/minimo-launcher">Minimo Launcher</a>, but I still miss KISS…</p> </li> <li> <p>📞 <a href="/blog/my-phone-number-does-not-work-anymore/">My phone line was blocked</a> by the government! This is a new measure taken to combat crime, by making every citizen in the country register themselves with their ID card and a bio-scan. I am still refusing to partake in this mess, by the way, I will write on some of that offline experience soon.</p> </li> <li> <p>📻 Bandcamp Friday happened! and I got myself a couple new purchases, some videogame soundtracks once again for some titles I have played, and one I have not!</p> <ul> <li><em>TOEM Original Game Soundtrack</em> by Jamal Green & Launchable Socks</li> <li><em>Dicey Dungeons Original Soundtrack</em> by Chipzel</li> <li><em>Neva Original Game Soundtrack</em> by Berlinist</li> </ul> </li> </ul> <figure> <img src="/assets/img/blogs/2026-09-08-week.webp" /> <figcaption>My 3DS with Fire Emblem Awakening, gameplay of Silksong and Party House, Coyote vs ACME's poster, and some leaves from a tree</figcaption> </figure> <h2 id="watching">Watching</h2> <ul> <li> <p><strong>Coyote vs ACME</strong> - This one was a great watch. Even as a kid of the 2000s, public TV channels in Mexico aired reruns of the original Looney Tunes for many, many years of my childhood. The Coyote and the Roadrunner were one of my favorite segments, and I’m incredibly happy to see how they used that concept and developed it here. This one gets my thumb of approval, it really managed to capture that nostalgia and use it for something truly awesome. Also the history behind the production of this movie is kind of crazy, and it even reflects on the themes of the movie itself, a must watch.</p> </li> <li> <p><strong>Ad Astra</strong> - I only watched this one partially, I will finish it today since my weeknotes are late. It’s a bit of a more serious Sci-Fi movie with a future humanity that is only starting to conquer the solar system, until some mysterious energy starts messing with electricity, ships and stations all over the place. It really reminded me of <em>Planetes</em>, featuring people born outside Earth, space terrorism and the like. The main plot focuses on Brad Pitt trying to find his missing Dad, Tommy Lee Jones, who was the best astronaut but went missing ages ago.</p> </li> </ul> <h2 id="reading">Reading</h2> <ul> <li> <p><strong>Blue Lock</strong> - Chapters 357-359. The match against England is proving to be rather interesting! With Blue Lock adopting a unique formation and Isagi trying to fit into it. The England team is a menace, a team that can’t be read or overcome in the same way that any other team has been before. It is kind of impressive to see that this far into the series.</p> </li> <li> <p><strong>My Wife is from a Thousand Years Ago</strong> - Chapters 287-288. Returned to this rom-com and it’s been pretty cozy and nice to read lately. The wedding feels closer than ever, and family shenanigans are happening too! But I still have 150+ chapters left so, we’ll see how it goes.</p> </li> <li> <p><strong>Spy x Family</strong> - Chapters 138-140. As reliable as ever, I love the humor and the dynamics of this manga. We returned to the Eden Academy and had some very fun and wholesome Anya moments there.</p> </li> <li> <p><strong>Centuria</strong> - Chapters 48-50. A bit of an unexpected battle ensued and a weapon is unveiled which is rather surprising. It is kind of epic!</p> </li> </ul> <h2 id="gaming">Gaming</h2> <ul> <li> <p><strong>Hollow Knight: Silksong</strong> - This game has gripped me all over again now that Act 3 has gotten started. The sequel to the beloved <em>Hollow Knight</em> continues to be an absolute masterpiece, and I’ll probably have to gush about it on a separate post, especially since it’s been a whole year since it’s release on September 4th, 2025. Looking forward to that! For now, I am looking for some Ant Queen boss or something like that, if what I hear of the rumors is true, there may be a super cool battle waiting for me.</p> </li> <li> <p><strong>Fire Emblem Awakening</strong> - After a little hiatus I finally decided to give attention to this game, and I have managed to make some decent progress on Chapter 19! unfortunately I ended up dying and having to reset. But well, now I know the truth. Besides the main story I also did the paralogue that unlocked Cynthia, the daughter of Somia, so I have another Pegasus Knight to level up! I still have a few relationships to develop though, we’ll see how it goes.</p> </li> <li><strong>UFO 50</strong> - On Sunday I had a bit of a fun time with a friend who visited my place. I don’t often get to do 2-player gaming so I decided to go for this one once more. We played a few interesting titles! Including: <ul> <li><strong>Party House</strong> - An awesome game about inviting people to your party, collecting popularity and money, and being able to host bigger and better parties, until you can fulfill an objective! There are a lot of mechanics and scenarios here, it’s a bit of a Deck-Building game, trying to invite certain people that have certain effects on your score and such. Incredibly fun and simple, I want it on my phone!</li> <li><strong>Pingolf</strong> - This is a very interesting 2D golf game with a bunch of courses to complete. It doesn’t have a lot of uniqueness going for it, but the aesthetics are great, the mechanics are very good and the score-chasing element will definitely make me return to it.</li> <li><strong>Lords of Diskonia</strong> - A turn-based game where your army is represented by pucks (like those from Air Hockey). The objective is to slide your pucks and hit enemies. Whoever pushes them off the map wins. Each chip has a certain amount of damage and some skills it can use! We only tried it once and had a fun time.</li> </ul> </li> <li><strong>Mario Party 3</strong> - We had an incomplete session with three friends that was going very well! One of them had to leave halfway through, which is why we switched to UFO 50. You can never go wrong with MP3!</li> </ul> <h2 id="around-the-web">Around the Web</h2> <h3 id="blog-posts">Blog Posts</h3> <ul> <li><a href="https://noisydeadlines.net/the-5-ws-of-reading?pk_campaign=rss-feed">The 5 Ws of Reading</a> - an interesting challenge for people who like reading books!</li> <li><a href="https://ljpuk.net/posts/lets-stop-buying-new-phones">Let’s stop buying new phones</a> - I couldn’t agree more, but I’m still tempted sometimes.</li> <li><a href="https://wrywriter.ca/posts/scifi-books-the-golden-oldies">SciFi Books: The Golden Oldies</a> - Jules Verne and H.G. Wells are an absolute must!</li> <li><a href="https://gabz.blog/posts/lets-talk-retro-doodads">Let’s talk retro doodads!</a> - Lots of cool gaming handheld emulators mentioned here, enjoy!</li> <li><a href="https://doserver.top/blog/my-last-few-weeks-in-germany/">My last few weeks in Germany</a> - lovely write-up from Daniel talking of his experience in another country and community.</li> </ul> <h3 id="youtube">YouTube</h3> <ul> <li><a href="https://youtu.be/SHWFnO7xR_E">The Golden Age of Mobile Gaming - Scott The Woz</a> - A trip down memory lane.</li> <li><a href="https://youtu.be/Ozqw1uAEDZc">How Rocky’s Models Were Made for Project Hail Mary</a> - Some cool practical props!</li> <li><a href="https://youtu.be/W5v_IrhO-1w">Why the Mariana Trench Still Terrifies Scientists</a> - Good documentary about sea exploration.</li> <li><a href="https://youtu.be/9mR4u1pFq2Q">What Edge of Tomorrow Understands About Aliens That Hollywood Doesn’t</a> - Cool monster design is cool.</li> </ul> <p>This is day 31 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Less YouTube, Bandcamp Friday, Silksong returns - W36">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/117237715852101381">Reply on Fediverse</a> </p> Note published on September 8, 2026 at 8:51 PM UTC - Molly White's activity feed 6aa0755152b01ca28c3ff467 2026-09-08T20:51:29.000Z Molly White <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>made some tiny stamps out of lino scraps to make labels for my jam jars</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/71df969c7b6c4c42b6ba_strawberry-lino.jpg" data-fslightbox=c7cd769a2a5934ab325d><img src="https://storage.mollywhite.net/micro/71df969c7b6c4c42b6ba_strawberry-lino.jpg" alt="Small (maybe 1.5" square) strawberry on a 4x6" white card. It's printed with a three-color multi-block lino (red base, green stem, black outline/seeds/shadows)" /></a></div></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202609081648"><time class="dt-published" datetime="2026-09-08T20:51:29+00:00" title="September 8, 2026 at 8:51 PM UTC">September 8, 2026 at 8:51 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117237395700207294" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3muzvn3yfsw2b" 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/art" title="See all micro posts tagged "art"" rel="category tag">art</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/linocut" title="See all micro posts tagged "linocut"" rel="category tag">linocut</a>. </div></div></footer></div></article> Your TV is spying on you, and it's worse than you think. - Werd I/O 6aa038e5425e470001c5f1cd 2026-09-08T16:33:41.000Z Werd I/O <p>Link: <a href="https://www.theverge.com/tech/991190/lg-tv-spying-standby-recording-wi-fi-scanning-gamers-nexus"><em>LG TVs caught spying even when offline or on standby, by Dominic Preston in The Verge</em></a></p><p><a href="https://www.theverge.com/tech/991190/lg-tv-spying-standby-recording-wi-fi-scanning-gamers-nexus">This is an enormous abuse of trust</a>:</p><blockquote>“LG smart TVs are almost constantly logging and uploading data about owners and their homes, even when offline or on standby mode. […] Packet captures showed the TVs scanning the local area network for nearby hardware like phones or smartwatches, as well as logging location data and details of nearby Wi-Fi networks, and feeding the information back to LG Ad Solutions. Perhaps more concerningly, the TVs were capable of recording microphone audio when in standby; this continued even after the TV was disconnected from the internet, with audio files stored offline and uploaded once a connection was restored.”</blockquote><p>Most households invite at least one television into their homes. It’s almost impossible to buy one without smart TV features; because most television shows are streamed over the internet these days, they’re usually online. You could leave the TV offline while connecting it to a separate box like an Apple TV, but it’ll keep nagging you to connect.</p><p>The contract should look like this: you pay for a TV and it shows you stuff. The idea that it will scan your local network for devices, determine what content you like to watch, and maybe even <em>listen to you using a built-in microphone</em> is not something that anybody signs up for. Someone somewhere at LG has been so incentivized to make a graph go up and to the right that they have decided that basic ethical tenets like privacy and transparency aren’t worth holding on to.</p><p>That’s particularly important in a world where the Department of Homeland Security has created <em>Minority Report</em>-style <a href="https://www.404media.co/a-secretive-dhs-predictive-policing-unit-is-analyzing-americans-financial-habits-and-pulling-them-over/">Predictive Intelligence Targeting Teams who instruct police to pull people over based on profiled data like their financial activity</a>, despite there being no evidence that they have committed a crime. Data from disparate sources is routinely bought by law enforcement and agencies like DHS in order to create these sorts of profiles; a connected TV in your home could easily contribute. Are you watching the wrong kind of content? Automatic Content Recognition could rat you out. Are the devices connected to your home network outside of the norm? Up goes a flag.</p><p>So that’s homes. But most offices have TVs installed somewhere, too. Consider that an installed smart TV could easily be snooping on network devices, content, and even video calls conducted over these screens. Some more sophisticated offices will have them set to a less privileged network or insist on them remaining offline; most will dutifully connect them up. The result is a live microphone and content recognition tech installed in newsrooms, universities, non-profits, and businesses around the country.</p><p>Manufacturers like LG can sell this data. They will likely argue that it keeps TV prices down – and maybe that’s true. But <a href="https://decrypt.co/377637/lg-tv-might-be-listening-even-when-off">this reporting comes after LG promised regulators in Texas to stop collecting viewing data without informed consent</a>; <a href="https://atlas21.com/gamers-nexus-says-lg-tvs-capture-audio-and-scan-networks/">there’s a second mic that may continue recording even when the main microphone setting has been turned off</a>. They’ve shown they cannot be trusted. This kind of invisible data gathering should be illegal. Nobody signed up to be spied on; they just want to watch TV.</p> ActivityPub - Is it worth defending against replay attacks and message/signature time skew? - Terence Eden’s Blog https://shkspr.mobi/blog/?p=74622 2026-09-08T11:34:51.000Z Terence Eden’s Blog <p>Here's a problem that I've found with <a href="https://gitlab.com/edent/activity-bot/">ActivityBot</a> - my little ActivityPub server. Sometimes it receives messages which were originally sent <em>months</em> ago. Why does that happen and is it risky to accept and process them?</p> <p>My tl;dr is that it <em>probably</em> isn't worth worrying about. But I'd love someone to tell me why I'm wrong.</p> <p>Here's my thinking:</p> <p></p><nav role="doc-toc"><menu><li><h2 id="table-of-contents"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#table-of-contents">Table of Contents</a></h2><menu><li><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#causes">Causes</a></li><li><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#is-that-a-problem">Is that a problem?</a></li><li><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#what-are-we-trying-to-protect-against">What are we trying to protect against?</a></li><li><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#putting-it-all-together">Putting it all together</a></li><li><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#no-youre-wrong-and-i-can-prove-it">No! You're wrong and I can prove it!</a></li></menu></li></menu></nav><p></p> <h2 id="causes"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#causes">Causes</a></h2> <p>All ActivityPub messages should have a "published" timestamp in their body. Some will have an "updated" timestamp. That tells you, unsurprisingly, when the message is alleged to have been originally published or updated. That time might be very different to the time you receive the message.</p> <p>There are, I think, three different reasons why a server might receive a message which has an out-of-date timestamp.</p> <p>The first is that sometimes servers are just slow. Processing thousands of messages at the same time means that some of those messages take a while to send. <a href="https://shkspr.mobi/blog/2023/09/how-far-did-my-post-go-on-the-fediverse/">ActivityPub is one big chain-mail</a> so it can take several minutes for a message to be sent to all your followers.</p> <p>Similarly, your server might be slow. If it doesn't acknowledge receipt of a message, the original server will try sending it again. Sometimes that can take a while.</p> <p>Finally, some servers take a relaxed view of standards. They send an update to an old message but keep the original publication date. Ideally, they'd use an "updated" timestamp but quite often they don't.</p> <p>For the purposes of checking the legitimacy of the message, <strong>you do not need to check when a message says it was published or updated</strong>. You might want to check it isn't an <em>obviously</em> bogus date like far in the future or impossibly far in the past - but that's up to you.</p> <p>It is normal that your server receives messages which appear to have been published at a totally different time from now.</p> <h2 id="is-that-a-problem"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#is-that-a-problem">Is that a problem?</a></h2> <p><em>Probably</em> not.</p> <p>As described above, there are various reasons why a message may be delayed in transit - or may appear to come from the distant past.</p> <p>What we <em>can</em> check is when the message was cryptographically signed by the sending server. This is independent of its published or updated timestamp.</p> <p>HTTP requests to your server will have a <code>date</code> header which looks like <code>Tue, 01 Sep 2026 15:54:21 GMT</code> - this is in the slightly peculiar and Anglocentric <a href="https://www.rfc-editor.org/info/rfc5322/#section-3.3">RFC 5322 format</a>.</p> <p>New style RFC 9421 headers will also have a <code>signature-input</code> header which will contain something like <code>created=1788278061</code>. That uses the slightly obscure <a href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_16">UNIX / POSIX time</a> which counts seconds since the "Epoch" of 1st January 1970.</p> <p>If you <a href="https://www.epochconverter.com/">convert the UNIX time</a> to something more modern, you should get an <em>identical</em> value to the <code>date</code> header.</p> <p>But that isn't always the case. For example, <a href="https://www.rfc-editor.org/rfc/rfc9421.html#:~:text=Tue%2C%2020%20Apr%202021%2002%3A07%3A55%20GMT,-Content%2DType">the RFC 9421 standard gives this example</a>:</p> <pre><code class="language-_">Date: Tue, 20 Apr 2021 02:07:55 GMT "@signature-params": ("@method" "@authority" "@path" \ "content-digest" "content-length" "content-type")\ ;created=1618884473;keyid="test-key-rsa-pss" </code></pre> <p>Converting <code>1618884473</code> to normal time gives Tue, 20 Apr 2021 02:07:<strong>53</strong> - a two second difference.</p> <p>If the <code>date</code> and <code>created</code> values differ significantly - that may indicate that the message is untrustworthy. Or that there was a delay between the signing and the sending.</p> <p>The spec says:</p> <blockquote><p>The Date header field value represents the timestamp of the HTTP message. However, the creation time of the signature itself is encoded in the created signature parameter. These two values can be different, depending on how the signature and the HTTP message are created and serialized. Applications processing signatures for valid time windows should use the created signature parameter for such calculations. An application could also put limits on how much skew there is between the Date field and the created signature parameter, in order to limit the application of a generated signature to different HTTP messages.</p> <p><a href="https://www.rfc-editor.org/rfc/rfc9421.html#section-7.2.4">7.2.4. Choosing Signature Parameters and Derived Components over HTTP Fields</a></p></blockquote> <p>But, of course, it doesn't tell you how much skew is problematic. It's up to you how much skew you're prepared to accept.</p> <p>So that's the difference between the sent time and the signed time. The next time to check is your own. As we've discussed, sometimes servers are slow sending things out. Would you accept a request that was signed five minutes ago? Five days ago? Five months ago? What amount of difference is dangerous?</p> <p>Here's what various services and sages have to say:</p> <h3 id="mastodon"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#mastodon">Mastodon</a></h3> <blockquote><p>The request contains a Date header. Compare it with current date and time within a reasonable time window to prevent replay attacks.</p> <p><a href="https://blog.joinmastodon.org/2018/07/how-to-make-friends-and-verify-requests/">How to make friends and verify requests</a></p></blockquote> <p>What is "reasonable"? The <a href="https://github.com/mastodon/mastodon/blob/89bc0eb42609463d4b11e1604dacc37332a0f5ab/app/lib/signed_request.rb#L5">source code</a> suggests one hour.</p> <h3 id="grishka"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#grishka">Grishka</a></h3> <blockquote><p>Time in the Date header must differ from the recipient server’s clock by no more than 30 seconds</p> <p><a href="https://grishka.me/blog/activitypub-from-scratch/">A bare-minimum ActivityPub server from scratch</a></p></blockquote> <h3 id="evan-prodromou"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#evan-prodromou">Evan Prodromou</a></h3> <blockquote><p><code>static #maxDateDiff = 5 * 60 * 1000 // 5 minutes</code></p> <p><a href="https://github.com/evanp/activitypub-bot/blob/main/lib%2Fhttpsignatureauthenticator.js#L8">activitypub-bot</a></p></blockquote> <h3 id="swicg"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#swicg">SWICG</a></h3> <blockquote><p>The standards don't give a concrete time window to use for this comparison. In practice, an hour plus a few minutes buffer in either direction may be a good value, to account for both clock skew and differences in time zone/daylight savings time configuration across systems.</p> <p><a href="https://swicg.github.io/activitypub-http-signature/#how-to-verify-a-signature">How To Verify a Signature</a></p></blockquote> <h3 id="others"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#others">Others</a></h3> <p>Without naming names, it looks like a bunch of popular servers don't check whether there's a significant difference between the date the request was signed and the date it was received.</p> <h3 id="summary"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#summary">Summary</a></h3> <p>Various documents and implementations recommend anything between 30 seconds to "a bit more than 60 minutes". Or they just ignore any date difference.</p> <p>What's the right answer? What happens if the signed date is significantly different from the current date?</p> <h2 id="what-are-we-trying-to-protect-against"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#what-are-we-trying-to-protect-against">What are we trying to protect against?</a></h2> <p>Replay Attacks. Suppose someone is listening to the communications between the sending server and your server. They copy the message that is sent to you. Later they send it again!</p> <p>At this point, you might be thinking "so what?" and… I'm inclined to agree with you!</p> <p>What's the worst that could happen if you received the same message multiple times? Two things that I can think of.</p> <p>Firstly, it might <em>not</em> be the same message. It is possible to send a new message but with old headers. An attacker could make someone post "I hate Taylor Swift" against their will and watch as legions of fans disembowel the victim.</p> <p>Except, I don't think this is likely. The signature in the header contains a hash of the message being sent. If you are properly validating the signature, a changed message will have a different hash from the one in the original message. You don't need to check timestamps, you just need to check if the hashes match.</p> <p>Secondly, <a href="https://www.freecodecamp.org/news/idempotence-explained">idempotence</a>. That's a fancy word for "pressing the button multiple times should only result in one action".</p> <p>What happens if a user appears to send you multiple "like" messages for a single post? You only record one like.</p> <p>What if they send multiple messages with the same content? Well, each will have a unique ID in the message - so you only post it once.</p> <p>What if they send multiple <em>anythings</em>? I can't think of any ActivityPub action which would not be idempotent.</p> <p>About the worst thing I can think of is this:</p> <ul> <li>Alice sends a message to you saying "I want to follow Bob".</li> <li>Mallory intercepts this message.</li> <li>You record Alice is now following Bob.</li> <li>Alice sends a message to you saying "I want to <em>unfollow</em> Bob".</li> <li>You record the severed relationship.</li> <li>Mallory replays the original follow message.</li> <li>You record Alice is now following Bob.</li> </ul> <p>It's also possible the following could happen:</p> <ul> <li>Alice posts a message saying "I love The Beatles".</li> <li>You record Alice's message and display it on the timeline.</li> <li>Alice updates her post to say "I love the Rolling Stones".</li> <li>Mallory intercepts this message.</li> <li>You record Alice's updated message and display the new version on the timeline.</li> <li>Alice updates her post yet again to say "I love the Spice Girls".</li> <li>You record Alice's updated message and display the new version on the timeline.</li> <li>Mallory replays the original update message.</li> <li>You now display that Alice loves the Stones rather than Spice Girls.</li> </ul> <p>Perhaps the same can happen with like/unlike, block/unblock, boost/unboost.</p> <p>But none of that is significantly prevented by checking the date.</p> <p>Ultimately, it is up to your sever to check the unique ID of each message and refuse to action any repeated messages. You may not want to trust the unique ID which is sent with the message. If that's the case, you can calculate your own - perhaps using a hash of the contents, the signature, or some other process which will generate an ID based on the message.</p> <h2 id="putting-it-all-together"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#putting-it-all-together">Putting it all together</a></h2> <p>Here's what you need to do to prevent replay attacks:</p> <ol> <li>Independently calculate the hash of the message received.</li> <li>Validate that your calculated hash matches the hash sent in the message's HTTP headers. <ul> <li>If not, this is a potential replay attack and the message must be ignored.</li> </ul></li> <li>Verify that the signature received in the message's HTTP headers includes the message hash and is cryptographically valid. <ul> <li>If not, the signature is invalid and the message must be ignored.</li> </ul></li> <li>Has the received message's unique ID already been processed? <ul> <li>If so, refuse to process it again.</li> </ul></li> </ol> <p>I don't see what checking the timestamp of the HTTP signature has to do with anything. Someone who has access to the original messages and their headers could send them milliseconds after the original delivery.</p> <p>I think it is probably <em>pragmatic</em> to give messages 60ish minutes grace before dropping them. Delays happen, but anything more significant than an hour <em>might</em> indicate a attack. But, equally, might just mean that the Internet is having a slow day.</p> <p>If you are correctly checking signatures and hashes, I don't think you need to worry about skew between signature date and delivery date.</p> <h2 id="no-youre-wrong-and-i-can-prove-it"><a href="https://shkspr.mobi/blog/2026/09/activitypub-is-it-worth-defending-against-replay-attacks-and-message-signature-time-skew/#no-youre-wrong-and-i-can-prove-it">No! You're wrong and I can prove it!</a></h2> <p>Please tell me where I have erred! Stick a comment in the box or drop me an email. If I've made a massive or subtle mistake, I'd love to know what.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=74622&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Wonders of Web Weaving, Episode 18 - James' Coffee Blog https://jamesg.blog/2026/09/08/www-18 2026-09-08T00:00:00.000Z James' Coffee Blog <p><a href="https://web-weaving.jamesg.blog">The eighteenth episode of Wonders of Web Weaving is out</a>:</p> <blockquote> <p>In Episode 18, I chat with <a href="https://avas.space">Ava</a>, the author of <a href="https://blog.avas.space">blog.avas.space</a> about, among other things, data protection and privacy, consent in the context of privacy, the armchair of great blogging, 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:'a37c3a95486ff0a4',t:'MTc4ODg1MjQyNw=='};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://avas.space">Ava</a> <a class="tag" href="https://blog.avas.space">blog.avas.space</a> <a class="tag" href="https://web-weaving.jamesg.blog">The eighteenth 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>