Shellsharks Blogroll - BlogFlock 2026-08-24T23:34:55.899Z BlogFlock Adepts of 0xCC, destructured, Aaron Parecki, fLaMEd, Trail of Bits Blog, Westenberg, James' Coffee Blog, gynvael.coldwind//vx.log (pl), joelchrono, Evan Boehs, Kev Quirk, cool-as-heck, Posts feed, Sophie Koonin, <span>Songs</span> on the Security of Networks, cmdr-nova@internet:~$, Werd I/O, Johnny.Decimal, Robb Knight, Molly White, Hey, it's Jason!, Terence Eden’s Blog Why do audience members choose specific shows at the Edinburgh Fringe? - Terence Eden’s Blog https://shkspr.mobi/blog/?p=74330 2026-08-24T11:34:45.000Z <p>On our <a href="https://shkspr.mobi/blog/2026/08/thoughts-on-the-edinburgh-fringe-as-a-newbie/">recent trip to the Edinburgh Fringe</a>, I was bemused by just how little effort performers put in to finding out <em>why</em> people had selected their show. Taking a show to the Edinburgh Fringe is ridiculously expensive with <a href="https://www.scotsman.com/business/edinburgh-festival-fringe-2025-the-true-cost-of-performing-at-the-worlds-largest-arts-event-laid-bare-5247134">some performers paying tens of thousands of pounds</a>. The way performers recoup the costs of performing is by getting people to pay to see a show.</p> <p>Acts are spending huge amounts on flyers, posters, and other promotional activities. But is any of it worthwhile?</p> <p>The performer Danielle Solof has a fascinating blog post "<a href="https://daniellesolof.substack.com/p/my-real-fringe-budgets-line-by-line">My Real Fringe Budgets, Line-by-Line</a>" which details the actual costs of her taking two solo shows to the Fringe. She meticulously details the price of everything from transport and food, to advertising and graphic design. She says:</p> <blockquote><p>I paid for outdoor ads because absolutely no one in Edinburgh knew who I was. They <em>did</em> help, but you still have to grind to get an audience in.</p></blockquote> <p>My question to her - and all performers - is how do you know what drives an audience member to see your show?</p> <p>It can't have escaped your attention that everything we do online is tracked. If you buy so much as a toothpick, the retailer knows which YouTube reviews you watched, which words you searched for, the other products you considered, and the specific adverts you clicked on.</p> <p>In Edinburgh, no one knows nothing.</p> <p>At the end of nearly every show the performer begged us to leave a review on the Fringe website and to tell our friends. In absolutely <em>none</em> of the shows did the performer ask why we were there, how we found out about the show, which poster or leaflet attracted us, or whether we followed them on social media.</p> <p>All that money spent on posters and no one knows if they work. As the old saying goes "<a href="https://quoteinvestigator.com/2022/04/11/advertising/">Half the money I spend on advertising is wasted, and the trouble is I don’t know which half.</a>".</p> <p>So, in an attempt to bring a <em>little</em> data to proceedings, here are how we chose the 26 shows we saw. I don't claim this is representative of everyone, but I think it might be illustrative. In rough order of importance were:</p> <h2 id="proximity"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#proximity">Proximity</a></h2> <p>The EdFringe app has a "nearby now" feature. Click on it and you get a list of shows starting soon which are only staggering distance away.</p> <p>I cannot stress enough how much of a motivator that was. When you've spent all day traipsing, the last thing you want to do is <em>another</em> 20 minute walk uphill to see a provocative new piece of challenging theatre told through finger puppets.</p> <p>About 20% of the shows we saw were via that feature.</p> <p>Roughly another 40% were because the show was close to something else we really wanted to see. We knew that we wanted to see show X, so we looked for shows which weren't too far away from that venue. Yes, Edinburgh is a compact city with decent public transport, but it is much easier to walk round the corner or stay to have a drink in the venue's bar.</p> <p>You can <em>really</em> want to see a show, but if it is a 20 minute walk between venues and it starts 15 minutes after your last show ends, you'll skip it. I'd say that location was the key driver in most of our choices.</p> <p>I guess my top tip to any performer would be to be as near as physically possible to a bigger act!</p> <h2 id="friends"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#friends">Friends</a></h2> <p>A quarter of the shows we went to were because either a friend-of-a-friend was performing, or a friend booked tickets and asked if we wanted to tag along.</p> <p>You are morally obliged to go to your friends' shows. Similarly, if a mate says "Oh, my friend has a show on this year", you have to make the effort to go.</p> <p>Perhaps it is a bit blasé to say that word-of-mouth works, but it's a cliché becausé it is trué.</p> <h2 id="flyers-and-leaflets"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#flyers-and-leaflets">Flyers and Leaflets</a></h2> <p>We collected approximately 5,374 different promotional leaflets during our week there. Most of the time we were handed a leaflet by someone paid to hand out leaflets. They were either wordlessly stuffed into our hands, or delivered with a monotone "wanna see improv comdy?" Bleh.</p> <p>A few actually spoke to us about the show when we asked questions, which was a deciding factor in seeing a couple of performances.</p> <p>The best flyerers were, undoubtedly, the performers themselves. Kat Ronson in her <a href="https://shkspr.mobi/blog/2026/08/edinburgh-fringe-kat-ronson-millennial-girl/">Millennial Girl</a> guise drawled at us "You look thin and pretty. You're allowed to come to my show." Instant sale!</p> <p>Similarly, one rather famous comedian walked up to us and said "You look like theatre people!" and proceeded to pitch their show - which was a delightful encounter and would have sold us a ticket if we weren't leaving that day.</p> <p>Some flyers had a QR code or URl on them so we could watch a trailer of the show. We didn't watch any of them. Perhaps we should have?</p> <h2 id="posters"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#posters">Posters</a></h2> <p>Surprisingly effective at drawing the eye! The ones which were just a photo of the comedian looking a bit "whacky" were dull. The ones of performers in their most seductive poses were a little naff. The ones which were just a close up of someone's face only really work if that person is incredibly famous, otherwise you're just left thinking "who?"</p> <p>But a few posters made us stop and immediately search for the show. Graphic design is a professional skill and one worth investing in.</p> <p>Some posters were everywhere. I took an instant (and uncharitable) dislike to one poster featuring a smug-looking twat and I swear he followed me around town. Some posters only appeared near the performance venue.</p> <p>Incidentally, there were a couple of posters which had clearly just been fed into an AI generator. Lazy and off-putting.</p> <h2 id="reviews"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#reviews">Reviews</a></h2> <p>The Fringe doesn't allow weighted star reviews - so you can't immediately see if the consensus is that the show is a hit or a miss. Several of the shows we didn't enjoy got excellent reviews (from morons) and some of the shows we loved were panned (presumably by the same morons).</p> <p>In truth, I don't think the reviews influenced our decision to see anything.</p> <h2 id="what-stopped-us-going-to-shows"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#what-stopped-us-going-to-shows">What <em>Stopped</em> Us Going To Shows</a></h2> <p>For every action there is an equal and opposite reaction. I think it is important for performers to know what stopped someone clicking the "buy" button for their show.</p> <h3 id="ticket-cost-value-for-money"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#ticket-cost-value-for-money">Ticket Cost / Value For Money</a></h3> <p>Mondays and Tuesdays saw lots of shows doing a 2-for-1 promotion. I didn't mind spending £30 for two of us to take a risk on something. Come Wednesday, I wasn't prepared to pay £60 for a 45 minute show.</p> <p>I know "surge pricing" gets a bad rap, but <a href="https://shkspr.mobi/blog/2024/09/why-does-no-one-discuss-negative-dynamic-pricing/">dynamic pricing of underselling shows</a> might help. If you've only sold four seats for today, perhaps drop the price? I don't know if the Fringe software supports that - but it seems obvious to me that having 10 people paying a fiver is better than four people paying a tenner.</p> <h3 id="crap-signal-long-queues"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#crap-signal-long-queues">Crap Signal / Long Queues</a></h3> <p>We tried to get in to a circus show. My phone didn't have enough signal for the app to work and the nearest box office had a massive queue. So we bailed.</p> <p>If the venue had WiFi (not a given, weirdly) it would have gotten them an extra sale. If the ticket staff could take contactless (lots of performers did) we'd have happily paid.</p> <p>You have to make it easy for people to give you money.</p> <h3 id="not-enough-time"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#not-enough-time">Not Enough Time</a></h3> <p>This is completely out of the performers' control. We had 6 days and saw about 4 shows per day. We could have seen more, but we needed to eat, explore, and sleep.</p> <p>Speaking of which, there were several midnight performances which looked excellent - but I also needed to get up the next day to see more shows. Sleep won!</p> <h3 id="too-famous"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#too-famous">Too Famous</a></h3> <p>I'd love to see that guy who's on the telly. But I can watch him on the telly. That show looks like a massive success, so I'm sure it'll tour round London soon.</p> <h3 id="sell-outs"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#sell-outs">Sell Outs</a></h3> <p>A few shows sold out before we could get tickets. Good for them! If that was your show, you probably don't need this blog post.</p> <h2 id="better-art-through-commerce"><a href="https://shkspr.mobi/blog/2026/08/why-do-audience-members-choose-specific-shows-at-the-edinburgh-fringe/#better-art-through-commerce">Better Art Through Commerce</a></h2> <p>Art should be driven by passion.</p> <p>But every performer I know listens back to their shows to see what works and what didn't. If a joke falls flat, it's cut. If a riff gets a big laugh, it's incorporated. That's the essence of data driven decision making.</p> <p>I wish every performer at the Fringe had a sell out audience and were able to recoup their costs. But that is never going to happen unless they spend time understanding what gets bums on seats.</p> <p>So here are a few scattered thoughts on how they could do that.</p> <ul> <li>QR code at the end of the show leading to a survey. Literally ask people "what made you choose this performance?"</li> <li>In the queue before the show, or as people are taking their seats, hand out a paper questionnaire.</li> <li>Talk to the audience after the show. See if you can gain any insights about what made them attend.</li> <li>As people are coming in, have a poster asking people to tick a box based on how they heard about the show.</li> <li>Give each leaflet a unique code (or a code per person handing them out). Ask people to bring the leaflet with them so you can see which area/person/leaflet was most effective.</li> <li>Each poster can have a unique QR code on it. Track whether the one by the station led to more ticket sales than the one in the underpass. Did the one in the gents toilets get <em>any</em> scans at all?</li> </ul> <p>Of course, all of the above rely on talking to people who made the choice to see you. This is classic <a href="https://en.wikipedia.org/wiki/Survivorship_bias">Survivorship Bias</a>. Sure, it'll help you work out what was <em>successful</em>, but you won't know why people looked at your show and chose something else. That said, it is <em>hard</em>. How do you find people who <i lang="la">ipso facto</i> aren't at your show?</p> <ul> <li>That could be as simple as asking people what they dislike about the leaflet when you hand it out.</li> <li>Each poster or leaflet can have a unique QR code on it. Which ones cause people to scan, but then abandon the idea of buying a ticket?</li> <li>Speak to people who came to the venue for a show other than yours. They obviously like the location, so non-confrontationally ask them why they didn't pick you?</li> </ul> <p>Some of these are easier than others. By themselves, they might give you a slightly misleading view of the data. But surely anything is better than looking at a half empty venue and wondering if those huge advertising costs did any good at all.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=74330&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 2026-08-24 11:01: A friend asked for help setting up a blog, so I went with #Pureblog (obviously).... - Kev Quirk https://kevquirk.com/2026-08-24-1101 2026-08-24T10:01:00.000Z <p>A friend asked for help setting up a blog, so I went with #Pureblog (obviously).</p> <p>We went from nothing to fully working blog, with <strong>all</strong> the customisations she wanted in about 25 minutes.</p> <p>I know I'm bias, but I love how flexible and powerful Pure Blog is becoming.</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-08-24%2011%3A01">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-08-24-1101#comments">leave a comment</a>.</p> </div> First moments - James' Coffee Blog https://jamesg.blog/2026/08/24/first-moments 2026-08-24T00:00:00.000Z <p>When I got out of bed this morning, I felt a chill from the autumn air that had been flowing through the room since yesterday evening. The air was cooled by midnight and would soon be warmed by the burgeoning sun rising over the hills. The seasons are changing. I can feel it.</p><p>I opened the window and looked onto the white horizon sky; so intense was the white sky it took me a few moments to notice the faint blues that were already above me and extended across most of the rest of the sky. I love this time of year, when I wake up closer to the sunrise now that it happens a bit later in the morning. The sunlight illuminated the rusty leaves on the tips of a tree outside, a tree still green in its core but, like all trees, starting to change as summer becomes autumn.</p><p>I thought about the first moments of the day. I found great joy in looking out the window for the first time this morning, the same joy as I feel every time I see the sun rise. I revelled in noting the sights and feelings and sounds of the first moments of the day – of seeing the sunrise, feeling the chill in the air, and hearing pouring the boiling water from the kettle into my favourite tea cup, of feeling the warmth of the tea as I cusped my hands around the cosy cup, of enjoying all the light coming through the windows, of appreciating how green the hills are at this time in the morning.</p><p>With every step, illuminated by daylight, thinking about how every day is new, I felt ever more ready for the day ahead.</p><script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a300da18bd94f0b4',t:'MTc4NzU1ODcyNg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> Dungeon Crawler Carl - Kev Quirk https://kevquirk.com/dungeon-crawler-carl 2026-08-23T12:03:00.000Z <div class="book card"><h2>Dungeon Crawler Carl</h2><p><b>Author:</b> Matt Dinniman<br><b>Genre:</b> Fantast, Sci-fi<br><b>Released:</b> 2020<br><b>Rating:</b> <span class="star-rating"><span class="star-rating" aria-label="5/5 ★★★★★">★★★★★</span></span></p><p>You know what’s worse than breaking up with your girlfriend? Being stuck with her prize-winning show cat. And you know what’s worse than that? An alien invasion, the destruction of all man-made structures on Earth, and the systematic exploitation of all the survivors for a sadistic intergalactic game show. That’s what.</p> <p>Join Coast Guard vet Carl and his ex-girlfriend’s cat, Princess Donut, as they try to survive the end of the world—or just get to the next level—in a video game–like, trap-filled fantasy dungeon. A dungeon that’s actually the set of a reality television show with countless viewers across the galaxy. Exploding goblins. Magical potions. Deadly, drug-dealing llamas. This ain’t your ordinary game show.</p> <p>Welcome, Crawler. Welcome to the Dungeon. Survival is optional. Keeping the viewers entertained is not.</p><p><a class="button" target="_blank" href="https://www.goodreads.com/book/show/211721806-dungeon-crawler-carl">Learn more on Goodreads ➡</a></p></div> <hr> <p>Started reading this book after a couple of friends in work recommended it to me. Couldn't put it down and read it in a couple days. I've gone straight onto the next book in the series, and I'm really looking forward to seeing where it goes.</p> <p>The book has <em>Hitchhiker's Guide To The Galaxy</em> vibes in that it doesn't take itself too seriously, and is a lot of fun to read. Highly recommended.</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=Dungeon%20Crawler%20Carl">reply to this post by email</a>, or <a href="https://kevquirk.com/dungeon-crawler-carl#comments">leave a comment</a>.</p> </div> Death to px, long live ch! - Terence Eden’s Blog https://shkspr.mobi/blog/?p=63847 2026-08-23T11:34:52.000Z <p>Pixels are a lie. Even if you think you're drawing something with "<a href="https://shkspr.mobi/blog/2018/11/the-myth-of-the-pixel-perfect-grid/">pixel perfect</a>" accuracy, your monitor is lying to you. There is no grid of platonically perfect squares.</p> <p>In CSS, <a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics/Values_and_units#lengths">pixels are a double lie</a>:</p> <blockquote><p>Note that <code>1px</code> doesn't necessarily equal one physical device pixel. On HD displays, it may span multiple physical pixels. Similarly, <code>1cm</code> in CSS often doesn't correspond to one hundredth of SI meter. On a large TV screen, it typically is longer than that. The lengths are perceptual: <code>16px</code> looks roughly the same on a phone, laptop, or TV screen at typical viewing distance.</p></blockquote> <p>This blog is primarily text based. I want the <a href="https://journals.uc.edu/index.php/vl/article/view/5765/4629">width of the text to be readable</a> for the average human. So, rather than setting the main width to be a percentage of the screen, I set it based on character width using the <code>ch</code> unit - which <a href="https://meyerweb.com/eric/thoughts/2018/06/28/what-is-the-css-ch-unit/">isn't exactly a character</a> but good enough for my purposes:</p> <pre><code class="language-css">--width-content: min(75ch, 100%); main { max-width: var(--width-content); } </code></pre> <p>When it comes to padding and margins, the same is true. If I want a gap around an element, I want that gap to be in proportion to the text inside it.</p> <p>For widths, it makes sense to re-use the <code>ch</code> unit. I want the gap to be in proportion to the text.</p> <p>But for <em>height</em>, perhaps it doesn't make sense to express vertical distance on character width? In which case <a href="https://www.w3.org/Style/Examples/007/units.en.html">the <code>ex</code> unit can be used</a>. It is the size of a typical lower-case letter.</p> <p>Just like my idea to <a href="https://shkspr.mobi/blog/2025/09/class-warfare-can-i-eliminate-css-classes-from-my-html/">eliminate CSS classes from my HTML</a>, it's possible to go too far with this. I haven't changed <em>every</em> reference from em to ch, I'm just experimenting to see if it works.</p> <p>There's nothing wrong, immoral, or evil about using px - or any other measure unit. Using ch and ex fit with my particular proclivities.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=63847&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Automated organisation is here - Johnny.Decimal https://johnnydecimal.com/blog/0242-automated-organisation-is-here/ 2026-08-23T04:12:30.000Z <blockquote> <p>Originally sent to the <a href="https://johnnydecimal.com/support/contact-community/mailing-list-rss-social">mailing list</a>.</p> </blockquote> <p>The last of the week&#39;s big updates is that you can now connect your AI to Johnny.Decimal. Now Claude or ChatGPT or whatever else you use has access to:</p> <ul> <li>The site documentation, blog posts, and 5+ years of my forum posts. <ul> <li>So it can give you advice on the system and how it should be used.</li> </ul> </li> <li>The Life Admin and Small Business Systems – all 50,000+ words of explanatory text, exceptions, examples. <ul> <li>So it can tell you where to file stuff.</li> </ul> </li> <li>The Workbook process <ul> <li>So you can build your own system.</li> </ul> </li> <li>Transcripts of all of our videos. <ul> <li>So it can point you to a specific video that answers your question.</li> </ul> </li> </ul> <p>Your existing Pro account just got an upgrade: all of this just works for you, today. To read the SBS, you need a Business account. Free and Personal accounts can read the documentation including the Workbook. (Get a free account on <a href="https://johnnydecimal.com/">the home page</a>. Upgrade your account at <a href="https://johnnydecimal.com/products">Products</a>.)</p> <p>I can ask it a question about planning a new range of banana-coloured clothing and it can map it out in the Small Business System.</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="Screenshot of Claude's response to my banana clothing question. It shows me which parts of the SBS I need to use, and recommends starting with a Work Package." height="447" loading="lazy" src="https://johnnydecimal.com/blog/0242A_Claude_response_to_banana-1334x894@2x.png" width="667"> </picture> </figure> <p>Using your tool&#39;s &#39;cowork&#39; feature you can connect it to your local filesystem and JDex. Now you can ask it questions about your own data. Here, it correctly notes that I&#39;ve deviated from our published advice on filing receipts! I&#39;ll update that guidance in the Small Business System…</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="Screenshot of Claude's response to my receipt question. It's read my local disk and tells me that I am up-to-date with my receipt filing." height="450" loading="lazy" src="https://johnnydecimal.com/blog/0242B_Claude_response_to_receipt_query-1316x900@2x.png" width="658"> </picture> </figure> <h2 id="automated-organisation-is-here">Automated organisation is here</h2> <p>This is the beginning of truly automated organisation. Point Claude at your downloads folder and it&#39;ll tell you what needs filing, and where it should go.</p> <p>I find myself not doing that, if I&#39;m honest. I like knowing where my stuff goes: and Johnny.Decimal makes it easy anyway. I&#39;m still faster than Claude at filing my receipts.</p> <p>I <em>have</em> found that working with Claude in a very structured environment is a revelation. The other day I had it write a script to monitor my Obsidian vault for conflicts. Now when me and Lucy edit a file at the same time it sends me a Telegram alert. Magic.</p> <p>This is the future: we&#39;ll all write our own custom utilities to help us stay on top of stuff. But that script … where is it? <em>It still has to be somewhere</em>. Having Claude connected to my JDex means I can tell it to &quot;document the script at <strong>23.12</strong>&quot; (my ID for Obsidian, as a tool in my business) and it does that, wiki-linking to <strong>14.11+ Curium</strong> (the server the script runs on).</p> <p>Having these short, consistent, unambiguous numbers that I can use to refer to anything in my life or business is proving to be a superpower. I can&#39;t imagine working without them.</p> <h2 id="how-to-connect">How to connect</h2> <p>This is documented at the <a href="https://johnnydecimal.com/jdhq/mcp-server">MCP server</a> page. Updates will be published there, and on the blog.</p> <p><a href="https://johnnydecimal.com/video/1220522887">Here&#39;s a 10-minute video</a> showing you how to connect your agent to the server. This is still young technology, so it&#39;s a bit of a fussy setup. If you need a hand, use the <a href="https://forum.johnnydecimal.com/t/mcp-server-support-post/2955">MCP server support post on the forum</a> or in the <a href="https://discord.com/channels/822215537589354566/1490248270813986986">#AI channel on Discord</a>.</p> <h2 id="also-see-the-skills-and-config">Also see the skills and config</h2> <p>The server works great with my <a href="https://johnnydecimal.com/jdhq/agent-skills">agent skills</a>, and they in turn work well with the <a href="https://johnnydecimal.com/jdhq/configuration">new configuration file</a>.</p> <h2 id="lots-more-coming">Lots more coming</h2> <p>We think we&#39;re going to record a &#39;Learn with Lucy – AI&#39; series. She has no idea how this works, and she&#39;d like to. We&#39;d like to show you how you can use these tools safely and effectively to manage your life and business. No hype, just useful advice. Let us know what you need.</p> <p>This will all appear on your Pro account as it&#39;s released. <a href="https://johnnydecimal.com/products">Buy it once</a>, and we&#39;ll keep making it more valuable.</p> <h2 id="privacy">Privacy</h2> <p>I say it on that page, and in the video, and I want to reinforce it here. When you connect to an MCP server – any MCP server – <strong>your agent necessarily has to send that server some of your data</strong> so that the server knows what to send back. And of course the server knows who you are, because you&#39;re authenticated to it.</p> <p><strong>I do not and will never log any of this data</strong>. It hits my server, a function responds, and nothing personal is ever saved, logged, or viewed by me. Not your user ID, name, email, IP address, or any of the text that your agent sent.</p> <p>I log exactly two things: the name of the agent (e.g. <em>claude-code/2.1.240</em>) and the name of my tool that was called (e.g. <em>list_documentation</em>). This helps me troubleshoot connectivity issues.</p> <p>When you connect to an MCP server the dialog says &quot;ensure that you trust the owner of this server&quot;. That is absolutely the case: you need to trust me. If you don&#39;t, don&#39;t use the server.</p> <h2 id="">🇯🇵🚅🐄</h2> <p>Big week! We&#39;re going on a trip to Hokkaido, Japan tomorrow. We get to go on the Hayabusa Shinkansen, then I plan on eating my own weight in dairy products. :-)</p> <p>j.</p> Organising physical artefacts - James' Coffee Blog https://jamesg.blog/2026/08/23/organising-physical-artefacts 2026-08-23T00:00:00.000Z <p>I love admiring spaces and thinking about how they work but, when it comes to the physical spaces I use most or every day – my bedroom, my desk, my bookshelves – I haven’t spent as much time thinking about decoration. When an environment functions, I don’t often think about how I can make it beautiful. Indeed, I have never been particularly adept at decorating. </p><p>This evening I had a discussion about organising mementos from trips: museum maps and guidebooks, and all the other little things I have picked up that I don’t already keep in my scrapbook. I have a paper bag from the British Museum in which I keep my museum maps and other paraphernalia, but it isn’t particularly organised; indeed, despite being red, I seldom look through the bag.</p><p>This has me thinking about how I can keep some of my physical collectibles – zines, museum maps, clippings, and everything in between – more organised. I made a few immediate choices: to get a letter rack for my zines, to get a new scrapbook because my current one is full. But I would like to do more.</p><p>As I said to my friends, somewhat inelegantly but spoken from the heart: “I don’t want to keep all these memories in a bag.” One suggestion was to get a pinboard, which I love. I may also look through my museum maps and order them, so that at least I can remember what I have so I can decide what to do next. I would love for the maps not to be sitting in a paper bag, but to be part of something else. Maybe I could have a space on my bookshelf dedicated to museum maps? (I really need another bookshelf too!)</p><p>One thing I love about bookshelves is that all the titles are visible. I can look to my bookshelf and be proud that I have read Moby Dick even though it took a long time, and look at my anime and think about for how many hours and days a particular series has kept me entertained, or to look at my art books and know I can pick one up at any time and look at pictures that will undoubtably make me think. I can recall the memories associated with each book or series. I would like this for physical paraphernalia too. Having shelf space might be just what I need, and a corkboard too.</p><p>I love that I can curate bookshelves: by subject, by theme, by space. The more I write the more I realise this is what I want to do with physical paraphernalia too. I also want to move the zines I have made from where they are stored, on a shelf I don’t often look at, onto my main bookshelf, to elevate them in my space because I am proud of making them.</p><p>How do you organise physical artefacts you have collected? I would love inspiration! If you have any ideas, please feel free to <a href="https://jamesg.blog/email">email me</a>.</p><script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a2fd23346d09321a',t:'MTc4NzUxOTc3Nw=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://jamesg.blog/email">email me</a> Finished reading The Last Devil to Die - Molly White's activity feed 6a8b2d9491f30f1ebee9c3ea 2026-08-22T04:29:11.000Z <article class="entry h-entry hentry"><header><div class="description">Finished reading: </div></header><div class="content e-content"><div class="book h-entry hentry"><a class="book-cover-link" href="https://www.mollywhite.net/reading/books?search=The%20Last%20Devil%20to%20Die"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1680740298i/62226126.jpg" alt="Cover image of The Last Devil to Die" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Thursday Murder Club</i> series, book <span class="series-number">4</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">The Last Devil to Die</i> </div><div class="byline">by <span class="p-author h-card">Richard Osman</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2023">2023</time>. 421 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-08-19">August 19, 2026</time>; completed August 21, 2026. </div></div></div></div></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-08-22T04:29:11+00:00" title="August 22, 2026 at 4:29 AM UTC">August 22, 2026 at 4:29 AM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=crime" title="See all books tagged "crime"" rel="category tag">crime</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=humor" title="See all books tagged "humor"" rel="category tag">humor</a>, <a class="tag p-category" href="https://www.mollywhite.net/reading/books?tags=mystery" title="See all books tagged "mystery"" rel="category tag">mystery</a>. </div></div></footer></article> Saturday morning - James' Coffee Blog https://jamesg.blog/2026/08/22/saturday-morning 2026-08-22T00:00:00.000Z <p><em>Before I leave this morning, I have to pack some things to read.</em> I picked up a zine and a book on colour and set out to a coffee shop to ease my way into the weekend. I purchased the zine and the book following my reflection on <a href="https://jamesg.blog/2026/08/17/miniatures-reference-works-and-writing">reference works</a> earlier this week, which had me thinking that I wanted to vary the kinds of books on my shelf.</p><p>This year I haven’t read many fiction books. Most of my reading has been devoted to textbooks and what I read online: blogs and the news and articles and everything in between. I would love to read more fiction, but I often find it hard to stay focused on longer works, especially when my mind is busy. I used to read often on Saturday mornings, finding comfort in the tradition of some quiet reading times while the world was waking up, but I haven’t followed that tradition in a while. That is, until this morning, where I found myself sitting in a coffee shop, reading my zine and studying my book on colour.</p><p>The zine I was reading was called “<a href="https://shop.serraglia.com/product/books-as-art-practice" rel="noreferrer">Books as Art Practice</a>”, a reflection on what it means to create printed works. This zine comes at an apt time for me as I reflect more on what we gain and lose from different mediums and, in turn, come to appreciate each medium in more depth. I love the focus that I feel when I am with a book, but I also love the abundance of snippets from the world that I find on the web. When I think of mediums, I think less about their merits and drawbacks so much as their affordances – what does the web allow that other mediums don’t? What does the web make more difficult that are inherent in other mediums?</p><p>When it comes to the web, I have been thinking about time, especially in the context of blogs. Blog posts have published dates. But what if those dates were hidden? Available, but hidden. My thought was that words are already steeped in time, being written in and of a moment. I experimented with a “timeless” mode on my website that hides all the publication dates of works, and I admit I am intrigued. Scrolling through my archives without seeing publication dates, my <a href="https://jamesg.blog/2026/07/11/websites-as-anthologies-of-self" rel="noreferrer">anthology of self</a> speaks not in years but in moments, in seasons. Presented in this way, my writing is still a blog in that entries are printed in reverse chronological order, but each entry is without a specific date.</p><figure><picture><img alt='My archive page for the Nature category, listing blog posts without dates. The top five posts, in reverse chronological order, without dates, are "Change; anchors", "Autumn", "Afterflow", "Sunset", and "Eclipse".' loading="lazy" src="https://editor.jamesg.blog/content/images/2026/08/archive.png" style=" max-width: 130%;"/></picture><div class="alt"><label><input aria-label="Toggle image alt text on screen" type="checkbox"/>ALT</label><div class="content">My archive page for the Nature category, listing blog posts without dates. The top five posts, in reverse chronological order, without dates, are "Change; anchors", "Autumn", "Afterflow", "Sunset", and "Eclipse".</div></div></figure><p style="text-align: center;">⁂ ⁂ ⁂ </p><p>The book on colour that I was reading, published by the <a href="https://shop.nationalgallery.org.uk/colour-art-book-1057166.html" rel="noreferrer">National Gallery in London</a>, featured works of art through the centuries grouped by colour. This book was different from most I have read: it was predominantly visual. While engaged with the book, I was moving between reading and visually analysing, between understanding concepts through words and appreciating details communicated through colour and depth and shadow and tint.</p><p>I started at the end of the book, on the chapter on monochrome. Works with few colours appeal to me. I love seeing how much detail you can add to a work with few colours. One of my favourite works is mostly monochrome, except for a blue flower in the centre of the painting. And yet despite my love of monochrome works, I also love the Impressionists, among whose defining characteristics is their use of colour.</p><p>While I was aware I couldn’t see as many details as I might be able to see if I were studying a painting in a museum, I did enjoy how much I could study each work from its printed version. I appreciated that the book magnified particular aspects of images so I could study features in more depth, like the boats in Peter Balke’s <em>The Tempest</em> that I didn’t discern until seeing them up close.</p><p>Closing the book after being immersed in art for some time, I started to think about technology; this is a relationship that pops up every so often in my mind, even when I am not necessarily studying the intersection of the two.</p><p>We live in time with a rich visual culture, enabled in large part by technology. The book I was reading was enabled by technology: high-resolution photography, the ability to print with such detail. Indeed, art and technology are not separate; today, many aspects of our visual culture are intertwined with the technologies we have.</p><p style="text-align: center;">⁂ ⁂ ⁂ </p><p>After my reading, I ran a few errands and went for a long walk, listening to a podcast about reading and enjoying looking at the leaves and the trees and the fields and the distance. Then, I did as I do: sat down, with a beverage – in this case, a glass of water, having been sufficiently fuelled from the cup of coffee I had consumed earlier – and looked through my notes of the day, with wonder and curiosity and reflection, ready to start writing.</p><script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a2f1383739c56c55',t:'MTc4NzM5NDgwOQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://jamesg.blog/2026/07/11/websites-as-anthologies-of-self">anthology of self</a> <a class="tag" href="https://jamesg.blog/2026/08/17/miniatures-reference-works-and-writing">reference works</a> <a class="tag" href="https://shop.nationalgallery.org.uk/colour-art-book-1057166.html">National Gallery in London</a> <a class="tag" href="https://shop.serraglia.com/product/books-as-art-practice">Books as Art Practice</a> Streak of procrastination - Joel's Log Files https://joelchrono.xyz/blog/streak-of-procrastination 2026-08-21T20:50:00.000Z <p>Sometimes you have such a great idea, a post that you need to write and share with everybody and you just keep meaning to get to it.</p> <p>Then reality hits and it doesn’t quite let you make that post in a way that feels right for the subject.</p> <p>In the end, you end up writing nothing at all, or with a draft that is quite big and extensive but still not completed.</p> <p>And welp, you have many smaller ideas for posts you could do in the meantime, but you don’t want to because you gotta dedicate all of that time to that great post idea.</p> <p>Except you don’t, work shows up, distraction shows up, life shows up, and you end up procrastinating both the main post and doing anything else.</p> <p>At this point, I would rather have something out, something complete and ready to be posted on this evil blogpost of mine.</p> <p>Worst of all is that this is also in the middle of Blaugust (pretty much ending in just ten days now) and now I’ll have to play catch up! If this wasn’t the case I could simply let it happen, I literally post at least twice per week anyway, not that that means something.</p> <p>The only good thing is that there’s a couple drafts that should be done very soon. I rarely publish thouse but the desperation on my side is on that level already.</p> <p>In any case, I just want to get some post out there to break the procrastination streak and call it day.</p> <p>That’s a good title, I’ll use it, hope you enjoy it. The original title was actually <em>“When a blogpost stun-locks you”</em>, but perhaps that is too much of a gaming reference for some.</p> <p>I really want to write a little less about games too, but also not, because I love to talk about games, confusing stuff!</p> <p>Perhaps I am just playing way too much <em>Outer Wilds</em> this week and my brain can’t process everything properly right now. Too many mind-bending moments.</p> <p>The blogpost in question is my retelling of my session of <em>Land of Eem</em> with friends by the way. Though my review of <em>Gris</em> is also pending…</p> <p>This is day 21 of <a href="https://100DaysToOffload.com">#100DaysToOffload</a> and day 16 of <a href="https://nerdgirlthoughts.game.blog/2026/07/15/blaugust-2026-is-coming">#Blaugust2026</a></p> <p> <a href="mailto:me@joelchrono.xyz?subject=Streak of procrastination">Reply to this post via email</a> | <a href="https://fosstodon.org/@joel/idcomments">Reply on Fediverse</a> </p> Book Review: An Immense World - How Animal Senses Reveal the Hidden Realms Around Us by Ed Yong ★★★☆☆ - Terence Eden’s Blog https://shkspr.mobi/blog/?p=72903 2026-08-21T11:34:36.000Z <img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/9781473572737-jacket-large.webp" alt="Book cover featuring various animals." width="200" class="alignleft size-full wp-image-72904"> <p>This is a detailed examination of the various senses possessed by animals. Some will be intimately familiar to you - like sight and sound - whereas some will seem strange and uncanny - like magnetic detection and electro-sensing. Some straddle an almost understandable space like echolocation or tetra-chromatic vision.</p> <p>This isn't a game of Top Trumps where all the animals are ranked by power. Instead there's a gentle and passionate exploration of what these senses <em>might</em> mean to their owners. It is refreshingly candid about what we don't know, while always trying to convey a sense of wonder about the inherent <a href="https://en.wikipedia.org/wiki/Umwelt"><i lang="de">Umwelt</i></a> experienced by the animal.</p> <p>But goodness me is it long. It seems that every time the editor told the author to cut out a paragraph, he stuck it in a footnote instead. The text is well referenced, but so are the footnotes, which means occasionally encountering sentences formatted like this:</p> <blockquote><p>Despite several frustrating false leads, nobody’s ever found them.<sup>fn11,36,37,38,39</sup></p></blockquote> <p>Speaking of which, the general formatting of the eBook is poor. The CSS contains all sorts of weird stuff which I needed to turn off, and is full of comments which probably should have been stripped before the book was distributed.</p> <p>Science publishers still haven't grasped that eBooks don't need to relegate glossy images to the back of the book - they can go inline with the text!</p> <p>This is a funny, heartfelt, and (perhaps overly) thorough book. It will gleefully send you down rabbit holes - even if you're ill-equipped to see in the dark and sense the bugs around you.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=72903&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> 'Project' section of 'Task & Project Management' course re-recorded - Johnny.Decimal https://johnnydecimal.com/blog/0241-taskpm-update/ 2026-08-21T06:35:47.000Z <p>Our <a href="https://johnnydecimal.com/jdu/taskpm">Task &amp; Project Management course</a> is, perhaps unsurprisingly, split into two sections: tasks, and project management. (Perhaps to our marketing detriment, I have a tendency to name things literally.)</p> <p>We just re-recorded the entire project management section. If you watched the previous version, you should watch these new videos. Start from <a href="https://johnnydecimal.com/jdu/taskpm/350-feedback-from-the-future">feedback from the future</a>.</p> <h2 id="updated-based-on-real-world-use">Updated based on real-world use</h2> <p>Everything we produce is a result of real-world experience. I can&#39;t teach you how do to a thing if it&#39;s not something I do myself.</p> <p>The previous projects section was the best that I knew at the time. But since releasing it late last year, I continued to refine the method. The re-recorded episodes reflect 6 months of further work, and are exactly how we run our own business.</p> <p>It&#39;s a great update. I&#39;m really happy with it.</p> <h2 id="also-see-work-packages">Also see: Work packages</h2> <p>See the previous blog post, <a href="https://johnnydecimal.com/blog/0240">&#39;50-59 Portfolio of creative outputs&#39; becomes &#39;W0000-9999 Work packages&#39;</a>.</p> '50-59 Portfolio of creative outputs' becomes 'W0000-9999 Work packages' - Johnny.Decimal https://johnnydecimal.com/blog/0240-50-59-becomes-work-packages/ 2026-08-21T06:35:43.000Z <p>With the release of the <a href="https://johnnydecimal.com/sbs">Small Business System</a> last year we introduced a new pattern. Area <code>50-59 Portfolio of creative outputs</code> was an <a href="https://johnnydecimal.com/documentation/expand-an-area-overview">expanded area</a> with numbers ranging from <code>50000</code> through <code>59999</code>.</p> <p>The extended numbering is required because you&#39;re expected to have more than 100 &#39;creative outputs&#39;, so the usual restrictions don&#39;t work. This numbering was always a bit weird, not least because <code>50-59</code> as a parent folder name didn&#39;t accurately describe its contents.</p> <h2 id="expanding-the-concept">Expanding the concept</h2> <p>This concept was originally for &#39;creative outputs&#39;, as its name says. For our type of business that&#39;s blog posts and video course lessons. For a restaurant it might be the photo shoot for their latest Instagram campaign.</p> <p>But the more we used it, the more we realised that it was a useful pattern for <em>all work</em>. If you have a broad Johnny.Decimal ID like <code>21.34 Small Business System</code>, it gets crowded if you try to do work in there.</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="A diagram showing ID 21.34 SBS with lots of 'work' floating around it. It's very busy." height="392" loading="lazy" src="https://johnnydecimal.com/blog/0240A-21.34_SBS_busy-862x784@2x.png" width="431"> </picture> </figure> <p>One solution would be to promote that thing to its own category: <code>61 Small Business System</code>, say. You could do that, but now we&#39;ve pulled this specific product out of the list of products into its own place. And we still have the limit of 100 things to consider.</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="A diagram showing the SBS as a new category '61' containing a bunch of IDs." height="523" loading="lazy" src="https://johnnydecimal.com/blog/0240B-61_SBS_category-1336x1046@2x.png" width="668"> </picture> </figure> <p>This &#39;place to do work&#39; turned out to be a really nice alternative. With this pattern, you leave the core thing where it is: <code>21.34 Small Business System</code> never changes. Each piece of work you do gets a new number in this &#39;work world&#39;, and we link it back to <code>21.34</code>.</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="The diagram now shows the SBS as 21.34 again, but _connected to it_ – not inside it, crowding it – are a bunch of work packages." height="518" loading="lazy" src="https://johnnydecimal.com/blog/0240C-21.34_SBS_with_WPs-1010x1036@2x.png" width="505"> </picture> </figure> <h2 id="introducing-work-packages">Introducing &#39;work packages&#39;</h2> <p>At this point I realised I&#39;d brought the established concept of <a href="https://en.wikipedia.org/wiki/Work_breakdown_structure#Work_package">work packages</a> into Johnny.Decimal. And that&#39;s a good sign: well-established patterns are probably correct. Let&#39;s not invent something new for the sake of it.</p> <p>So that&#39;s what the &#39;creative pattern&#39; has grown into: each of these jobs is now a work package, and they&#39;re no longer limited to creative-like things. They&#39;re useful for <em>any work</em>.</p> <p>For example, you might need to conduct a large audit as part of a compliance exercise. That audit could be a work package, linked to the SBS ID <code>11.13 Compliance</code>.</p> <h2 id="fixing-the-numbers">Fixing the numbers</h2> <p>A design principle of Johnny.Decimal is that you must always be able to give a stranger – a new starter at your business, say – a number, and they must be able to find it easily. So the parent folder name needs to accurately explain what&#39;s in it.</p> <p>The existing area pattern <code>A0-A9</code> doesn&#39;t work here. Work packages are so different, we&#39;ve given them a completely new scheme. They start at <code>W0000</code> and continue to <code>W9999</code>.<sup><a href="#user-content-fn-w0011" id="user-content-fnref-w0011" data-footnote-ref="true" aria-describedby="footnote-label" class="footnote">1</a></sup> So we call the folder that contains them <code>W0000-9999 Work packages</code>. This sorts them below all of your regularly-numbered Johnny.Decimal areas.</p> <h2 id="they-must-link-to-an-id">They must link to an ID</h2> <p>Crucially, work packages may not exist in isolation. <strong>They must belong to an ID</strong>. We indicate this in the title like: <code>W0011~11.13 Compliance audit</code>. Here, we&#39;ve linked <code>W0011</code> to ID <code>11.13</code>.</p> <p><strong>This link-to-parent-ID-in-title is required</strong>. You can and should cross-reference these entries using links in your JDex, but trust me: you&#39;ll forget to do that. If you always link every work package to its parent using this simple notation, you can never lose anything.</p> <p>This is how our Small Business example now looks.</p> <figure class="figure jdimage jdimage--auto-dark"> <picture> <img class="figure__inner" alt="The work packages connected to the SBS are now numbered, e.g. W0011~21.34." height="492" loading="lazy" src="https://johnnydecimal.com/blog/0240D-21.34_SBS_with_numbered_WPs-1314x984@2x.png" width="657"> </picture> </figure> <h2 id="how-do-i-migrate-from-50-59">How do I migrate from <code>50-59</code>?</h2> <p>If you&#39;ve been using area <code>50-59</code>, I recommend switching to this new scheme. Start the numbers where you left off: if your last creative job was <code>50106</code>, your first work package is <code>W0107</code>.</p> <p>You could renumber your old entries. We didn&#39;t: the nature of these things is that, once done, they&#39;re rarely referenced again.</p> <h3 id="weve-also-retitled-40-49">We&#39;ve also retitled <code>40-49</code></h3> <p>While we&#39;re at it, we&#39;ve tweaked the title of the Small Business System&#39;s area <code>40-49</code>. What was your <strong>Library of creative inputs</strong>, previously mirrored by the now-defunct <strong>Portfolio of creative outputs</strong>, has been renamed to <code>40-49 Creative assets</code>. Same thing, simpler name.</p> <h2 id="see-more-at-the-updated-task--project-management">See more at the updated Task &amp; Project Management</h2> <p>We just re-recorded the entire second half of the course. You&#39;ll find a full explanation of this concept starting at <a href="https://johnnydecimal.com/jdu/taskpm/490-work-packages-intro">this episode</a>. See <a href="https://johnnydecimal.com/blog/0241">the blog post that follows this one</a> for more information.</p> <div data-footnotes="true" class="footnotes"><h2 class="sr-only" id="footnote-label">Footnotes</h2> <ol> <li id="user-content-fn-w0011"> <p>Just like every other part of the system, you should leave the first 10 for <a href="https://johnnydecimal.com/documentation/the-standard-zeros">standard zero-like</a> IDs. Start your own WPs at <code>W0011</code>. <a href="#user-content-fnref-w0011" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref footnoteBackLink">↩</a></p> </li> </ol> </div> Small Business System – '50-59 Portfolio of creative outputs' becomes 'W0000-9999 Work packages' - Johnny.Decimal https://johnnydecimal.com/support/updates/2026-08-21-50-59-to-wps/ 2026-08-21T06:23:04.000Z <p>This is the changelog entry for this update. See <a href="https://johnnydecimal.com/blog/0240">blog post 0240</a> for full details.</p> Note published on August 21, 2026 at 12:29 AM UTC - Molly White's activity feed 6a879beb52b01ca28c3ff0c1 2026-08-21T00:29:31.000Z <article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>delighted to discover that a) Jimothy has a Wikipedia picture and b) it's this</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/6373206f0ebf8cc6fc84_Screenshot-2026-08-20-at-8.27.15---PM.png" data-fslightbox=0f9c8d4fddbddd019e23><img src="https://storage.mollywhite.net/micro/6373206f0ebf8cc6fc84_Screenshot-2026-08-20-at-8.27.15---PM.png" alt="A Wikipedia infobox for Jimothy, featuring an MS Paint-style illustration of Jimothy the raccoon walking through grass with flowers in front of buildings and a sunny sky. Cartoonish illustration of Jimothy made by the USGS Species Common raccoon Sex Unknown Born c. 2025 Known for Abnormal body shape, internet memes" /></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/202608202027"><time class="dt-published" datetime="2026-08-21T00:29:31+00:00" title="August 21, 2026 at 12:29 AM UTC">August 21, 2026 at 12:29 AM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117130669740897586" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3mtkixpzopo2h" 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/wikipedia" title="See all micro posts tagged "Wikipedia"" rel="category tag">Wikipedia</a>. </div></div></footer></div></article> HTML element letter count distribution - James' Coffee Blog https://jamesg.blog/2026/08/21/html-element-letter-counts 2026-08-21T00:00:00.000Z <style> table { width: 20rem; border-collapse: collapse; } tr td:nth-child(2) { background-color: light-dark(orange, royalblue); display: block; } th { text-align: left; } </style> <style media="(prefers-color-scheme: dark)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #49483e } .highlight { background: #272822; color: #F8F8F2 } .highlight .c { color: #959077 } /* Comment */ .highlight .err { color: #ED007E; background-color: #1E0010 } /* Error */ .highlight .esc { color: #F8F8F2 } /* Escape */ .highlight .g { color: #F8F8F2 } /* Generic */ .highlight .k { color: #66D9EF } /* Keyword */ .highlight .l { color: #AE81FF } /* Literal */ .highlight .n { color: #F8F8F2 } /* Name */ .highlight .o { color: #FF4689 } /* Operator */ .highlight .x { color: #F8F8F2 } /* Other */ .highlight .p { color: #F8F8F2 } /* Punctuation */ .highlight .ch { color: #959077 } /* Comment.Hashbang */ .highlight .cm { color: #959077 } /* Comment.Multiline */ .highlight .cp { color: #959077 } /* Comment.Preproc */ .highlight .cpf { color: #959077 } /* Comment.PreprocFile */ .highlight .c1 { color: #959077 } /* Comment.Single */ .highlight .cs { color: #959077 } /* Comment.Special */ .highlight .gd { color: #FF4689 } /* Generic.Deleted */ .highlight .ge { color: #F8F8F2; font-style: italic } /* Generic.Emph */ .highlight .ges { color: #F8F8F2; font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #F8F8F2 } /* Generic.Error */ .highlight .gh { color: #F8F8F2 } /* Generic.Heading */ .highlight .gi { color: #A6E22E } /* Generic.Inserted */ .highlight .go { color: #66D9EF } /* Generic.Output */ .highlight .gp { color: #FF4689; font-weight: bold } /* Generic.Prompt */ .highlight .gs { color: #F8F8F2; font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #959077 } /* Generic.Subheading */ .highlight .gt { color: #F8F8F2 } /* Generic.Traceback */ .highlight .kc { color: #66D9EF } /* Keyword.Constant */ .highlight .kd { color: #66D9EF } /* Keyword.Declaration */ .highlight .kn { color: #FF4689 } /* Keyword.Namespace */ .highlight .kp { color: #66D9EF } /* Keyword.Pseudo */ .highlight .kr { color: #66D9EF } /* Keyword.Reserved */ .highlight .kt { color: #66D9EF } /* Keyword.Type */ .highlight .ld { color: #E6DB74 } /* Literal.Date */ .highlight .m { color: #AE81FF } /* Literal.Number */ .highlight .s { color: #E6DB74 } /* Literal.String */ .highlight .na { color: #A6E22E } /* Name.Attribute */ .highlight .nb { color: #F8F8F2 } /* Name.Builtin */ .highlight .nc { color: #A6E22E } /* Name.Class */ .highlight .no { color: #66D9EF } /* Name.Constant */ .highlight .nd { color: #A6E22E } /* Name.Decorator */ .highlight .ni { color: #F8F8F2 } /* Name.Entity */ .highlight .ne { color: #A6E22E } /* Name.Exception */ .highlight .nf { color: #A6E22E } /* Name.Function */ .highlight .nl { color: #F8F8F2 } /* Name.Label */ .highlight .nn { color: #F8F8F2 } /* Name.Namespace */ .highlight .nx { color: #A6E22E } /* Name.Other */ .highlight .py { color: #F8F8F2 } /* Name.Property */ .highlight .nt { color: #FF4689 } /* Name.Tag */ .highlight .nv { color: #F8F8F2 } /* Name.Variable */ .highlight .ow { color: #FF4689 } /* Operator.Word */ .highlight .pm { color: #F8F8F2 } /* Punctuation.Marker */ .highlight .w { color: #F8F8F2 } /* Text.Whitespace */ .highlight .mb { color: #AE81FF } /* Literal.Number.Bin */ .highlight .mf { color: #AE81FF } /* Literal.Number.Float */ .highlight .mh { color: #AE81FF } /* Literal.Number.Hex */ .highlight .mi { color: #AE81FF } /* Literal.Number.Integer */ .highlight .mo { color: #AE81FF } /* Literal.Number.Oct */ .highlight .sa { color: #E6DB74 } /* Literal.String.Affix */ .highlight .sb { color: #E6DB74 } /* Literal.String.Backtick */ .highlight .sc { color: #E6DB74 } /* Literal.String.Char */ .highlight .dl { color: #E6DB74 } /* Literal.String.Delimiter */ .highlight .sd { color: #E6DB74 } /* Literal.String.Doc */ .highlight .s2 { color: #E6DB74 } /* Literal.String.Double */ .highlight .se { color: #AE81FF } /* Literal.String.Escape */ .highlight .sh { color: #E6DB74 } /* Literal.String.Heredoc */ .highlight .si { color: #E6DB74 } /* Literal.String.Interpol */ .highlight .sx { color: #E6DB74 } /* Literal.String.Other */ .highlight .sr { color: #E6DB74 } /* Literal.String.Regex */ .highlight .s1 { color: #E6DB74 } /* Literal.String.Single */ .highlight .ss { color: #E6DB74 } /* Literal.String.Symbol */ .highlight .bp { color: #F8F8F2 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #A6E22E } /* Name.Function.Magic */ .highlight .vc { color: #F8F8F2 } /* Name.Variable.Class */ .highlight .vg { color: #F8F8F2 } /* Name.Variable.Global */ .highlight .vi { color: #F8F8F2 } /* Name.Variable.Instance */ .highlight .vm { color: #F8F8F2 } /* Name.Variable.Magic */ .highlight .il { color: #AE81FF } /* Literal.Number.Integer.Long */ .highlight .nn, .highlight .n{color: light-dark(black, var(--dark-foreground-color)) }</style><style media="(prefers-color-scheme: light)">pre { line-height: 125%; } td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } .highlight .hll { background-color: #ffffcc } .highlight { background: #f8f8f8; } .highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ .highlight .err { border: 1px solid #F00 } /* Error */ .highlight .k { color: #008000; font-weight: bold } /* Keyword */ .highlight .o { color: #666 } /* Operator */ .highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ .highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #9C6500 } /* Comment.Preproc */ .highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ .highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ .highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ .highlight .gd { color: #A00000 } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ .highlight .gr { color: #E40000 } /* Generic.Error */ .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ .highlight .gi { color: #008400 } /* Generic.Inserted */ .highlight .go { color: #717171 } /* Generic.Output */ .highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ .highlight .gt { color: #04D } /* Generic.Traceback */ .highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ .highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ .highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ .highlight .kp { color: #008000 } /* Keyword.Pseudo */ .highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #B00040 } /* Keyword.Type */ .highlight .m { color: #666 } /* Literal.Number */ .highlight .s { color: #BA2121 } /* Literal.String */ .highlight .na { color: #687822 } /* Name.Attribute */ .highlight .nb { color: #008000 } /* Name.Builtin */ .highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ .highlight .no { color: #800 } /* Name.Constant */ .highlight .nd { color: #A2F } /* Name.Decorator */ .highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ .highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #00F } /* Name.Function */ .highlight .nl { color: #767600 } /* Name.Label */ .highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ .highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ .highlight .nv { color: #19177C } /* Name.Variable */ .highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ .highlight .w { color: #BBB } /* Text.Whitespace */ .highlight .mb { color: #666 } /* Literal.Number.Bin */ .highlight .mf { color: #666 } /* Literal.Number.Float */ .highlight .mh { color: #666 } /* Literal.Number.Hex */ .highlight .mi { color: #666 } /* Literal.Number.Integer */ .highlight .mo { color: #666 } /* Literal.Number.Oct */ .highlight .sa { color: #BA2121 } /* Literal.String.Affix */ .highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ .highlight .sc { color: #BA2121 } /* Literal.String.Char */ .highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ .highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ .highlight .s2 { color: #BA2121 } /* Literal.String.Double */ .highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ .highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ .highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ .highlight .sx { color: #008000 } /* Literal.String.Other */ .highlight .sr { color: #A45A77 } /* Literal.String.Regex */ .highlight .s1 { color: #BA2121 } /* Literal.String.Single */ .highlight .ss { color: #19177C } /* Literal.String.Symbol */ .highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #00F } /* Name.Function.Magic */ .highlight .vc { color: #19177C } /* Name.Variable.Class */ .highlight .vg { color: #19177C } /* Name.Variable.Global */ .highlight .vi { color: #19177C } /* Name.Variable.Instance */ .highlight .vm { color: #19177C } /* Name.Variable.Magic */ .highlight .il { color: #666 } /* Literal.Number.Integer.Long */</style> <style> @font-face { font-family: 'MonaspaceArgon'; src: url('/assets/fonts/MonaspaceArgon-Regular.woff2') format('woff2'); font-weight: 400; font-style: normal; } pre, code { font-family: 'MonaspaceArgon', ui-monospace, monospace; } </style> <p><em>How many HTML elements are exactly five letters long?</em> This question came to mind in the context of a discussion I had yesterday about what an indie web version of Wordle would look like. We all started to name elements. <code>table</code>, <code>tbody</code>, <code>input</code>, among others, all have five letters.</p> <p>After the discussion, I wrote a Python script to compute the string lengths of each HTML element. I used the list of HTML elements on the MDN website as my dataset. The MDN list includes some elements (like <code>selectedcontent</code>) that are not Baseline supported yet, but I included them anyway. I excluded deprecated elements.</p> <p>From my analysis, I found there are fifteen elements that are exactly five letters long. These are:</p> <ul> <li>aside</li> <li>audio</li> <li>embed</li> <li>input</li> <li>label</li> <li>meter</li> <li>small</li> <li>style</li> <li>table</li> <li>tfoot</li> <li>thead</li> <li>title</li> <li>track</li> <li>video</li> </ul> <p>This means that there are fifteen possibilities for a HTML Wordle. We’d definitely need more words.</p> <p>Here is a histogram showing the letter count distribution for all HTML elements:</p> <table> <thead> <tr> <th>Element Length</th> <th>Number of Elements</th> </tr> </thead> <tbody> <tr> <td> 1 chr. </td> <td style="width: 6%;"> 7 </td> </tr> <tr> <td> 2 chrs. </td> <td style="width: 17.1%;"> 20 </td> </tr> <tr> <td> 3 chrs. </td> <td style="width: 14.5%;"> 17 </td> </tr> <tr> <td> 4 chrs. </td> <td style="width: 17.9%;"> 21 </td> </tr> <tr> <td> 5 chrs. </td> <td style="width: 12.8%;"> 15 </td> </tr> <tr> <td> 6 chrs. </td> <td style="width: 14.5%;"> 17 </td> </tr> <tr> <td> 7 chrs. </td> <td style="width: 6.0%;"> 7 </td> </tr> <tr> <td> 8 chrs. </td> <td style="width: 6.8%;"> 8 </td> </tr> <tr> <td> 9 chrs. </td> <td style="width: 0; background-color: transparent;"> 0 </td> </tr> <tr> <td> 10 chrs. </td> <td style="width: 1.7%;"> 2 </td> </tr> <tr> <td> 11 chrs. </td> <td style="width: 1.7%;"> 2 </td> </tr> <tr> <td> 12 chrs. </td> <td style="width: 0; background-color: transparent;"> 0 </td> </tr> <tr> <td> 13 chrs. </td> <td style="width: 0; background-color: transparent;"> 0 </td> </tr> <tr> <td> 14 chrs. </td> <td style="width: 0; background-color: transparent;"> 0 </td> </tr> <tr> <td> 15 chrs. </td> <td style="width: 0.9%;"> 1 </td> </tr> </tbody> </table> <p>The design of this table was inspired by <a href="https://www.norvig.com/mayzner.html">Norvig's English letter frequency counts analysis</a>.</p> <details> <summary>View raw data, with a list of elements that match each count</summary> <pre>Element count: 117 String Length | # of Matching Elements | % of Element Count | Elements ----------- 1 7 6.0% ['a', 'b', 'i', 'p', 'q', 's', 'u'] 2 20 17.1% ['br', 'dd', 'dl', 'dt', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'li', 'ol', 'rp', 'rt', 'td', 'th', 'tr', 'ul'] 3 17 14.5% ['bdi', 'bdo', 'col', 'del', 'dfn', 'div', 'img', 'ins', 'kbd', 'map', 'nav', 'pre', 'sub', 'sup', 'svg', 'var', 'wbr'] 4 21 17.9% ['abbr', 'area', 'base', 'body', 'cite', 'code', 'data', 'form', 'head', 'html', 'link', 'main', 'mark', 'math', 'menu', 'meta', 'ruby', 'samp', 'slot', 'span', 'time'] 5 15 12.8% ['aside', 'audio', 'embed', 'input', 'label', 'meter', 'small', 'style', 'table', 'tbody', 'tfoot', 'thead', 'title', 'track', 'video'] 6 17 14.5% ['button', 'canvas', 'dialog', 'figure', 'footer', 'header', 'hgroup', 'iframe', 'legend', 'object', 'option', 'output', 'script', 'search', 'select', 'source', 'strong'] 7 7 6.0% ['address', 'article', 'caption', 'details', 'picture', 'section', 'summary'] 8 8 6.8% ['colgroup', 'datalist', 'fieldset', 'noscript', 'optgroup', 'progress', 'template', 'textarea'] 10 2 1.7% ['blockquote', 'figcaption'] 11 2 1.7% ['fencedframe', 'geolocation'] 15 1 0.9% ['selectedcontent']</pre> <small>Percentages may not add up to exactly one hundred percent, due to rounding.</small> </details> <p>If you are interested, here is the code I used to produce the analysis:</p> <div class="highlight"><pre><span></span><span class="c1"># data source https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements</span> <span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">defaultdict</span> <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"elements.txt"</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span> <span class="n">elements</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">file</span><span class="o">.</span><span class="n">readlines</span><span class="p">()]</span> <span class="n">letters2counts</span> <span class="o">=</span> <span class="p">{</span><span class="n">el</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">el</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">elements</span><span class="p">}</span> <span class="n">counts2letters</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span> <span class="k">for</span> <span class="n">el</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="n">letters2counts</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> <span class="n">counts2letters</span><span class="p">[</span><span class="n">count</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">el</span><span class="p">)</span> <span class="n">num_of_elements_with_each_letter_count</span> <span class="o">=</span> <span class="p">{</span><span class="n">k</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="n">v</span><span class="p">)</span> <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">counts2letters</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"Element count:"</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">elements</span><span class="p">))</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"String Length | # of Matching Elements | </span><span class="si">% o</span><span class="s2">f Element Count | Elements"</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"-----------"</span><span class="p">)</span> <span class="k">for</span> <span class="n">length</span><span class="p">,</span> <span class="n">count</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">num_of_elements_with_each_letter_count</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> <span class="nb">print</span><span class="p">(</span><span class="n">length</span><span class="p">,</span> <span class="n">count</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="nb">round</span><span class="p">((</span><span class="n">count</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">elements</span><span class="p">))</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span> <span class="o">+</span> <span class="s2">"%"</span><span class="p">,</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">counts2letters</span><span class="p">[</span><span class="n">length</span><span class="p">]))</span> <span class="c1"># NB, there are no 9, 12, 13, 14</span> </pre></div> <p>And here is my list of HTML elements I wrote (by hand) from the MDN list:</p> <details> <summary>View HTML element list.</summary> <pre>html base head link meta style title body address article aside footer header h1 h2 h3 h4 h5 h6 hgroup main nav section search blockquote dd div dl dt figcaption figure hr li menu ol p pre ul a abbr b bdi bdo br cite code data dfn em i kbd mark q rp rt ruby s samp small span strong sub sup time u var wbr area audio img map track video embed fencedframe iframe object picture source svg math canvas noscript script del ins caption col colgroup table tbody td tfoot th thead tr button datalist fieldset form input label legend meter optgroup option output progress select selectedcontent textarea details dialog geolocation summary slot template</pre> </details><script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a2e8ad999b4c3efe',t:'MTc4NzMwNTI0NQ=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://www.norvig.com/mayzner.html">Norvig's English letter frequency counts analysis</a> Change; anchors - James' Coffee Blog https://jamesg.blog/2026/08/20/change-anchors 2026-08-20T00:00:00.000Z <p>I look out the window. Every time I look I notice change: the ambering of leaves that are still green in my memory, the movement of clouds as they go from one end of the sky to the other, the movement of leaves as they sway to-and-fro with the light morning breeze; some mornings I see birds in the trees; yesterday I had the pleasure of seeing a small bird take flight, soaring to another tree.</p><p>I look at the trees outside and see the leaves that have been changing colour for a while, and those in the early stages of change. I think back to a realisation I had a while ago about how everything changes at its own pace. The warmth from my cooling cup of morning tea radiates as I think about the morning, and change.</p><p>My university textbooks for next year arrived yesterday. I am looking forward to skimming through them – to building the first stages of a mental map. I looked through the reference notes yesterday and saw a mention of an artist whose work I was reading about earlier this week, in what felt like a dialogue between my everyday and my studies. I am looking forward to next year – to all that I will learn. I am on the precipice of change: from one academic year to the next.</p><p style="text-align: center;">⁂ ⁂ ⁂</p><p>My website has been changing, too: my home page is a now poem, and I continue to sit with the question “how can I make my website more poetic?” I am fascinated by bridges between mediums: the intersection of poetry and hypertext, of essays and the web, of imagery and text. I see more connections between mediums that I once thought of more on their own. I feel the opportunity to make new connections – to wonder how the vocabularies of different disciplines and mediums fit together and differ. Can a web page have a rhythm, like a poem? My thoughts are nascent; it feels both jarring and exciting to be at the early stage of new thoughts. <sup class="footnote-reference" id="f-1"><a href="https://jamesg.blog/longform-feed#1">1</a></sup></p><p>Connecting between mediums relates to a <a href="https://museupicassobcn.cat/en/whats-on/exhibition/picasso-poet">quote from Picasso</a> that I read this week:</p><blockquote><em>When it comes down to it, all arts are one. You can write a painting with words, just as you can paint feelings in a poem.</em></blockquote><p>Researching this idea further earlier in the week, I found an article in the Guardian titled “<a href="https://www.theguardian.com/artanddesign/2004/sep/20/art.poetry">If a painting could talk…</a>”, from 2004, in which the author, Grace, noted the affordances of poetry relative to paintings:</p><blockquote>The visual impact of a painting can be immediate. We have it all before us: images, colour, forms, a stimulating eye-feast. […]<br/><br/>A poem, though, communicates in a more subliminal way, unfolding through the senses as you go along. Not until the end of the poem - sometimes even later - do we feel its resonance or have its meaning dawn on us.</blockquote><p>Related to this, I have been thinking about form: about what writing on a blog means, and how I could use my blog for more long-form writing. How do I build a practice around longer-form writing? What affordances does the blog form have or not have that enables or makes this kind of writing more difficult relative to writing shorter pieces? How do I start to connect the dots between longer time horizons?</p><p>In pondering the latter question, I have realised how much I enjoy writing that is of a moment: a reflection of the streams of thought as they were in a given time. This writing, for example, is anchored in Nature – in what I saw when I looked out the window – and all of the ideas that followed from my original observation, including those I have had in my mind for several days or weeks but had not yet written down.</p><p>I have the phrase “artworks as anchors” written down on my whiteboard: a textual embodiment of the feeling that I have when I revisit an artwork that I know well; the feeling of familiarity combined with the feeling there is more to see, more to learn. Writing in a stream of thought allows me to put ideas side by side in the moment of writing, to reflect connections as they are made; to create new combinations, flowing from the sentences that precede into words that follow. <em>What does it mean for a piece to be anchored, or to be an anchor? How do anchors help us when we change?</em> I will need to keep thinking about these questions.</p> <div class="footnote-definition" id="1"><sup class="footnote-definition-label" id="f-2">1</sup> <p>One of the themes in my university studies this year has been “crossing boundaries” as it applies to the humanities – physical, cultural, across time, and more. Leading on from this, I wonder: how do we and can we cross boundaries on the web?</p> <a href="https://jamesg.blog/longform-feed#f-1">[↩]</a></div> <script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&amp;&amp;a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a2dfc7f14cd3463d',t:'MTc4NzIxMTk1Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&amp;&amp;(document.onreadystatechange=e,c())}}}})();</script> <a class="tag" href="https://jamesg.blog/longform-feed#1">1</a> <a class="tag" href="https://jamesg.blog/longform-feed#f-1">[↩]</a> <a class="tag" href="https://museupicassobcn.cat/en/whats-on/exhibition/picasso-poet">quote from Picasso</a> <a class="tag" href="https://www.theguardian.com/artanddesign/2004/sep/20/art.poetry">If a painting could talk…</a> Gamifying Snacking with Snacker Tracker - Kev Quirk https://kevquirk.com/gamifying-snacking-with-snacker-tracker 2026-08-19T14:39:00.000Z <p>So one of the things I've been trying to do as part of <a href="https://kevquirk.com/tag/fatboy">my journey to lose weight and get fit</a> is sort my diet out. As the saying goes, <em>"you can't out-train a poor diet"</em>. And the worst part of my diet is definitely snacking in the evening.</p> <p>The routing generally goes:</p> <ol> <li>Have dinner.</li> <li>Put the kids to bed and settle down with my wife on the couch.</li> <li>Crave snacks out of habit.</li> <li>Get snacks and eat them!</li> </ol> <p>I'm the type of person who finds an arbitrary thing to aim for very motivating. It's not enough to just <em>want</em> to stop snacking in the evening, nope. That shit will fail pretty quickly. But if I have a streak I <em>have</em> to maintain - now we're talking!</p> <p>So I decided to build a simple little tool that I called <em>Snacker Tracker</em>. It's just a tap of a button every evening to say whether I've snacked or not, and it maintains a streak. Here's what it looks like on my phone:</p> <p><img loading="lazy" src="https://kevquirk.com/content/images/gamifying-snacking-with-snacker-tracker/snacker-01.webp" alt="snacker-01" /></p> <h2>Free pass &amp; design</h2> <p>I decided to implement a free pass into the site as well. So I'm allowed to have 1 evening per calendar week where I <em>can</em> snack and it won't affect my streak - after all, I want to be able to have some fun!</p> <p>I thought about bundling <a href="https://simplecss.org" rel="noopener noreferrer">Simple.css</a> in to make it look pretty, but I decided to have some fun with the CSS and went with a neo-brutalist aesthetic, which I think looks great. So much so that I'm thinking about re-designing this site in a similar way, but I've managed to hold off on that...for now.</p> <h2>Retrospective log</h2> <p><em>Snacker Tracker</em> also has a way of adding days retrospectively, so if I forget to log a day, I can easily go back and do it:</p> <p><img loading="lazy" src="https://kevquirk.com/content/images/gamifying-snacking-with-snacker-tracker/snacker-02.webp" alt="snacker-02" /></p> <p>I've only been using <em>Snacker Tracker</em> for a few days, but it's making me pause when that inevitable pang happens in the evening. I'm finding that instead of instinctively raiding the cupboard for some crisps or a chocolate bar, I'm thinking <em>"don't screw up your streak"</em> and not doing it.</p> <p>I know I'm not hungry during the evening, it's just a habit. My hope is that with time I'll re-train my brain to not expect sugar in the evening, and the pangs will go away. Until then, I'm gonna continue tracking my snacks with this fun little site in the hope that it makes me form better habits.</p> <blockquote> <p>But Kev, why don't you be a proper grown-up and just use your willpower?</p> <p><cite>-- All the internet people</cite></p> </blockquote> <p>Because, Internet Person, it's a habit that I don't even think about, and this forces my to think about it. Yes, I know it's arbitrary and rather childish, but it's working, so what's the harm?</p> <blockquote> <p>Will you be releasing <em>Snacker Tracker</em> so we can try it?</p> <p><cite>-- Another internet person</cite></p> </blockquote> <p><em>Maybe.</em> I threw it together pretty quickly and the code is rough. A lot of my spare time is focussed on <a href="https://pureblog.org" rel="noopener noreferrer">Pure Blog</a> and <a href="https://purecomments.org" rel="noopener noreferrer">Pure Comments</a> at the moment, so I don't think I'll have the time to clean the code up to the point where I'm happy to release it any time soon I'm afraid.</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=Gamifying%20Snacking%20with%20Snacker%20Tracker">reply to this post by email</a>, or <a href="https://kevquirk.com/gamifying-snacking-with-snacker-tracker#comments">leave a comment</a>.</p> </div> Asymmetric Agents - Terence Eden’s Blog https://shkspr.mobi/blog/?p=73594 2026-08-19T11:34:52.000Z <p>One of the promises of the AI-filled future is that we'll all have highly capable autonomous <del>servants</del> "agents" to work for us.</p> <p>Even <a href="https://shkspr.mobi/blog/2026/02/how-close-are-we-to-a-vision-for-2010/">back in the 1990s</a>, it was a common trope in future-gazing to insist that a person's personal <del>slave</del> agent would negotiate on their behalf. Ask your <del>meek digital pal</del> agent to find you a restuarant in town, tonight, for a hot date, catering to your dietary preferences, and within your budget. The little <del>butler</del> agent scurries off and, without your intervention, finds the <em>perfect</em> place, negotiates with the restaurant's <del>house boy</del> agent and books you a slap up meal.</p> <p>Marvellous! You can tell your <del>manservant</del> agent to buy you clothes, reserve a flight, do the grocery shopping, or buy your wife flowers without having to lift a finger.</p> <p>But, of course, there's a fly in the ointment. Not all <del>valets</del> agents are created equally. You're sending your Rasperry Pi powered <del>peon</del> agent against the full might of Amazon's bazillion datacentres.</p> <p>Can a low-complexity <del>serf</del> agent be bullied, outwitted, and manipulated by a more capable <del>henchman</del> agent? It seems obvious to me that the answer is yes. Humans have a set of cognitive biases which render us susceptible to advertising tricks. AI may have <a href="https://cacm.acm.org/research/rolling-in-the-deep-of-cognitive-and-ai-biases/"><em>different</em> biases</a> but will still be vulnerable to <a href="https://shkspr.mobi/blog/2017/03/how-to-hypnotise-an-artificial-intelligence/">hypnosis</a> and hacking.</p> <p>Perhaps having my <del>secretary</del> agent negotiate with your <del>PA</del> agent to find a suitable meeting time for our Q2 KPI Deep Dive doesn't carry this sort of risk. But I'm sure that <del>scumbags</del> advertisers everywhere will be salivating at the thought of waylaying my innocent <del>footman</del> agent on its way to market.</p> <p>A future where we delegate responsibility to <del>stochastic imbeciles</del> agents is one where we accept that we have no control over their susceptibility to more powerful and malevolent <del>thugs</del> agents.</p> <img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73594&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager"> Site and product updates - Johnny.Decimal https://johnnydecimal.com/blog/0239-site-product-updates/ 2026-08-19T09:44:52.000Z <blockquote> <p>Originally sent to the <a href="https://johnnydecimal.com/support/contact-community/mailing-list-rss-social">mailing list</a> on Wednesday 2026-08-19.</p> </blockquote> <p>Hey all. It&#39;s been a while; we&#39;ve been busy. Rather than overload this update, I&#39;ll send a couple of short(er than usual) updates over the next few days.</p> <h3 id="site-changes">Site changes</h3> <p>I&#39;ve been tweaking the site homepage <em>again</em>.</p> <p>The previous home and product pages had that &#39;sales page&#39; thing going on. Large text, not a lot of it, kinda shouty. It was a new approach – for most of the site&#39;s ten-year life it&#39;s had a predominantly-text homepage: <a href="https://web.archive.org/web/20150801154932/http://johnnydecimal.com/">2015</a>, <a href="https://web.archive.org/web/20180329164235/https://johnnydecimal.com/">2018</a>, <a href="https://web.archive.org/web/20200728174422/https://johnnydecimal.com/">2020</a>, <a href="https://web.archive.org/web/20240113225823/https://johnnydecimal.com/">2024</a>, <a href="https://web.archive.org/web/20260513043249/https://johnnydecimal.com/">2026</a>. I&#39;m glad I tried &#39;the shouty thing&#39;, once. Because now I know that I hate it and don&#39;t have to do it again.</p> <p>Design is hard. I have no design training. I opted out of every art class at school in favour of science. I like to think that I have <em>taste</em> – I know nice when I see it. But knowing it and making it are two different things.</p> <p>Thankfully, inspiration hit me in the form of <a href="https://www.are.na">Are.na&#39;s wonderful new homepage</a>. Charles <a href="https://www.are.na/editorial/how-do-you-describe-are-na-at-a-party">wrote about it here</a>. I&#39;m a big fan of their ethos and of his writing – I quote his <a href="https://www.are.na/editorial/personal-business">Personal Business</a> piece often.</p> <p>Seeing their page it hit me, instantly: that this shouty page that I&#39;d designed just <em>wasn&#39;t me</em>; wasn&#39;t us, Johnny and Lucy, this &#39;personal business&#39;. The old page was my attempt at being a Big Company – something I don&#39;t want to be!</p> <p>It&#39;s gone; blessed relief. In its place is <a href="https://johnnydecimal.com">a page</a> that I hope helps you find the place you&#39;re looking for. I hope it&#39;s useful to the newcomers, who don&#39;t know what this thing is, and the long-timers, who know just what they&#39;re looking for.</p> <p>I particularly like the new user flow. The page subtly changes when you go from signed out, to signed in with a free account, to signed in with access to products. Same place, same feel, slightly different story.</p> <p>I&#39;m proud of it. It feels like me. Let me know what you think.</p> <h3 id="product-name-updates">Product name updates</h3> <p>We&#39;ve updated the names of our products. So if you look in your new <a href="https://johnnydecimal.com/account">account page</a> you might see unfamiliar words. Nothing has actually changed other than a name.</p> <p>What was &#39;Life Admin System&#39; (and then, very briefly, …(pack only)) is now a <strong>Personal</strong> membership.</p> <p>What was &#39;Johnny.Decimal University&#39; (then, briefly, &#39;The Life Admin System&#39;) is now a <strong>Pro</strong> membership. This better reflects what we&#39;re doing with it – there&#39;s a fledgling API you can use, and most of the AI tools (see below) will require a Pro account. I want to keep adding useful stuff – if you&#39;re Pro, you&#39;ll get it all.</p> <p>And what was &#39;Small Business System&#39; is now a <strong>Business</strong> membership. It includes everything in Pro.</p> <p>What hasn&#39;t changed is that &#39;membership&#39; doesn&#39;t mean &#39;subscription&#39;. Pay once, access and updates forever. Nor have any of the prices changed.</p> <h3 id="lifetime-is-back">Lifetime is back</h3> <p>For a while we sold a <strong>Lifetime</strong> membership option. Then I couldn&#39;t figure out where it should sit, so I removed it.</p> <p>Enough people ask how they can support us, so I&#39;ve put it back. You&#39;ll find it there on your <a href="https://johnnydecimal.com/account">account page</a>. As with all of our products, it&#39;ll discount anything you&#39;ve already paid.</p> <p>For this extra money you get … not much, honestly! You get our eternal gratitude and love. You get everything we make in the future, but I can&#39;t promise what that&#39;ll be, if anything.</p> <p>Our Lifetime members make a huge difference. When I say love, I mean it. Thank you all.</p> <h3 id="ai-content-coming">AI content coming</h3> <p>The next update will be about exciting stuff I&#39;m doing with AI. I think it&#39;s really cool – but I know some of you aren&#39;t into it. There&#39;s a new button on the <a href="https://johnnydecimal.com/#settings">homepage</a>. If you don&#39;t want to hear about AI, turn it on. I&#39;ll do my best to filter it out of the site (still some work to do, bear with me).</p> <p>Do that in the next ~36 hours and I should be able to filter you out of AI-specific email. I haven&#39;t coded that up yet so no promises but I don&#39;t see why not. I should also be able to create an AI-free version of the RSS feed. I&#39;ll drop a post in the feed when I&#39;ve done that.</p> <p>Until next time,<br> j.</p>