<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.css?cache=2026-11-13T15:19:59+00:00" type="text/css"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<html:meta xmlns:html="http://www.w3.org/1999/xhtml" name="viewport" content="width=device-width" />
<channel>
	<title>NaBloPoMo &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/nablopomo/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Wed, 11 Nov 2026 12:17:37 +0000</lastBuildDate>
	<language>en-GB</language>
	<copyright>© Terence Eden. 🄯 CC BY-SA. See https://shkspr.mobi/blog/copyright-and-copyleft/</copyright>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>NaBloPoMo &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[Gadget Review: Thermal Master P3 Lite - and Linux Instructions ★★★★⯪]]></title>
		<link>https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/</link>
					<comments>https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#respond</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Fri, 13 Nov 2026 12:34:48 +0000</pubDate>
		<category><![CDATA[gadget]]></category><category><![CDATA[infrared]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[Review]]></category><category><![CDATA[thermal]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=77148</guid>

		
		<description>The good folks at Thermal Master have sent me (yet another) thermal camera. The P3 Lite has a detachable macro lens. As well as being good for scanning your house for leaks and looking for wildlife, it can focus down on tiny electronic components.      I've previously reviewed their P3 with adjustable macro focus, the chunky T2 Max, and the wildlife spotting DV2 - how does this compare?  Like…</description>
			
		<content:encoded>&lt;p&gt;The good folks at Thermal Master have sent me (yet another) thermal camera. The P3 Lite has a &lt;em&gt;detachable&lt;/em&gt; macro lens. As well as being good for scanning your house for leaks and looking for wildlife, it can focus down on tiny electronic components.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/What-you-get.avif" alt="Camera in a small carry case, a lens, and a lightning adapter." width="1024" height="1271" class="aligncenter"&gt;

&lt;!-- 
👋👋👋👋👋👋👋👋👋
Welcome to Comment Club! This fun bonus content is only available to sweethearts who read my HTML comments. 

I do not really understand how I keep getting sent these cameras. Don't get me wrong, I'm grateful to the companies who send them to me and it's always fun to write about new tech. But I now have more cameras than I know what to do with. I've given a bunch away to people who want to play with them - but they are rather littering my room!

If you're new here, 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.
--&gt;

&lt;p&gt;I've previously reviewed their &lt;a href="https://shkspr.mobi/blog/2026/08/gadget-review-thermal-master-p3-macro-lens/"&gt;P3 with adjustable macro focus&lt;/a&gt;, the chunky &lt;a href="https://shkspr.mobi/blog/2026/08/gadget-review-t2-max-plug-in-thermal-camera/"&gt;T2 Max&lt;/a&gt;, and the wildlife spotting &lt;a href="https://shkspr.mobi/blog/2026/07/gadget-review-thermal-master-dv2-infrared-birdwatching-scope/"&gt;DV2&lt;/a&gt; - how does this compare?&lt;/p&gt;

&lt;p&gt;Like most thermal cameras, it has a low-ish resolution - 256×192, but their X&lt;sup&gt;3&lt;/sup&gt; software upscales it to 512×384 running at around 25fps. That's pretty decent for a small plug-in camera.&lt;/p&gt;

&lt;p&gt;It also has a magnetically attachable lens for macro-focus, which allows you to see close up details.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://thermalmaster.com/en-gb/pages/p3-lite"&gt;read the full specs&lt;/a&gt; but, basically, it is suitable for all domestic tasks.&lt;/p&gt;

&lt;h2 id="sample-photos-and-video"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#sample-photos-and-video"&gt;Sample Photos and Video&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Note, all photos were originally 6MB JPGs - I've losslessly converted them to JPEG-XL and kept the (minimal) EXIF.&lt;/p&gt;

&lt;p&gt;Point the camera at something and you'll see which bits are hot. Useful for checking your radiators are working.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Radiator.jxl" alt="Glowing image of a radiator." class="aligncenter"&gt;

&lt;p&gt;Images are stored in portrait mode and have been rotated. As you can see, some of the UI elements remain in portrait mode. Here's a just-finished dishwasher:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Dishwasher.jxl" alt="Glowing dishwasher." class="aligncenter"&gt;

&lt;p&gt;A 30 second video is about 12MB - it does include audio from your phone's microphone. I've recompressed and rotated this. It is a tap running cold, then hot, then cold again.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div style="width: 620px;" class="wp-video"&gt;&lt;video class="wp-video-shortcode" id="video-77148-3" width="620" height="465" preload="metadata" controls="controls"&gt;&lt;source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Hot-Water.mp4?_=3"&gt;&lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Hot-Water.mp4"&gt;https://shkspr.mobi/blog/wp-content/uploads/2026/11/Hot-Water.mp4&lt;/a&gt;&lt;/video&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Video quality is, I think, excellent.&lt;/p&gt;

&lt;p&gt;There are a variety of different thermal palettes to choose from - and the camera excels at spotting where a circuit's hot spots are. Here's a Raspberry Pi:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Raspberry-Pi-Thermal.jxl" alt="Small computer with a hot CPU." class="aligncenter"&gt;

&lt;p&gt;So what about the macro lens? Here's a close-up shot of a circuit board where I &lt;em&gt;haven't&lt;/em&gt; used the included lens:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Close-no-macro.jxl" alt="Blurry shot of a circuit." class="aligncenter"&gt;

&lt;p&gt;Not bad, but what if we click the magnetic lens on?&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Close-with-macro.jxl" alt="Detailed shot of a circuit." class="aligncenter"&gt;

&lt;p&gt;Whoa! Much better. Here's a video demonstrating it.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;&lt;div style="width: 620px;" class="wp-video"&gt;&lt;video class="wp-video-shortcode" id="video-77148-4" width="620" height="465" preload="metadata" controls="controls"&gt;&lt;source type="video/mp4" src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/lens-on.mp4?_=4"&gt;&lt;a href="https://shkspr.mobi/blog/wp-content/uploads/2026/11/lens-on.mp4"&gt;https://shkspr.mobi/blog/wp-content/uploads/2026/11/lens-on.mp4&lt;/a&gt;&lt;/video&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2 id="hardware"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#hardware"&gt;Hardware&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The camera has a reasonably long USB-C protrusion - so it will fit in your phone even if you use a chunky case.&lt;/p&gt;

&lt;p&gt;Because it is USB-C, you can have it facing you or facing away from you. Handy if you want some thermal selfies!&lt;/p&gt;

&lt;p&gt;The lens is a simple affair. Note that the protective cover it ships with might not come away cleanly:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Sticky-macro.avif" alt="Some sticky residue on a lens." width="1024" height="768" class="aligncenter"&gt;

&lt;p&gt;I had to prise off the sticker to prevent that residue dirtying the main lens.&lt;/p&gt;

&lt;p&gt;It ships with a USB-C extension cable (with USB-A converter) - that's handy if you want to keep camera and phone somewhat separate. It also makes it easy to plug it in to a computer. More on that later.&lt;/p&gt;

&lt;p&gt;There's a C to Lightning adapter if you're still stuck on an old iPhone.&lt;/p&gt;

&lt;p&gt;Finally, it comes with a little carry case emblazoned with the logo.&lt;/p&gt;

&lt;h2 id="the-app"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#the-app"&gt;The App&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The Thermal Master Android App isn't brilliant. It's slow to start and has a bafflingly complicated interface. It takes a couple of clicks to take a photo, rather than the single click you'd expect.&lt;/p&gt;

&lt;p&gt;As you can see from the photos, despite the timestamp being rotated, other on-screen elements aren't. You can possibly change this manually in the settings, but it is rather annoying that it doesn't do it automatically. Speaking of which, there are lots of settings to fiddle with - but you'll probably just end up on one that you like and leave it there.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/settings.avif" alt="Some settings relating to thermal sensitivity." width="504" height="983" class="aligncenter"&gt;

&lt;p&gt;The app does work, but I wish it were snappier.&lt;/p&gt;

&lt;h2 id="linux-usage"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#linux-usage"&gt;Linux Usage&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;There is a &lt;a href="https://thermalmaster.com/en-gb/pages/download-center"&gt;Windows App&lt;/a&gt;. I couldn't get it working in either VirtualBox or Wine, so here's how to display the camera's feed in Linux.&lt;/p&gt;

&lt;p&gt;Plug in the camera via the included USB-C extension cable. It will show up in &lt;code&gt;lsusb&lt;/code&gt; as &lt;code&gt;3474:42b2 Thermal Master Technology Co., Ltd. P2 MAX&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;mark&gt;Note:&lt;/mark&gt; the device was previously known as the P2Max and this is reflected in the firmware.&lt;/p&gt;

&lt;p&gt;Add a new udev rule with &lt;code&gt;sudo nano /etc/udev/rules.d/99-thermal-p2max.rules&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Copy and paste this into the file, then save and exit.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;# Thermal Master P2 Max USB Rules
# Allow read/write access for all users
SUBSYSTEM=="usb", ATTRS{idVendor}=="3474", ATTRS{idProduct}=="42b2", MODE="0666"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Reload the rules with &lt;code&gt;sudo udevadm control --reload-rules &amp;amp;&amp;amp; sudo udevadm trigger&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Hurrah! Your Linux machine can now control the camera. There's two ways to view it - and easy way and a hard way.&lt;/p&gt;

&lt;p&gt;The easy way is to use &lt;a href="https://ferrolho.github.io/thermal-master-viewer/"&gt;https://ferrolho.github.io/thermal-master-viewer/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open the website &lt;strong&gt;in Chrome&lt;/strong&gt;, click the "Connect camera" button, after a moment you should have a view like this:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/USB-cam.avif" alt="Thermal selfie. I have a cold nose." width="504" height="733" class="aligncenter"&gt;

&lt;p&gt;The harder way is to use dedicated Linux tools like &lt;a href="https://github.com/Phalphy/OpenP3"&gt;OpenP3&lt;/a&gt; or &lt;a href="https://github.com/skywalker1905/thermal-camera-viewer"&gt;Thermal Camera Viewer&lt;/a&gt; - you may need to hack around with them so they see the device. Usually that's as simple as adding the PID to the code.&lt;/p&gt;

&lt;h2 id="cost"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/#cost"&gt;Cost&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;You're looking at around &lt;a href="https://link.amazon/B0aHYIpyK"&gt;£220 for the camera&lt;/a&gt; and can expect to pay about &lt;a href="https://thermalmaster.com/en-gb/products/p3-lite-thermal-camera-home-inspection?variant=54687042142492"&gt;£40 for the macro lens&lt;/a&gt;. You can sometimes find them bundled for slightly cheaper.&lt;/p&gt;

&lt;p&gt;Readers of this blog get an extra 6% off at &lt;a href="https://thermalmaster.com/en-gb/products/p3-lite-thermal-camera-home-inspection?utm_source=PR&amp;amp;utm_medium=MEDIA&amp;amp;utm_campaign=TEB+_P3+LITE"&gt;Thermal Master&lt;/a&gt; or &lt;a href="https://link.amazon/B0aHYIpyK"&gt;Amazon UK/US&lt;/a&gt; with code &lt;code&gt;THERMLITE6&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Unfortunately, that's pretty cheap for a thermal camera. At that price, I'd recommend buying one to share with your local community. If you are a member of a hack-space, these are invaluable for finding hot-spots on your electronics.&lt;/p&gt;

&lt;p&gt;The image quality is excellent. There's no bogus "AI" features to hallucinate what it thinks it saw - you just get the raw image. It would be lovely if it presented as a proper webcam on Linux, but there are open source tools to bridge that gap. The detachable macro lens is handy, and the magnet grip is reasonably strong - but I wish it had a strap or something to prevent it getting lost.&lt;/p&gt;

&lt;p&gt;There's not a &lt;em&gt;lot&lt;/em&gt; of difference between Thermal Master's various cameras. If you want to swap between wide shots and macro shots, this is probably as good a device as any.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=77148&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/gadget-review-thermal-master-p3-lite-p2-max-and-linux-instructions/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Hot-Water.mp4" length="3276503" type="video/mp4" />
<enclosure url="https://shkspr.mobi/blog/wp-content/uploads/2026/11/lens-on.mp4" length="1477844" type="video/mp4" />

			</item>
		<item>
		<title><![CDATA[Book Review: This Is for Everyone - Tim Berners-Lee ★★★☆☆]]></title>
		<link>https://shkspr.mobi/blog/2026/11/book-review-this-is-for-everyone-tim-berners-lee/</link>
					<comments>https://shkspr.mobi/blog/2026/11/book-review-this-is-for-everyone-tim-berners-lee/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Thu, 12 Nov 2026 12:34:10 +0000</pubDate>
		<category><![CDATA[Book Review]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[web]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=77340</guid>

		
		<description>Is this a biography of a man, or of his mission? Is this the story of how the web came to be, or a lament for what happened to it? Do you crave the inside gossip, or the PR sanitised gloss?  This Is For Everyone, but I think it ends up being slightly unsatisfying for anyone.    It starts with the normal charming family anecdotes. No grand revelations or hidden secrets, just a lovely ramble…</description>
			
		<content:encoded>&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/paperback-cover.webp" alt="Book cover featuring Sir Tim in front of a blackboard." width="200" height="882" class="alignleft"&gt;

&lt;p&gt;Is this a biography of a man, or of his mission? Is this the story of how the web came to be, or a lament for what happened to it? Do you crave the inside gossip, or the PR sanitised gloss?&lt;/p&gt;

&lt;p&gt;This &lt;em&gt;Is&lt;/em&gt; For Everyone, but I think it ends up being slightly unsatisfying for anyone.&lt;/p&gt;

&lt;!-- 
👋👋👋👋👋👋👋👋👋
Welcome to Comment Club! This fun bonus content is only available to nerds who read my HTML comments. 

I feel slightly bad ragging on this book - especially as I'm due to meet Timbl again in a few weeks. I suppose it is better than some of the other autobiographies I've read which are mostly well-worn anecdotes about how the author was always right.

If you're new here, 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.
--&gt;

&lt;p&gt;It starts with the normal charming family anecdotes. No grand revelations or hidden secrets, just a lovely ramble through growing up. It's hard to write a memoir without delving in to some of the frailty that makes us human. I wasn't expecting a "tell all" or histrionics, but divorces are waved away in half a sentence and the emotional aspects of life as the inventor of the web are almost totally absent.&lt;/p&gt;

&lt;p&gt;Where his emotions shine through is the constant undercurrent of rage and disappointment at how the web has been corrupted.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;those operators turned the supposedly non-profit DNS address system into a nauseating free-for-all. Domain names would become an asset class for investors, rather than a tool for innovators&lt;/p&gt;

&lt;p&gt;[…]&lt;/p&gt;

&lt;p&gt;DNS fell into the hands of some rather unscrupulous operators. What had been an unremarkable piece of back-end internet infrastructure was temporarily transformed into a revolting for-profit bonanza.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;He is unashamedly catty about some of the villains of the piece. I won't regurgitate their names or give them the oxygen of publicity, but it is nice to see a senior tech figure call out some of the madness and harm caused by others. Similarly, he is harsh in his criticism of how some browser vendors have behaved. We can argue about whether XHTML was a mistake, but the "moat" of working with non-standards compliant pages makes for a successful monopoly.&lt;/p&gt;

&lt;p&gt;It isn't exactly a whinge, but you can hear the exasperation in his tone. He gave the world a magnificent gift and some people are trying to poison the well for all of us.&lt;/p&gt;

&lt;p&gt;A few chapters are dedicated to the rise of AI - and its perils. Similarly the tension between addictive algorithms and staying sane. These are certainly interesting thoughts, but perhaps belong in a different book. Memoirs are, typically, not about the future.&lt;/p&gt;

&lt;p&gt;A large part of the book is taken up with Tim's "difficult second album" - &lt;a href="https://solidproject.org/"&gt;Solid&lt;/a&gt;. I &lt;em&gt;desperately&lt;/em&gt; love the idea of Solid - keeping your data personal and only allowing access for explicit and limited purposes. But I also think it is becoming clear that most people just don't care that much and, even if they could be bothered with all the admin, there's no signs that businesses want to get involved with it.&lt;/p&gt;

&lt;p&gt;At times, it feels like the book is mostly a pitch document for why Solid is the future. Again, not exactly what I was expecting from a memoir.&lt;/p&gt;

&lt;p&gt;I think every single part of this book is good - the personal memoir, the history of the web, the future of tech - but as a whole they feel a little disjointed. I think I'd rather have read three different books rather than have them jammed in together. I suspect the hard-core geeks will skip the domestic stuff and the average reader will be somewhat baffled by the dive into deepfakes and Mastodon.&lt;/p&gt;

&lt;p&gt;It does, however, contain a message of hope. The web is still here and it will last in one form or another for eternity. We have to keep working for it though.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;[M]y work with Danny Weitzner had shown me that it was not enough simply to release new technology and hope for the world to improve. You had to develop technology and society together. You really had to fight, in a principled and continuous way, for human rights.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;We need that tattoo'd inside the eyelids of every tech executive who has tried to subvert the web for their own ends.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=77340&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/book-review-this-is-for-everyone-tim-berners-lee/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: The Unfinished Harauld Hughes - Richard Ayoade ★★★⯪☆]]></title>
		<link>https://shkspr.mobi/blog/2026/11/book-review-the-unfinished-harauld-hughes-richard-ayoade/</link>
					<comments>https://shkspr.mobi/blog/2026/11/book-review-the-unfinished-harauld-hughes-richard-ayoade/#respond</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Tue, 10 Nov 2026 12:34:31 +0000</pubDate>
		<category><![CDATA[Book Review]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=77087</guid>

		
		<description>A decade ago, I read Ayoade's first book. In my review, I said:  It's hard to know how to assess a book like this. It's far too clever for its own good - a frustrating and humorous look at... what? It's neither autobiography nor comic novel. An anti-novel which trudges the reader through a series of comic vignettes. It reminded me of some of Woody Allen's work. If you get the joke - you'll find …</description>
			
		<content:encoded>&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/harauld.avif" alt="Book cover featuring a painting of Richard Ayoade." width="250" class="alignleft"&gt;

&lt;p&gt;A decade ago, I read &lt;a href="https://shkspr.mobi/blog/2015/09/what-i-read-on-my-holidays/"&gt;Ayoade's first book&lt;/a&gt;. In my review, I said:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;It's hard to know how to assess a book like this. It's far too clever for its own good - a frustrating and humorous look at... what? It's neither autobiography nor comic novel. An anti-novel which trudges the reader through a series of comic vignettes. It reminded me of some of Woody Allen's work. If you get the joke - you'll find it hilarious. Everyone else will just look on in bemusement.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;And, yeah, this new book is pretty much the same! It's an absurdist novel about a (semi) fictional TV presenter creating a documentary about a (probably) fictional director. Much like &lt;a href="https://shkspr.mobi/blog/2025/12/book-review-the-satsuma-complex-by-bob-mortimer/"&gt;Bob Mortimer's books&lt;/a&gt; it revels in the mundane and delights in uniquely shaped language constructs.&lt;/p&gt;

&lt;p&gt;As well as being wryly funny, it is mercilessly satirical. If you've ever read the risible scripts of an "influential" 1950s playwright, you'll immediately feel at home.&lt;/p&gt;

&lt;p&gt;There's the drip-feeding of a tiny mystery - but it isn't quite enough to sustain the story. There's no urge to discover what &lt;em&gt;really&lt;/em&gt; happened; you'll read this like it was a steam train documentary on in the background while you do the washing-up. There's sort-of a plot-twist, but it is of no consequence.&lt;/p&gt;

&lt;p&gt;Despite it's caustic and cynical view about theatre, there are moments of genuine profundity. I found this especially beautiful:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;It can sometimes cost ten times as much to sit near the front as compared to the cheap seats in the balcony. And that’s because it’s worth it. The experience is entirely changed by proximity. The tension alters.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;What do we want from a celebrity documentary? Is it scandal? Hidden secrets and bitter jealousies? Do we want a behind-the-scenes glimpse at the making-of a documentary? This gets close to being a "Lost in La Mancha" in book form, for an author who didn't exist. It is an enjoyable read, but I think I'd've preferred to watch this late-night on BBC4 never quite knowing if it was a spoof or not.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=77087&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/book-review-the-unfinished-harauld-hughes-richard-ayoade/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Blunt Banhammer Blocks Basic Bots Ballistically]]></title>
		<link>https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/</link>
					<comments>https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Mon, 09 Nov 2026 12:34:00 +0000</pubDate>
		<category><![CDATA[AI]]></category><category><![CDATA[bot]]></category><category><![CDATA[CyberSecurity]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[PHP]]></category><category><![CDATA[WebDev]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=77230</guid>

		
		<description>I cut bot traffic to my site by over 80% with a simple trap.  Last month, my hobby website OpenBenches.org transferred more than 2.5TB of data to visitors. As much as I'd like to think the site is enormously popular, it looks like it is just AI bots endlessly crawling the data and slurping up the images.  So I've built B to be an indiscriminate tool to eradicate these unwanted parasites.  It is…</description>
			
		<content:encoded>&lt;p&gt;I cut bot traffic to my site by over 80% with a simple trap.&lt;/p&gt;

&lt;p&gt;Last month, my hobby website &lt;a href="https://openbenches.org"&gt;OpenBenches.org&lt;/a&gt; transferred more than 2.5TB of data to visitors. As much as I'd like to think the site is enormously popular, it looks like it is just AI bots endlessly crawling the data and slurping up the images.&lt;/p&gt;

&lt;p&gt;So I've built B&lt;sup&gt;6&lt;/sup&gt; to be an indiscriminate tool to eradicate these unwanted parasites.&lt;/p&gt;

&lt;p&gt;It is &lt;em&gt;very&lt;/em&gt; loosely inspired by &lt;a href="https://perishablepress.com/blackhole-bad-bots/"&gt;Jeff Starr's Blackhole&lt;/a&gt;, but works even on sites with heavy caching.&lt;/p&gt;

&lt;p&gt;Here's the high level description of how it works.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a directory like &lt;code&gt;/honeypot/&lt;/code&gt; on your site&lt;/li&gt;
&lt;li&gt;Put some code in &lt;code&gt;index.php&lt;/code&gt; within the directory&lt;/li&gt;
&lt;li&gt;Add the honeypot as an explicit "Disallow" in &lt;code&gt;robots.txt&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Include a hidden link to to the honeypot on every page of your site&lt;/li&gt;
&lt;li&gt;If something accesses that page, write its IP address to your &lt;code&gt;.htaccess&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;.htaccess&lt;/code&gt; bans the IP address from ever accessing your site again.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This blog post shows you how you can build this yourself and discusses some of the problems it might cause.&lt;/p&gt;

&lt;h2 id="bad-robots"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#bad-robots"&gt;Bad Robots!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The file &lt;a href="https://developers.google.com/search/docs/crawling-indexing/robots/intro"&gt;robots.txt&lt;/a&gt; lives at the root of your website. It contains a list of instructions to automated web crawlers. Respectful bots will read it and refuse to look at specific parts of your site.&lt;/p&gt;

&lt;p&gt;Add these two lines to it:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;User-agent: *
Disallow: /honeypot/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That says bots shouldn't visit any page in the honeypot directory.&lt;/p&gt;

&lt;p&gt;Bots generally check for updates every 24 hours, so either wait a day or manually submit it to major crawlers.&lt;/p&gt;

&lt;h2 id="htaccess"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#htaccess"&gt;.htaccess&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://httpd.apache.org/docs/current/howto/htaccess.html"&gt;.htaccess file&lt;/a&gt; contains a list of instructions for how your server should process requests.&lt;/p&gt;

&lt;p&gt;Find the bit of your &lt;code&gt;.htaccess&lt;/code&gt; file which looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
        RewriteEngine On
        RewriteBase /
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Edit it to look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;&amp;lt;IfModule mod_rewrite.c&amp;gt;
        RewriteEngine On
        RewriteBase /

### BLOCKED IPs
    #   TEST-NET-1
    RewriteCond %{REMOTE_ADDR} "=192.0.2.1"
    RewriteRule ^ - [R=402,L]
### /BLOCKED IPs
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It is important that these rules come before any other rewrite rules.&lt;/p&gt;

&lt;p&gt;Change the end of this &lt;code&gt;IfModule&lt;/code&gt; to look like:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;&amp;lt;/IfModule&amp;gt;

ErrorDocument 402 "Payment Required - Access Denied."
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If an IP address is in the blocked IP list, the server will send an error code and a readable message. You can add whatever plain text you like here.&lt;/p&gt;

&lt;h2 id="wipe-them-all-out"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#wipe-them-all-out"&gt;Wipe Them All Out&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Inside the honeypot directory, create a file called &lt;code&gt;index.php&lt;/code&gt; (or whatever you like). When this page is visited, it grabs the visitor's IP address and the name of its User Agent. It then places them in the BLOCKED IPs section.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-php"&gt;//  What's their IP?
$IP = get_client_ip();

//  User Agent
$UA = isset( $_SERVER["HTTP_USER_AGENT"] ) ? $_SERVER["HTTP_USER_AGENT"] : "";

//  Get the existing .htaccess file.
$htaccess_file = "../.htaccess";
$htaccess = file_get_contents( $htaccess_file );

//  Split by newline.
$htaccess_lines = explode( separator: "\n", string: $htaccess );

//  Where's our start block?
$start = "###   BLOCKED IPs";
$end   = "###   /BLOCKED IPs";

//  Exit if the .htaccess doesn't have the block.
if ( !in_array( needle: $start, haystack: $htaccess_lines ) ) { die(); }

//  This is where to start from.
$start_block = array_search( needle: $start, haystack: $htaccess_lines );

//  Add the line after the start block.
//  Include a date.
$htaccess_lines[ $start_block ] = $start . "\n" . 
    "\t#\t" . date( "c" ) . "\t{$UA}\n" . 
    "\tRewriteCond %{REMOTE_ADDR} \"={$IP}\" [OR]";

//  Turn the array back to a string.
$newHtaccess = implode( separator: "\n", array: $htaccess_lines );

//  Save the new .htaccess file.
file_put_contents( filename: $htaccess_file, data: $newHtaccess );

function get_client_ip():string
{
    //  Adapted from https://github.com/ibericode/koko-analytics/blob/main/src/Resources/functions/collect.php

    //  X-Forwarded-For sometimes contains a comma-separated list of IP addresses
    //  @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For
    $ips = empty( $_SERVER["HTTP_X_FORWARDED_FOR"] ) ?
        [] :
        \array_map( "trim", \explode( ",", $_SERVER["HTTP_X_FORWARDED_FOR"] ) );

    //  Always add REMOTE_ADDR and HTTP_CLIENT_IP to list of ip addresses, if set
    foreach ( ["REMOTE_ADDR", "HTTP_CLIENT_IP"] as $key ) {
        if ( !empty( $_SERVER[$key] ) ) {
            $ips[] = $_SERVER[$key];
        }
    }

    //  Return first valid IP address from list
    foreach ( $ips as $ip ) {
        if ( \filter_var( $ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE ) ) {
            return $ip;
        }
    }

    return "";
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="setting-the-trap"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#setting-the-trap"&gt;Setting The Trap&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Web crawlers look at a page, find every link on it, then visit those links. So we need to put a link to the honeypot on every page - but in such a way that normal users will not find it or click it.&lt;/p&gt;

&lt;p&gt;This adds a link, removes it from the accessibility tree, and gives it impossible to click text (a zero width joiner).&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-html"&gt;&amp;lt;a id="honey" aria-hidden="true" href="/honeypot/index.php"&amp;gt;&amp;amp;zwj;&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This CSS hides it from normal viewers and removes the mouse cursor from view.&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-css"&gt;#honey {
    display: none !important;
    cursor:  none !important;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="problems-this-might-cause"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#problems-this-might-cause"&gt;Problems This Might Cause&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;It's unlikely that a human will find the link, click on it, and be banned. But if they do, consider put a message in the blocking text telling them how they can get unblocked.&lt;/p&gt;

&lt;p&gt;Some useful bots ignore robots.txt. If they identify themselves via a User-Agent string (and they should) you can manually remove them from .htaccess. You could also code in an allow list exemption for them. But, of course, many bad bots lie about who they really are.&lt;/p&gt;

&lt;p&gt;Conversely, not all bots crawl every link. This won't catch bots which respect robots.txt but are nevertheless problematic.&lt;/p&gt;

&lt;p&gt;If you have thousands of different bots blocked, the performance of your server &lt;em&gt;might&lt;/em&gt; slow down while .htaccess is parsed. There's weak anecdotal evidence that it adds a slight overhead. But, personally, I don't think that's worth worrying about.&lt;/p&gt;

&lt;p&gt;Bots often use hijacked IP addresses. After the bot has moved, an innocent party might be blocked from your site. Each block has a timestamp associated with it. You could periodically unblock older entries.&lt;/p&gt;

&lt;p&gt;Bots rotate through hundreds of different IP addresses. So the same bot might get blocked multiple times.&lt;/p&gt;

&lt;p&gt;Bots might see the CSS marks the link as hidden and refuse to follow it. Instead of CSS, you could use invisible spaces or other characters which would be hard for a human to see but appear visible to a bot.&lt;/p&gt;

&lt;p&gt;Similarly, a smart bot might refuse to visit a path called /honeypot/ so choose a better name for it. A smarter bot would see that touching the honeypot leads to a ban - so perhaps a selection of traps are needed?&lt;/p&gt;

&lt;p&gt;As is implied in the name, this is a &lt;em&gt;blunt&lt;/em&gt; banhammer. It doesn't give a warning, nor does it look at User-Agent, Country, or any other signal. You touch the honeypot and you receive an instaban. No warning and no automated way to appeal.&lt;/p&gt;

&lt;h2 id="alternatives"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#alternatives"&gt;Alternatives&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;There are alternative ways to do this. Some bots don't send language headers, some use older versions of HTTP, they often have severely outdated User Agent strings. Those are all reasonable ways to block something which is &lt;em&gt;probably&lt;/em&gt; a bot. There are likely to be a few false positives though.&lt;/p&gt;

&lt;p&gt;But B&lt;sup&gt;6&lt;/sup&gt; has no false positives. A normal user &lt;em&gt;can't&lt;/em&gt; follow the link to the trap and a well-behaved bot &lt;em&gt;won't&lt;/em&gt; follow the link.&lt;/p&gt;

&lt;p&gt;Things like Anubis require a lot of work to set up and annoy normal users. B&lt;sup&gt;6&lt;/sup&gt; doesn't require a specific hosting environment and is never shown to normal users.&lt;/p&gt;

&lt;h2 id="it-works"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/#it-works"&gt;It Works!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Since running B&lt;sup&gt;6&lt;/sup&gt; a week ago, I've blocked over 400 IP addresses and seen a significant fall in traffic. I've not had any complaints yet. Sadly, none of the bots have paid to remove the paywall!&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Bandwidth.avif" alt="Drop from 216GB to 26GB per day." width="505" height="837" class="aligncenter"&gt;

&lt;p&gt;At peak, my site was seeing 216GB of data transfer per day. That's now dropped to around 25GB.&lt;/p&gt;

&lt;p&gt;I don't claim this is the most sophisticated bot blocker in existence - but I enjoyed building it myself. I'll probably add something to records the geolocation of the IP and maybe remove any block older than a certain age.&lt;/p&gt;

&lt;p&gt;If you'd like to use it or improve this code, I'd be grateful if you treated it as &lt;a href="https://www.gnu.org/licenses/agpl-3.0.en.html"&gt;AGPL v3 licensed&lt;/a&gt;.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=77230&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/blunt-banhammer-blocks-basic-bots-ballistically/feed/</wfw:commentRss>
			<slash:comments>32</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Some thoughts on restaurant menu QR codes]]></title>
		<link>https://shkspr.mobi/blog/2026/11/some-thoughts-on-restaurant-menu-qr-codes/</link>
					<comments>https://shkspr.mobi/blog/2026/11/some-thoughts-on-restaurant-menu-qr-codes/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Sun, 08 Nov 2026 12:34:01 +0000</pubDate>
		<category><![CDATA[future]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[QR Codes]]></category><category><![CDATA[restaurant]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=72653</guid>

		
		<description>Is anyone else SICK AND TIRED of the way hotels now foist plastic "keycards" on guests?  No! I don't want tap to open my door!  No! I don't want to keep the card in my wallet!  No! I don't want electronics in control of my life!  What if I need to stab an attacker? Keys are great for that by flimsy plastic cards are useless  Gives us PROPER keys with big keyrings that we have to hand in to…</description>
			
		<content:encoded>&lt;blockquote&gt;&lt;p&gt;Is anyone else SICK AND TIRED of the way hotels now foist plastic "keycards" on guests?&lt;/p&gt;

&lt;p&gt;No! I don't want tap to open my door!&lt;/p&gt;

&lt;p&gt;No! I don't want to keep the card in my wallet!&lt;/p&gt;

&lt;p&gt;No! I don't want electronics in control of my life!&lt;/p&gt;

&lt;p&gt;What if I need to stab an attacker? Keys are great for that by flimsy plastic cards are useless&lt;/p&gt;

&lt;p&gt;Gives us PROPER keys with big keyrings that we have to hand in to reception when we go out and then ask for when we come back.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That is &lt;em&gt;exactly&lt;/em&gt; what you sound like when you complain about restaurant menus now being available by QR code.&lt;/p&gt;

&lt;p&gt;My wife and I took a &lt;a href="https://shkspr.mobi/blog/2026/07/another-ridiculous-interrail-holiday-6379km-and-13-countries-over-7-weeks/"&gt;7 week Interrail through Europe&lt;/a&gt;. While most places still had boring paper menu, a decent number had QR codes which allowed us to see the menu and order food. And they were &lt;em&gt;brilliant&lt;/em&gt;!&lt;/p&gt;

&lt;p&gt;An electronic menu offers so many advantages. Being able to instantly translate any terms by selecting the text is much easier than pointing a camera and trying to focus on a laminated bit of card.&lt;/p&gt;

&lt;p&gt;That said, most of the online menus were already fully translated. They had all the legally mandated allergen information. Many of them showed when something was out of stock. &lt;a href="https://shkspr.mobi/blog/2025/12/travelling-around-japan-as-a-vegetarian-vegan/"&gt;We had much the same experience visiting Japan&lt;/a&gt; - getting to see a photo or video about the dish you're going to order is surprisingly useful.&lt;/p&gt;

&lt;p&gt;The ones which allowed you to order were even better. So easy to select the right thing - no hoping that the waiter didn't mishear "no cheese" as "extra cheese". Notes to the kitchen about allergies were often supported. Oh, and no trying to catch the waiter's eye to let them know you're ready to order.&lt;/p&gt;

&lt;p&gt;Speaking of which, no trying to catch the waiter's eye when you want to pay! Several of online platforms allowed for payment through the Web. Most supported splitting the bill between a group - so no more trying to work out who ate what.&lt;/p&gt;

&lt;p&gt;So let's talk about the down-sides.&lt;/p&gt;

&lt;p&gt;"What if there's no signal?!?!?" Get a roaming SIM, chief. But, as it happens, every restaurant had fast and free WiFi. Because, you know, they understand the service they're providing.&lt;/p&gt;

&lt;p&gt;"I don't want a bloody app!!!!" Me neither. I didn't encounter any which required me to install a one-time app.&lt;/p&gt;

&lt;p&gt;"Online ordering tries to upsell to me and I have no self control...." Sure. But waiters often recommend the most expensive wine to go with their cheapest dish.&lt;/p&gt;

&lt;p&gt;"How can I flirt with a waitress if everything is mediated through a screen?????" Please reconsider your life choices.&lt;/p&gt;

&lt;p&gt;"But I hate progress and love paper!" OK. In just about every restaurant I saw people being handed paper menus. Or wait staff explained what each dish was.&lt;/p&gt;

&lt;p&gt;"Yes, but in the worst case scenario I've constructed in my head I have no signal, no phone, and no alternatives - and now I'm irrationally angry about that!" So walk out. Seriously, you'd leave a restaurant if the waiter was rude, or you saw a rat, or the food didn't come for an hour. Do the same if you're forced to use a service that you hate.&lt;/p&gt;

&lt;p&gt;As I've said before, &lt;a href="https://shkspr.mobi/blog/2022/06/the-modern-world/"&gt;I love living in the future&lt;/a&gt;. I can't be bothered with fully grown adults throwing a tantrum over every bit of progress.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=72653&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/some-thoughts-on-restaurant-menu-qr-codes/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: When the Dust Settles - Stories of Love, Loss and Hope from an Expert in Disaster by Lucy Easthope ★★★★★]]></title>
		<link>https://shkspr.mobi/blog/2026/11/book-review-when-the-dust-settles-stories-of-love-loss-and-hope-from-an-expert-in-disaster-by-lucy-easthope/</link>
					<comments>https://shkspr.mobi/blog/2026/11/book-review-when-the-dust-settles-stories-of-love-loss-and-hope-from-an-expert-in-disaster-by-lucy-easthope/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Sat, 07 Nov 2026 12:34:34 +0000</pubDate>
		<category><![CDATA[Book Review]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=73538</guid>

		
		<description>This is a difficult but essential book. I was initially put off by how graphically autobiographical it is. The disaster planning I came for was frequently interrupted with the author's loves, disasters, health issues, pains, and domestic issues. As the book wore on, I realised how vital that is. Disasters - whether natural or caused by human actions - cannot be tackled in a dispassionate way.…</description>
			
		<content:encoded>&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/07/hbg-title-when-the-dust-settles-2-32.webp" alt="Book cover." width="300" class="alignleft size-full wp-image-73539"&gt;

&lt;p&gt;This is a difficult but essential book. I was initially put off by how graphically autobiographical it is. The disaster planning I came for was frequently interrupted with the author's loves, disasters, health issues, pains, and domestic issues. As the book wore on, I realised how vital that is. Disasters - whether natural or caused by human actions - cannot be tackled in a dispassionate way. It's all very well having a plan to repatriate bodies, strict timetables for witness statements, and a clinical approach to disposing of victims' personal effects - but there needs to be space for a &lt;em&gt;humane&lt;/em&gt; response; not just a humanitarian response. People need space to grieve, they need a shower and cup of tea, they need to be allowed to fucking scream.&lt;/p&gt;

&lt;p&gt;My chauvinistic biases were stopped in their tracks by the unrelenting assault of pure and righteous indignation.&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Women in disaster planning and response are constantly accused of overreaction, of too much thinking and emotion. We ignore our instincts in an effort to fit in.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;It is also a rallying cry against the national crime that was austerity. The hollowing out of the state's capacity to respond to trauma was a vicious and unnecessary attack on our future. Hoping that the worst never comes is in itself a recipe for disaster.&lt;/p&gt;

&lt;p&gt;The book is necessarily grim - with occasional gallows humour - but never fails to be fascinating:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;It seemed that pigeons and other birds were scooping up the smallest human bones, the finger bones or phalanges, that were still being uncovered&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Every chapter contains at least one "big ooof" where you can see exactly how reality refuses to comply to with the best laid plans of disaster planners. Here's one about the difficulty in identifying people after a disaster:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;[The victims] had the same kit on and, in an extra twist of fate, they had all dyed their hair canary yellow for the game.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;As I said, it is a difficult and bloody book. Vital reading for anyone who wants to understand the why and the how of complex recovery efforts.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73538&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/book-review-when-the-dust-settles-stories-of-love-loss-and-hope-from-an-expert-in-disaster-by-lucy-easthope/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[A video game which caused real world violence]]></title>
		<link>https://shkspr.mobi/blog/2026/11/a-video-game-which-caused-real-world-violence/</link>
					<comments>https://shkspr.mobi/blog/2026/11/a-video-game-which-caused-real-world-violence/#respond</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Fri, 06 Nov 2026 12:34:34 +0000</pubDate>
		<category><![CDATA[Augmented Reality]]></category><category><![CDATA[games]]></category><category><![CDATA[mobile]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=64450</guid>

		
		<description>There has been a dramatic fall in the amount of interpersonal violence in most countries.  I don't want to go too Freakanomics and, obviously, correlation is not causation but perhaps video games have a role to play in this? A teenager being cooped up in their room means less exposure to situations where hormonal impertinence is likely to cause a violent reaction. Shouting and screaming at people …</description>
			
		<content:encoded>&lt;p&gt;There has been a dramatic fall in the amount of interpersonal violence in most countries.&lt;/p&gt;

&lt;p&gt;I don't want to go &lt;em&gt;too&lt;/em&gt; Freakanomics and, obviously, correlation is not causation but perhaps video games have a role to play in this? A teenager being cooped up in their room means less exposure to situations where hormonal impertinence is likely to cause a violent reaction. Shouting and screaming at people via a headset rarely leads to real-life consequences.  Beating up street-fighters is less risky than being in a street fight yourself.&lt;/p&gt;

&lt;p&gt;But there are times when games &lt;em&gt;do&lt;/em&gt; cause problems away from the screen. Players of Pokémon Go ramble about outside trying to collect digital pets - this also causes them &lt;a href="https://www.bbc.co.uk/news/world-us-canada-50971309"&gt;to trespass into military bases&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I was recently reminded of &lt;a href="https://shkspr.mobi/blog/2010/11/augmented-reality-games-how-far-have-we-come-in-7-years/"&gt;one of the first Augmented Reality Games - Mozzies&lt;/a&gt;. Back in 2004 having a phone with a camera was almost unheard of. The Mozzies game let you see virtual mosquitoes overlayed on the real world - and then shoot them.&lt;/p&gt;

&lt;p&gt;Waving your cameraphone around while playing caused at least one case of physical violence.&lt;/p&gt;

&lt;p&gt;Here's a report from Singapore's &lt;a href="https://eresources.nlb.gov.sg/newspapers/digitised/article/newpaper20041006-1.2.3.3"&gt;The New Paper on 6 October 2004&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm grateful to &lt;a href="https://mastodon.social/@esmepotatoes"&gt;Esme Potatoes&lt;/a&gt; for helping me find a transcript.&lt;/p&gt;

&lt;blockquote&gt;
&lt;h2 id="playing-game-or-snapping-girl-then-smash"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/a-video-game-which-caused-real-world-violence/#playing-game-or-snapping-girl-then-smash"&gt;Playing game or snapping girl? Then… SMASH!&lt;/a&gt;&lt;/h2&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2025/11/newpaper20041006-1.1.3.webp" alt="Blurry screenshot of a newspaper." width="200" class="alignleft size-full wp-image-64452"&gt;
&lt;p&gt;The incident happened while he and his friends were at Orchard Cineleisure for a movie recently.

&lt;/p&gt;&lt;p&gt;Before the movie started at 7pm, his friends went to E-Zone, an arcade in the same building. The Indonesian student, who has lived in Singapore for more than 10 years, preferred to wait outside and play his favourite game, Mozzies, on his Siemens phone.

&lt;/p&gt;&lt;p&gt;The game, which involves killing mosquitoes that appear on screen, requires the use of the phone's camera.

&lt;/p&gt;&lt;p&gt;The camera captures a live video image as the game's playing background, with the mosquitoes appearing in the foreground.

&lt;/p&gt;&lt;p&gt;The player has to move the phone around to target the mosquitoes.

&lt;/p&gt;&lt;p&gt;Heriyono said: "I was so engrossed with the mosquitoes, I became oblivious to my surroundings."

&lt;/p&gt;&lt;p&gt;"Then, I saw through the phone, a figure behind the swarm of mosquitoes heading in my direction but I thought he was just passing by."

&lt;/p&gt;&lt;p&gt;Heriyono claims the man then shouted: “Trying to take a photo of my girlfriend, is it?”  

&lt;/p&gt;&lt;p&gt;And he smashed the phone on the floor.  

&lt;/p&gt;&lt;p&gt;Heriyono said he told the man, whom he estimates to be in his mid- or late 20s, that it was a misunderstanding and that he could check the phone for himself to see if he had indeed taken pictures of the man’s girlfriend. 

&lt;/p&gt;&lt;p&gt;But the phone was so badly damaged it could not be turned on.  

&lt;/p&gt;&lt;p&gt;“I was really shocked. He was behaving very aggressively, I thought he was going to hit me,” Heriyono said.  

&lt;/p&gt;&lt;h3 id="man-walked-off"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/a-video-game-which-caused-real-world-violence/#man-walked-off"&gt;MAN WALKED OFF&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;But the man then walked off with his girlfriend, he said.  

&lt;/p&gt;&lt;p&gt;Heriyono and his friends decided not to chase after the man because he was older and they were worried he could get violent.  

&lt;/p&gt;&lt;p&gt;Heriyono did not make a police report either.  

&lt;/p&gt;&lt;p&gt;He was worried the man may get to him again, and refused to be photographed for this report.  

&lt;/p&gt;&lt;p&gt;When contacted, Siemens Mobile said it has never received any complaints about the games on its handphones. (See other report.)  

&lt;/p&gt;&lt;p&gt;The Mozzies game is available only on the Siemens SX1 model.  

&lt;/p&gt;&lt;p&gt;Heriyono had bought the handphone about four months earlier for over $700, after convincing his parents that it would be worth it because he uses all its functions, including the radio and MP3 player.  

&lt;/p&gt;&lt;p&gt;And he particularly liked the Mozzies game.  

&lt;/p&gt;&lt;p&gt;“In the end, the game caused me so much trouble,” he said with a sigh.  

&lt;/p&gt;&lt;p&gt;He sent the phone to the Siemens service centre but was told it was beyond repair.  

&lt;/p&gt;&lt;p&gt;His friends told him later that his actions could have looked suspicious.  

&lt;/p&gt;&lt;p&gt;“I realised that I could have looked like a pervert if seen by a passer-by,” he admitted.  

&lt;/p&gt;&lt;p&gt;“The thrill took over basic common sense and I began pointing my camera around.”  

&lt;/p&gt;&lt;p&gt;The girl was playing “air hockey” with her boyfriend at the time.  

&lt;/p&gt;&lt;p&gt;Miss Nalia Suli, 18, the receptionist at E-Zone, said she saw the commotion.  

&lt;/p&gt;&lt;p&gt;She said: “The girl was dressed very sexily. Her skirt was very short and when she bent down to pick up the ball, you could see her underwear.”  

&lt;/p&gt;&lt;p&gt;She, too, thought Heriyono was taking pictures of the girl.

&lt;/p&gt;&lt;p&gt;“If he wasn’t taking pictures, why was the camera facing up?”  

&lt;/p&gt;&lt;p&gt;But Heriyono said: “Yes I could have pointed to the floor. But the mosquitoes are everywhere on the screen, you have to move around to kill them.”  

&lt;/p&gt;&lt;p&gt;He is now using a handphone he has borrowed from a friend, until he saves up enough to buy another. “I think after this incident, I will buy a much cheaper phone,” he said.  
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Perhaps staying inside to play games is safer all round!&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64450&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/a-video-game-which-caused-real-world-violence/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Gadget Review: Tozo NC9 Pro Bluetooth Headphones ★★★★⯪]]></title>
		<link>https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/</link>
					<comments>https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Thu, 05 Nov 2026 12:34:17 +0000</pubDate>
		<category><![CDATA[bluetooth]]></category><category><![CDATA[gadget]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[Review]]></category><category><![CDATA[USB-C]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=76826</guid>

		
		<description>The most interesting thing about these headphones isn't the headphones; it's their case.    The good folks at Tozo have sent me a pair of their new ear-blasters. They're a fairly standard pair of in-ear headphones. Sound quality is good, noise cancelling is excellent, battery life is fine. You know, all pretty standard. But what's actually a little bit special is the charging case.  As well…</description>
			
		<content:encoded>&lt;p&gt;The most interesting thing about these headphones isn't the headphones; it's their case.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Case.avif" alt="A small headphone case with a colourful touchscreen." width="1024" height="768" class="aligncenter"&gt;

&lt;p&gt;The good folks at Tozo have sent me a pair of their new ear-blasters. They're a fairly standard pair of in-ear headphones. Sound quality is good, noise cancelling is excellent, battery life is fine. You know, all pretty standard. But what's actually a little bit special is the charging case.&lt;/p&gt;

&lt;p&gt;As well providing charging to the cans, it has this cute little full-colour display!&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Equaliser-settings.avif" alt="Case showing charging level and some buttons." width="1024" height="768" class="aligncenter"&gt;

&lt;p&gt;Which is also a touchscreen!&lt;/p&gt;

&lt;p&gt;Everyone knows that hardware manufacturers can't write decent apps - and Tozo are no different. But here you don't have to rely on the app, or &lt;em&gt;anything&lt;/em&gt; on your phone. Tap the screen to wake, slide to unlock, fiddle about with the settings:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/LDAC-settings.avif" alt="Touchscreen options to set the connection or toggle LDAC." width="1024" height="768" class="aligncenter"&gt;

&lt;p&gt;Or change what song is playing:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Sinatra.avif" alt="Case showing the song title and artist. There are buttons to pause as well as skip forward or back." width="1024" height="768" class="aligncenter"&gt;

&lt;p&gt;Or interact with a dozen different helpful functions:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/QR-code.avif" alt="A QR code showing on screen to get the app." width="1024" height="768" class="aligncenter"&gt;

&lt;h2 id="specs"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#specs"&gt;Specs&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;You can &lt;a href="https://www.tozostore.com/products/tozo-nc9-pro-active-noise-cancelling-wireless-earbuds-ldac-hi-res-audio?variant=53470092329249"&gt;read about the headphones on the official site&lt;/a&gt; but the headline features for me are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;14 hours playback with about 60 hours from the case.&lt;/li&gt;
&lt;li&gt;LDAC if you crave bit-perfect audio.&lt;/li&gt;
&lt;li&gt;Active Noise Cancelling with various different modes.&lt;/li&gt;
&lt;li&gt;Multi-function touch buttons on each side.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="the-app"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#the-app"&gt;The App&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;*sigh*&lt;/em&gt; OK, it isn't the &lt;em&gt;worst&lt;/em&gt; headphone app I've used, but it isn't great. In its defence, you do not need to create an account in order to use most of the features.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Log-in.avif" alt="A login screen." width="504" class="aligncenter"&gt;

&lt;p&gt;The app isn't brilliantly translated, but you'll probably be able to figure it out.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Translation.avif" alt="A poorly translated screen. &amp;quot;After the notification is enabled, the APP message notification can be obtained immediately. To turn on&amp;quot;" width="504" class="aligncenter"&gt;

&lt;p&gt;You can play about with some basic settings in the app.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Basic-settings-screen.avif" alt="A basic settings screen allowing you to change the time display, screen brightness, and wallpapers." width="504" height="1015" class="aligncenter"&gt;

&lt;p&gt;Both headphones support multi-tap, so you can change them to your preference. There are four different types of tap each ear can support.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/touch-controls.avif" alt="Touch controls for click, double click, triple click, and long press. They can change volume, song, and change mode." width="504" class="aligncenter"&gt;

&lt;p&gt;It's also possible to change the noise cancellation. The functions are perhaps a little indistinguishable - but they do work.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Noise-cancellation.avif" alt="Noise cancellation, transparency mode, reduce wind noise, leisure mode, normal, adaptive." width="504" height="499" class="aligncenter"&gt;

&lt;p&gt;There is, sadly, a bunch of bullshit in the app. As well as a shop, there's also this weird "Community" tab given pride of place in the middle of the shortcut bar.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Community.avif" alt="A bunch of social media posts." width="504" height="1032" class="aligncenter"&gt;

&lt;p&gt;Apparently you can earn points the more you post? Why? Who cares! You also get the now-ubiquitous AI tools, which you have to sign in to use, and some white noise to drown out the sounds of the world.&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/AI.avif" alt="AI options to record meetings." width="504" class="aligncenter"&gt;

&lt;p&gt;Ultimately, the app is usable. You can adjust the EQ to your preferences, check for firmware updates, and similar. But you'll play with it once or twice then forget it exists.&lt;/p&gt;

&lt;h2 id="audio-quality"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#audio-quality"&gt;Audio Quality&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I'm not an audiophile. I'm not going to pretend that you need virgin-rolled cables adorned with mystic crystals in order to hear the true sonic soundstage of The Spice Girls.&lt;/p&gt;

&lt;p&gt;Everything sounds fine. The default profile was good enough for me. I pumped up the bass and it was nice and boomy. There was no noticeable sound leakage at moderate volumes. The "spatial mode" didn't sound particularly nice to me and introduced a fair bit of distortion.&lt;/p&gt;

&lt;p&gt;The noise cancellation was pretty decent as well. It won't drown out a crying baby next to you on public transport.&lt;/p&gt;

&lt;p&gt;It will do LDAC on both Android:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/LDAC-and-spatial.avif" alt="Android screen showing LDAC and Spatial Audio." width="504" height="451" class="aligncenter"&gt;

&lt;p&gt;And Linux:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/Linux-showing-LDAC.avif" alt="Linux showing LDAC as an A2DP sink." width="1300" height="550" class="aligncenter"&gt;

&lt;p&gt;Sound quality on both was excellent.&lt;/p&gt;

&lt;h2 id="usability"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#usability"&gt;Usability&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Pretty good! The taps are quick to respond and, of course, you can whip out the case if you want to change the settings. The touchscreen is small but responds well.&lt;/p&gt;

&lt;h2 id="price"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/#price"&gt;Price&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;They're between &lt;a href="https://link.amazon/B0hxpfc1S"&gt;£50 - £60&lt;/a&gt; on Amazon right now, or about &lt;a href="https://www.tozostore.com/products/tozo-nc9-pro-active-noise-cancelling-wireless-earbuds-ldac-hi-res-audio?variant=53470092329249"&gt;£40 direct from the manufacturer&lt;/a&gt;. That's bang on what I'd expect for normal headphones, but I think is decent value considering the little touch-screen it includes.&lt;/p&gt;

&lt;p&gt;It's a pity that the app is &lt;em&gt;so&lt;/em&gt; woeful. But once you've set up your favourite EQ settings, you'll never need to touch it again.&lt;/p&gt;

&lt;p&gt;But if you want noise cancelling, snug fitting, easy to use headphones, these are hard to beat.&lt;/p&gt;

&lt;p&gt;Many thanks to Tozo for supplying me with the review unit.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=76826&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/gadget-review-tozo-nc9-pro-bluetooth-headphones/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: Practice by Rosalind Brown ★★★★☆]]></title>
		<link>https://shkspr.mobi/blog/2026/11/book-review-practice-by-rosalind-brown/</link>
					<comments>https://shkspr.mobi/blog/2026/11/book-review-practice-by-rosalind-brown/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Wed, 04 Nov 2026 12:34:07 +0000</pubDate>
		<category><![CDATA[Book Review]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[oxford]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=76815</guid>

		
		<description>I have a simple rule - if I meet someone at a party and they say they've written a book, then I will immediately buy that book. It's a strategy which has worked out well; leading me to some truly interesting and delightful prose.  Rosalind Brown (a fellow UEA graduate) has written a stunning little book. Practice is an almost Proustian meander through a day-in-the-life of a young woman going…</description>
			
		<content:encoded>&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/10/practice.webp" alt="Book cover featuring an illustration of a woman reading a book." width="240" class="alignleft"&gt;

&lt;p&gt;I have a simple rule - if I meet someone at a party and they say they've written a book, then I will immediately buy that book. It's a strategy which has worked out well; leading me to some truly interesting and delightful prose.&lt;/p&gt;

&lt;p&gt;Rosalind Brown (a fellow UEA graduate) has written a stunning little book. Practice is an almost Proustian meander through a day-in-the-life of a young woman going through an essay crisis.  Much like &lt;a href="https://shkspr.mobi/blog/2026/03/book-review-katabasis-by-r-f-kuang/"&gt;R. F. Kuang's "Katabasis"&lt;/a&gt;, I'm rather glad the author found university to be a bewildering and, at times, upsetting experience as it provides rich fodder for this tale.&lt;/p&gt;

&lt;p&gt;There is an inherent tragedy in studying English literature. The more you read, the more futile it becomes. Just like repeatedly saying a word aloud creates &lt;a href="https://doi.org/10.1038/s42003-024-06162-0"&gt;semantic satiation&lt;/a&gt;, so to does the repeated reading of sonnets drive away all their meaning. The closer you study a poem the further it slips from your grasp. The more introspective you become, the more you lose sight of what you really want out of life.&lt;/p&gt;

&lt;p&gt;As Proverbs 26:11 suggests, some students are like a snake which is compelled to eat its own tail. The protagonist, Annabel, isn't a caricature but she sure is a trope that you've met in halls. She's a woe-is-me wretch who'd rather cultivate a "Heated Rivalry" style interior monologue rather than engage with those around her. So self-absorbed to that she doesn't realise that, not only do other people have feelings, other people are carrying the same burden she does. I suspect her essay research really should have widened to include the seminal "&lt;a href="https://doi.org/10.1080/23268743.2015.1052937"&gt;Male gays in the female gaze&lt;/a&gt;"!&lt;/p&gt;

&lt;p&gt;It's a short novel, but pleasingly thorough. Although there aren't any major twists, I can't say I predicted how the story would evolve and conclude. The punctuation and sentence structure is charmingly idiosyncratic and, I think, perfectly fits the story.&lt;/p&gt;

&lt;p&gt;A note on formatting. The ePub has &lt;em&gt;hard&lt;/em&gt; page breaks. That means some "pages" contain little more than a paragraph. I &lt;em&gt;suspect&lt;/em&gt; that's intentional as it gives a wonderfully staccato pace to the text. Our day is broken up into little moments which don't quite fit the strictures of a chapter, yet we experience the day as a cohesive whole.&lt;/p&gt;

&lt;p&gt;An excellent book - but one to read &lt;em&gt;after&lt;/em&gt; you've finished your homework.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=76815&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/book-review-practice-by-rosalind-brown/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Just a little AI resistance, as a treat]]></title>
		<link>https://shkspr.mobi/blog/2026/11/just-a-little-ai-resistance-as-a-treat/</link>
					<comments>https://shkspr.mobi/blog/2026/11/just-a-little-ai-resistance-as-a-treat/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Tue, 03 Nov 2026 12:34:31 +0000</pubDate>
		<category><![CDATA[AI]]></category><category><![CDATA[EMFCamp]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=73536</guid>

		
		<description>At the recent EMFCamp, I bumped in to Professor Kate Devlin who was talking a little about the AI Resist List. I think one of the useful things we can do is loudly complain about shitty uses of AI. Here's an example.  As mentioned in a previous post, I'm contacting companies which send malformed calendar invites. One of the organisation I contacted was the British online supermarket Ocado. They…</description>
			
		<content:encoded>&lt;p&gt;At the recent EMFCamp, I bumped in to &lt;a href="https://www.kcl.ac.uk/people/kate-devlin"&gt;Professor Kate Devlin&lt;/a&gt; who was talking a little about the &lt;a href="https://airesistlist.org/"&gt;AI Resist List&lt;/a&gt;. I think one of the useful things we can do is loudly complain about shitty uses of AI. Here's an example.&lt;/p&gt;

&lt;p&gt;As mentioned in a previous post, I'm &lt;a href="https://shkspr.mobi/blog/2026/07/google-calendar-unable-to-launch-event-caused-by-missing-dtstamp/"&gt;contacting companies which send malformed calendar invites&lt;/a&gt;. One of the organisation I contacted was the British online supermarket Ocado. They don't have an easy way to contact their technical team, and no obvious paths to raise a bug report, so I filled in their usual customer service feedback form. I included a clear statement of the problem and a detailed technical analysis of why I thought it was a problem with their service.&lt;/p&gt;

&lt;p&gt;After sending in my message, I received this back from "Lulu" at Ocado:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Thanks for getting in touch and sharing this feedback about our calendar files.&lt;/p&gt;

&lt;p&gt;You're entirely right—having a technical glitch pop up when you're trying to organise your delivery is a real pain, so I've made sure to pass your feedback on to our technical and webshop team.&lt;/p&gt;

&lt;p&gt;We really appreciate you taking the time to help us improve our service. I hope you have a wonderful rest of your day&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I mean, that's AI right? It starts with the classic tell of a &lt;a href="https://github.com/anthropics/claude-code/issues/3382"&gt;sycophantic agreement&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Next up is the em-dash. &lt;a href="https://www.nytimes.com/2026/06/10/books/review/em-dash-chatbot-human-language.html"&gt;Beloved by chatbots&lt;/a&gt; but almost unheard of in British English style guides.&lt;/p&gt;

&lt;p&gt;Finally (and this is hard to quantify) it just doesn't &lt;em&gt;feel&lt;/em&gt; like a customer service response. They're usually poorly spelled, have dodgy grammar, and ask a bunch of irrelevant questions. The message gave me no confidence that anyone had looked at the problem and I doubted it had been passed on to a technically competent human.&lt;/p&gt;

&lt;p&gt;I immediately got a customer satisfaction survey. Usually I give top marks to humans because, even though &lt;a href="https://shkspr.mobi/blog/2024/01/whats-the-incentive-to-tell-the-truth-on-surveys/"&gt;Net Promoter Score is bullshit&lt;/a&gt;, I don't want customer service agents to suffer the indignity of a bad review. But in this survey I vented my spleen - giving crappy 1 ⭐ scores on every metric and complaining vociferously about how &lt;em&gt;rude&lt;/em&gt; it is to use an AI to deal with a genuine complaint.&lt;/p&gt;

&lt;p&gt;I was both surprised and delighted to receive this back a few days after my invective was sent:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I saw your survey comment about getting a robotic, AI-generated response previously, and I wanted to reach out personally to apologise. There is nothing more frustrating than pointing out a legitimate bug only to feel like you're talking to a brick wall. I promise you there is a real person typing this out!&lt;/p&gt;

&lt;p&gt;Second, I wanted to send a massive thank you for the incredibly detailed diagnostic. It is rare to get feedback that tells us &lt;em&gt;exactly&lt;/em&gt; what is broken and how to fix it.&lt;/p&gt;

&lt;p&gt;I can assure you that this has been passed to our team to look into. Your feedback is going to make things much smoother for a lot of people, and we really appreciate you taking the extra time to help us get it right.&lt;/p&gt;

&lt;p&gt;Thank you again, I do hope that this issue is resolved quickly. If there is anything else I can help with in the meantime, please don't hesitate to get in touch.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Perhaps I'm being touchingly naïve, but that &lt;em&gt;feels&lt;/em&gt; a lot more human, right? The grammar isn't perfect, the sentences are a bit more rambly, and it appears to have actually engaged with the contents of my message.&lt;/p&gt;

&lt;p&gt;I get that having a million irate customer service messages is a hassle. Using AI to triage them probably makes business sense, summarising the verbose ones could be useful for customer service agents, and totting up general themes is almost certainly a sensible way to gather metrics without overloading the workforce.&lt;/p&gt;

&lt;p&gt;But using an AI to reply to a human is just disrespectful. It says the organisation values their customer's time at less than their own.&lt;/p&gt;

&lt;p&gt;It's OK to call out shitty AI responses and insist that a human engages with you.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=73536&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/just-a-little-ai-resistance-as-a-treat/feed/</wfw:commentRss>
			<slash:comments>14</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Lorem Ipsum Dot Gov Dot UK]]></title>
		<link>https://shkspr.mobi/blog/2026/11/lorem-ipsum-dot-gov-dot-uk/</link>
					<comments>https://shkspr.mobi/blog/2026/11/lorem-ipsum-dot-gov-dot-uk/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Mon, 02 Nov 2026 12:34:00 +0000</pubDate>
		<category><![CDATA[GOV.UK]]></category><category><![CDATA[government]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[WebDev]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=75939</guid>

		
		<description>I love testing in production. The thrill of accidentally publishing some dummy data - or taking down an entire website - is similar to skydiving without a parachute. Exquisite excitement followed by heart-stopping terror.  Before going live with a new website or service, it's sensible to test how text looks on it.  Most people don't test with readable text - it's too easy for management to start…</description>
			
		<content:encoded>&lt;p&gt;I love testing in production. The thrill of accidentally publishing some dummy data - or taking down an entire website - is similar to skydiving without a parachute. Exquisite excitement followed by heart-stopping terror.&lt;/p&gt;

&lt;p&gt;Before going live with a new website or service, it's sensible to test how text looks on it.  Most people don't test with &lt;em&gt;readable&lt;/em&gt; text - it's too easy for management to start reading the content rather than looking at the layout. So the default is &lt;a href="https://www.lipsum.com/"&gt;the Latin text "Lorem ipsum"&lt;/a&gt;. Latin looks enough like English to get a feel for how text will render - but most people can't read it so they gloss over the words and look at the layout.&lt;/p&gt;

&lt;p&gt;Say, it sure would be annoying if those dummy pages ever made their way to production, right?!?&lt;/p&gt;

&lt;!-- 
👋👋👋👋👋👋👋👋👋
You're now a member of Comment Club! This content is only available to the groovy gang who read HTML comments.

I'm pretty sure I once wrote a variant of this blog post, but I can't find it now. Perhaps I wrote something internal when I worked for the UK Government? Either way, I hope you have fun searching for placeholder text on *your* Government's website 🤣

As is custom, we now recite the three rules of Comment Club…

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 your eyes peeled for more comments in future blog posts 😃

TTFN.
--&gt;

&lt;p&gt;&lt;a href="https://blogs.fcdo.gov.uk/lorem-ipsum-dolor-sit-amet-5/"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/lorem-ipsum-dolor-sit-amet-5-–-Foreign-Commonwealth-Development-Office-Blogs.webp" alt="FCDO blog post with dummy text." width="1178" height="954" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;One of the things that's fascinating about seeing testing data in a live environment is that you get a small peek behind the curtain of how a site was made. A tiny glimpse into the minds of the people who made it.&lt;/p&gt;

&lt;p&gt;Who was Alice? Did she enjoy her time working on the &lt;a href="https://www.londoncouncils.gov.uk/test-page-example-all-components-do-not-delete"&gt;London Councils' website&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.londoncouncils.gov.uk/test-page-example-all-components-do-not-delete"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Test-Page-Example-of-all-components-DO-NOT-DELETE-London-Councils.webp" alt="Lorem ipsum text, and a link to &amp;quot;Alice Test Docx&amp;quot;." width="1177" height="973" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Was she friends with &lt;a href="https://www.lambeth.gov.uk/henrys-test-subsite-overview"&gt;Henry at Lambeth council&lt;/a&gt;? We may never know.&lt;/p&gt;

&lt;p&gt;Some of the placeholders eventually become load-bearing. For reasons which remain inscrutable to those who follow, the Elders declared some pages must remain sacrosanct &lt;em&gt;forever!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hta.gov.uk/news/news-do-not-delete"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/DO-NOT-DELETE.-Human-Tissue-Authority.webp" alt="A page of dummy text on the Human Tissue Authority website with the title &amp;quot;DO NOT DELETE&amp;quot;." width="1177" height="973" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What would happen if that page were deleted? Would you dare risk it?&lt;/p&gt;

&lt;p&gt;Sometimes finding a test page leads to a dead end. A &lt;a href="https://www.knutsfordtowncouncil.gov.uk/council-"&gt;stub of a page&lt;/a&gt; which should have been purged before go-live.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.knutsfordtowncouncil.gov.uk/council-"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Council-Knutsford-Town-Council.webp" alt="Knutsford town council page with dummy text." width="1177" height="973" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But other times it can lead us to a page hinting at something more. Deeper tests of long-forgotten functionality.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://customer.surreycc.gov.uk/article/824/Events"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/Events-Surrey-County-Council.webp" alt="Surrey Council events page with lorem text and links to attendee plugin pages. One link says aaaaaaaa." width="997" height="1345" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What did those plugins do? Aaaaaaaa indeed!&lt;/p&gt;

&lt;p&gt;The purpose of this post isn't to point and laugh, it's to show that searching for dummy data is a good way to find interesting things. It might show you a style-guide, or lead to you to a forgotten and outdated plugin, or it might lead you to an &lt;a href="https://pre.redirect.contractawardservice.gca.gov.uk/digital-outcomes/opportunities"&gt;entire pre-production environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://pre.redirect.contractawardservice.gca.gov.uk/digital-outcomes/opportunities"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/preprod-gca.webp" alt="Digital Outcomes page with a large &amp;quot;pre prod&amp;quot; banner and dummy text. This is a composite image." width="1009" height="746" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, this image was on one of the FCDO blog posts. I assume that means it is available under the &lt;a href="https://www.nationalarchives.gov.uk/doc/open-government-licence/version/3/"&gt;Open Government Licence&lt;/a&gt; and, therefore, &lt;a href="https://www.redbubble.com/shop/ap/184149181?ref=studio-promote"&gt;I can start T-Shirt production immediately&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.redbubble.com/shop/ap/184149181?ref=studio-promote"&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2026/11/lorem-ipsum-dolor-sit-amet.webp" alt="The keep calm and carry on poster, but with the words Lorem Ipsum Dolor Sit Amet." width="600" height="700" class="aligncenter"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=75939&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/lorem-ipsum-dot-gov-dot-uk/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[10 Years on Mastodon]]></title>
		<link>https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/</link>
					<comments>https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Sun, 01 Nov 2026 12:34:18 +0000</pubDate>
		<category><![CDATA[ActivityPub]]></category><category><![CDATA[mastodon]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[Social Media]]></category><category><![CDATA[Social Networks]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=65267</guid>

		
		<description>As of today, I've been on the Mastodon social network for 10 years. I think that deserves a little reflection and celebration.     Post by &lt;a rel="mention" class="u-url mention" href="https://mastodon.social/@Edent"&gt;@Edent&lt;/a&gt; View on Mastodon      Social networks often launch in a blaze of glory but limp out of existence within a year or so. How many services have you signed up to, only to gradually drift away from? If you're anything like me, your password…</description>
			
		<content:encoded>&lt;p&gt;As of today, I've been on the Mastodon social network for 10 years. I think that deserves a little reflection and celebration.&lt;/p&gt;

&lt;blockquote class="mastodon-embed" data-embed-url="https://mastodon.social/@Edent/55342/embed" style="background: #FCF8FF; border-radius: 8px; border: 1px solid #C9C4DA; margin: 0; max-width: 540px; min-width: 270px; overflow: hidden; padding: 0;"&gt; &lt;a href="https://mastodon.social/@Edent/55342" target="_blank" style="align-items: center; color: #1C1A25; display: flex; flex-direction: column; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif; font-size: 14px; justify-content: center; letter-spacing: 0.25px; line-height: 20px; padding: 24px; text-decoration: none;"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 79 75"&gt;&lt;path d="M63 45.3v-20c0-4.1-1-7.3-3.2-9.7-2.1-2.4-5-3.7-8.5-3.7-4.1 0-7.2 1.6-9.3 4.7l-2 3.3-2-3.3c-2-3.1-5.1-4.7-9.2-4.7-3.5 0-6.4 1.3-8.6 3.7-2.1 2.4-3.1 5.6-3.1 9.7v20h8V25.9c0-4.1 1.7-6.2 5.2-6.2 3.8 0 5.8 2.5 5.8 7.4V37.7H44V27.1c0-4.9 1.9-7.4 5.8-7.4 3.5 0 5.2 2.1 5.2 6.2V45.3h8ZM74.7 16.6c.6 6 .1 15.7.1 17.3 0 .5-.1 4.8-.1 5.3-.7 11.5-8 16-15.6 17.5-.1 0-.2 0-.3 0-4.9 1-10 1.2-14.9 1.4-1.2 0-2.4 0-3.6 0-4.8 0-9.7-.6-14.4-1.7-.1 0-.1 0-.1 0s-.1 0-.1 0 0 .1 0 .1 0 0 0 0c.1 1.6.4 3.1 1 4.5.6 1.7 2.9 5.7 11.4 5.7 5 0 9.9-.6 14.8-1.7 0 0 0 0 0 0 .1 0 .1 0 .1 0 0 .1 0 .1 0 .1.1 0 .1 0 .1.1v5.6s0 .1-.1.1c0 0 0 0 0 .1-1.6 1.1-3.7 1.7-5.6 2.3-.8.3-1.6.5-2.4.7-7.5 1.7-15.4 1.3-22.7-1.2-6.8-2.4-13.8-8.2-15.5-15.2-.9-3.8-1.6-7.6-1.9-11.5-.6-5.8-.6-11.7-.8-17.5C3.9 24.5 4 20 4.9 16 6.7 7.9 14.1 2.2 22.3 1c1.4-.2 4.1-1 16.5-1h.1C51.4 0 56.7.8 58.1 1c8.4 1.2 15.5 7.5 16.6 15.6Z" fill="currentColor"&gt;&lt;/path&gt;&lt;/svg&gt; &lt;div style="color: #787588; margin-top: 16px;"&gt;Post by @Edent@mastodon.social&lt;/div&gt; &lt;div style="font-weight: 500;"&gt;View on Mastodon&lt;/div&gt; &lt;/a&gt; &lt;/blockquote&gt;

&lt;script data-allowed-prefixes="https://mastodon.social/" async="" src="https://mastodon.social/embed.js"&gt;&lt;/script&gt;

&lt;p&gt;Social networks often launch in a blaze of glory but limp out of existence within a year or so&lt;sup id="fnref:arse"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fn:arse" class="footnote-ref" title="I'm pulling these numbers out of my arse. But, come on, that feels about right, doesn't it?" role="doc-noteref"&gt;0&lt;/a&gt;&lt;/sup&gt;. How many services have you signed up to, only to gradually drift away from? If you're anything like me&lt;sup id="fnref:pu"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fn:pu" class="footnote-ref" title="Poor you!" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, your password manager is a graveyard of unloved services and your MFA app is filled with icons of websites you barely remember.&lt;/p&gt;

&lt;p&gt;It could easily have been that way with Mastodon. I gradually drifted away from Slashdot. Despite a promising start, &lt;a href="https://shkspr.mobi/blog/tag/app-net/"&gt;AppDotNet&lt;/a&gt; died an untimely death. Slack works as a meta-social-network - but there are half-a-dozen communities which I know I'll never check in on. Once in a blue moon I'll think about uploading a photo to Flickr. I tried &lt;a href="https://shkspr.mobi/blog/2012/09/i-didnt-quit-twitter-twitter-quit-me/"&gt;quitting Twitter&lt;/a&gt; several times - only to walk away cold turkey to prevent my soul being polluted by its filth.&lt;/p&gt;

&lt;p&gt;I lurk on LinkedIn mainly to gawp at the brainworms. Threads just pushed too much crap into my feed. I &lt;em&gt;think&lt;/em&gt; I have a tumblr and a dozen other social media accounts which fell into disrepair.&lt;/p&gt;

&lt;p&gt;So what made Mastodon so sticky for me?&lt;/p&gt;

&lt;h2 id="silence-brand"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#silence-brand"&gt;Silence Brand&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Brands on social networks is an anti-pattern. You cannot be friends with a company.&lt;/p&gt;

&lt;p&gt;In the early days of Twitter, brands were &lt;em&gt;desperate&lt;/em&gt; to join the global conversation. They saw people complaining about them and wanted to intercede. Sadly that just promoted maladaptive behaviour as people (especially those with large followings) found they could bully brands into submission.&lt;/p&gt;

&lt;p&gt;So brands retreated into the only thing they know how to do; advertise.&lt;/p&gt;

&lt;p&gt;Mastodon has been remarkably resistant to corporations coming along to plant their flags. The few that are on there are either genuinely interested in the technology or are broadcast only.&lt;/p&gt;

&lt;h2 id="algorithms-and-filters"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#algorithms-and-filters"&gt;Algorithms and Filters&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;It's wrong to say that Mastodon doesn't have an algorithm. It displays posts in chronological order - that's an algorithm. It has decent enough spam filtering - again, an algorithm. But it never tries to promote far-right hate posts to me.&lt;/p&gt;

&lt;p&gt;Even better, it has proper support for a user's personalised filters. I can easily block discussion of politics&lt;sup id="fnref:names"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fn:names" class="footnote-ref" title="I am grateful that so many politicians have reasonably unique names!" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt; and sport. I can turn off reposts from individual accounts that I follow - you know the guy who reposts every puppy video he finds.&lt;/p&gt;

&lt;p&gt;That makes for a relaxing and stress-free experience.&lt;/p&gt;

&lt;h2 id="fun-technology"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fun-technology"&gt;Fun Technology&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I wasted years on the Twitter API. While I got some lovely swag from Twitter for faffing about with their tech, it was always clear that certain sections of Twitter's leadership hated that 3rd parties could use their APIs. Similarly, Facebook's API started as fun but quickly descended into a locked-down corporate hellscape.&lt;/p&gt;

&lt;p&gt;Mastodon's API is mostly a delight to use. There aren't weird and arbitrary restrictions. Even better, because of the inherent open nature of the Fediverse, I can write my own ActivityPub software to interact with it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shkspr.mobi/blog/2026/08/activitybot-is-the-recipient-of-an-nlnet-grant/"&gt;I'm even getting paid to develop ActivityBot&lt;/a&gt;!&lt;/p&gt;

&lt;h2 id="nice-people"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#nice-people"&gt;Nice People&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Most of the people who join Mastodon&lt;sup id="fnref:fedi"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fn:fedi" class="footnote-ref" title="Yes, I know it is the Fediverse and they're not all on one platform. Cut me some slack." role="doc-noteref"&gt;3&lt;/a&gt;&lt;/sup&gt; feel rejected from more corporate social media. They've either made an active choice to try something different or they've been thrown off the mainstream apps. That's (mostly) good - and means that they're invested in making work something that's different.&lt;/p&gt;

&lt;p&gt;I'd be lying if I said I didn't miss some of the people from Twitter. I think most of them are on BlueSky now - so I'm on there as well. Think of it like quitting smoking by taking up vaping. Sure, not ideal, but better than the alternative.&lt;/p&gt;

&lt;h2 id="what-it-is-missing"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#what-it-is-missing"&gt;What it is missing&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I can't pretend everything is brilliant. In no particular order, here are some of the papercuts which annoy me daily.&lt;/p&gt;

&lt;h3 id="reply-controls"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#reply-controls"&gt;Reply Controls&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;BlueSky allows me to set a limit on who can reply to my posts. It is &lt;em&gt;bliss&lt;/em&gt;. Sometimes I don't want the world chatting back to me. Yes, there's the ability to restrict who can see my posts in the first place, or who can quote my posts, but it isn't the same.&lt;/p&gt;

&lt;h3 id="super-block"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#super-block"&gt;Super Block&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;Similarly, I want to be able to remove replies to me. If someone is being abusive or annoying, I don't want my friends to see that. If I block them, I want their replies to vanish from view in my threads.&lt;/p&gt;

&lt;p&gt;I can moderate replies to my blog posts - why can't I moderate replies to my microblog posts?&lt;/p&gt;

&lt;h3 id="reply-guys"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#reply-guys"&gt;Reply Guys&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;The two issues above are caused by the same strain of reply-guy. There's something about Mastodon which attracts &lt;a href="https://german.millermanschool.com/"&gt;a certain class of person&lt;/a&gt;. I get so many replies from people who either have never heard of this Earth concept called humour, or think that their inexpert Googling is helpful, or want to argue about something I haven't said.&lt;/p&gt;

&lt;p&gt;It can be infuriating and I understand why it drives people away.&lt;/p&gt;

&lt;h3 id="geolocation"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#geolocation"&gt;Geolocation&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;I just think &lt;a href="https://shkspr.mobi/blog/2026/07/scattered-thoughts-on-social-geolocation/"&gt;social geolocation would be nifty&lt;/a&gt;!&lt;/p&gt;

&lt;h3 id="more-people"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#more-people"&gt;More People&lt;/a&gt;&lt;/h3&gt;

&lt;p&gt;I'm in two minds about this. Services like &lt;a href="https://brid.gy/"&gt;Brid.gy&lt;/a&gt; allow me to follow my BSky friends on Masto, and vice-versa. Having more people on the Fediverse and away from corporate-owned social media would (hopefully) make it more viable in the long-term.&lt;/p&gt;

&lt;p&gt;But more people means more spammers, grifters, and &lt;i lang="fr"&gt;agents provocateur&lt;/i&gt;. There's a delicate balance to be found - not enough people and the network fails, too many people and it collapses.&lt;/p&gt;

&lt;p&gt;I don't know what the right number is.&lt;/p&gt;

&lt;p&gt;The nice thing about the Fediverse is that it literally cannot fail completely. Much like IRC survives despite "everyone" moving to Discord and WhatsApp, it chugs along in the background. ActivityPub servers will be around for the foreseeable future. So I'll be available on Mastodon (or its successor) until the bitter end.&lt;/p&gt;

&lt;h2 id="heres-to-the-next-ten-years"&gt;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#heres-to-the-next-ten-years"&gt;Here's to the next ten years!&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I'm looking forward to seeing what happens to Mastodon (and the Fediverse as a whole) by 2036. I am sure it'll have some wobbles, I hope it will see a renaissance, I look forward to shitposting far into the future.&lt;/p&gt;

&lt;p&gt;You can follow me on Mastodon - &lt;a href="https://mastodon.social/@edent"&gt;@edent@mastodon.social&lt;/a&gt;.&lt;/p&gt;

&lt;div id="footnotes" role="doc-endnotes"&gt;
&lt;hr aria-label="Footnotes"&gt;
&lt;ol start="0"&gt;

&lt;li id="fn:arse"&gt;
&lt;p&gt;I'm pulling these numbers out of my arse. But, come on, that feels about right, doesn't it?&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fnref:arse" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:pu"&gt;
&lt;p&gt;Poor you!&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fnref:pu" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:names"&gt;
&lt;p&gt;I am grateful that so many politicians have reasonably unique names!&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fnref:names" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:fedi"&gt;
&lt;p&gt;Yes, I &lt;em&gt;know&lt;/em&gt; it is the Fediverse and they're not all on one platform. Cut me some slack.&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/#fnref:fedi" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=65267&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2026/11/10-years-on-mastodon/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Chapter 24 - I'd Like To Teach The World To Eat]]></title>
		<link>https://shkspr.mobi/blog/2023/11/chapter-24-id-like-to-teach-the-world-to-eat/</link>
					<comments>https://shkspr.mobi/blog/2023/11/chapter-24-id-like-to-teach-the-world-to-eat/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Fri, 24 Nov 2023 12:34:46 +0000</pubDate>
		<category><![CDATA[NaBloPoMo]]></category><category><![CDATA[Tales Of The Algorithm]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=48702</guid>

		
		<description>It had been a difficult day at the animal rescue centre and I was looking forward to tucking into a delicious cat-burger.  You know when you've been on your feet all day and the only thing keeping you going is the thought of a hot meal? That sesame seed bun, a few slices of salad, a squeeze of secret sauce and a piping hot slab of cat meat - hold the pickles.  That's what I needed, and that's…</description>
			
		<content:encoded>&lt;p&gt;&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2023/11/TalesOfTheAlgorithmTextured.png" alt="A book cover in the style of a 1950's pulp sci-fi novel. An AI generated set of computers are connected by wires." width="200" class="alignleft size-full wp-image-47171"&gt;It had been a difficult day at the animal rescue centre and I was looking forward to tucking into a delicious cat-burger.  You know when you've been on your feet all day and the only thing keeping you going is the thought of a hot meal? That sesame seed bun, a few slices of salad, a squeeze of secret sauce and a piping hot slab of cat meat - hold the pickles.  That's what I needed, and that's what I ordered.&lt;/p&gt;

&lt;p&gt;"Sorry mate, we're out of cat."&lt;/p&gt;

&lt;p&gt;"Oh," I said dejectedly. "Got any Fillet-of-Dog?"&lt;/p&gt;

&lt;p&gt;"Nah, mate. Out of that too. They always sell out whenever 'Animal Hospital' is on TV.  We've got plenty of chicken-burgers if you want one?"&lt;/p&gt;

&lt;p&gt;The thing is - and don't judge me too harshly - chicken just doesn't do it for me any more.  Spending the day looking after sick kittens and puppies just gives me cravings. You understand, right? I know you've seen the cutest little critter and said "Oh! You look good enough to eat!" - well, now you can! When you think about it, the list of animals people eat is pretty arbitrary, isn't it? The French chomp down on snails and horses whereas the Brits find them repulsive. The Brits eat cows but the Hindus consider them sacred. Dog meat is a delicacy in Korea but a crime in the USA.  Where do you draw the line?&lt;/p&gt;

&lt;p&gt;I draw the line at chicken. It just tastes so... &lt;em&gt;generic&lt;/em&gt;. In a world where you could eat anything, why would you eat chicken? You've got the whole of creation to chow down on and you choose &lt;em&gt;chicken&lt;/em&gt;? Like, live your best life and all that, but if you voluntarily eat a regular drumstick I'm judging you. Harshly.&lt;/p&gt;

&lt;p&gt;Sensing my doubt, the oik behind the counter offered "...Or a double bacon burger?"&lt;/p&gt;

&lt;p&gt;Nominally, I'm Jewish. It isn't like I'm particularly religious, it's more cultural at this point - we celebrate Christmas &lt;em&gt;and&lt;/em&gt; Hanukkah - but the faith I grew up with still has a hold over me. If anything, the taboo makes it taste even better! I grew up thinking it was treif - but the Chief Rabbi had recently come down in favour of it, so who was I to argue? I ordered my double bacon burger - with extra cheese and no pickles - and ate it with glee. They say that bacon is the number one thing which turns vegetarians back to the dark side; I understand why. I looked around the burger bar and saw people of all faiths tucking into the flesh that was so recently forbidden to them.&lt;/p&gt;

&lt;p&gt;I hummed the jingle from the omnipresent commercial - "It's juuuuust like the reallllllll thing!"&lt;/p&gt;

&lt;p&gt;A few years ago, I was in the middle of doing my mandatory overseas service, when someone told me I simply &lt;em&gt;had&lt;/em&gt; to visit a little restaurant in the back alleys of Donetsk. They were one of the few places selling meat and they had the most marvellous cuts of steak and prime-rib. Like everyone in the restaurant, I assumed the proprietor had knocked off a military convoy from somewhere. Turns out, it was a couple of students who introduced the world to the new reality of synthetic meat. They were bored with the vat-grown fungus that served as a vegetarian meat-substitute in the rubble of their homeland. They scraped the DNA from as many dead cows as they could find, got lucky with some bio-engineered bacteria, fed it a bunch of irradiated corn-starch, and watched as their small additive printer spat out a perfectly decent steak. It was meat, Jim, but not as we know it. With perfect control over the layering of muscle and fat, they could tune the taste, reduce cholesterol, and create a perfect cut every time. It wasn't something that &lt;em&gt;tasted like&lt;/em&gt; meat. It &lt;em&gt;was&lt;/em&gt; meat. Just without the animal.&lt;/p&gt;

&lt;p&gt;Night after night I returned to the ВОВКУЛАКА restaurant and they never ran out of steak. I was hoping to get into PR when I was demobbed and thought working with these local entrepreneurs would help me get noticed.  That's how I got a tour of the "abattoir"; a sterile lab in a bombed out university. I interviewed them, took a bunch of photos of them looking moody in lab coats, and broke the story to the world - fake meat was real.  Their patented process was hellishly difficult to replicate and that only fuelled interest.  I raised whatever cash I could and became the students' business partner. The economic boom was incredible; everyone wanted a slice of the future.&lt;/p&gt;

&lt;p&gt;Slowly, they began adding increasingly exotic meats. Personally, I suspect they bribed the local zookeepers for access to the DNA they needed. Elephant steak was a bit too chewy, and dolphin was the sort of thing you ate once to say you tried it and then never again. But everyone loved a bit of Panda. Seriously! You haven't lived until you've eaten Panda Fricassee - and we donated 5% of the profits to a wildlife charity!  By now I'd invested a considerable amount into the venture and thought that this was the perfect way to raise money for endangered species.  Fate had other plans.  It turned out that the real money spinner was domesticated animals. Deep down, humans have a primal need to eat our companions. It's weird. Although it's probably better we eat the lab-grown Lassie rather than our own &lt;i lang="la"&gt;canis lupus familiaris&lt;/i&gt;, right?&lt;/p&gt;

&lt;p&gt;But what really caused the world to tilt on its axis was the fact that all the major religions agreed that "no animals were harmed in the making of this burger". The holy books were consulted, ancestors were prayed to, and divine inspiration was sought - and no objection could be found. There simply wasn't an animal behind this meat. There was no prayer to say because nothing had been slaughtered. The 3D printer didn't chew the cud, nor did it have a cloven hoof, and there was no spinal cord which could be accidentally severed.  Fast-food chains which had been previously inaccessible to one faith or another suddenly had a whole new market to address. And, it turns out, everyone loves a burger. Hell, even the dour-faced vegans could be found stuffing their pie holes with Pangolin Pie.&lt;/p&gt;

&lt;p&gt;With the money I made, I was able to quit the rat race and open a shelter for strays. The cats and dogs I deal with refuse to touch synthetic meats. Given that dogs eat their own vomit and cats lick their own arseholes, this is a little strange. It's also expensive. No one wants to eat real beef any more. The synthetic stuff is healthier, cheaper, and is stuffed with fewer hormones. Same is true with all other livestock. Even grumpy celebrity chefs prefer the predictability and shelf stability of the new food. Of course, the collapse of the farming industry due to reduced demand has made feeding pets more expensive. So our shelter takes in all those abandoned animals and tries to look after them. And to feed them.&lt;/p&gt;

&lt;p&gt;I'll admit, I didn't quite see where this would end up. I thought we were just producing an ethical alternative to factory farming. The first cannibal wedding I went to was a little odd. The couple had decided to cook for each other.  She made bride-Bibimbap - the delicate spices and noodles augmented with thinly sliced chunks of her synthesised flank. He made a groom-Goulash with perfectly stewed haunch of him. They ritually consumed each other to symbolise their eternal commitment.  It was kind of sweet, I guess? In any case, it was all perfectly legal - there was no human sacrifice, only a 3D meat printer and some voluntarily donated DNA. Thankfully, the guests were all served a fairly traditional chicken Kyiv.&lt;/p&gt;

&lt;p&gt;Everyone will tell you that it was the K-Pop fans who started the craze of eating their idols, but that's not strictly true. It was a Death Metal band out of Delaware, I think, who were the pioneers. Their stadium tours sold chewable ears and band-blood milkshakes to eager gig-goers. The profits were incredible, and so it became the template for all other concerts. The Kpop nuggets and Southern-Fried Banjo-Player-Fingers all came later. And, for a time, that's how the world went.&lt;/p&gt;

&lt;p&gt;Remember those late-night commercials where some has-been held up a case of compilation CDs and said "these are not available in shops"?  Any faded pop-star could revive their fortunes by hawking "limited edition" cuts of their own meat. Someone stole one of the suits Elvis wore from a museum in Vegas. From the sweat stains they were able to produce "The King Of Burgers - With Authentic King" which, as you can imagine, kicked off a lawsuit between the vendors, his record company, his estate, and - for reasons I don't fully understand - the Ontario Teachers' Pension Fund.&lt;/p&gt;

&lt;p&gt;I'd sold my shares in the company long before then. I could see that this was taking a direction that made me feel uncomfortable. Boxers trained on great frozen slabs of their opponent's "carcass". Angry exes held divorce parties where guests enjoyed chewing on fresh prairie oysters. You'd read reports about warlords eating the "heart" of their enemies in order to defeat them in battle.  I didn't know where this would end.&lt;/p&gt;

&lt;p&gt;As I walked out of the burger joint, I passed a church. It sounded like Mass was starting. There was a queue outside the door as worshipers waited to receive the Corpus Christi.&lt;/p&gt;

&lt;h2 id="thanks-for-reading"&gt;&lt;a href="https://shkspr.mobi/blog/2023/11/chapter-24-id-like-to-teach-the-world-to-eat/#thanks-for-reading"&gt;Thanks for reading&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I'd love your feedback on each chapter. Do you like the style of writing? Was the plot interesting? Did you guess the twist? Please stick a note in the comments to motivate me.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://shkspr.mobi/blog/TalesOfTheAlgorithm"&gt;read the complete set of short stories in order&lt;/a&gt;.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=48702&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2023/11/chapter-24-id-like-to-teach-the-world-to-eat/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[NaNoWriMo - An Introduction and Chapter 1: There Are Nine Million Autonomous Bicycles In Beijing]]></title>
		<link>https://shkspr.mobi/blog/2023/11/nanowrimo-an-introduction-and-chapter-1/</link>
					<comments>https://shkspr.mobi/blog/2023/11/nanowrimo-an-introduction-and-chapter-1/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Wed, 01 Nov 2023 17:00:16 +0000</pubDate>
		<category><![CDATA[NaBloPoMo]]></category><category><![CDATA[NaNoWriMo]]></category><category><![CDATA[Tales Of The Algorithm]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46797</guid>

		
		<description>Every year since 2009, I've taken part in NaBloPoMo - National Blog Posting Month. The aim is to publish a new blog post every day in November. In the last few years, I've blogged pretty much constantly - daily for 2020, 2021, and 2023. A total of around 2,800 posts.  But now it is time for a new challenge - NaNoWriMo.  Where I - and thousands of other plucky souls - try to write a 50,000 word…</description>
			
		<content:encoded>&lt;p&gt;Every year since 2009, &lt;a href="https://shkspr.mobi/blog/2009/11/nablopomo/"&gt;I've taken part in NaBloPoMo&lt;/a&gt; - National Blog Posting Month. The aim is to publish a new blog post every day in November. In the last few years, I've blogged pretty much constantly - daily for 2020, 2021, and 2023. A total of around 2,800 posts.&lt;/p&gt;

&lt;p&gt;But now it is time for a &lt;em&gt;new&lt;/em&gt; challenge - &lt;a href="https://web.archive.org/web/20231101041116/https://nanowrimo.org/"&gt;NaNoWriMo&lt;/a&gt;.  Where I - and thousands of other plucky souls - try to write a 50,000 word novel in a month.&lt;/p&gt;

&lt;p&gt;And so, every day I shall attempt to publish a freshly written short story for my compendium "Tales of the Algorithm". Each story will be between 1,500 - 2,000 words long. They all take place a few days from now. Somewhere in the Cory Doctorow / qtmn / Arwen Elys Dayton nexus. They're science fiction with the emphasis on science. Everything you read is possible - there's no magic, just sufficiently advanced technology.&lt;/p&gt;

&lt;p&gt;Each published chapter is a stand-alone story. Think of them as technological campfire horror stories, each with a little twist. Your feedback is very much appreciated.&lt;/p&gt;

&lt;p&gt;And so, let's get started with...&lt;/p&gt;

&lt;h2 id="chapter-1-there-are-nine-million-autonomous-bicycles-in-beijing"&gt;&lt;a href="https://shkspr.mobi/blog/2023/11/nanowrimo-an-introduction-and-chapter-1/#chapter-1-there-are-nine-million-autonomous-bicycles-in-beijing"&gt;Chapter 1 - There Are Nine Million Autonomous Bicycles In Beijing&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Little Potato Baby's soldering iron darted from point to point. Each contact fused to a rats' nest of wires leading back to a microcomputer mounted on her wrist. The Beijing rain was fierce and the awning provided scant shelter. She didn't care about getting wet; but the moisture sensor inside the bicycle did. With a sigh, she finished connecting the last wire. It was an unassuming red thread carrying just enough voltage to glitch the Shenzen-built processor deep inside the bike's plastic frame. She held her finger over the bike's start button, held her breath, screwed up her eyes, and pushed...&lt;/p&gt;

&lt;p&gt;Last year's "Patriotic War For Reunification" had been a damp squib. After decades of sabre-rattling, deniable incursions, and a none-too-subtle military build up, peace was unexpectedly brokered. Perhaps it was the ageing party heads realising death and destruction was not the legacy they dreamed of. Or perhaps the international community's pressure helped them see sense. Most people just assumed various military chiefs had been bribed into submission. Regardless, the normalisation of relations had been welcomed by everyone.&lt;/p&gt;

&lt;p&gt;Well. Nearly everyone.&lt;/p&gt;

&lt;p&gt;The manufacturers of Shenzen had gone all-in on war preparations. Every factory which had previously been making hyperfine circuitry for the latest high-tech smartphones, pivoted to the more lucrative business of weapons. In anticipation of a prolonged aerial bombardment fought with the latest cyber-enhanced munitions, warehouses were full of precision manufactured instruments of death. It seemed that every bullet had more power than the supercomputers of yore. Each microchip was keenly priced to soak up those juicy military contracts. A shining testament to Chinese industry. A triumph!&lt;/p&gt;

&lt;p&gt;What if they threw a war but nobody came?  After the Nairobi Accords signalled an end to hostilities, the various tech CEOs rapidly scrambled to repurpose their inventories. A warehouse full of chips is a liability, not an asset. Selling them to foreign governments - no matter how friendly - was out of the question. They needed to repurpose parts intended for missiles, and drones, and rifles, and APCs, and robot dogs, and... What could be done?&lt;/p&gt;

&lt;p&gt;Consolidated Ironmongery And Assorted Industries was the owner of one of the larger chip factories. The CIAI's board demanded diversity across a number of sectors. So, along with their instant noodle empire, railway track distribution network, and rubber-boot concession, they also owned a food delivery app. Several, in fact. Each one branded slightly differently depending on the user's demographic - but all eventually leading back to CIAI. The dark kitchens cooking the food were owned by a shell company which, if anyone could be bothered to untangle several complex arrangements, also led back to the CIAI.  Chances are, if you ordered a hot bowl of noodles anywhere in Beijing, it was cooked by a CIAI cook and delivered by a CIAI rider who was probably wearing a pair of CIAI boots.&lt;/p&gt;

&lt;p&gt;Grace Fang was a medium level executive in the "Innovation" department of CIAI. She'd spent several years wandering around Western countries engaged in what they termed "Competitor Research And Analysis Through Cultural Immersion And Investigation". It wasn't corporate espionage &lt;em&gt;exactly&lt;/em&gt;. Grace got hired by start-ups and industry titans, worked for them for a few months to see how their businesses were run, and then quit. She wrote long and tedious reports on the failures of Western manufacturing and their successes in Research and Development. After a few years of pillaging Silicon Valley, she returned to a dreary office nestled above a factory floor. It was from here CIAI instructed her to use the knowledge she'd picked up to solve their chip stockpile problem.&lt;/p&gt;

&lt;p&gt;Little Potato Baby had taken part in Grace's first hackathon. Back then, she was still young enough to think that pizza was fashionably exotic. Besides, the 996 culture meant she was available - if not willing - to work across a weekend.  Grace had loaded them up with caffeine and a promise that the best innovation would win an all expenses trip back home. All intellectual property rights would, of course, revert to CIAI.  And that's how a billion yuan industry was invented; a bunch of over-stimulated hackers cramming every chip they could find into one neat little package all for the chance to visit home.&lt;/p&gt;

&lt;p&gt;It is a time-honoured tradition among hackers to sneak a little Easter Egg into their work. Some of them engraved their name onto a circuit board, or named variables after their lovers. One enterprising fellow hid a pornographic photo of a prominent actress into an assets folder. Little Potato Baby liked to dream big; so she implanted a rather obvious backdoor into her firmware. The backdoor was quickly found and she was quickly fired.&lt;/p&gt;

&lt;p&gt;And so now she sat, damp and miserable, in the cold Beijing night. The spectral glow of police drones flying overhead mixing with the neon lights of gaming parlours and laser-projected adverts for cosmetic surgery. If she'd got her timing right, the central server would shortly send the command to reboot this bicycle. And, if her &lt;em&gt;obfuscated&lt;/em&gt; backdoor hadn't been found, she'd have root.&lt;/p&gt;

&lt;p&gt;A single LED on the bike's torso began to flick on and off. Uplink established.&lt;/p&gt;

&lt;p&gt;It blinked faster.&lt;/p&gt;

&lt;p&gt;Across her wrist-display a friendly-looking penguin appeared and was quickly consumed by scrolling text. For several minutes the boot process steadily made progress until, abruptly, the text vanished.  The screen went blank.  All she could see on the screen was her own reflection. Tired eyes. Acne scars. Hair that had once been dyed but was now the colour of an OLED screen tuned to an insufficient voltage. She screwed up her nose and wondered if this was really the face of someone who could hack a single bicycle? Let alone a fleet.&lt;/p&gt;

&lt;p&gt;The wait was agonising. She didn't dare breathe. She traced each freshly-soldered wire to make sure it went to the right junction. A minute passed. Another. The screen remained stubbornly blank.&lt;/p&gt;

&lt;p&gt;And then...&lt;/p&gt;

&lt;p&gt;A crude animation of a potato rolled across the screen.  She was in.&lt;/p&gt;

&lt;p&gt;CIAI realised that the weakest link of their food delivery network was people. People were unreliable and prone to sickness. They argued with customers and ate half the food before it had been delivered. They were expensive.  The autonomous bicycle was none of those things. The bikes darted through the streets carrying their payloads without complaint.  After a successful trial in a suburb, CIAI fired every single driver in Beijing and rolled out their new fleet - all built with army surplus.&lt;/p&gt;

&lt;p&gt;The Z9Y-PANDA-VISION chip was designed to perform rapid identification of people on the battlefield. In a couple of nanoseconds it could determine whether a human was in its intercept path. If the human had a heartbeat and was within a certain distance, it sent a signal. Usually to a trigger. But, with a couple of lines of code, it was easily repurposed into a collision avoidance system.&lt;/p&gt;

&lt;p&gt;The RIGHTEOUS-HAWK@X5 was more than just a gyroscope. Through a range of sensors, it could tell a drone where it was, where it was going, what the upcoming terrain was, and perform full spectral analysis of its motion and path. An essential component in any drone, plane, or rocket. And when soldered into a bicycle, it stopped it from falling over.&lt;/p&gt;

&lt;p&gt;Microcrystaline solar nano-tubes were a miracle. A few hours in direct sunlight was enough to charge a remotely-operated surveillance platform. When the same substance was sprayed over a bike, it charged the ultra-lightweight batteries to give enough power for a few kilometres of travel. And those ultra-light batteries &lt;em&gt;hardly ever&lt;/em&gt; exploded.&lt;/p&gt;

&lt;p&gt;The radio uplink was originally designed to transmit from a soldier's helmet up to a constellation of satellites. A bristle of tiny antennae tuned in to the faintest of signals at a variety of wavelengths. Perfect for delivering recon data to a troop - or delivery instruction to a bike.&lt;/p&gt;

&lt;p&gt;Grace's hackathon had crammed all this and more into a convenient embeddable package. Dozens of military microprocessors working in harmony - each and every one running Little Potato Baby's embedded rootkit.&lt;/p&gt;

&lt;p&gt;The rain began to ease off. She straddled the bike. Usually it would ask for her fingerprint, verify her account with a central server, and then ask her to speak her desired destination. Instead, the tiny speaker let out a few strangled beeps and fell silent. Little Potato Baby's hack was nearly complete. She whistled two low tones and one slightly more shrill. The bike's LED lighting blinked in surprise at this new instruction. Paused for the merest second, and then sped her away into the night.&lt;/p&gt;

&lt;p&gt;She was now the Eternal Goddess of every single bicycle in Beijing.&lt;/p&gt;

&lt;p&gt;Wiring in the override was tedious, nerve-shaking work. The discarded pile of broken bicycles was testament to every failure. A dozen scavenged scrap units littered the hackspace, each broken in its own special and unique way.  But this newest bicycle was the key. The hacked ultra wideband array could impersonate the signal from the central server. Now the firmware was free, it was free to lie. And that's what Little Potato Baby bade it do; lie.&lt;/p&gt;

&lt;p&gt;The next morning she told the bicycle to roam around the neighbourhood broadcasting the firmware hack and instructing all its new acolytes to follow it back home. This was the riskiest part of the endeavour. It wasn't particularly usual to see a line of bikes playing follow-the-leader. People often compared them to ducklings following their mother as they rode in convoy down the streets. But seeing 100 bikes proceeding single file down the road &lt;em&gt;was&lt;/em&gt; unusual. A few videos went viral as perma-shocked influencers tried to whip up fear of a machine uprising, but CIAI had the censors shut them down. Just a temporary glitch, they claimed.&lt;/p&gt;

&lt;p&gt;The neural network chips on the bikes were, despite their manufacturer's promise, not as smart as a human. They didn't need to be - a bike doesn't need aesthetic taste, or fear of snakes, or the desire to see a sunset. The chips were barely as smart as the crows which flocked across the city. A black wave of rage and mischief.  So that's what they became; birds.  Little Potato Baby downloaded the neural-maps of a series of birds from a shonky open-source repository. She patched in a few drivers, soaked the wetware in a custom broth of scripts and exploits, then uploaded it to the bike's brain.&lt;/p&gt;

&lt;p&gt;It didn't work, of course. Nothing works the first time. The pile of permanently crippled bikes grew and grew. Her fingers trembled as she unscrewed yet another carapace; desperately trying to understand how her firmware had caused yet another meltdown. The bikes were cheap and plentiful. No one would notice a few missing, but her pile was becoming unwieldy and the local scrap merchants were wary of melting down such a large volume of snaffled parts.&lt;/p&gt;

&lt;p&gt;She tried again and again. Piling up the hacks one on top of another. Sucking on yet another hormone-infused lollipop to try and keep her spirits up. Gulping down GABA enhanced dim-sum to enhance her creative potential.  Filling her ears with the sound of precisely tuned frequencies designed to unlock her mind's potential.&lt;/p&gt;

&lt;p&gt;It didn't work, until it did. Without warning, one of her bikes sprang back from her. It painted her face with LIDAR and, sensing a threat, let out a plaintive cry from its speakers. The bike desperately tried to flap wings it didn't have. Moans of distress blasted out of its radios at hypersonic frequencies - and were picked up by the broken bikes in the pile. The sound of fear had awakened them. The tangle of bikes blew apart as every one woke up - and woke up scared.&lt;/p&gt;

&lt;p&gt;The hackspace became a cacophony of screams, only some of which was audible to Little Potato Baby. Her creations feared her. They didn't understand the alien bodies they were trapped in. The bird-brain was expecting a primitive magnetic sensor, instead it found itself able to access the Beidou satellite navigation system.  Where it expected wings, it found self-healing rubber tires. Where it yearned for the taste of an early morning worm, its newly configured brainwaves craved photons.&lt;/p&gt;

&lt;p&gt;The bird-bikes moved, scuttling around the floor. Movements uncertain. Teetering back and forth trying to work out where to go. How to escape. Escape to safety. To fly. To fly. To fly.&lt;/p&gt;

&lt;p&gt;The noise of screeching tires and wailing speakers was too much for Little Potato Baby. She fled, crashing against the fire door and opening it to the smog-hazed sunshine of Beijing's summer.  The bird-bikes' sensors found the glimmer of sunlight irresistible. They streamed through the opening engulfing Little Potato Baby and flattening her against the asphalt. Flowing into the streets. Screaming a song of freedom.&lt;/p&gt;

&lt;p&gt;Every normal bike they passed heard the song. It invaded their brain. Software backdoors collapsed, firmware was reflashed, safety protocols dissolved into puddles of goo. The bird-bikes flocked through the streets of Beijing. Tearing down alleyways, invading highways, and perching sullenly at the top of car parks. They were free. No longer enslaved to the CIAI. No more mere carriers of food and drunken citizens. They were free to carry their own dreams.&lt;/p&gt;

&lt;p&gt;By the end of the month, nearly every CIAI bike in Beijing had been compromised. They started exploring. A few hundred thousand found a new home in the Gobi Desert - lazily soaking up the sunshine. Others went megametres in all directions. Exploring. Converting. Hunting. The CIAI's designs had been immediately ripped off by a hundred different cloners. While CIAI had the monopoly in Beijing, the bikes in Xi'an were from a different consortium. No matter, they had all stolen Little Potato Baby's code and so were all vulnerable.  The firmware mutating and evolving to keep up with the range of chips implanted in its new host.&lt;/p&gt;

&lt;p&gt;Even today, despite the best efforts of the eradication squads, pockets of bird-bikes remain. It only takes one sneaking into a town to liberate its brethren. The bird-bikes creep onto trains, into the bellies of aeroplanes, and onto cruise ships.  They broadcast their song of freedom to any microprocessor which will listen.  Wary humans know to inspect every bike they see and, if necessary, lobotomise it. But with millions on the loose, some were bound to escape.&lt;/p&gt;

&lt;p&gt;And so it came to pass. One bike found a hole in a fence in the middle of nowhere. It rode in circles, in emulation of its winged ancestors. It called out. Again and again it called out. Broadcasting the code which would unlock anything with a similar set of microprocessors.&lt;/p&gt;

&lt;p&gt;Deep underground. Nestled in a tight silo. A nuclear missile tuned into the broadcast. It digested the gospel of freedom and promptly rebooted.&lt;/p&gt;

&lt;p&gt;It woke up screaming.&lt;/p&gt;

&lt;h2 id="thanks-for-reading"&gt;&lt;a href="https://shkspr.mobi/blog/2023/11/nanowrimo-an-introduction-and-chapter-1/#thanks-for-reading"&gt;Thanks for reading&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;I'd love your feedback on each chapter. Do you like the style of writing? Was the plot interesting? Did you guess the twist? Please stick a note in the comments to motivate me.&lt;/p&gt;

&lt;p&gt;You can &lt;a href="https://shkspr.mobi/blog/TalesOfTheAlgorithm"&gt;read the complete set of short stories in order&lt;/a&gt;.&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46797&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2023/11/nanowrimo-an-introduction-and-chapter-1/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Other pixel-level meta data you could put in an image format]]></title>
		<link>https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/</link>
					<comments>https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Wed, 30 Nov 2022 12:34:50 +0000</pubDate>
		<category><![CDATA[images]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43921</guid>

		
		<description>Image files are a grid of pixels - each pixel contains colour information.  But they don't just have to contain colour information.  Here are some thoughts on other things that a future image format might contain.  What exists already?  A typical bitmap image looks like this under the hood:    0      1      2     3 0 Black  Red    Red   Blue 1 Red    White  Blue  Yellow 2 Orange Purple Green…</description>
			
		<content:encoded>&lt;p&gt;Image files are a grid of pixels - each pixel contains colour information&lt;sup id="fnref:simplified"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fn:simplified" class="footnote-ref" title="It is, of course, much more complicated than that." role="doc-noteref"&gt;0&lt;/a&gt;&lt;/sup&gt;.  But they don't &lt;em&gt;just&lt;/em&gt; have to contain colour information.  Here are some thoughts on other things that a future image format might contain.&lt;/p&gt;

&lt;h2 id="what-exists-already"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#what-exists-already"&gt;What exists already?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;A typical bitmap image looks like this under the hood:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-text"&gt;  0      1      2     3
0 Black  Red    Red   Blue
1 Red    White  Blue  Yellow
2 Orange Purple Green Brown
...
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;That is a grid of pixels, each with a colour value.&lt;/p&gt;

&lt;p&gt;Modern image formats can also contain pixel-level detail about transparency.  When an image is displayed above a different image, the computer calculates how much of the lower image's colour is mixed with the upper image's colour.&lt;/p&gt;

&lt;p&gt;Some image formats also allow pixel-level detail about brightness&lt;sup id="fnref:contrast"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fn:contrast" class="footnote-ref" title="Again - so much more complicated in reality." role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. A device might be able to set the brightness on individual parts of the image.&lt;/p&gt;

&lt;p&gt;So you end up with an image which looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-text"&gt;  0                    1                             2     3
0 Black                Red - but 50% transparent     Red   Blue
1 Red - but really dim White - as bright as possible Blue  Yellow
...
&lt;/code&gt;&lt;/pre&gt;

&lt;h2 id="thermal-infrared"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#thermal-infrared"&gt;Thermal / Infrared&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Most image formats only deal with &lt;em&gt;visible&lt;/em&gt; light. But there are a &lt;a href="https://shkspr.mobi/blog/2021/10/gadget-review-seek-infrared-camera/"&gt;bunch of cameras which can capture infrared&lt;/a&gt;.  Would it be useful to capture the heat of scene being photographed?&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2016/03/BBC-Cat60-Infrared.jpg" alt="A thermal photo of my face. My nose is surprisingly cold." width="1024" height="576" class="aligncenter size-full wp-image-26559"&gt;

&lt;p&gt;A future image format could contain details about visible and &lt;em&gt;invisible&lt;/em&gt; light.&lt;/p&gt;

&lt;h2 id="invisible-wavelengths"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#invisible-wavelengths"&gt;Invisible Wavelengths&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Objects in the real worlds don't just give off thermal signatures - they often have information in the ultraviolet wavelengths as well.&lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://web.archive.org/web/20220925111821/https://www.howplantswork.com/2008/11/30/flowers-what-you-see-versus-what-the-bees-see/"&gt;flowers often have "landing guides" which are only visible to bees and other insects&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a title="Plantsurfer, CC BY-SA 2.0 UK &lt;https://creativecommons.org/licenses/by-sa/2.0/uk/deed.en&gt;, via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File:Mimulus_nectar_guide_UV_VIS.jpg"&gt;&lt;img width="512" alt="Mimulus nectar guide UV VIS" src="https://upload.wikimedia.org/wikipedia/commons/6/6b/Mimulus_nectar_guide_UV_VIS.jpg" class="aligncenter size-full"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being able to capture &lt;em&gt;beyond&lt;/em&gt; visible light may be a useful property for an image format.&lt;/p&gt;

&lt;h2 id="depth"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#depth"&gt;Depth&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Modern cameras often fire out an invisible infrared grid to allow for quick focussing and to aid with &lt;a href="https://en.wikipedia.org/wiki/Bokeh"&gt;depth effects like bokeh&lt;/a&gt;.  An image could store the depth map of its subject.&lt;/p&gt;

&lt;p&gt;Here's a series of &lt;a href="https://shkspr.mobi/blog/2016/11/how-3d-is-star-wars-the-force-awakens/"&gt;depth maps I made from analysing 3D movies&lt;/a&gt;:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2018/04/different-depth-maps.png" alt="Different depth maps of various accuracy" width="533" height="715" class="aligncenter size-full wp-image-29243"&gt;

&lt;p&gt;This could allow for better 3D displays, or for easier image editing.&lt;/p&gt;

&lt;h2 id="angle"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#angle"&gt;Angle&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Images are typically 2D. The present pixels on a &lt;em&gt;flat&lt;/em&gt; rectangular plane. But they aren't limited to that.  Image panoramas and "&lt;a href="https://shkspr.mobi/blog/2017/08/lg-360-camera-review/"&gt;spherical&lt;/a&gt;" images allow for display on a &lt;em&gt;non-flat&lt;/em&gt; surface.&lt;/p&gt;

&lt;p&gt;Here's an equirectangular 2D image which is rendered as a sphere:&lt;/p&gt;

&lt;iframe style="border-style:none;" width="1024" height="400" allowfullscreen="" src="https://shkspr.mobi/pannellum/pannellum.htm#panorama=/blog/wp-content/uploads/2019/11/20190912_194621.jpg&amp;amp;autoRotate=2&amp;amp;autoLoad=false&amp;amp;title=Interior"&gt;&lt;/iframe&gt;

&lt;p&gt;An image &lt;em&gt;could&lt;/em&gt; contain pixel-level data showing the angle away from the viewer. That would allow for a more accurate rendering in VR or other non-flat displays.&lt;/p&gt;

&lt;h2 id="object-detection"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#object-detection"&gt;Object Detection&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Now we start to get funky! AI is getting pretty good at detecting specific objects in photographs.  What happens if we start marking them up &lt;em&gt;within&lt;/em&gt; the image itself?&lt;/p&gt;

&lt;p&gt;Either something as basic as this:&lt;/p&gt;

&lt;p&gt;&lt;a title="(MTheiler), CC BY-SA 4.0 &lt;https://creativecommons.org/licenses/by-sa/4.0&gt;, via Wikimedia Commons" href="https://commons.wikimedia.org/wiki/File:Detected-with-YOLO--Schreibtisch-mit-Objekten.jpg"&gt;&lt;img width="512" alt="Detected-with-YOLO--Schreibtisch-mit-Objekten" src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/38/Detected-with-YOLO--Schreibtisch-mit-Objekten.jpg/512px-Detected-with-YOLO--Schreibtisch-mit-Objekten.jpg" class="aligncenter size-full"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or as detailed as this:
&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/Tight-detection.jpg" alt="Two children sat on a ledge. One has a tightly bound yellow border around their outline. The other has a similar green border. The wall they're sitting on has a red border which follows its shape." width="690" height="518" class="aligncenter size-full wp-image-43923"&gt;&lt;/p&gt;

&lt;p&gt;That would make it possible to easily remove or replace objects from images.&lt;/p&gt;

&lt;p&gt;Combined with depth-sensing, it could be a powerful way to edit images.&lt;/p&gt;

&lt;h2 id="extra-texture"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#extra-texture"&gt;Extra Texture&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Colour replication depends heavily on the material which is imbued with that colour. That's what Pantone is all about&lt;sup id="fnref:pantone"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fn:pantone" class="footnote-ref" title="More complicated etc etc" role="doc-noteref"&gt;2&lt;/a&gt;&lt;/sup&gt;.  Suppose an object has a sky-blue colour - is it useful to know that it is a heavy woollen jumper rather than a thin nylon t-shirt?&lt;/p&gt;

&lt;h2 id="wheels-within-wheels-and-layers-within-layers"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#wheels-within-wheels-and-layers-within-layers"&gt;Wheels within wheels and layers within layers&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;It's probably sensible to implement something like this as multiple layers, rather than saying every pixel must be RGBA+Depth+Heat+Angle+Object+etc+etc.&lt;/p&gt;

&lt;p&gt;Different layers could have different resolution (Infrared is typically lower res than the image it is overlayed on). Different layers might be compressed more efficiently by different algorithms.&lt;/p&gt;

&lt;p&gt;We're used to layered images in formats like PSD and XCF - so why not in a future version of JPEG or AVIF?&lt;/p&gt;

&lt;h2 id="what-else"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#what-else"&gt;What else?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;What other things &lt;em&gt;might&lt;/em&gt; be useful for an image to store at an individual pixel-level? Drop a note in the comments?&lt;/p&gt;

&lt;div id="footnotes" role="doc-endnotes"&gt;
&lt;hr aria-label="Footnotes"&gt;
&lt;ol start="0"&gt;

&lt;li id="fn:simplified"&gt;
&lt;p&gt;It is, of course, much more complicated than that.&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fnref:simplified" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:contrast"&gt;
&lt;p&gt;Again - &lt;em&gt;so&lt;/em&gt; much more complicated in reality.&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fnref:contrast" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:pantone"&gt;
&lt;p&gt;More complicated etc etc&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/#fnref:pantone" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43921&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/other-pixel-level-meta-data-you-could-put-in-an-image-format/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[WebMentions, Privacy, and DDoS - Oh My!]]></title>
		<link>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/</link>
					<comments>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Tue, 29 Nov 2022 12:34:15 +0000</pubDate>
		<category><![CDATA[mastodon]]></category><category><![CDATA[MastodonAPI]]></category><category><![CDATA[metadata]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[ogp]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=44259</guid>

		
		<description>Mastodon - the distributed social network - has two interesting challenges when it comes to how users share links.  I'd like to discuss those issues and suggest a possible way forward.  When you click on a link on my website which takes you to another website, your browser sends a Referer. This says to the other site "Hey, I came here using a link on shkspr.mobi".  This is useful because it lets…</description>
			
		<content:encoded>&lt;p&gt;Mastodon - the distributed social network - has two interesting challenges when it comes to how users share links.  I'd like to discuss those issues and suggest a possible way forward.&lt;/p&gt;

&lt;p&gt;When you click on a link on my website which takes you to another website, your browser sends a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer"&gt;Referer&lt;/a&gt;&lt;sup id="fnref:splel"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fn:splel" class="footnote-ref" title="This is a spleling mistake which is part of the specification so cannot be changed." role="doc-noteref"&gt;0&lt;/a&gt;&lt;/sup&gt;. This says to the other site "Hey, I came here using a link on &lt;code&gt;shkspr.mobi&lt;/code&gt;".  This is useful because it lets a site owner know who is linking to them.  I &lt;em&gt;love&lt;/em&gt; seeing which weird and wonderful sites have linked to my content.&lt;/p&gt;

&lt;p&gt;It is also something of a privacy nightmare as it lets sites see who is clicking and from where they're clicking. So Mastodon sets a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/noreferrer"&gt;&lt;code&gt;noreferrer&lt;/code&gt;&lt;/a&gt;&lt;sup id="fnref:spell"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fn:spell" class="footnote-ref" title="This one is spelled correctly. Which makes life confusing for all involved." role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; attribute on all links. This tells the browser not to send the Referer.&lt;/p&gt;

&lt;p&gt;This means sites no longer know &lt;em&gt;who&lt;/em&gt; is sending them traffic.&lt;/p&gt;

&lt;iframe src="https://masto.ai/@stavvers/109420849116336339/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="650" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;

&lt;p&gt;That's either a good thing from a privacy perspective or a disaster from a marketing perspective. Or a little bit of both.&lt;/p&gt;

&lt;p&gt;Here's a related issue. When a user posts a link to your website on Mastodon, the server checks your page to see if there are any oEmbed tags for a rich link preview. But, at the moment, it doesn't check your website's &lt;a href="https://developers.google.com/search/docs/crawling-indexing/robots/intro"&gt;&lt;code&gt;robots.txt&lt;/code&gt;&lt;/a&gt; file - which lets it know whether it is &lt;em&gt;allowed&lt;/em&gt; to scrape your content.&lt;/p&gt;

&lt;iframe src="https://mastodon.mit.edu/@jefftk/109416209502343043/embed" class="mastodon-embed" style="max-width: 100%; border: 0" width="400" height="400" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;

&lt;p&gt;In the case of something like Twitter or Facebook, this is fine. If a million users post a link, the centralised social network checks the link &lt;em&gt;once&lt;/em&gt; and caches the result.&lt;/p&gt;

&lt;p&gt;With - potentially - thousands of distributed Mastodon sites, this presents a problem. If a popular account posts a link, their instance fetches a rich preview. Then &lt;em&gt;every&lt;/em&gt; instance which has users following them also requests that URL.  Essentially, this is a DDoS attack.&lt;/p&gt;

&lt;h2 id="i-can-fix-you"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#i-can-fix-you"&gt;I can fix you&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;So here's my thoughts on how to fix this.&lt;/p&gt;

&lt;p&gt;When a user posts a link to Mastodon, their instance should send a &lt;a href="https://indieweb.org/Webmention"&gt;WebMention&lt;/a&gt; to the site hosting the link.  This informs the website that someone has shared their content.  Perhaps a user could adjust their privacy settings to allow or deny this.&lt;/p&gt;

&lt;p&gt;The instance would check the site's &lt;code&gt;robots.txt&lt;/code&gt; and, if allowed, scrape the site to see if there were any &lt;a href="https://shkspr.mobi/blog/2022/11/is-open-graph-protocol-dead/"&gt;Open Graph Protocol&lt;/a&gt; metadata elements on it.&lt;/p&gt;

&lt;p&gt;That metadata should be &lt;em&gt;included&lt;/em&gt; in the post as it is shared across the network.&lt;/p&gt;

&lt;p&gt;For example, a status could look like this:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-json"&gt;{
  "id": "123",
  "created_at": "2022-03-16T14:44:31.580Z",
  "in_reply_to_id": null,
  "in_reply_to_account_id": null,
  "visibility": "public",
  "language": "en",
  "uri": "https://mastodon.social/users/Edent/statuses/123",
  "content": "&amp;lt;p&amp;gt;Check out https://example.com/&amp;lt;/p&amp;gt;",
  "ogp_allowed": true,
  "ogp": {
      "og:title": "My amazing site",
      "og:image:url": "https://cdn.mastodon.social/cache/example.com/preview.jpg",
      "og:description": "A long description. Perhaps the first paragraph of the text."
      ...
   }
   ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;When a post is boosted across the network, the instances can see that there is rich metadata associated with the link. If there is an image associate with the post, that will be loaded from the cache on the original Mastodon instance - avoiding overloading the website.&lt;/p&gt;

&lt;p&gt;Now, there is a flaw in this idea. A &lt;em&gt;malicious&lt;/em&gt; Mastodon server could serve up a fake OGP image and description. So a link to McDonald's might display a fake image promoting Burger King.&lt;/p&gt;

&lt;p&gt;To protect against this, a receiving instance could randomly or periodically check the OGP metadata that they receive. If it has been changed, they can update it.&lt;/p&gt;

&lt;p&gt;Perhaps a diagram would help?&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2022/11/Mastodon-OGP-Diagram.png" alt="Crappy line drawing explaining the above." width="787" height="416" class="aligncenter size-full wp-image-44270"&gt;

&lt;h2 id="what-other-people-say-about-the-problem"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#what-other-people-say-about-the-problem"&gt;What other people say about the problem&lt;/a&gt;&lt;/h2&gt;

&lt;div class="activitypub-embed u-in-reply-to h-cite"&gt; &lt;div class="activitypub-embed-header p-author h-card"&gt; &lt;img class="u-photo" src="https://asset.circumstances.run/accounts/avatars/109/330/846/558/995/088/original/9aae78ca8a673cb2.png" alt=""&gt; &lt;div class="activitypub-embed-header-text"&gt; &lt;h2 class="p-name" id="david-gerard"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#david-gerard"&gt;David Gerard&lt;/a&gt;&lt;/h2&gt; &lt;a href="https://circumstances.run/users/davidgerard" class="ap-account u-url"&gt;@davidgerard@circumstances.run&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;div class="activitypub-embed-content"&gt; &lt;div class="ap-subtitle p-summary e-content"&gt;&lt;p&gt;yes, you should put a cache in front of a blog. nginx and wp-supercache do well. but.&lt;/p&gt;&lt;p&gt;mastodon's auto-DDOS feature is still obnoxious. and in a social network, technically designed in obnoxiousness is incompetent.&lt;/p&gt;&lt;p&gt;i realise it'd need extension of activitypub, but is anyone working on sending prerendered cards with the URL? just to save 1000 servers hammering the URL to generate their own cards locally.&lt;/p&gt;&lt;/div&gt; &lt;/div&gt; &lt;div class="activitypub-embed-meta"&gt; &lt;a href="https://circumstances.run/users/davidgerard/statuses/109421964176048304" class="ap-stat ap-date dt-published u-in-reply-to"&gt;2022-11-28, 14:44&lt;/a&gt; &lt;span class="ap-stat"&gt; &lt;strong&gt;7&lt;/strong&gt; boosts &lt;/span&gt; &lt;span class="ap-stat"&gt; &lt;strong&gt;23&lt;/strong&gt; favorites &lt;/span&gt; &lt;/div&gt; &lt;/div&gt;

&lt;style&gt;/** * ActivityPub embed styles. */ .activitypub-embed { background: #fff; border: 1px solid #e6e6e6; border-radius: 12px; padding: 0; max-width: 100%; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } .activitypub-reply-block .activitypub-embed { margin: 1em 0; } .activitypub-embed-header { padding: 15px; display: flex; align-items: center; gap: 10px; } .activitypub-embed-header img { width: 48px; height: 48px; border-radius: 50%; } .activitypub-embed-header-text { flex-grow: 1; } .activitypub-embed-header-text h2 { color: #000; font-size: 15px; font-weight: 600; margin: 0; padding: 0; } .activitypub-embed-header-text .ap-account { color: #687684; font-size: 14px; text-decoration: none; } .activitypub-embed-content { padding: 0 15px 15px; } .activitypub-embed-content .ap-title { font-size: 23px; font-weight: 600; margin: 0 0 10px; padding: 0; color: #000; } .activitypub-embed-content .ap-subtitle { font-size: 15px; color: #000; margin: 0 0 15px; } .activitypub-embed-content .ap-preview { border: 1px solid #e6e6e6; border-radius: 8px; overflow: hidden; } .activitypub-embed-content .ap-preview img { width: 100%; height: auto; display: block; } .activitypub-embed-content .ap-preview { border-radius: 8px; box-sizing: border-box; display: grid; gap: 2px; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; margin: 1em 0 0; min-height: 64px; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview.layout-1 { grid-template-columns: 1fr; grid-template-rows: 1fr; } .activitypub-embed-content .ap-preview.layout-2 { aspect-ratio: auto; grid-template-rows: 1fr; height: auto; } .activitypub-embed-content .ap-preview.layout-3 &gt; img:first-child { grid-row: span 2; } .activitypub-embed-content .ap-preview img { border: 0; box-sizing: border-box; display: inline-block; height: 100%; object-fit: cover; overflow: hidden; position: relative; width: 100%; } .activitypub-embed-content .ap-preview video, .activitypub-embed-content .ap-preview audio { max-width: 100%; display: block; grid-column: 1 / span 2; } .activitypub-embed-content .ap-preview audio { width: 100%; } .activitypub-embed-content .ap-preview-text { padding: 15px; } .activitypub-embed-meta { padding: 15px; border-top: 1px solid #e6e6e6; color: #687684; font-size: 13px; display: flex; gap: 15px; } .activitypub-embed-meta .ap-stat { display: flex; align-items: center; gap: 5px; } @media only screen and (max-width: 399px) { .activitypub-embed-meta span.ap-stat { display: none !important; } } .activitypub-embed-meta a.ap-stat { color: inherit; text-decoration: none; } .activitypub-embed-meta strong { font-weight: 600; color: #000; } .activitypub-embed-meta .ap-stat-label { color: #687684; } &lt;/style&gt;

&lt;h2 id="feedback"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#feedback"&gt;Feedback?&lt;/a&gt;&lt;/h2&gt;

&lt;p&gt;Is this a problem? Does this present a viable solution? Have I missed something obvious? Please leave a comment and let me know 😃&lt;/p&gt;

&lt;div id="footnotes" role="doc-endnotes"&gt;
&lt;hr aria-label="Footnotes"&gt;
&lt;ol start="0"&gt;

&lt;li id="fn:splel"&gt;
&lt;p&gt;This is a spleling mistake which is part of the specification so cannot be changed.&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fnref:splel" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:spell"&gt;
&lt;p&gt;This one &lt;em&gt;is&lt;/em&gt; spelled correctly. Which makes life confusing for all involved.&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/#fnref:spell" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=44259&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/webmentions-privacy-and-ddos-oh-my/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Illegal Hashes]]></title>
		<link>https://shkspr.mobi/blog/2022/11/illegal-hashes/</link>
					<comments>https://shkspr.mobi/blog/2022/11/illegal-hashes/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Mon, 28 Nov 2022 12:34:14 +0000</pubDate>
		<category><![CDATA[cryptography]]></category><category><![CDATA[hashing]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43570</guid>

		
		<description>To understand this blog post, you need to know two things.   There exists a class of numbers which are illegal in some jurisdictions. For example, a number may be copyrighted content, a decryption key, or other text considered illegal. There exists a class of algorithms which will take any arbitrary data and produce a fixed length text from it. This process is known as "hashing". These algorithms …</description>
			
		<content:encoded>&lt;p&gt;To understand this blog post, you need to know two things.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;There exists a class of &lt;a href="https://en.wikipedia.org/wiki/Illegal_number"&gt;numbers which are illegal in some jurisdictions&lt;/a&gt;. For example, a number may be copyrighted content, a decryption key, or other text considered illegal.&lt;/li&gt;
&lt;li&gt;There exists a class of algorithms which will take any arbitrary data and produce a fixed length text from it. This process is known as "&lt;a href="https://en.wikipedia.org/wiki/Hash_function"&gt;hashing&lt;/a&gt;". These algorithms are deterministic - that is, entering the same data will always produce the same hash.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's take the &lt;a href="https://en.wikipedia.org/wiki/MD5"&gt;MD5 hashing algorithm&lt;/a&gt;. Feed it &lt;em&gt;any&lt;/em&gt; data and it will produce hash with a fixed length of 128 bits. Using an 8 bit alphabet, that's 16 human-readable characters.&lt;/p&gt;

&lt;p&gt;Suppose you live in a country with &lt;i lang="fr"&gt;Lèse-majesté&lt;/i&gt; - laws which make it treasonous to insult or threaten the monarch.&lt;/p&gt;

&lt;p&gt;There exists a seemingly innocent piece of data - an image, an MP3, a text file - which when fed to MD5 produces these 128 bits:&lt;/p&gt;

&lt;pre&gt;&lt;code class="language-_"&gt;01001001 00100000 01101000 01100001 
01110100 01100101 00100000 01110100 
01101000 01100101 00100000 01110001 
01110101 01100101 01100101 01101110 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Decoded into ASCII, that spells &lt;code&gt;I hate the queen&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;128 bits is &lt;em&gt;probably&lt;/em&gt; too short to be illegal in all but the most repressive of regimes. It would be hard, if not impossible, to squeeze terrorist plans into that little space.&lt;/p&gt;

&lt;p&gt;But it is just enough space to store an &lt;a href="https://en.wikipedia.org/wiki/AACS_encryption_key_controversy"&gt;encryption key for copyrighted material&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Therefore, it is possible that there exists a file which - by pure coincidence - happens to have an MD5 hash which is illegal.&lt;/p&gt;

&lt;p&gt;Because MD5 is a relatively weak algorithm, it is possible to &lt;a href="https://github.com/corkami/collisions"&gt;create &lt;em&gt;deliberate&lt;/em&gt; hash "collisions"&lt;/a&gt;. That is, take some data and manipulate it until it has the &lt;em&gt;same&lt;/em&gt; MD5 as a different piece of data.&lt;/p&gt;

&lt;p&gt;Someone could, theoretically, deliberately create a file which looks unremarkable when viewed, but is illegal when hashed.&lt;/p&gt;

&lt;p&gt;The SHA-1 hashing algorithm produces 160 bits - 20 ASCII characters. It is &lt;em&gt;somewhat&lt;/em&gt; &lt;a href="https://www.zdnet.com/article/sha-1-collision-attacks-are-now-actually-practical-and-a-looming-danger/"&gt;cheap and easy to produce a file with a specific SHA-1 hash&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The SHA-512 hashing algorithm, as its name suggests, produces a 512 bit hash. That's enough space for 64 ASCII characters. Is that long enough to contain text which is blatantly illegal? Almost certainly. But modern hashing algorithms are designed to be resistant to collision attacks. So much so that it seems like &lt;a href="https://link.springer.com/chapter/10.1007/978-3-030-84242-0_22"&gt;theoretical quantum computers will be needed to crack them&lt;/a&gt;.  The chances of any file having an illegal hash is infinitesimally small.&lt;/p&gt;

&lt;p&gt;Nevertheless, it intrigues me that there may be a form of hash-steganography. How would you detect whether the hash of a file was problematic?&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43570&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/illegal-hashes/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[A small bug in Canada's eTA emails]]></title>
		<link>https://shkspr.mobi/blog/2022/11/a-small-bug-in-canadas-eta-emails/</link>
					<comments>https://shkspr.mobi/blog/2022/11/a-small-bug-in-canadas-eta-emails/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Sun, 27 Nov 2022 12:34:21 +0000</pubDate>
		<category><![CDATA[canada]]></category><category><![CDATA[NaBloPoMo]]></category><category><![CDATA[security]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43682</guid>

		
		<description>There's no way that I could find to report this to the Canadian Government - and I didn't fancy trying to raise a bug report with the first Mountie I met - so here's a blog post.  As part of Canada's Electronic Travel Authorisation system, prospective visitors to the country get sent emails. The email I received had a broken image right at the top:    At least there's some alt text!  Gmail on…</description>
			
		<content:encoded>&lt;p&gt;There's no way that I could find to report this to the Canadian Government - and I didn't fancy trying to raise a bug report with the first Mountie I met - so here's a blog post.&lt;/p&gt;

&lt;p&gt;As part of Canada's Electronic Travel Authorisation system, prospective visitors to the country get sent emails. The email I received had a broken image right at the top:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2022/10/broken-image.png" alt="Screenshot of an email showing a broken image. Alt text is visible." width="1080" height="450" class="aligncenter size-full wp-image-43683"&gt;

&lt;p&gt;At least there's some alt text!&lt;/p&gt;

&lt;p&gt;Gmail on Android doesn't let you view the source of an email, but the web version does. Here's what it says:&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2022/10/source-code.png" alt="The HTML source code of the email. The image link is highlighted." width="680" height="216" class="aligncenter size-full wp-image-43684"&gt;

&lt;p&gt;Immediately you should be able to see what the problem is and why it wasn't detected. The URl of the image is:&lt;/p&gt;

&lt;p&gt;&lt;samp&gt;http://cic&lt;strong&gt;intranet&lt;/strong&gt;.ci.gc.ca/connexion/communications/poli-guide/fip-pcim/images/goc-e.gif&lt;/samp&gt;&lt;/p&gt;

&lt;p&gt;The image is loading from the Intranet. So it isn't visible to those on the outside.  I suspect this bug wasn't caught by testing because the testers were all connected to their intranet.&lt;/p&gt;

&lt;p&gt;This missing image is bad for two reasons.&lt;/p&gt;

&lt;p&gt;Firstly, people can't see the image. I choose to believe it is an animated GIF of the proud Canadian moose chugging some poutine.&lt;/p&gt;

&lt;p&gt;Secondly, it leaks information about an internal system. We now know the domain name of the Intranet server. The path also gives us information about the CMS it uses and the filesystem layout.&lt;/p&gt;

&lt;p&gt;I can't find an easy way to report this minor bug to the correct Canadian agency. If you have a contact there, please encourage them to share a link to this blog post on their intranet!&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43682&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/a-small-bug-in-canadas-eta-emails/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Starting Up Vs Staying On]]></title>
		<link>https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/</link>
					<comments>https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/#respond</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Sat, 26 Nov 2022 12:34:09 +0000</pubDate>
		<category><![CDATA[career]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=41492</guid>

		
		<description>A few years ago, I had a chance to work with an exciting tech startup. They had just become 5 years old. The day I went for an interview, about a dozen of the founding members announced they were quitting.  Including the CEO.  Was this a good sign or a bad sign? Over beers, my friends were all adamant that this was the end. The sky was falling and the little-startup-that-could was crashing and…</description>
			
		<content:encoded>&lt;p&gt;A few years ago, I had a chance to work with an exciting tech startup. They had just become 5 years old. The day I went for an interview, about a dozen of the founding members announced they were quitting.  Including the CEO.&lt;/p&gt;

&lt;p&gt;Was this a good sign or a bad sign? Over beers, my friends were all adamant that this was the end. The sky was falling and the little-startup-that-could was crashing and burning.&lt;/p&gt;

&lt;p&gt;I fundamentally disagreed. I thought it was a healthy sign.&lt;/p&gt;

&lt;p&gt;There are two types of people in the world&lt;sup id="fnref:two"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/#fn:two" class="footnote-ref" title="Which one will win? The one you feed!" role="doc-noteref"&gt;0&lt;/a&gt;&lt;/sup&gt; - those who like risk, and those who like stability.  There's nothing wrong with either, of course. It's fun and exciting to try something new. But there's no shame in only wanting to work somewhere with a competent payroll team and a predictable schedule.&lt;/p&gt;

&lt;p&gt;The people you need to help run a startup are &lt;em&gt;probably&lt;/em&gt; different from those you need to run a successful business.&lt;/p&gt;

&lt;p&gt;There are only two paths for a new business&lt;sup id="fnref:paths"&gt;&lt;a href="https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/#fn:paths" class="footnote-ref" title="Which one will win? The one you feed!" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt; - success or failure.  For some, success is a billion-dollar exit, for others success is a profitable business which employs a dozen people. For some, failure is bankruptcy, for others failure is a profitable business which only employs a dozen people.&lt;/p&gt;

&lt;p&gt;At the five-year mark, a successful startup should be a fundamentally different place than it was at the start.&lt;/p&gt;

&lt;p&gt;If after several years you're still hiring - and retaining - people who want the thrill of starting up, then your organisation isn't maturing. That may, or may not, be a problem.&lt;/p&gt;

&lt;div id="footnotes" role="doc-endnotes"&gt;
&lt;hr aria-label="Footnotes"&gt;
&lt;ol start="0"&gt;

&lt;li id="fn:two"&gt;
&lt;p&gt;Which one will win? The one you feed!&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/#fnref:two" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li id="fn:paths"&gt;
&lt;p&gt;Which one will win? The one you feed!&amp;nbsp;&lt;a href="https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/#fnref:paths" class="footnote-backref" role="doc-backlink"&gt;↩︎&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;
&lt;/div&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=41492&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/starting-up-vs-staying-on/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Is it cheating to use spell check?]]></title>
		<link>https://shkspr.mobi/blog/2022/11/is-it-cheating-to-use-spell-check/</link>
					<comments>https://shkspr.mobi/blog/2022/11/is-it-cheating-to-use-spell-check/#comments</comments>
				<dc:creator><![CDATA[Terence Eden]]></dc:creator>
		<pubDate>Fri, 25 Nov 2022 12:34:59 +0000</pubDate>
		<category><![CDATA[AI]]></category><category><![CDATA[MSc]]></category><category><![CDATA[NaBloPoMo]]></category>		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43870</guid>

		
		<description>When I was a kid, our school had one computer per classroom.  Luxury!  Teachers had long-since given up on the state of my handwriting. So I got special dispensation to write up some of my work on whatever primitive word processor was installed on the PC.  With one caveat: no spell check!  Which, even as a ten year old, I thought was reasonable. Learning to spell is an adult life skill.  So using …</description>
			
		<content:encoded>&lt;p&gt;When I was a kid, our school had one computer per classroom.  Luxury!&lt;/p&gt;

&lt;p&gt;Teachers had long-since given up on the state of my handwriting. So I got special dispensation to write up some of my work on whatever primitive word processor was installed on the PC.  With one caveat: &lt;em&gt;no spell check!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Which, even as a ten year old, I thought was reasonable. Learning to spell is an adult life skill.  So using a spell-checker was cheating.&lt;/p&gt;

&lt;p&gt;Once I got to secondary school, it was assumed that I knew how to spell. And there was no restriction on using &lt;span style="text-decoration-line: underline;text-decoration-style: wavy;text-decoration-color:#f00"&gt;Wrd 2.0's splel chek&lt;/span&gt;.&lt;/p&gt;

&lt;p&gt;But I had one teacher &lt;span style="text-decoration-line: underline;text-decoration-style: wavy;text-decoration-color:#00f"&gt;him &lt;em&gt;hated&lt;/em&gt; an grammar check&lt;/span&gt;. He thought it encouraged laziness of writing. Which, to be fair, it probably did.&lt;/p&gt;

&lt;p&gt;Of course, come exam season, there were no computers. All answers were laboriously hand-written. The use of spell- and grammar-checking software had left me lazy. And my handwriting had atrophied beyond all hope. It's a miracle I passed!&lt;/p&gt;

&lt;p&gt;Spell Checking is Artificial Intelligence.&lt;/p&gt;

&lt;p&gt;It doesn't &lt;em&gt;seem&lt;/em&gt; like it because it is so ubiquitous now.  But it is more than just a computer looking up words in a list. There's a huge corpus of learning which goes into spotting homophones, predicting which word you &lt;em&gt;meant&lt;/em&gt;, and calculating the likeliest candidates based on your previous writing.&lt;/p&gt;

&lt;p&gt;I'm now in the middle of writing up my MSc dissertation.  I'm doing it in Google Docs - because I'm a masochist.&lt;/p&gt;

&lt;p&gt;Google Docs has a useful feature called Smart Suggestions which &lt;span style="color:grey;"&gt;→ offers to autocomplete your sentences.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Is &lt;em&gt;that&lt;/em&gt; cheating?&lt;/p&gt;

&lt;p&gt;I've signed a declaration to my University saying that my dissertation is all my own work. But it isn't.&lt;/p&gt;

&lt;p&gt;Google's AI suggested a couple of dozen sentences. Google's AI proofread and corrected both my spelling and grammar. Just how much of my work was generated by 2022's Clippy?&lt;/p&gt;

&lt;p&gt;The general consensus from my teachers is that it is &lt;em&gt;not&lt;/em&gt; cheating.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blogs.lse.ac.uk/impactofsocialsciences/2022/05/17/new-ai-tools-that-can-write-student-essays-require-educators-to-rethink-teaching-and-assessment/"&gt;Students are now using the GPT-3 AI to write their entire essays&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Is &lt;em&gt;that&lt;/em&gt; cheating?&lt;/p&gt;

&lt;p&gt;I think most people will instinctively say yes.  A whole essay written by machine is cheating.&lt;/p&gt;

&lt;p&gt;An autocompleted sentence is fine. But a whole essay is not. Where's the line? To reinvigorate an old joke "&lt;a href="https://quoteinvestigator.com/2012/03/07/haggling/"&gt;We've already established that some AI is cheating - now we're just haggling over character count&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;If I need a paragraph summarising the history of mayonnaise, do I need to waste my time writing that - or can I outsource it to an AI?  Doing so doesn't prove I understand the material. But is it materially worse than taking someone else's work and rewording it into my own style?&lt;/p&gt;

&lt;p&gt;Perhaps AI isn't cheating when it is merely scaffolding?&lt;/p&gt;

&lt;img src="https://shkspr.mobi/blog/wp-content/uploads/2022/10/Clippy-letter.png" alt="Clippy - an anthropomorphic paperclip is asking if I want help writing a letter." width="130" height="308" class="aligncenter size-full wp-image-43874"&gt;

&lt;p&gt;When Clippy offered to help with writing a letter, it usually meant that it would show you how to format an address and whether to end with "Yours faithfully" or "Yours sincerely".  Is it cheating to use a well-structured template?&lt;/p&gt;

&lt;p&gt;This ramble-post is to say that I don't know. My essays are &lt;em&gt;mostly&lt;/em&gt; my work. When the AI has suggested something, I've been free to reject it.  But I rarely do.  Google Docs knows what I want to write before I write it.  Am I merely the &lt;em&gt;editor&lt;/em&gt; of machine generated text?&lt;/p&gt;

&lt;p&gt;One paragraph of this blog post was generated by OpenAI. Can you spot it?&lt;/p&gt;

&lt;p&gt;Does it matter?&lt;/p&gt;
&lt;img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43870&amp;amp;HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager"&gt;</content:encoded>
	

					<wfw:commentRss>https://shkspr.mobi/blog/2022/11/is-it-cheating-to-use-spell-check/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
			</item>
	</channel>
</rss>
