Shellsharks Blogroll - BlogFlockhttps://blogflock.com/list/xJ8yq2026-10-29T14:56:00.000ZBlogFlockshellsharks2026-10-29 14:56: Been having some fun with my 404 page. I love discovering little Easter eggs like... - Kev Quirkhttps://kevquirk.com/2026-10-29-14562026-10-29T14:56:00.000ZKev Quirk<p>Been having some fun with my 404 page. I love discovering little Easter eggs like this on other people's sites. Just visit a random page, like <a href="https://kevquirk.com/mjkk">https://kevquirk.com/mjkk</a></p> <div class="email-hidden">
<hr />
<p>Thanks for reading this post via RSS. RSS is ace, and so are you. ❤️</p>
<p>You can <a href="mailto:19gy@qrk.one?subject=2026-10-29%2014%3A56">reply to this post by email</a>, or <a href="https://kevquirk.com/2026-10-29-1456#comments">leave a comment</a>.</p>
</div>Caching, bot defense and a CDN - Posts feedhttps://www.coryd.dev/posts/2026/caching-bot-defense-and-a-cdn2026-10-28T23:59:40.000ZPosts feed<div class="e-content block-subcanvas"><p>I've been wary of and interested in putting a CDN in front of my site. I had tools in place to <a href="https://www.coryd.dev/posts/2026/battling-bots">block bots</a> (<a href="https://www.coryd.dev/posts/2026/blocking-entire-countries-because-of-scrapers">and several countries</a>), but they were fragmented and it was an ongoing rock fight. I had a <a href="https://www.coryd.dev/posts/2026/my-router-is-not-a-calculator">Go job that banned IPs after too many 404s</a>, a crawler denylist that mirrored my robots.txt, and an SQL-injection probe filter (regex). I also wanted the improved load times and other niceties that come with a CDN. The catch (and cause for my concern) is that I wanted my existing Redis caching, live routes (like the now playing block on the home and music pages), and other bot-related mitigations to keep working.</p>
<h1 id="setup">Setup</h1>
<p>I've been using <a href="https://bunny.net/?ref=revw3mehej">bunny.net</a> to serve images here (and on <a href="https://follow.coryd.dev/@cory">my Mastodon instance</a>) for <em>ages</em>, so it was a natural shift to put their CDN in front of the site itself. I pointed the domain you're reading this on to a new pull zone, while leaving the apex and my admin pointing at the origin server. The "public" origin is accessible only via requests from the edge through bunny. Each request has a header set with a shared key, and Caddy rejects any requests to <code>www</code> without it. Anything live is excluded from edge caching: now playing, my contact form, and a few other APIs.</p>
<h1 id="caching">Caching</h1>
<p>I opted to have Go set cache lifetime per page with <code>Cache-Control</code> headers. There's a short default and longer ranges for pages that rarely change. I skipped bunny's Smart Cache (sometimes predictability is better than heuristics).</p>
<p>Cache invalidation is handled using tags (much like I do with Redis): every response has a <code>CDN-Tag</code>; saving things in my admin is debounced for a few seconds and then purges the appropriate tag. The cache is also purged at startup.</p>
<p>Redis caches database queries, bunny caches rendered HTML at the edge, and the page re-renders on every request that hits the origin.</p>
<p>Database migrations run when the new server starts. They write to the database directly, don't invalidate tags (or go to jail or collect $100), and benefit from the startup check that dumps the public content cache.</p>
<h1 id="blocking-things">Blocking things</h1>
<p>The important part! (Sort of.) I ran <a href="https://bunny.net/docs/shield/waf">bunny's WAF</a> in learning mode and tuned rules. If you block things outright, you block things you shouldn't (e.g. don't block contact form submissions in English). I maintain the list of crawlers I block in my CMS: each agent is a string tied to a path, and my robots.txt is generated, in part, from that relationship. These are now also synced into the CDN's rule set to block the same crawlers at the edge. bunny also provides their own block lists, and one of those lists blocked folks on Tor and VPNs (oops—that's set to challenge now).</p>
<h2 id="analytics">Analytics</h2>
<p>My analytics are hand-rolled and minimal. I have country data displayed in a graph, and that was previously populated using a GeoIP lookup. bunny, conveniently, supplies a country header, and the analytics now use that. I tweaked the implementation to record visits on page load rather than exit (exit events don't fire as reliably). Crawlers get excluded altogether (yay blocking!).</p>
<h2 id="reliability">Reliability</h2>
<p>bunny has a feature called <a href="https://bunny.net/docs/cdn/performance/origin-shield#origin-shield">Origin Shield</a> that sets up an additional caching layer in front of my origin. Cache misses get consolidated into one point, and my origin server ends up seeing fewer requests. The added benefit (in addition to the performance) is that some of bunny's edge locations couldn't hit my origin (which is IPv4-only). Putting the shield behind an edge node that <em>can</em> reach the origin fixes that. The network topology is hostile and unknown and weird and unpredictable and magical.</p>
<h2 id="breaking-things">Breaking things</h2>
<p>Feed readers rely on <code>If-None-Match</code> to avoid redownloading unchanged feeds. I've left mine uncached so my (minimal) feed analytics can count polls. bunny drops conditional-request headers headed for the origin even for pass-throughs it doesn't cache, which means every poll is a 200. If I can't see the 304, I can't handle it properly, and, for that, I am appropriately apologetic.</p>
<p>Request coalescing: this will break live routes. It's super handy for near-simultaneous requests for the same relatively static thing where a single copy can be returned in a performant fashion. This is antithetical to the notion of things that return unique and/or live responses. I put in an explicit skip list for those routes.</p>
<p>When I deploy, visitors will briefly see 502s. A new copy of the Go binaries gets copied to the origin server, the app restarts, and Caddy hasn't reloaded its config yet (said config gets copied over as part of the deploy). There's now a short retry for Caddy to help mitigate this.</p>
<p>For my now playing display: a page cached on the edge could flicker when it rendered older album art next to a live stream. Stale vs. live data: bad experience. The new cover is decoded off-screen and swapped into the view.</p>
<h2 id="done-mostly">Done, mostly</h2>
<p>Hand-maintained IP banning is gone, crawler lists are out of Caddy, GeoIP is gone, and most of that now lives at the edge. Oh, and I added an analytics chart of blocked bots. They've been fucking off more over time, which is nice. Things should be faster, too!</p>
</div>Moving DMV.community home - Cool As Heckhttps://cool-as-heck.blog/moving-dmv-community-home2026-10-28T21:32:01.000Zcool-as-heck<h1 id="i-moved-my-mastodon-server-into-my-house">I moved my Mastodon server into my house<br>
</h1>
<div>DMV.community has lived on a Vultr VPS for a while now. This week I moved it onto the server that sits in my house and already runs a few other things I self-host. It's a Ryzen 7 3800X with 32 GB of RAM and a fast NVMe drive, which is a lot more machine than the VPS ever was, and I'm already paying for the electricity.</div>
<div><br></div>
<div>It went pretty well. It also went sideways in a few fun ways I didn't see coming.</div>
<h2 id="the-move-itself">The move itself</h2>
<div>The actual cutover was the boring part, which is what you want. Stop Mastodon on the VPS, <code>pg_dump</code> the database, restore it at home, start everything up, flip DNS. The plan budgeted 20 to 35 minutes of downtime for all of it.</div>
<div>A few choices made that easy:</div>
<ul>
<li>
<b>Nothing is exposed from my house.</b> Traffic comes in through a Cloudflare Tunnel, so there are no open ports on my router and nobody can see my home IP from the outside.</li>
<li>
<b>Media stays in the cloud.</b> Images and videos already lived in an S3 bucket behind a CDN, so none of that moved. My home upload speed never has to serve somebody's cat video to every server that follows us.</li>
<li>
<b>Everything runs in rootless Podman containers</b>, each one managed as a systemd user service. Postgres, Redis, Elasticsearch, the web server, the streaming server, and a handful of Sidekiq workers.</li>
</ul>
<div>The search index had to be rebuilt from scratch on the new Elasticsearch, which took about an hour in the background. Search was a little dumb for that hour, and that was about it.</div>
<h2 id="the-security-thing-that-surprised-me">The security thing that surprised me</h2>
<div>This was the part that took the most work before the move, and I'm glad I didn't skip it.</div>
<div><br></div>
<div>A Mastodon server spends all day fetching URLs that strangers hand it: posts from other servers, link previews, profile pictures, videos it has to process with ffmpeg. On a VPS, the worst case of something going wrong is that one VPS. In my house, the same server sits next to my smart home devices, and every device on my network.</div>
<div><br></div>
<div>And by default, a rootless Podman container can reach services on the host's localhost <i>and</i> the rest of the home LAN. That's a very bad default for software whose whole job is fetching arbitrary URLs.</div>
<div><br></div>
<div>So the stack got locked down pretty hard:</div>
<ul>
<li>The database, Redis, Elasticsearch and the streaming server sit on an internal-only network with no route to the internet, the LAN, or the host. They can only talk to each other.</li>
<li>The web server and workers get a second network for internet access, plus a firewall inside Podman's network namespace that drops anything aimed at private address ranges, the host, or the LAN.</li>
<li>Every container drops its Linux capabilities, runs with no-new-privileges, and has memory/CPU/process limits, so a runaway media job gets killed by its own container instead of eating the machine.</li>
<li>New passwords for everything, Redis locked down. The old box had a couple of shortcuts I'm not proud of. They didn't make the trip.</li>
</ul>
<h2 id="then-it-was-slow">Then it was slow</h2>
<div>Day one, posting felt sluggish. Everything worked, but there was that little pause after you hit "Post" that makes you wonder if it went through.</div>
<div><br></div>
<div>The culprit was the disk, sort of. My home server uses btrfs, and the database was sharing that drive with everything else on the machine. Postgres is very particular about writing things to disk safely, and btrfs's copy-on-write behavior plus a bunch of neighbors all writing at once meant those safe writes would sometimes stall for seconds. A stalled write meant a stalled post.</div>
<div><br></div>
<div>The proper fix is giving the database its own drive with a plain old filesystem, so I ordered an SSD just for Postgres. Until it shows up, there's a temporary bandaid. I told Postgres it doesn't have to wait for every single commit to hit the disk before saying "done." The tradeoff is that a power cut could lose the last second or so of activity, which I can live with for a couple of weeks. I have the server plugged into a UPS </div>
<div><br></div>
<div>I also shut down my GoToSocial instance for now. It turned out to be the single biggest writer on that drive, more than Mastodon itself, so it's on ice until the new SSD is in.</div>
<h2 id="the-tune-up">The tune-up</h2>
<div>Once it was running, I had my Hermes agent dig through the whole stack to see what else could be tuned for this hardware. </div>
<div><br></div>
<div>Some highlights:</div>
<div><br></div>
<div>
<b>The nightly cleanup job was killing the website.</b> Mastodon needs regular cleanup of cached remote media, and that job was running <i>inside</i> the web server's container, sharing its memory limit. A long cleanup would use up the memory and the kernel would kill web server processes to make room. It now gets its own throwaway container with its own memory budget. Fun fact: the first cleanup run deleted 195,000 cached remote media files, around 346 GB worth, out of object storage. That's going to make a nice dent in the storage bill.</div>
<div><br></div>
<div>
<b>Every log line was being written twice.</b> Podman was logging each container's output to the system journal, and systemd was <i>also</i> logging it, so every line showed up twice. Combined with the background workers logging every single job they ran, that was hundreds of thousands of lines an hour. The journal hit its 4 GB cap and was rotating out old logs early. Now each line gets written once, and the workers only log warnings and errors.</div>
<div><br></div>
<div>
<b>One database query was doing way too much work.</b> The most expensive query on the whole server checked whether any account from a given server had a particular setting turned on. For big servers with no matches, Postgres had to look at every single account from that domain to answer "nope." One bridge server alone has over 150,000 accounts in my database. A small 7.6 MB index took that query from 352 ms down to about 8 ms.</div>
<div><br></div>
<div>
<b>Redis was allowed to throw away jobs.</b> Redis holds both Mastodon's cache and its background job queue. It was set to evict <i>any</i> key when it got full, which in theory includes jobs. I switched it to only evict keys with an expiration time, which is all the cache stuff and none of the job stuff.</div>
<div><br></div>
<div>
<b>Push notifications broke for some people.</b> About 30 users get notifications through ntfy.sh, and after the move ntfy.sh just... stopped answering my home IP. Everything else worked fine. My best guess is that a burst of backed-up notifications from a brand-new IP set off an abuse filter. The fix was a little relay: notifications headed for ntfy.sh now hop through another server I run in a datacenter. It's just passing encrypted traffic along, so it never sees the contents. Notifications started flowing again within minutes.</div>
<div><br></div>
<div>A few smaller things got fixed too: Postgres settings that assumed more RAM and CPU than its container actually gets, and a monthly cleanup job with a SQL bug that would have quietly done nothing.</div>
<div><br></div>
<h2 id="what-s-left">What's left</h2>
<ul>
<li>
<b>The SSD.</b> When it arrives, the database moves to its own drive and the temporary bandaid comes off.</li>
<li>
<b>A big cleanup.</b> About half of the 24 GB database is leftover link-preview data for posts that no longer exist. Mastodon's own cleanup deletes old posts in bulk and leaves the link-preview rows behind. Clearing that out before the SSD move means the database lands on the new drive half the size.</li>
<li>
<b>GoToSocial comes back</b> once the database has its own drive.</li>
</ul>
<h2 id="was-it-worth-it">Was it worth it?</h2>
<div>So far, yeah. The server has way more headroom than it did on the VPS, and I understand how the whole thing works even better than I did a week ago. Nothing like a server migration as a learning opportunity. Also, monthly hosting costs will drop significantly. The only thing left to pay for in the cloud is S3 and the media proxy. The trade is that it's in my house now. If the power goes out for a long time, DMV.community goes out with it. The status page lives on a VPS though, so it will always be accurate.</div>
<div><br></div>
<div>If you're thinking about bringing a Fediverse server home with you, my two cents: put the database on its own disk from day one, and assume your container runtime's network defaults are friendlier than you want them to be.</div>ChatGPT knows everything about its users. It will not be a good steward of that power. - Werd I/O6ae23d9c3f0ca40001303e1c2026-10-28T18:23:24.000ZWerd I/O<p>Link: <a href="https://futurism.com/artificial-intelligence/chatgpt-building-profiles-users"><em>ChatGPT Is Building Detailed Psychological Profiles of Its Users, by Maggie Harrison Dupré in Futurism</em></a></p><p>It probably shouldn’t be a surprise that chatbots like ChatGPT are profiling their users. Still, there are some surprising numbers here:</p><blockquote>“A staggering 96 percent of memories were created unilaterally by the chatbot, according to the study, meaning that the users had little overt control over the data points that ChatGPT logged as their interactions wore on. Stored memories were also deeply revealing about users. About 28 percent of the memories examined contained personal data as defined by Europe’s strict General Data Protection Regulation standards, and 52 percent contained rich “psychological insights” about users.”</blockquote><p>I think back to Gina Chua and Adiel Kaplan’s <a href="https://www.journalismfutures.org/three-layer-cake">three-layer cake analogy for the AI stack</a>. In their analysis, the <em>consumption</em> layer profiles the user; this new report makes clear how deep that profiling goes.</p><p><a href="https://werd.io/news-will-be-intermediated-by-ai-whats-next/">As I said in my commentary then</a>:</p><blockquote>“Profile data is accumulated, private, and usually non-portable. The consumption layer also represents the greatest risk to creators from platform business decisions, both in terms of the business models of those platforms and which creators they choose to feature. Open portability standards and protocols — combined with full user control of their data — can scale, create useful competition, and empower users in the process.”</blockquote><p>Nothing here dissuades me from that view. To be as useful as possible, AI tools need to dig into our most personal information, make inferences about who we are and what’s interesting to us, and maintain highly personal profiles. Our AI agents are not some kind of trusted friend: they are products owned by a third party that needs to justify a trillion dollar valuation and may not have our best interests at heart. All the major vendors provide services used by the military and law enforcement. What happens if one of those agencies wants to get hold of that profile information? These companies simply cannot be trusted with our most private information, and should not have access to it.</p><p>But, of course, legislators have also been negotiated into a position of alignment with AI accelerationism. We need to gather all of this personal information about individuals in a supposed democracy, they argue, because otherwise China will win! These concerns seem to trump the fact that privacy is considered <a href="https://en.wikipedia.org/wiki/Right_to_privacy">a fundamental human right</a>, for very solid and defensible reasons: it makes dissent, organizing, a free press, and a well-lived life possible.</p><p>I am not arguing that there are not legitimate uses for AI or that the technology is not transformative. But there should not be an argument that we should let go of our core human values or the fundamental protections needed to maintain a robust democracy — of which privacy is one — because this tech is cool and we need it to grow really fast and by the way it’s also now <a href="https://www.washingtonpost.com/technology/2026/10/07/ai-is-propping-up-economy-including-manufacturing-ads-energy/">propping up our economy</a>. Trading privacy for growth is not a smart long-term strategy: it will bite us.</p><p>As individuals, we can protect ourselves by using different tools. But privacy is a group inoculation. If the chatbot is profiling its users, I suspect it’s also profiling the people its users are talking about. We need to demand better behavior from our vendors while taking steps to also demand it from our friends.</p>Gadget Review: SoundPEATS CC3 Pro Bluetooth Headphones ★★★★⯪ - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=754882026-10-28T12:34:54.000ZTerence Eden’s Blog<p>These are easily the <em>most</em> comfortable headphones I've worn. I've literally had them clipped around my ears all day without noticing them.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/09/ccpro3.webp" alt="Clip on headphones." width="2048" height="1152" class="alignleft">
<p>The good folks at <a href="https://soundpeats.com/en-gb">SoundPEATS</a> have sent me their latest cans to wrap around my lugs. I'm a big fan of these new-style "clip on" headphones. Rather than encasing your ears, or sticking way down into the wax-mines, these clip over your ear. It isn't a tight grip like a paperclip - more like the gentle caress of a tender but firm lover who wants only to delicately pinch your ears.</p>
<p>Look - it's hard writing about this stuff, OK?! Grab a pair and try them; you'll see what I mean. Here's a picture of an attractive model to give you an idea.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/female-model.webp" alt="Woman with clip on headphones." width="999" height="576" class="aligncenter">
<h2 id="specs"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#specs">Specs</a></h2>
<p>All the usual things you'd expect from headphones. AAC and SBC audio codecs are standard, it'll also do LDAC - which will get you higher quality but at the expense of battery life and the ability to connect to multiple devices at once.</p>
<p>The case recharges via USB-C, the battery seems fairly chunky and will quick-charges the headphones. 10 minutes in the case will give them 3 hours of playback.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Product-shot.webp" alt="Product shot showing the headphones and case." width="1024" height="683" class="aligncenter">
<p>Each clip has a button - you can change what they do in the supplied app.</p>
<p>IPX6 should be good for wearing in the rain, but you can't go swimming in them.</p>
<h2 id="useful-features"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#useful-features">Useful Features</a></h2>
<p>We all know what headphones can do - play audio, provide a microphone, and let you control the audio coming from your device. The CC3 Pro also have a few other smart features.</p>
<p>Like most decent battery-powered headphones, they will automatically switch off after a predetermined period without use.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Scheduled-off.webp" alt="Screenshot of scheduled off functionality." width="504" height="616" class="aligncenter">
<p>There's a privacy mode which adds an EQ filter to reduce sound leakage. It works, but does make the sound slightly murkier.</p>
<p>There's a button on each one - you can use the app to set actions for tap, double-tap, triple-tap, and long press.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Custom-gestures.webp" alt="Screenshot of custom gestures settings." width="504" height="751" class="aligncenter">
<p>The case supports wireless charging, so you can chuck it on any charging puck for a quick top-up.</p>
<h2 id="comfort"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#comfort">Comfort</a></h2>
<p>Outstanding. After a few minutes you will genuinely forget that you're wearing them. Shake your head as hard as you like and they will not fall off. Here's a genuine photo of me doing some manly exercises while wearing them.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/male-model.webp" alt="Male model, slightly sweaty, wearing headphones." width="1024" height="576" class="aligncenter">
<h2 id="sound-quality"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#sound-quality">Sound Quality</a></h2>
<p>Excellent - with a couple of caveats. These are open-ear devices. You can hear the world around you. That is by design and is extremely useful if you need to be aware of your surroundings. You can't block out the world or do active noise cancelling. I was not a fan of the default EQ. The bass wasn't bassy enough for me. It's easy enough to change in <a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#the-app">the app</a> - but that does require a login.</p>
<p>Voice quality when speaking on the phone was also good. The people I spoke to could hear me clearly and with minimal background noise.</p>
<h2 id="android"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#android">Android</a></h2>
<p>Piece of cake. Open the case, press the button on the back, they're ready to pair.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Android.webp" alt="Android showing HD Audio." width="504" height="462" class="aligncenter">
<p>Sound quality was great, my voice transmitted just fine, and I could easily play/pause and adjust the volume.</p>
<h2 id="linux"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#linux">Linux</a></h2>
<p>Again, dead easy. Ubuntu detected and paired with them instantly.</p>
<h2 id="the-app"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#the-app">The App</a></h2>
<p>I've complained to SoundPEATS before about their lousy app. The best thing I can say about it is that you don't <em>have</em> to use it. It's handy for downloading the occasional firmware update and fiddling with the setting. But that's about it.</p>
<p>It obnoxiously insists on needing an Internet connection to change <em>some</em> settings. Stuck on a train in the middle of nowhere and want to adjust your EQ? Tough. Similarly, some functionality is gated behind a login wall - such as the custom EQ and custom sound effects.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Login-to-get-more.webp" alt="Screenshot showing log in to get more." width="504" height="705" class="aligncenter">
<p>Thankfully, the rest of the app is fairly simple to use and will work offline. You can adjust what the buttons do, for example:</p>
<p>Weirdly, you can also download other people's EQ settings.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/EQ-Marketplace.webp" alt="Screenshot of the EQ marketplace." width="504" height="892" class="aligncenter">
<p>There's also a firmware update and a bunch of other things to flick on and off.</p>
<h2 id="downsides"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#downsides">Downsides</a></h2>
<p>Other than the app, there are a few niggles which are only slightly annoying.</p>
<p>Firstly, they don't pause when you take them out of your ear. That's a feature which was on <a href="https://shkspr.mobi/blog/2025/11/gadget-review-soundpeats-clip1-cuff-headphones/">the first set of SoundPeats</a> I had and is sorely missed.</p>
<p>Secondly, the default sound profile wasn't very bass heavy. A bit of fiddling in the app and they sounded much better.</p>
<p>While they do charge in either slot within the case, they're incompatible with previous SoundPeats cases. The risk with smaller manufacturers like this is that you won't be able to find a cheap replacement case if you need it.</p>
<h2 id="price"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-soundpeats-cc3-pro-bluetooth-headphones/#price">Price</a></h2>
<p>Launch price is about £75 / €80. That's getting towards the upper end of what I think is acceptable for headphones like this.</p>
<p>Readers of this blog can use code <code>PRCC3PRO</code> for an <em>extra</em> 10% off at <a href="https://link.amazon/B06umgpc8">Amazon UK</a> or other <a href="https://link.amazon/B06umgpc8">international Amazon stores</a>. The code should work from today until 30th November 2026.</p>
<p>Ultimately, these are ridiculously comfortable headphones. They won't block out the noise of the environment around you - but that's their selling point. You use these while cycling, wandering through the city, or any other time you need to be aware of your surrounding. If you can put up with the slightly shonky app, these are well worth the price.</p>
<p>Many thanks to SoundPeats for the review pair.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=75488&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">Trade zines with me! - James' Coffee Bloghttps://jamesg.blog/2026/10/28/trade-zines-with-me2026-10-28T00:00:00.000ZJames' Coffee Blog
<p>Over the last few weeks I have been experimenting with making more zines. I have been having so much fun!</p>
<p>If you make zines and would like to trade, please <a href="https://jamesg.blog/email">send me an email</a>! You can also see a few of my downloadable zines in the <a href="https://jamesg.blog/zines">Zines category of my website</a>.</p>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a51ab1682880e88f',t:'MTc5MzE5ODM5OA=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
<a class="tag" href="https://jamesg.blog/email">send me an email</a>
<a class="tag" href="https://jamesg.blog/zines">Zines category of my website</a>
Read "ChatGPT's Advice to Cut Her Seizure Drug Led to Devastating Consequences" - Molly White's activity feed6ae11a632be334bbcec4dd602026-10-27T21:40:51.000ZMolly White<article class="entry h-entry hentry"><header><div class="description">Read: </div></header><div class="content e-content"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of" href="https://www.nytimes.com/2026/10/27/well/ai-chatgpt-medication-epilepsy-death.html?unlocked_article_code=1.L1E.hwOU.bGyBh4c0UThx&smid=url-share" rel="bookmark">“<span class="p-name">ChatGPT's Advice to Cut Her Seizure Drug Led to Devastating Consequences</span>”</a>. </div><div class="byline"><span class="p-author h-card">Teddy Rosenbluth</span> in <i class="p-publication">The New York Times</i>. <span class="read-date"> Published <time class="dt-published published" datetime="2026-10-27">October 27, 2026</time>.</span></div><blockquote class="summary p-summary entry-summary">The chatbot helped a woman taper off a lifesaving drug and hide the plan from her doctors.</blockquote><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><img src="https://www.mollywhite.net/assets/images/placeholder_social.png" alt="Illustration of Molly White sitting and typing on a laptop, on a purple background with 'Molly White' in white serif." style="display: none;"/></div><footer class="footer"><div class="flex-row post-meta"><div class="timestamp">Posted: <time class="dt-published" datetime="2026-10-27T21:40:51+00:00" title="October 27, 2026 at 9:40 PM UTC">October 27, 2026 at 9:40 PM UTC</time>. </div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/artificial_intelligence" title="See all feed posts tagged "artificial intelligence"" rel="category tag">artificial intelligence</a>, <a class="tag p-category" href="https://www.mollywhite.net/feed/tag/openai" title="See all feed posts tagged "OpenAI"" rel="category tag">OpenAI</a>. </div></div></footer></article>Note published on October 27, 2026 at 8:24 PM UTC - Molly White's activity feed6ae1086cb6faaacba7234d232026-10-27T20:24:12.000ZMolly White<article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>This is happening to me, but with "tips" about a huge range of crypto-related issues (or perceived issues) people are personally struggling with. The volume is genuinely challenging to deal with.</p><p>It takes fairly little effort for a person to tell their AI bot to research and draft an email, but it takes the recipients real time to dig into these tips and separate hallucinations from tips that might actually have some basis. They're basically DDOSing journalists.</p><p>I've basically had to start ignoring tips that come in with clearly AI-written emails, even though I know I risk missing stuff. I just don't have the capacity.</p><div class="related-post"><div class="article h-cite hcite"><div class="title"><a class="u-url u-repost-of u-in-reply-to" href="https://www.404media.co/chatgpt-says-404-media-is-tech-support-for-huge-corporations/" rel="bookmark">“<span class="p-name">ChatGPT Says 404 Media Is Tech Support for Huge Corporations</span>”</a>. </div><div class="byline"><span class="p-author h-card">Jason Koebler</span> in <i class="p-publication">404 Media</i>. <span class="read-date"></span></div><blockquote class="summary p-summary entry-summary">Over the last few months, 404 Media has gotten dozens of clearly AI-generated story leads and tips, many of which appear to have been copy pasted directly from ChatGPT or other chatbots into an email client by a real human. Some of these tips are (or could be) of legitimate public concern and we are happy to get them and to look into them. Many, though, are not.This morning, for example, an Italian painter told me he “loses professional Meta accounts despite contradictory reinstatement email,” and said, in English, that he had “attached a nine-screenshot evidence dossier prepared on 16 October 2026.” When I emailed the painter back asking how he found me, he said “ChatGPT suggested contacting you. I was looking for journalists who investigate technology companies, particularly Meta and issues involving account suspensions and platform accountability.”
Last night, someone emailed me, Joseph, Sam, Emanuel, the Washington Post, CBS News, NBC News, The Markup, The Information, the Los Angeles Times, and the Chicago Sun Times asking for an “independent investigation” into why their Verizon cell phone service wasn’t working on their iPhone. </blockquote></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-block"><div class="timestamp">Posted: <a class="u-url" href="https://www.mollywhite.net/micro/entry/202610271623"><time class="dt-published" datetime="2026-10-27T20:24:12+00:00" title="October 27, 2026 at 8:24 PM UTC">October 27, 2026 at 8:24 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117514734748326284" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3myuzvpv5hs2b" title="Bluesky" rel="syndication">Bluesky</a></div></div><div class="bottomRow"><div class="tags">Tagged: <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/artificial_intelligence" title="See all micro posts tagged "artificial intelligence"" rel="category tag">artificial intelligence</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/journalism" title="See all micro posts tagged "journalism"" rel="category tag">journalism</a>. </div></div></footer></div></article>The Gate of the Feral Gods - Kev Quirkhttps://kevquirk.com/the-gate-of-the-feral-gods2026-10-27T19:43:00.000ZKev Quirk<div class="book card"><h2>The Gate of the Feral Gods</h2><p><b>Author:</b> Matt Dinniman<br><b>Genre:</b> Sci-fi<br><b>Released:</b> 2021<br><b>Rating:</b> <span class="star-rating"><span class="star-rating" aria-label="3/5 ★★★☆☆">★★★☆☆</span></span></p><p><em>New Achievement! Total, Utter Failure.</em>
<em>You failed a quest less than five minutes after you received it. Now that’s talent.</em></p>
<p>Surviving in a multilevel dungeon that also happens to be the set of the galaxy’s most watched game show has taught Coast Guard vet Carl and his ex-girlfriend’s cat, Princess Donut, that there’s only one thing they can count on apart from each they never know what’s coming next. And this floor is no exception.</p>
<p>A floating fortress occupied by warrior gnomes. A castle made of sand. A derelict submarine guarded by malfunctioning machines. A haunted crypt surrounded by lethal traps.</p>
<p>It was supposed to be easy. One bubble. Four castles. Fifteen days. Capture each one, and the stairwell is unlocked. Here's the thing. It's never easy. Going it alone is not an option this time, so Carl and his team must rely on the help of the low-level, I-can't-believe-these-idiots-are-still-alive crawlers trapped in the bubble with them. But can they be trusted?</p>
<p>Welcome, Crawlers. Welcome to the fifth floor of the dungeon.</p><p><a class="button" target="_blank" href="https://www.goodreads.com/book/show/220772908-the-gate-of-the-feral-gods">Learn more on Goodreads ➡</a></p></div>
<hr>
<p><em>Dungeon Crawler Carl</em> is a fun series of book, but like <a href="https://kevquirk.com/the-dungeon-anarchists-cookbook">number 3</a> this one felt like a bit of a drag up until the last 1/5 of the book, where I think it got better. I particularly like how Carl is starting to really establish himself in the dungeon now and continues to put two fingers up to the powers that be.</p>
<p>I felt that the story arc was really slow to get going on this book, but once it did gain momentum, it was enjoyable.</p>
<p>I've been reading these books back to back; there's other books I want to read, so I think I'm going to take a break from <em>reading</em> these books and will switch to something else.</p>
<p>I won't stop consuming the series though - my backlog of podcasts has dwindled lately, and lots of people have recommended the Dungeon Crawler Carl audiobooks. So I've started listening to book #5 in the car and on walks, and will switch to reading something else.</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=The%20Gate%20of%20the%20Feral%20Gods">reply to this post by email</a>, or <a href="https://kevquirk.com/the-gate-of-the-feral-gods#comments">leave a comment</a>.</p>
</div>Flight log - Joel's Log Fileshttps://joelchrono.xyz/blog/flight-log2026-10-27T16:00:00.000Zjoelchrono<p>I have turned on airplane mode on all my devices, the plane is now moving, preparing for flight.</p>
<p>Waiting in the airport I played a bunch of <em>Castlevania Symphony of the Night</em>—I managed to reach the second boss fight which is a very cool encounter!—-but I plan to read during the flight ahead. Perhaps I’ll finish <em>Dune Messiah.</em></p>
<p>I’m going to watch the flight attendants demonstrating safety measures. The emergency exits, the use of seatbelts, and other procedures.</p>
<p>The lights shut off at 6:04, perfect for my Kobo to shine</p>
<p>Each seat row had three seats. I was in the middle. But the person that was on the window didn’t show up! So I got to have unfettered access to the sky view.</p>
<p>The airplane is lining up, readying itself for takeoff. Weird noises for a few seconds, but it seems like all is going well.</p>
<p>We are speeding up on the track, the engine can be felt. I can see the wing of the airplane on my right side. The lights at the end of the wing pointing up.</p>
<p>A bit faster, a slight bump on the road, nothing major, we keep going, still on the ground. I don’t know why I imagine the scene of Back to the Future, waiting for the 88 miles per hour. But no, we are not traveling in time—I’m going to fly once again.</p>
<p>The way feels smoother now, the lights on each side of the street are moving along. It’s weird, I imagined feeling the speed more, but it’s rather comfortable inside…</p>
<p><em>Oh</em>, we were just going to beginning of the <em>actual track</em>, and I feel kinda dumb. I can see the lights now, the engines roar louder than ever.</p>
<p>I feel the pressure on my body, we are actually fast now, beyong 88 for sure. The lights blinking, left behind, one after another after many more.</p>
<p>All the other airplanes left behind, waiting their turn.</p>
<p>WE ARE UP IN THE SKY</p>
<p>THE LIGHTS OF THE CITY ARE BELOW</p>
<p>I FEEL LIKE EVERYTHING IS GOING UPSIDE DOWN</p>
<p>BUT THINGS ARE NEATLY CALMING DOWN</p>
<p>NO MORE FRICTION AGAINST THE GROUND</p>
<p>ONLY THE AIR REMAINS, THE SPACE ABOVE</p>
<p>WE ARE STILL GOING UP AND UP AND UP</p>
<p>AND THE PLANE IS TURNING</p>
<p>WE ARE GLIDING IN THE AIR</p>
<p>TOWARDS OUR DESTINATION</p>
<p>I AM IN AIRPLANE MODE</p>
<p>THE CLOUDS. THEY ARE BY MY SIDE</p>
<p>I CAN SEE THEM</p>
<p>I AM GOING THROUGH THE CLOUDS</p>
<hr />
<p>The pilot said how many feet we would go up, something like thirty thousand or more</p>
<p>I didn’t pay attention</p>
<p>But the scale is beyond my comprehension</p>
<p>I can see the whole city below me!</p>
<p>I’m flying!</p>
<p>I’M ABOVE</p>
<p>THE CLOUDS</p>
<p>ABOVE THE CLOUDS</p>
<p>THEY LOOK LIKE MARSHMALLOWS</p>
<p>LIKE COTTON I WANNA EAT</p>
<p>THE WING LOOKS GREAT</p>
<p>I WISH IT WASN’T IN THE MIDDLE OF IT ALL</p>
<p>IT DOESNT MATTER IT’S STILL SUPER COOL</p>
<p>CLOUDS EVERYWHERE</p>
<hr />
<p>I only managed to finish one chapter before the descent was announced on the speakers of the airplane</p>
<p>I felt it all of a sudden on my stomach and my ears, the begining of the end. The sun is to my right on the horizon, no more darkness outside.</p>
<p><img src="/assets/img/blogs/2026-10-27-flight.webp" alt="The sky outside" /></p>
<p>This is day 60 of <a href="https://100daystooffload.com">#100DaysToOffload</a></p>
<p>
<a href="mailto:me@joelchrono.xyz?subject=Flight log">Reply to this post via email</a> |
<a href="https://fosstodon.org/@joel/idcomments">Reply on Fediverse</a>
</p>Book Review: You Could Do Something Amazing with Your Life [You Are Raoul Moat] - Andrew Hankinson ★★★★☆ - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=769552026-10-27T12:34:53.000ZTerence Eden’s Blog<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/9781911344322.webp" alt="Book cover featuring a cherubic boy smiling at the camera." width="200" class="alignleft">
<p>It is hard to write a book in the second person. It is even harder to make it this good. It would have been easier to write a salacious cash-in with a dozen shocking revelations in each chapter. Instead, Andrew Hankinson attempts to use Raoul Moat's own words to build up a picture of the man.</p>
<blockquote><p>You have nine days and your whole life to prove you are more than a callous murderer.</p>
<p>Go.</p></blockquote>
<p>It is written with sympathy, but without being sympathetic. A stream of consciousness interrupted only occasionally by the voice of god [it probably isn't god] to provide clarity to an unreliable narrator. The paranoia and delusion come streaming off the page, couched in a tone of voice that exudes reasonableness. It doesn't glorify the man, nor does it make excuses for him, instead it asks you to consider what you choices you could have made under similar circumstances.</p>
<p>Almost every sentence is set up as a challenge to the reader. Is this man telling the truth? If so, are his actions understandable or explainable? If not, where is the truth and how would you know? When someone has such a fundamental disconnect from reality, when their model of the world and human interactions is so broken, what can society do to help?</p>
<p>From Moat's point of view, he is the Biblical Job. A callous god tests and torments him. Beset by challenges he never loses faith even after the all the world can throw at him. The god [in parentheses] is <em>also</em> an unreliable narrator. The author has built upon all the official reports, the suicide notes, the rambling messages, and interviews with contemporaries. But, as is acknowledged, we can never truly know what goes on in someone's head; we can only judge their actions and their aftermath.</p>
<p>A constant drumbeat is the way Moat claims he was repeatedly victimised by the police. Given all his other delusions, the reader might easily conclude that this is yet another piece of self-pitying nonsense. And yet, when discussing how Moat actually died there <em>does</em> appear to be a conspiracy of silence. The police's behaviour and attitudes are exactly what you would expect from people perpetrating a cover-up.</p>
<p>Naturally, this is a depressing and often upsetting read. It reminds me of the autobiography <a href="https://shkspr.mobi/blog/2018/08/week-notes-5/#non-fiction">Mini and Me</a> about a child arsonist. In both that book and this, we witness people being offered help and refusing it. Much like <a href="https://en.wikipedia.org/wiki/Parable_of_the_drowning_man">the parable of the drowning man</a> it seems people often overlook the helping hand.</p>
<p>Are you responsible for this? The start of the book describes Moat reaching out for psychiatric help. He is offered an appointment but never turns up. He's offered another one, but still doesn't attend. Whereupon the offer of help is withdrawn. Our society strongly favours individual responsibility. Autonomy is to be persevered for all but the most extreme cases. Should Moat have been forcibly removed from home and made to attend his appointments?</p>
<p>Do you want to live in a society where missing a few meetings with a social worker results in you being detained against your will? Are you happy to accept his attacks as a price worth paying for your freedom?</p>
<p>If a journalist took words you'd written in the heat of the moment, would it paint you in a terrible light? How confident are you that you know the truth of any situation? Are you lying to yourself right now?</p>
<p>This is an excellent and provocative book. I picked this up after <a href="https://bsky.app/profile/robmanuel.b3ta.com/post/3mxdzridrm22p">seeing Rob Manuel post about it</a>. I like the idea of an informal online book club! If someone wants to set one up, please do invite me.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=76955&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">Backporting security fixes to stable releases - Trail of Bits Bloghttps://blog.trailofbits.com/2026/10/27/backporting-security-fixes-to-stable-releases/2026-10-27T11:00:00.000ZTrail of Bits Blog<p>The software you are running is almost certainly riddled with known, unfixed security bugs. These bugs can be trivially and quickly exploited by modern AI agents. This is not merely theoretical; I saw this during my <a href="https://blog.trailofbits.com/2026/08/26/vms-wont-contain-cyber-capable-agents/">sandbox escape research</a>, and an old vulnerability in stable software was used as a part of the <a href="https://www.hacktron.ai/blog/hacking-openai">recently disclosed OpenAI hack</a>:</p>
<p>
<figure>
<img src="https://blog.trailofbits.com/2026/10/27/backporting-security-fixes-to-stable-releases/backporting-security-fixes-to-stable-releases-image-1_hu_6e208daf0d401eaf.webp"
alt="“OpenAI hack exploit chain”"
width="1200"
height="709"
loading="lazy"
decoding="async" />
<figcaption>From the official hack description</figcaption>
</figure>
</p>
<p>To say it simply: whatever you are running is almost certainly easily hackable by advanced AI. Luckily, there is a fix, and we (not just at Trail of Bits, but in the security industry more broadly) are working on it. But first, how did we get here?</p>
<h2 id="stability-versus-security">Stability versus security</h2>
<p>Software has bugs, and some are relevant to security. We try to fix them when we can, and the first place the fix happens is in the latest version of the software. Unfortunately, that’s often the <em>only</em> place where the fix happens. The process of getting a fix from the latest source code to older versions is called “backporting.”</p>
<p>Fixes for big-name, critical bugs are indeed often backported quickly. But for many other bugs, the backporting process never happens. It is easy to understand why: software packaging is often done by volunteers who are already overworked, and backporting is frustrating, thankless work that gets little credit or publicity. For open source projects staffed by teams of volunteers, backports are (understandably) a low priority.</p>
<p>The lack of backports is a problem because almost no one runs the latest and greatest version of software that’s been freshly built with today’s code changes. People <em>overwhelmingly</em> prefer slightly older, more tested software packaged in “long term stable” releases. For example, <a href="https://ubuntu.com/project/docs/release-team/ubuntu-releases/#lts-releases">about 95%</a> of Ubuntu Linux installations are of the Long Term Support (LTS) variety. When looking at installed Linux kernel packages from Debian’s <a href="https://popcon.debian.org/">popcon</a>, the overwhelming majority are based on older stable trees:</p>
<p>
<figure>
<img src="https://blog.trailofbits.com/2026/10/27/backporting-security-fixes-to-stable-releases/backporting-security-fixes-to-stable-releases-image-2_hu_98b68683d329bacc.webp"
alt="“Codex-generated graph of recently installed kernel packages from Debian’s popcon”"
width="1070"
height="834"
loading="lazy"
decoding="async" />
<figcaption>This is a Codex-generated graph of recently installed kernel packages from Debian’s popcon. The overwhelming majority (about 96%) are older, stable releases, and not the latest kernel series.</figcaption>
</figure>
</p>
<p>This puts users in a bind: They can either stick with a stable, familiar version of software that has security flaws, or upgrade to a newer version that fixes those flaws but introduces other changes and new features they may not want.</p>
<p>We should not have to make this choice.</p>
<h2 id="seeing-no-evil">Seeing no evil</h2>
<p>Even three years ago, we could stick our heads in the sand and pretend the problem didn’t exist: backporting all fixes was a genuinely difficult, time-consuming job and any attacks were extraordinarily unlikely.</p>
<p>Now, both of those assumptions are false. A swarm of cyber-capable AI agents can cut through a network of stable, known-vulnerable software like a hot knife through butter. On the positive side, AI has significantly lessened the burden for identifying and backporting security-relevant bugs.</p>
<p>Of course, we should assume all software has bugs (because it does), and use the lessons we learned in our computer security classes: mandatory access controls, code integrity checks, sandboxing, and privilege separation. This works. Mobile platforms are much safer because they enforce these standards. But desktop and server platforms don’t mandate this behavior, and few voluntarily enable protections. And yes, everyone should update to the latest software. But many people purposely do not update to releases. I think that this normal end-user behavior is <em>entirely justified</em>. Just recently, I updated my Mac to macOS 27 and couldn’t use a printer that had worked flawlessly for years (until Codex wrote a new, compatible printer driver, on the first try).</p>
<p>Regardless, it’s good practice to assume that something may have bugs and that they should be contained; leaving known, easily fixed bugs is negligent. So, let’s backport all the fixes!</p>
<h2 id="accounting-for-security-liabilities">Accounting for security liabilities</h2>
<p>Let’s quantify the scale of the problem. To make counting simple, we can limit ourselves to known bugs (with assigned CVEs) that are patched in the latest release but missing from stable packages. For this example, we’ll look at the Linux kernel, Ubuntu 26.04 LTS and Debian 13 Stable. I’m not singling out those projects—they are all run very well! I’m using them because they have documentation and accounting for unfixed CVEs. Other projects lack this transparency. The first step towards a solution is knowing that there is a problem.</p>
<p>Let’s look at the number of outstanding CVEs in the Linux Kernel, by stable branch. The table below shows CVEs per supported stable branch that do not have a fix in that branch, but do have it in a newer branch. (Hence, older branches by definition have more unfixed CVEs.) The source is the <a href="https://kernel.googlesource.com/pub/scm/linux/security/vulns/">kernel CVE team’s vulns.git</a> as of September 18, 2026. This is not an exact bug count, as it both over- and under-counts due to several technicalities. It is also not a measure of exploitability. Rather, it’s a measuring stick showing that a substantial amount of known CVEs have not been fixed in stable kernel branches:</p>
<table>
<thead>
<tr>
<th style="text-align: center">Branch</th>
<th style="text-align: center">Unfixed CVEs</th>
<th style="text-align: center">% CVEs with an NVD Score</th>
<th style="text-align: center">High or Critical Severity</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">5.10.y</td>
<td style="text-align: center">2,006</td>
<td style="text-align: center">55.8%</td>
<td style="text-align: center">213 (19.0%)</td>
</tr>
<tr>
<td style="text-align: center">5.15.y</td>
<td style="text-align: center">1,889</td>
<td style="text-align: center">51.5%</td>
<td style="text-align: center">195 (20.0%)</td>
</tr>
<tr>
<td style="text-align: center">6.1.y</td>
<td style="text-align: center">1,329</td>
<td style="text-align: center">43.9%</td>
<td style="text-align: center">99 (17.0%)</td>
</tr>
<tr>
<td style="text-align: center">6.6.y</td>
<td style="text-align: center">1,012</td>
<td style="text-align: center">35.6%</td>
<td style="text-align: center">65 (18.1%)</td>
</tr>
<tr>
<td style="text-align: center">6.12.y</td>
<td style="text-align: center">686</td>
<td style="text-align: center">22.3%</td>
<td style="text-align: center">21 (13.7%)</td>
</tr>
<tr>
<td style="text-align: center">6.18.y</td>
<td style="text-align: center">337</td>
<td style="text-align: center">15.1%</td>
<td style="text-align: center">3 (5.9%)</td>
</tr>
</tbody>
</table>
<p>The package landscape is not any better. These are non-kernel CVEs reported as open or affected in Debian 13 and Ubuntu 26.04 (raw data via their <a href="https://security-tracker.debian.org/tracker/data/json">respective</a> <a href="https://github.com/canonical/ubuntu-security-notices">bulk</a> CVE data feeds, compiled by Codex). These are distro-metadata findings, not individually source-confirmed vulnerabilities. Again, this is not meant to be an exact bug count, but more of a measuring stick indicating how many unfixed vulnerabilities remain in stable software packages:</p>
<table>
<thead>
<tr>
<th style="text-align: center">Distribution</th>
<th style="text-align: center">Source Packages with Unfixed CVEs</th>
<th style="text-align: center">Unique CVEs</th>
<th style="text-align: center">High or Critical Severity</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">Debian 13</td>
<td style="text-align: center">1,128</td>
<td style="text-align: center">4,562</td>
<td style="text-align: center">1,822 (39.9%)</td>
</tr>
<tr>
<td style="text-align: center">Ubuntu 26.04</td>
<td style="text-align: center">1,028</td>
<td style="text-align: center">770</td>
<td style="text-align: center">335 (43.5%)</td>
</tr>
</tbody>
</table>
<h2 id="fixing-the-bugs">Fixing the bugs</h2>
<p>We realized this was an issue and have been fixing it proactively. First, we started with the equivalent of finding $20 on the sidewalk: there are bug fixes to known CVEs which apply cleanly to the stable kernel trees, but the fix was just never pulled into the kernel. We used Codex with GPT-5.6 to find these fixes, and asked the maintainers to apply the existing patches. They did, graciously, and 142 fixes representing 90 CVEs in stable trees are currently applied; <a href="https://trailofbits.github.io/ptp-linux-stable-cve-dashboard/">the list on our backport tracker just keeps growing</a>. We are now backporting patches, starting with the most trivial to validate and review, and are slowly moving towards more complex changes.</p>
<p>We’ve done the same for Linux distributions: we used Codex and GPT-5.6 to identify known vulnerabilities in shipping stable packages, and then backport and validate a fix. We have begun reaching out to Linux distributions with an initial batch of patches. If you run an open source project or a Linux distribution and would like help backporting security fixes, please apply at <a href="https://trailofbits.com/patch-the-planet">trailofbits.com/patch-the-planet</a> and we’ll be glad to assist.</p>
<p>The big upside of stable software that does not add features is that we can, in theory, fix all the bugs before the bad guys do. So, let’s continue to patch the planet!</p>Wonders of Web Weaving, Behind the Scenes - James' Coffee Bloghttps://jamesg.blog/2026/10/27/www-bts2026-10-27T00:00:00.000ZJames' Coffee Blog
<p>After twenty-five wonderful conversations, <a href="https://web-weaving.jamesg.blog/">Wonders of Web Weaving</a> is, at least for now, complete. To everyone who has been listening over the last few months: thank you! It has been the greatest pleasure to not have terrific conversations with thoughtful web weavers, and to bring those to you every week.</p>
<p>When I started the project, I had a goal in mind: I wanted a show that would be fun to listen to on a train ride. A few weeks ago, when listening to the edited version of the second-to-last episode on a train, I thought to myself <em>I did it!</em></p>
<h2 id="behind-the-scenes">Behind the scenes</h2>
<p>In terms of how the project came to be, I emailed a mixture of people who I knew and people I didn’t, aiming to invite guests that would, together, represent a wide range of subjects related to the web. It was, and still is, important to me that the project was not a “tech podcast.” The web is about more than technology.</p>
<p>Before each conversation, I spent time with the guest’s personal website, scanning pages, looking at blog posts, and deciding on an “anchor” that would be the theme of the episode around which my questions would be oriented. For instance, I spoke about <a href="https://web-weaving.jamesg.blog/16">accessibility with Nic</a>, as Nic has experience with accessibility. I also asked a few standard questions. Over time, I realised all my questions fit an arc: history, present, and future.</p>
<p>Through the course of the show, I had discussions on everything from <a href="https://web-weaving.jamesg.blog/22">writing on the web</a> to the “<a href="https://web-weaving.jamesg.blog/19">web revival</a>” to <a href="https://web-weaving.jamesg.blog/13">mathematics</a> to accessibility (ep. <a href="https://web-weaving.jamesg.blog/16">16</a> and <a href="https://web-weaving.jamesg.blog/20">20</a>) to <a href="https://web-weaving.jamesg.blog/2">magazines</a> to <a href="https://web-weaving.jamesg.blog/10">books</a> and more. And, in so doing, I was conscious to ensure that the podcast was not all men talking about technology. There were and are more voices to be heard who have stories I wanted to hear. To that end, I hope I played a tiny part in introducing you to some voices you may not have encountered on the web before.</p>
<p>In terms of the actual discussions, in every conversation, I started with five or so minutes of chatting with the guest and introducing them to the recording process, then we recorded for ~40-50 minutes – sometimes for less time, sometimes for more – and, in the remaining time, did wrap up and I communicated the logistics of transcriptions and releases. While I invited guests with the email subject “Podcast interview?”, I was conscious to communicate upfront and early on that I liked the episodes to be “conversations” or “discussions”, not interviews. After all, this project is all about celebrating the web.</p>
<p>At the end of every episode, I asked two questions, one on the theme of the future, and the other a “fun question.” As a result of the question about the future – which was some variant on “where do you hope the indie web will be in five years?” – we have a collection of potential futures. Indeed, especially now, I think it is important to imagine what we want the web to be. At this point I will invite you to be a part of the show and ask you: where do you hope the indie web will be in five years?</p>
<p>The fun questions went through phases, but eventually coalesced on a roughly-standard question where I asked the guest to share a fun fact about where they are in the world. I thought this was a nice way to end the show: with a smile, with something interesting.</p>
<h2 id="concluding-the-show">Concluding the show</h2>
<p>At the beginning of the show, I promised myself I would do 10 episodes. Because I was so excited about the project, the number of episodes planned became 15, and then 20, and then at least 25. With that said, I always wanted the show to be limited in its number of episodes because I know that it is challenging to keep something going on for a long time. Having an end number of episodes made it easier to commit to the project.</p>
<p>This autumn, I had began a new run of recording, but it was starting to get a bit much in addition to the other priorities I had. There were other episodes lined up, but I thought it best to pause on a high note than try to rush.</p>
<p>There may be another season one day, but, at least for now, the project is complete.</p>
<h2 id="thank-you">Thank you</h2>
<p>To all the people who agreed to spend an hour chatting with me about the web, thank you so much for sharing your thoughts. I want to extend a special thanks to <a href="https://zacharykai.net">Zachary</a> from <a href="https://lunaseeker.com">Lunaseeker Press</a> for transcribing the episodes. I decided I wanted a transcript for every episode from day one, so that people who prefer to read, or for people who cannot listen to a podcast, had a transcript available to them.</p>
<p>To everyone listening, thank you for spending time with me and the guests. This project has been a real pleasure to work on. And, if you haven’t listened before, good news: you have <a href="https://web-weaving.jamesg.blog">25 hours of all things indie web</a> to which you can listen!</p>
<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a510974fae4c8f4d',t:'MTc5MzA5MjQ3Mg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
<a class="tag" href="https://lunaseeker.com">Lunaseeker Press</a>
<a class="tag" href="https://web-weaving.jamesg.blog">25 hours of all things indie web</a>
<a class="tag" href="https://web-weaving.jamesg.blog/10">books</a>
<a class="tag" href="https://web-weaving.jamesg.blog/13">mathematics</a>
<a class="tag" href="https://web-weaving.jamesg.blog/16">16</a>
<a class="tag" href="https://web-weaving.jamesg.blog/16">accessibility with Nic</a>
<a class="tag" href="https://web-weaving.jamesg.blog/19">web revival</a>
<a class="tag" href="https://web-weaving.jamesg.blog/2">magazines</a>
<a class="tag" href="https://web-weaving.jamesg.blog/20">20</a>
<a class="tag" href="https://web-weaving.jamesg.blog/22">writing on the web</a>
<a class="tag" href="https://zacharykai.net">Zachary</a>
Wonders of Web Weaving, Episode 25 - James' Coffee Bloghttps://jamesg.blog/2026/10/27/www-252026-10-27T00:00:00.000ZJames' Coffee Blog
<p><a href="https://web-weaving.jamesg.blog/25">The twenty-fifth episode of Wonders of Web Weaving is out</a>:</p>
<blockquote>
<p>In Episode 25, the final episode of Wonders of Web Weaving (at least for now!), I chat with <a href="https://emgoto.com">Emma</a>, the author of <a href="https://emgoto.com">emgoto.com</a> about, among other things, blogging about coffee and hiking, the idea of a "hobby blog", projecting posts onto a map, and more.</p>
</blockquote>
<p>I hope you enjoy the episode!</p>
<p><a href="https://web-weaving.jamesg.blog/subscribe/" rel="noreferrer"><em>Wonders of Web Weaving also has an RSS feed</em></a><em> you can use to follow along from wherever you get your podcasts.</em></p>
<a class="tag" href="https://emgoto.com">Emma</a>
<a class="tag" href="https://emgoto.com">emgoto.com</a>
<a class="tag" href="https://web-weaving.jamesg.blog/25">The twenty-fifth episode of Wonders of Web Weaving is out</a>
<a class="tag" href="https://web-weaving.jamesg.blog/subscribe/">Wonders of Web Weaving also has an RSS feed</a>
Solar is "offensively cheap". To live up to its promise, it also needs to be equitable. - Werd I/O6adf82c91b0a2d00016ee7912026-10-26T16:41:45.000ZWerd I/O<p>Link: <a href="https://www.bbc.com/future/article/20261023-how-solar-became-bigger-than-nuclear"><em>'It's offensively cheap': How solar power is quietly becoming bigger than nuclear, by Jocelyn Timperley for the BBC</em></a></p><p>This is something we should all be excited about:</p><blockquote>“The world's solar power is crossing a threshold. A decade ago, it barely registered on a global scale, providing just 1% of the world's power. In 2026, it will almost certainly increase to 10% of power, and overtake nuclear, a mainstay of electricity since the late 1970s.”</blockquote><p>Solar energy is abundant, and the cheaper and more efficient it gets, the more electricity there will be to power anything we want. On that level alone, we should be cheering for its success.</p><p>But the other property solar energy has is relative decentralization. While not anyone can <em>build</em> a solar panel, anyone can plug one in — and, obviously, the sun belongs to everyone. It represents real energy independence, not just internationally, but from large energy companies (at every level from fossil fuel multinationals to utilities) that have <a href="https://www.desmog.com/2021/10/29/dirty-dozen-documents-big-oil-secret-climate-knowledge-part-1/">enjoyed enormous influence for over a century</a>.</p><p>Or it should. Energy companies <a href="https://azpm.org/s/66276-arizona-utility-finally-comes-clean-about-political-spending/">have sponsored laws, rules, and regulations</a> in the US <a href="https://www.energias-renovables.com/autoconsumo/iberdrola-la-compania-que-ideo-el-impuesto-20220621-1">and elsewhere</a> that have made it harder for people to plug solar in. Those should be defeated, and our electrical systems should be upgraded to take decentralized solar into account.</p><p>But the power dynamics don’t end at the influence of energy companies: a large share of the polysilicon in solar panels is produced in Xinjiang, where there have been well-documented allegations of <a href="https://shura.shu.ac.uk/29640/">forced labor of Uyghurs and other minority groups</a>. Batteries often contain cobalt, which is dug from the Democratic Republic of Congo, <a href="https://www.npr.org/sections/goatsandsoda/2023/02/01/1152893248/red-cobalt-congo-drc-mining-siddharth-kara">often by hand and often by children and slaves</a>. They also contain lithium, drawn from brine operations that <a href="https://e360.yale.edu/features/lithium-mining-water-andes-argentina">drain water from Indigenous communities in the Andes</a>.</p><p>The next frontier needs to be freeing these technologies from harm — and there’s a long way to go. There’s some promise from tech like <a href="https://www.mining.com/web/energy-storage-boom-drives-battery-shift-leaving-nickel-cobalt-behind/">nickel-and-cobalt-free LFP batteries</a>, more ethical lithium extraction, and recycling, but these need further investment, and the underlying issues require sustained attention. There is an energy revolution, but everyone should see the benefits.</p>Theatre Review: Opera UnTouched's "The Telephone" ★★★★★ - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=769402026-10-26T12:34:15.000ZTerence Eden’s Blog<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/telephone.jpg" alt="A bright pink poster featuring a telephone." width="240" class="alignleft">
<p>Why <em>shouldn't</em> an opera be set in an office? Not merely <em>set</em> there; <strong>performed</strong> there! On Saturday night, a couple of dozen audience members were ushered in to a genuine office in Tooting to watch a short comic opera by Opera UnTouched. It was a burst of sunshine in a rainy day.</p>
<p>We're at Ben's leaving party. A flustered woman is busy on the telephone. Will Ben ever get her attention?</p>
<p>Both <a href="https://encoremusicians.com/Grace-Watkins">Grace Watkins</a> & <a href="https://www.stephenwhitford.co.uk/">Stephen Whitford</a> are astonishingly good opera singers. They cover all the tropes, hit all the notes, and interact well with the audience.</p>
<p>I know that <a href="https://shkspr.mobi/blog/2025/10/every-theatre-show-is-immersive/">every production now claims it is immersive</a> - but here, it genuinely is! The audience wanders through the set to get to the seats scattered around the office, there's a naff PowerPoint presentation projected on to the wall, a leaving card is waiting for us to sign, the singers prance among us.</p>
<p>Just intensely joyful.</p>
<p>My only real criticism it that it is too short! I suspect it is designed to be a pop-up experience, fringe show, or performed during a break in the corporate drudgery. I'd've gladly watched a full length production and traipsed through a series of office spaces to get the the next scene.</p>
<p>You can <a href="https://www.instagram.com/operauntouched/reel/DerzyjVR_b_/">watch excerpts on Instagram</a>.</p>
<h2 id="pre-and-post-show"><a href="https://shkspr.mobi/blog/2026/10/theatre-review-opera-untoucheds-the-telephone/#pre-and-post-show">Pre- and Post-Show</a></h2>
<p>As I've written about before, <a href="https://shkspr.mobi/blog/2024/12/the-art-of-the-pre-show-and-post-show/">theatrical shows need to do something special to warm up their audiences</a>. Opera UnTouched had a tough job with an audience drenched in London's rain.</p>
<p>The "office manager" ushered us in to the space and told us that it was Ben's last day, so we were all welcome at his leaving drinks. It being a modern office, we were each given a lanyard to wear throughout the show (which also sneakily doubled as an audience feedback QR).</p>
<p>As it was a party, as we wandered round the office space, we were each handed a glass of Prosecco - what a lovely touch! There's a reason your Chinese takeaway comes with "free" prawn crackers; receiving a gift makes you feel cherished. For the cost of a few dozen reusable plastic flutes and all of about 73p worth of fizz each, the audience were positively beaming by the time the show started.</p>
<p>Why can't more shows do that? OK, it might eat in to the takings at the bar. But a welcome drink on arrival is such an easy way to win over the audience.</p>
<p>As for post-show, there was the obligatory plea to fill in the feedback form. Charmingly, after receiving rapturous applause, the cast and creatives came back and were happy to chat to the audience and discuss the show.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=76940&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">Note published on October 25, 2026 at 11:59 PM UTC - Molly White's activity feed6ade97d2b6faaacba7234cda2026-10-25T23:59:14.000ZMolly White<article><div class="entry h-entry hentry"><header></header><div class="content e-content"><p>someone at Polymarket is drafting a tweet about how their users accurately predicted the Brazilian election result within one point</p><div class="media-wrapper"><a href="https://storage.mollywhite.net/micro/754caa9a213b05b3c6b8_Screenshot-2026-10-25-at-7.55.06---PM.png" data-fslightbox=bb5fced89a4bdaa6d5ff><img src="https://storage.mollywhite.net/micro/754caa9a213b05b3c6b8_Screenshot-2026-10-25-at-7.55.06---PM.png" alt="A chart of the Brazilian presidential election betting lines on Polymarket over the past month, showing Bolsonaro going from constantly leading — recently at ~80% — to 0.8% as election results came in, and vice versa for Lula" /></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/202610251957"><time class="dt-published" datetime="2026-10-25T23:59:14+00:00" title="October 25, 2026 at 11:59 PM UTC">October 25, 2026 at 11:59 PM UTC</time>. </a></div></div><div class="social-links"> <span> Also posted to: </span><a class="social-link u-syndication mastodon" href="https://hachyderm.io/@molly0xfff/117504262629982393" title="Mastodon" rel="syndication">Mastodon, </a><a class="social-link u-syndication bluesky" href="https://bsky.app/profile/molly.wiki/post/3myqg252etj2i" 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/polymarket" title="See all micro posts tagged "Polymarket"" rel="category tag">Polymarket</a>, <a class="tag p-category" href="https://www.mollywhite.net/micro/tag/prediction_markets" title="See all micro posts tagged "prediction markets"" rel="category tag">prediction markets</a>. </div></div></footer></div></article>Finished reading A Darkness More Than Night - Molly White's activity feed6ade31652be334bbcec41a072026-10-25T16:42:14.000ZMolly White<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=A%20Darkness%20More%20Than%20Night"><img class="u-photo book-cover" src="https://m.media-amazon.com/images/S/compressed.photo.goodreads.com/books/1437930956i/76867.jpg" alt="Cover image of A Darkness More Than Night" style="max-width: 300px;"/></a><div class="book-details"><div class="top"><div class="series-info"><i>Harry Bosch</i> series, book <span class="series-number">7</span>. </div><div class="title-and-byline"><div class="title"><i class="p-name">A Darkness More Than Night</i> </div><div class="byline">by <span class="p-author h-card">Michael Connelly</span>. </div></div><div class="book-info">Published <time class="dt-published published" datetime="2000">2000</time>. 470 pages. </div></div><div class="bottom"><div class="reading-info"><div class="reading-dates"> Started <time class="dt-accessed accessed" datetime="2026-10-16">October 16, 2026</time>; completed October 24, 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-10-25T16:42:14+00:00" title="October 25, 2026 at 4:42 PM UTC">October 25, 2026 at 4:42 PM 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=thriller" title="See all books tagged "thriller"" rel="category tag">thriller</a>. </div></div></footer></article>
Remove Valance Endcaps from Primrose Awning
- Robb Knight • Posts • Atom Feedhttps://rknight.me/blog/remove-valance-endcaps-from-primrose-awning/2026-10-25T14:41:00.000ZRobb Knight<p>Warning: boring homeowner awning post.</p>
<p>The valance on my awning had come off the runner and was hanging out the end of the awning casing so I need to get the endcaps off. The instructions that came with it don’t mention the valance or end caps at all, and everything I saw online suggested there should be screws holding them in but there wasn’t.</p>
<p>I extended the awning slightly and shoved my phone camera in there to see what was going on and it turns out on full cassette awnings, the endcaps are held on with a 10mm bolt from the inside. Once I loosened the bolt, I was able to get the end cap off and rethread the valance.</p>
<figure><img src="https://cdn.rknight.me/site/2026/primrose-awning-end-cap-bolt.jpg" alt="The inside of an awning showing a bolt holding the endcap on" /></figure>Gadget Review: LiberNovo Omni - the USB-C powered office chair ★★★★⯪ - Terence Eden’s Bloghttps://shkspr.mobi/blog/?p=762462026-10-25T12:34:01.000ZTerence Eden’s Blog<p>Whenever a company asks me to review their gadgets, I always ask if it is USB-C powered. If not, I'm not interested. So, welcome to the future where your chair is USC-C rechargeable!</p>
<p>WHAT?!</p>
<!--
👋👋👋👋👋👋👋👋👋
Welcome to Comment Club! This top secret bonus material is only available to people who read my HTML comments.
I get a lot of random companies asking me to review their stuff. Sometimes it is bargain basement crap, but once in a while there's something like this. Is it *really* worth a grand? Well, seats like this aren't cheap and the competition is around that price. But yeeeeeesh! I do love sitting on it though.
OK, the three rules of comment club are…
1. You must not tell anyone about Comment Club - let them find out about it themselves.
2. You *must* add some Comment Club Content to at least one of your blog posts. Doesn't have to be much, just a little note will do.
3. You should drop an email to anyone whose comments you've read. Start by sending me a friendly message at comment.club@shkspr.mobi
Keep looking out for more comments in future blog posts 😃
TTFN.
-->
<p>The LiberNovo Omni looks like a standard office chair - but has two secret features.</p>
<p>First, is that it is exceedingly comfortable. Full foam cushions, lovely headrest, and a recline which almost gets you horizontal.</p>
<p>Second, it is USB-C powered. There's a small battery pack which plugs in to the chair. Why? Read on!</p>
<p>OK, let's start at the beginning.</p>
<h2 id="assembly"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#assembly">Assembly</a></h2>
<p>Flat-pack chairs like this are normally notoriously hard to assemble. The LiberNovo bucks that trend - not only does it include a how-to video, it prints the instructions on a MASSIVE piece of cardboard.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Big-instructions.webp" alt="Massive instructions on a big bit of card printed in colour." width="1024" height="771" class="aligncenter">
<p>I'm used to peering at tiny black-and-white diagrams in a flimsy paper booklet. IKEA could learn a thing or two from this.</p>
<p>The screws are all labelled and a hex-driver is included. What's an even nicer touch, however, is some safety gloves:</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Screws-and-gloves.webp" alt="Screws in labelled pouches, a driver, and a pair of white gloves." width="1024" height="768" class="aligncenter">
<p>That's the sort of thing which doesn't cost much to the manufacturer, but is such a thoughtful gesture. There's nothing <em>too</em> sharp as you assemble, but who wants to cover their new chair in blood, eh?</p>
<p>The parts come in two large boxes, but there aren't that many separate bits.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/ready-for-assembly.webp" alt="All the bits, ready for assembly." width="1024" height="629" class="aligncenter">
<p>Building it took about half an hour. It's easier with a friend to help - as are most things in life - but doesn't require much skill.</p>
<h2 id="go-back-to-the-usb-c-part-again-please"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#go-back-to-the-usb-c-part-again-please">Go Back To The USB-C Part Again Please?</a></h2>
<p>The battery pack is a 2200mAh unit with a USB-C port to recharge. It connects in to the chair with this slightly unusual connector:</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Battery.webp" alt="A battery pack with a handle." width="1024" height="768" class="aligncenter">
<p>The internals of the chair have a USB-C cable to connect everything up.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/USB-C-Up-The-BUM.webp" alt="USB-C cable protruding from the chair - it looks like it goes RIGHT UP YOUR BUM!" width="2475" height="2475" class="aligncenter">
<p><em>LOL!</em></p>
<h2 id="yes-but-why-does-a-chair-need-a-battery-pack"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#yes-but-why-does-a-chair-need-a-battery-pack">YES BUT WHY DOES A CHAIR NEED A BATTERY PACK??!?!</a></h2>
<p>On the side of the left arm-rest are three buttons.</p>
<p>Two of them move the lumbar-support up and down. Depending on how your back is feeling and how far you are reclined, you can adjust the the back-support position.</p>
<h2 id="and-the-3rd-button"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#and-the-3rd-button">And the 3rd button?</a></h2>
<p>That's the build-in back massager, silly!</p>
<p><video autoplay="" loop="" muted="" src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/omni-back-massage.mp4"></video></p>
<h2 id="is-that-useful"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#is-that-useful">Is that useful?</a></h2>
<p>Yes. Being able to instantly adjust the back support without having to twist around is fantastic, especially for those of us reaching a certain age.</p>
<p>The "massage" feature essentially just moves the support up and down for five minutes before returning to its previous location. When sat upright, it feels great. But the real benefit is when you're laying down.</p>
<h2 id="how-flat-does-this-thing-go"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#how-flat-does-this-thing-go">How flat does this thing go?</a></h2>
<p>160° - not quite flat, but good enough when you're taking a break from Typing Real Hard. You don't want a photo of me sprawled out, so LiberNovo have helpfully provided some stock photos of much better looking folk.</p>
<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/recline.webp" alt="Guy leaning all the way back on the chair." width="1024" height="576" class="aligncenter">
<p>It is incredibly stable. At no point did it tip over or feel like it was going to deposit me on the floor. What really helps is the included foot stall.</p>
<h2 id="no-feets-on-seats"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#no-feets-on-seats">No Feets On Seats</a></h2>
<p>Unsurprisingly, this is <em>not</em> USB-C powered. A sturdy plastic footrest with a deeply padded leg rest on top.</p>
<p>Again, assembly was a cinch - follow the large printed instructions and clip it together. It's rated for 40㎏, so you shouldn't stand on it but it is more than enough to rest your weary legs.</p>
<h2 id="price"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#price">Price</a></h2>
<p>I hope you're sitting down for this.</p>
<p>Direct from LiberNovo, you can expect to <a href="https://uk.libernovo.com/pages/libernovo-omni-dynamic-ergonomic-chair">pay around £700</a> - although there are bundles with extra batteries, the footrest, and even an eye mask which will shoot that price up. You can get the <a href="https://link.amazon/B04FRSESZ">full bundle on Amazon for around £1,000</a>.</p>
<p>There's two ways to look at that price. Firstly, youch. But, alternatively, that's still cheaper than a Herman Miller Aeron. And Herm's doesn't come with a built-in lumbar massage.</p>
<p>(There is also an upgraded version which has a built in fan under the seat. Personally, I suggest eating a healthier diet.)</p>
<p>I can't deny that's a chunk of change. If you're anything like me, you probably spend most of your day sat down. You might as well sit on something comfortable.</p>
<h2 id="final-thoughts"><a href="https://shkspr.mobi/blog/2026/10/gadget-review-libernovo-omni-chair/#final-thoughts">Final Thoughts</a></h2>
<p>Having the back-rest adjustable via arm-rest buttons is a genius touch. I just wish it went further. I'd love a control panel (or, dare I say it, app) which let me adjust the seat height, recline, headrest position etc. Who can be bothered with fiddly manual levers when electricity can do the work for us?</p>
<p>Building this chair was a breeze - and it was delightful to get a pair of safety gloves with it.</p>
<p>The chair is extraordinarily comfortable and the back massage, while not on the level of a "shiatsu" style heated massage pillow, is delightfully pleasant. Would I lie all the way back and sleep in it? Yeah! Certainly more comfortable than an economy airline seat.</p>
<p>If you spend a lot of time sitting at your computer, your arse deserves something supportive. Your back deserves some love too. Yes, the USB-C power-pack is a little bit of a gimmick - but it is a hell of a good one.</p>
<p>In my opinion, this is worth splashing out on.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=76246&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">