<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/atom-style.xsl" type="text/xsl"?>
<feed
	xmlns="http://www.w3.org/2005/Atom"
	xmlns:thr="http://purl.org/syndication/thread/1.0"
	xml:lang="en-GB"
	>
	<title type="text">Terence Eden’s Blog</title>
	<subtitle type="text">Regular nonsense about tech and its effects 🙃</subtitle>

	<updated>2026-04-24T10:20:09Z</updated>

	<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog" />
	<id>https://shkspr.mobi/blog/feed/atom/</id>
	<link rel="self" type="application/atom+xml" href="https://shkspr.mobi/blog/feed/atom/" />

	<generator uri="https://wordpress.org/" version="6.9.4">WordPress</generator>
<icon>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</icon>
	<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[You can parse an .env file as an .ini with PHP - but there's a catch]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/" />

		<id>https://shkspr.mobi/blog/?p=68636</id>
		<updated>2026-03-13T08:04:06Z</updated>
		<published>2026-04-25T11:34:15Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="php" />
		<summary type="html"><![CDATA[The humble .env file is a useful and low-tech way of storing persistent environment variables. Drop the file on your server and let your PHP scripts consume it with glee.  But consume it how? There are lots of excellent parsing libraries for PHP. But isn&#039;t there a simpler way? Yes! You can use PHP&#039;s parse_ini_file() function and it works.  But…  .env and .ini have subtly different behaviour which …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/"><![CDATA[<p>The humble <code>.env</code> file is a useful and low-tech way of storing persistent environment variables. Drop the file on your server and let your PHP scripts consume it with glee.</p>

<p>But consume it <em>how</em>? There are lots of excellent parsing libraries for PHP. But isn't there a simpler way? Yes! You can use <a href="https://www.php.net/manual/en/function.parse-ini-file.php">PHP's <code>parse_ini_file()</code> function</a> and it works.</p>

<p>But…</p>

<p><code>.env</code> and <code>.ini</code> have subtly different behaviour which might cause you to swear at your computer.</p>

<p>Let's take this example:</p>

<pre><code class="language-env"># This is a comment
USERNAME="edent"
</code></pre>

<p>Run <code>$env = parse_ini_file( ".env" );</code> and you'll get back an array setting the USERNAME to be "edent". Hurrah! Works perfectly. Ship it!</p>

<p>But consider this:</p>

<pre><code class="language-env"># This is a comment
USERNAME="edent" # Don't use an @ symbol here.
</code></pre>

<p>It will happily tell you that the username is <code>"edent# Don"</code></p>

<p>WTAF?</p>

<p>Here's the thing. The comment character for <code>.ini</code> is <strong>not</strong> <code>#</code> - it's the semicolon <code>;</code></p>

<p>Let me give you some other examples of things which will fuck up your parsing:</p>

<pre><code class="language-env"># Documentation at https:/example.com/?doc=123
DOCUMENTATION=123
# Set the password
PASSWORD=qwerty;789
</code></pre>

<p>That gets us back this PHP array:</p>

<pre><code class="language-php">[
  '# Documentation at https:/example.com/?doc' =&gt; '123',
  'DOCUMENTATION' =&gt; '123',
  'PASSWORD' =&gt; 'qwerty',
];
</code></pre>

<p>When the <code>.ini</code> is parsed, it ignores every line which <em>doesn't have an <code>=</code> sign</em>. It also treats literal semicolons as the start of a new comment until they're wrapped in quotes.</p>

<p>My code highlighter should show you how it is parsed:</p>

<pre><code class="language-ini"># Documentation at https:/example.com/?doc=123
DOCUMENTATION=123
# Set the password
PASSWORD=qwerty;789
</code></pre>

<p>It gets worse. Consider this:</p>

<pre><code class="language-env"># Set the "official" name
REALNAME="Arthur, King of the Britons"
</code></pre>

<p>That immediately fails with <code>PHP Warning:  syntax error, unexpected '"' in envtest on line 1</code></p>

<p>You can use single quotes in pseudo-comments just fine, but if the ini parser sees a double quote without an equals then it throws a wobbly.</p>

<p>I'm sure there are several other gotchas as well. For example, there are <a href="https://www.w3schools.com/php/func_filesystem_parse_ini_file.asp">certain reserved words and symbols you can't used as a key</a>.</p>

<p>This will fail:</p>

<pre><code class="language-env"># Can we fix it? Yes we can!
FIX=true
</code></pre>

<p>It chokes on the exclamation point.</p>

<h2 id="how-to-solve-it-the-stupid-way"><a href="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/#how-to-solve-it-the-stupid-way">How to solve it (the stupid way)</a></h2>

<p>The comments on an <code>.env</code> file start with a hash.</p>

<p>The comments on an <code>.ini</code> file start with a semicolon.</p>

<p>So, it is perfectly valid for a hybrid file to have its comments start with <code>#;</code></p>

<p>Look, if it's stupid but it works…</p>

<h2 id="what-have-we-learned-here-today"><a href="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/#what-have-we-learned-here-today">What Have We Learned Here Today?</a></h2>

<ul>
<li>There's a right way and a wrong way to do <code>.env</code> parsing.</li>
<li>The wrong way works, up until the point it doesn't.</li>
<li>You should probably use a proper parser rather than hoping your <code>.env</code> looks enough like an <code>.ini</code> to pass muster.</li>
</ul>

<p>On next week's show - why you shouldn't store your passwords inside a JPEG!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68636&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/you-can-parse-an-env-file-as-an-ini-with-php-but-theres-a-catch/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Does Mythos mean you need to shut down your Open Source repositories?]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/" />

		<id>https://shkspr.mobi/blog/?p=70599</id>
		<updated>2026-04-24T10:20:09Z</updated>
		<published>2026-04-24T11:34:30Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="AI" /><category scheme="https://shkspr.mobi/blog" term="Open Source" />
		<summary type="html"><![CDATA[Much Sturm und Drang in the world of Open Source with the announcement that the &#34;Mythos&#34; AI is now the ultimate hacker and is poised to unleash havoc on every code base.  So should you close all your Open Source projects to make them safe?  No.  Firstly, all your Open Source code has already been slurped up.  It was all ingested for &#34;training purposes&#34; years ago. If it was moderately interesting…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/"><![CDATA[<p>Much <i lang="de">Sturm und Drang</i> in the world of Open Source with the announcement that <a href="https://www.scientificamerican.com/article/what-is-mythos-and-why-are-experts-worried-about-anthropics-ai-model/">the "Mythos" AI is now the ultimate hacker</a> and is poised to unleash havoc on every code base.</p>

<p>So should you close all your Open Source projects to make them safe?</p>

<p>No.</p>

<p>Firstly, all your Open Source code has <em>already</em> been slurped up.</p>

<p>It was all ingested for "training purposes" years ago. If it was moderately interesting then it was backed-up by a digital hoarder. It has been archived by various digital libraries. Anyone who wants to do research on your code base can.</p>

<p>Closing now doesn't meaningfully protect you.</p>

<p>Secondly, most of the security holes in your systems are <em>probably</em> not in your code. Vulnerabilities exist throughout your supply chain. All the dependencies - your OS, libraries, and even hardware - are all richer targets for hackers. Finding a CVE in a popular library is almost certainly more worthwhile than investigating <em>your</em> Open Source code.</p>

<p>The bigger risk comes not from subtle logic bugs but from phishers, poor password hygiene, and insider threats. Securing your existing systems provides more protection than rushing to close-source your code.</p>

<p>Finally, closing the source of something doesn't protect you. These new AI models can easily investigate and your closed source systems and potentially penetrate them. It has always been possible to analyse websites and binaries. AI doesn't change that - although it might accelerate it.</p>

<p>Open Source does have risks but AI doesn't upend decades of evidence that closed-source is just as vulnerable to attackers.</p>

<p>In cases where the state creates code using public money, <a href="https://publiccode.eu/en/">it has a responsibly to share that code</a>. Automated threat analysis - even by hypercapabe AI - doesn't change that.</p>

<p>I would strongly recommend reading the UK's AI Safety Institute's <a href="https://www.aisi.gov.uk/blog/our-evaluation-of-claude-mythos-previews-cyber-capabilities">evaluation of Claude Mythos Preview’s cyber capabilities</a> and the <a href="https://www.ncsc.gov.uk/blogs/why-cyber-defenders-need-to-be-ready-for-frontier-ai">NCSC's advice</a>. Neither of them recommend closing down Open Source code.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70599&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/#comments" thr:count="1" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/does-mythos-mean-you-need-to-shut-down-your-open-source-repos/feed/atom/" thr:count="1" />
			<thr:total>1</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Sneaky spam in conversational replies to blog posts]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/sneaky-spam-in-conversational-replies-to-blog-posts/" />

		<id>https://shkspr.mobi/blog/?p=70528</id>
		<updated>2026-04-22T14:31:32Z</updated>
		<published>2026-04-23T11:34:48Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="blog" /><category scheme="https://shkspr.mobi/blog" term="blogging" /><category scheme="https://shkspr.mobi/blog" term="spam" /><category scheme="https://shkspr.mobi/blog" term="WordPress" />
		<summary type="html"><![CDATA[I&#039;m grateful that my blog posts attract lots of engaged, funny, and challenging comments. But any popular post also attracts spammers. I use Antispam Bee to automatically eradicate a couple of hundred crappy comments per day.    Nevertheless, some get through. Here&#039;s a particularly pernicious one - it appeared as three comments ostensibly in reply to each other.    At first glance these look like …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/sneaky-spam-in-conversational-replies-to-blog-posts/"><![CDATA[<p>I'm grateful that my blog posts attract lots of engaged, funny, and challenging comments. But any popular post also attracts spammers. I use <a href="https://antispambee.pluginkollektiv.org/">Antispam Bee</a> to automatically eradicate a couple of hundred crappy comments <em>per day</em>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/Antispam-Bee.webp" alt="Graph showing 272 comments blocked in a single day." width="762" height="292" class="aligncenter size-full wp-image-70529">

<p>Nevertheless, some get through. Here's a particularly pernicious one - it appeared as three comments ostensibly in reply to each other.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/spam-comments.webp" alt="First &quot;I read that article about why it’s so hard to passively track friends’ locations, and it actually makes sense. It talks about wanting automatic alerts when friends are nearby, but no app really does it well because of privacy and social awkwardness.&quot; Second &quot;Yeah, and even if the tech exists, people don’t always want to share their location 24/7. It’s like checking promos on spam domain promotions you might see potential, but there’s always uncertainty behind it. You’re kind of taking a chance on incomplete info.&quot; Third &quot;Exactly. Most location features are opt-in for a reason. Apps require consent because constantly tracking someone without them knowing would feel invasive, even if the intention is harmless.&quot;" width="2316" height="1598" class="aligncenter size-full wp-image-70530">

<p>At first glance these look like normal comments. They each address the content of the blog post albeit somewhat superficially. The first comment looks like it was from a social media post sharing my link - I get a lot of those as pingbacks, so it initially didn't trigger any suspicions from me.</p>

<p>The second is ostensibly a reply to the first and continues the conversation. Again, a bit shallow, but seems to be engaging in good faith.</p>

<p>The third looks like yet another reply. They all have unique email addresses, none of them have set their username to anything overly odd, and none of the users have filled out their URl.</p>

<p>But notice, in the second one, there's a link to a dodgy casino! There's no <code>https://</code> so it didn't jump out as a link.</p>

<p>All three came from the same IP address in the Philippines, so easy to block for now.</p>

<p>Each reply is spaced exactly 3 minutes apart which, in retrospect, looks a little odd.</p>

<p>Re-reading them carefully, they all look like AI slop. A plausible sounding summary, written in a casual style, but with very little semantic content. Seeing them as replies to each other primed me to think they were genuine because I'm used to spam coming in individual replies. Having the spam in the middle comment made it easy to glaze over.</p>

<p>Remember, there are no technological solutions to social problems. Sticking more and more barriers in the way of commenting only discourages genuine replies while the profit motive incentivises spammers to work around them.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70528&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/sneaky-spam-in-conversational-replies-to-blog-posts/#comments" thr:count="11" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/sneaky-spam-in-conversational-replies-to-blog-posts/feed/atom/" thr:count="11" />
			<thr:total>11</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[[RSS Club] How do you preserve an RSS feed?]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-how-do-you-preserve-an-rss-feed/" />

		<id>https://shkspr.mobi/blog/?p=70521</id>
		<updated>2026-04-20T11:14:41Z</updated>
		<published>2026-04-22T11:34:46Z</published>
		<category scheme="https://shkspr.mobi/blog" term="[RSS Club]" /><category scheme="https://shkspr.mobi/blog" term="RSS Club" />
		<summary type="html"><![CDATA[Psssst! This top secret post is only available to RSS subscribers!  I was sent this thought-provoking blog post called &#34;The Necessary Pain Involved in Blogging (if you want your work to be preserved beyond your lifespan)&#34;.  In it, Martin Paul Eve makes the case that trying to preserve a blog is difficult. I mostly agree with him (although think he&#039;s perhaps a little hair-shirted about it) and it…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/rss-club-how-do-you-preserve-an-rss-feed/"><![CDATA[<p><mark><em>Psssst!</em> This <strong>top secret</strong> post is only available to RSS subscribers!</mark></p>

<p>I was sent this thought-provoking blog post called "<a href="https://eve.gd/2026/04/19/the-necessary-pain-involved-in-blogging-if-you-want-your-work-to-be-preserved-beyond-your-lifespan/">The Necessary Pain Involved in Blogging (if you want your work to be preserved beyond your lifespan)</a>".</p>

<p>In it, Martin Paul Eve makes the case that trying to preserve a blog is difficult. I mostly agree with him (although think he's perhaps a little hair-shirted about it) and it made me think about what I do in terms of preservation.</p>

<p>This feed is <a href="https://web.archive.org/web/20260000000000*/https://shkspr.mobi/blog/feed/atom/">captured by the Internet Archive</a>. That's been useful on the rare occasions where my posts have been corrupted and I don't have a backup.</p>

<p>I got my blog an <a href="https://shkspr.mobi/blog/2021/09/how-to-add-issn-metadata-to-a-web-page/">ISSN</a>. I guess in theory this mean the British Library have a right to archive it? But I haven't looked in to whether that is the case.</p>

<p>I don't store my posts in a git repository. Perhaps I should?</p>

<p>I like the idea of <a href="https://wordpress.com/100-year/">WordPress's 100 year domain name</a> but I'm not sure if I trust the current owner not to completely shit the bed. And it's hard to justify £31k on a vanity project.</p>

<p>I'm not a scholar, so using something like <a href="https://rogue-scholar.org/">Rogue Scholar</a> feels inappropriate. My content also isn't Creative Commons licenced (perhaps it should be?).</p>

<p>If you have a good solution for a long-term, stable, and relatively cheap method of preserving a blog (and its RSS feed) please <a href="https://edent.tel/">drop me a comment via your favourite method</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70521&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-how-do-you-preserve-an-rss-feed/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/rss-club-how-do-you-preserve-an-rss-feed/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Better TTS on Linux]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/better-tts-on-linux/" />

		<id>https://shkspr.mobi/blog/?p=68497</id>
		<updated>2026-03-27T16:10:05Z</updated>
		<published>2026-04-21T11:34:07Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="accessibility" /><category scheme="https://shkspr.mobi/blog" term="firefox" /><category scheme="https://shkspr.mobi/blog" term="linux" /><category scheme="https://shkspr.mobi/blog" term="tts" />
		<summary type="html"><![CDATA[The venerable eSpeak is a mainstay of Linux distributions. It is a clever Text-To-Speech (TTS) program which will read aloud the written word using a phenomenally wide variety of languages and accents.  The only problem is that it sounds robotic. It has the same vocal fidelity as a 1980s Speak &#039;n&#039; Spell toy. Monotonous, clipped, and painful to listen to. For some people, this is a feature, not a…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/better-tts-on-linux/"><![CDATA[<p>The venerable eSpeak is a mainstay of Linux distributions. It is a clever Text-To-Speech (TTS) program which will read aloud the written word using a phenomenally wide variety of languages and accents.</p>

<p>The only problem is that it sounds robotic. It has the same vocal fidelity as a 1980s Speak 'n' Spell toy. Monotonous, clipped, and painful to listen to. For some people, this is a feature, not a bug. I have blind friends who are so used to eSpeak that they can crank it up to hundreds of words per minute and navigate through complex documents with ease.</p>

<p>For the rest of us, it is a steep and unpleasant learning curve.</p>

<p>There are lots of modern TTS programs using all sorts of advanced AI. Many of them are paywalled or require you to post your text to a webserver - with all the privacy and latency problems that causes. Some are restricted to high-powered GPUs or other expensive equipment.</p>

<p><a href="https://github.com/OHF-Voice/piper1-gpl">Piper</a> is different. It is local first, runs quickly on modest hardware, and is open source.</p>

<p>The easiest way to install it on Linux is to use <a href="https://pied.mikeasoft.com/">Pied</a> - a simple GUI which allows you to select languages, listen to accents, and then install them.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/pied.webp" alt="GUI showing various British English languages." width="594" height="695" class="aligncenter size-full wp-image-68498">

<p>It will change your <code>speech-dispatcher</code> to use the new Piper voice. That means it is immediately available to your Linux DE's accessibility service and to apps like Firefox.</p>

<p>I now have a <a href="http://news.bbc.co.uk/1/mobile/scotland/7754111.stm">reassuring Scottish lady</a> speaking out everything on my computer.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68497&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/better-tts-on-linux/#comments" thr:count="2" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/better-tts-on-linux/feed/atom/" thr:count="2" />
			<thr:total>2</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Book Review: Up - A scientist's guide to the magic above us by Dr Lucy Rogers ★★★★★]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-up-a-scientists-guide-to-the-magic-above-us-by-dr-lucy-rogers/" />

		<id>https://shkspr.mobi/blog/?p=70513</id>
		<updated>2026-04-20T10:48:03Z</updated>
		<published>2026-04-20T11:34:38Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="Book Review" /><category scheme="https://shkspr.mobi/blog" term="science" />
		<summary type="html"><![CDATA[My mate Dr Lucy Rogers has written a book! This is a charming and thought provoking exploration of everything that goes on above our heads. This isn&#039;t an impersonal and imperious manuscript, it&#039;s a deeply personal and joyful book filled with science, anecdotes, and the thrill of discovery.  It&#039;s spectacularly accessible. Written in a relaxed and casual tone, it encourages domestic science. I…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/book-review-up-a-scientists-guide-to-the-magic-above-us-by-dr-lucy-rogers/"><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/9781529930290.webp" alt="Book cover featuring butterflies and clouds." width="200" class="alignleft size-full wp-image-70514">

<p>My mate Dr Lucy Rogers has written a book! This is a charming and thought provoking exploration of everything that goes on above our heads. This isn't an impersonal and imperious manuscript, it's a deeply personal and joyful book filled with science, anecdotes, and the thrill of discovery.</p>

<p>It's spectacularly accessible. Written in a relaxed and casual tone, it encourages <em>domestic</em> science. I don't mean bakery, I mean the sorts of observations you can do at home without access to a multi-million pound laboratory. The afterword of the book contains dozens of resources for people who want to get involved in science. Dr Rogers eloquently makes the case that you don't need to dedicate yourself full time - it's perfectly acceptable to engage with it on your own terms.</p>

<p>What I liked most about it was that she gets her hands dirty. It would have been easy to write a literature review from the comfort of a safe and dry office. Instead we get a travelogue of all the places she's been - each trek through the forest, every laboratory, and all the foreign festivals are brilliantly recounted. It's a proper adventure from America's tornado alley down to the Vatican Archives.</p>

<p>I find it remarkable how slow some modern science is. As she points out, "there have been only eight transits of Venus since the telescope was invented" - our knowledge rests on the shoulders of giants, but they can be slow, lumbering beasts.</p>

<p>If, like me, you only have a hazy memory of the science you learned at school, this book will top up your knowledge (and vocabulary). It will reignite your passion and curiosity about the world around you - and make you want to buy a round the world ticket to chase solar eclipses!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70513&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-up-a-scientists-guide-to-the-magic-above-us-by-dr-lucy-rogers/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/book-review-up-a-scientists-guide-to-the-magic-above-us-by-dr-lucy-rogers/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Reprojecting Dual Fisheye Videos to Equirectangular (LG 360)]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/" />

		<id>https://shkspr.mobi/blog/?p=67087</id>
		<updated>2026-03-09T11:04:45Z</updated>
		<published>2026-04-19T11:34:32Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="ffmpeg" /><category scheme="https://shkspr.mobi/blog" term="HowTo" /><category scheme="https://shkspr.mobi/blog" term="LG360" /><category scheme="https://shkspr.mobi/blog" term="linux" /><category scheme="https://shkspr.mobi/blog" term="video" />
		<summary type="html"><![CDATA[I still use my obsolete LG 360 Camera. When copying MP4 videos from its SD card, they come out in &#34;Dual Fisheye&#34; format - which looks like this:    VLC and YouTube will only play &#34;Equirectangular&#34; videos in spherical mode. So, how to convert a dual fisheye to equirectangualr?  The Simple Way  ffmpeg \   -i original.mp4 \   -vf &#34;v360=input=dfisheye:output=equirect:ih_fov=189:iv_fov=189&#34; \  …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/"><![CDATA[<p>I still use my <a href="https://shkspr.mobi/blog/2021/11/lg-killed-its-360-camera-after-only-4-years-heres-how-to-get-it-back/">obsolete LG 360 Camera</a>. When copying MP4 videos from its SD card, they come out in "Dual Fisheye" format - which looks like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/02/Original.webp" alt="Dual fisheye photo of us and some elephants." width="2560" height="1280" class="aligncenter size-full wp-image-67108">

<p>VLC and YouTube will only play "Equirectangular" videos in spherical mode. So, how to convert a dual fisheye to equirectangualr?</p>

<h2 id="the-simple-way"><a href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/#the-simple-way">The Simple Way</a></h2>

<pre><code class="language-bash">ffmpeg \
  -i original.mp4 \
  -vf "v360=input=dfisheye:output=equirect:ih_fov=189:iv_fov=189" \
  360.mp4
</code></pre>

<p>However, this has some "quirks".</p>

<p>The first part of the video filter is <code>v360=input=dfisheye:output=equirect</code> - that just says to use the 360 filter on an input which is dual fisheye and then output in equirectangular.</p>

<p>The next part is <code>:ih_fov=189:iv_fov=189</code> which says that the input video has a horizontal and vertical field of view of 189°. That's a <em>weird</em> number, right?</p>

<p>You'd kind of expect each lens to be 180°, right? Here's what happens if <code>:ih_fov=180:iv_fov=180</code> is used:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/02/360-180.webp" alt="Flattened image, but there are overlaps at the seams." width="2560" height="1280" class="aligncenter size-full wp-image-67109">

<p>The lenses overlaps a little bit. So using 180° means that certain portions are duplicated.</p>

<p>I <em>think</em> the lenses technically offer 200°, but the physical casing prevents all of that from being viewed. I got to the value of 189° by trial and error. Mostly error! Using <code>:ih_fov=189:iv_fov=189</code> get this image which has less overlap:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/02/360-189.webp" alt="A flattened image which has less overlap at the edges." width="2560" height="1280" class="aligncenter size-full wp-image-67110">

<p>It isn't <em>perfect</em> - but it preserves most of the image coherence.</p>

<h2 id="cut-off-images"><a href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/#cut-off-images">Cut Off Images</a></h2>

<p>There's another thing worth noticing - the top, right, bottom, and left "corners" of the circle are cut off. If the image sensor captured everything, the resultant fisheye would look something like this:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/02/Repaged.webp" alt="Two circular images with gaps between them." width="2626" height="1313" class="aligncenter size-full wp-image-67111">

<p>I tried repaging the video to include the gaps, but it didn't make any noticeable difference.</p>

<h2 id="making-equirectangular-videos-work-with-vlc"><a href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/#making-equirectangular-videos-work-with-vlc">Making Equirectangular Videos Work With VLC</a></h2>

<p>Sadly, ffmpeg will not write the metadata necessary to let playback devices know the video is spherical. Instead, according to <a href="https://bino3d.org/metadata-for-stereo-3d-and-surround-video.html">Bino3D</a>, you have to use <code>exiftool</code> like so:</p>

<pre><code class="language-bash">exiftool \
        -XMP-GSpherical:Spherical="true" \
        -XMP-GSpherical:Stitched="true" \
        -XMP-GSpherical:ProjectionType="equirectangular" \
        video.mp4
</code></pre>

<h2 id="putting-it-all-together"><a href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/#putting-it-all-together">Putting It All Together</a></h2>

<p>The LG 360 records audio in 5.1 surround using AAC. That's already fairly well compressed, so there's no point squashing it down to Opus.</p>

<p>The default video codec is h264, but the picture is going to be reprojected, so quality is always going to take a bit of a hit. Pick whichever code you like to give the best balance of quality, file size, and encoding time.</p>

<p>Run:</p>

<pre><code class="language-bash">ffmpeg \
  -i original.mp4 \
  -vf "v360=input=dfisheye:output=equirect:ih_fov=189:iv_fov=189" \
  -c:v libx265 -preset fast -crf 28 -c:a copy \
  out.mp4; exiftool \
        -XMP-GSpherical:Spherical="true" \
        -XMP-GSpherical:Stitched="true" \
        -XMP-GSpherical:ProjectionType="equirectangular" \
        out.mp4
</code></pre>

<p>That will produce a reasonable equirectangular file suitable for viewing in VLC or in VR.</p>

<p>If this has been useful to you, please stick a comment in the box!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=67087&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/reprojecting-dual-fisheye-videos-to-equirectangular-lg-360/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Book Review: How To Kill A Witch - A Guide For The Patriarchy by Claire Mitchell and Zoe Venditozzi ★★★⯪☆]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/" />

		<id>https://shkspr.mobi/blog/?p=70322</id>
		<updated>2026-04-11T08:42:00Z</updated>
		<published>2026-04-17T11:34:26Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="Book Review" /><category scheme="https://shkspr.mobi/blog" term="feminism" />
		<summary type="html"><![CDATA[After reading The Wicked of the Earth, I wanted to understand some of the history behind the stories. Why were women accused of being witches? What really happened in those trials? What are the modern consequences of those events?  This is the story of the Scottish Witch Trials - with brief forays into England and abroad. It examines the central tension of whether witchcraft was real to the…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/"><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/hbg-title-how-to-kill-a-witch-3-70.webp" alt="Book cover featuring a noose and flames." width="200" height="625" class="alignleft size-full wp-image-70323">

<p>After reading <a href="https://shkspr.mobi/blog/2025/03/book-review-the-wicked-of-the-earth-by-a-d-bergin/">The Wicked of the Earth</a>, I wanted to understand some of the history behind the stories. Why were women<sup id="fnref:women"><a href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/#fn:women" class="footnote-ref" title="And a small number of men. But this is firmly focused on the overwhelming majority." role="doc-noteref">0</a></sup> accused of being witches? What really happened in those trials? What are the modern consequences of those events?</p>

<p>This is the story of the Scottish Witch Trials - with brief forays into England and abroad. It examines the central tension of whether witchcraft was real to the accusers, or just a convenient means to oppress troublesome women. The descriptions of the imprisonment, torture, and state-sanctioned murder is visceral and horrific.</p>

<p>It's also rather stark in its modern assessment of the historic context:</p>

<blockquote><p>Nonetheless, it’s important to remember it was a proper legal trial, with evidence being put forward and the judge assessing it and carrying out legal tests. Some people think that witchcraft trials were carried out by angry peasants waving pitchforks. Perhaps this is a more acceptable way for a modern person to think about it. No one wants to think that a judicial system can get it so wrong. But it did, with catastrophic consequences for those accused.</p></blockquote>

<p>The book is mostly good, it's a spin off from the <a href="https://www.witchesofscotland.com/">Witches Of Scotland</a> podcast and that's reflected in the writing. As with any parasocial<sup id="fnref:para"><a href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/#fn:para" class="footnote-ref" title="As opposed to paranormal." role="doc-noteref">1</a></sup> entertainment, it attempts to centre the authors and bring the audience along for the ride - so there's lots of descriptions of the libraries the authors visit, how things make them feel, how enamoured they are with their podcast guests. I found it a little distracting, but it's obviously right for their main audience.</p>

<p>Similarly, there's an attempt to bring the past to life by imagining a little monologue from various historic figures. I found that a little unconvincing; I dislike putting words in peoples' mouths. But with sparse primary documentation, that may be the best way to bring these characters to life. It's also well illustrated. Too many books eschew pictures - but this has a nice collection of woodcuts and portraits to contextualise what we're reading about.</p>

<p>One little nitpick, the book makes the claims:</p>

<blockquote><p>Life was hard and life expectancy was around 35</p></blockquote>

<p>and</p>

<blockquote><p>Lilias was an old woman, at least 60 years old and possibly as old as 80. At a time when life expectancy was much lower than it is now, even the lower estimate was still a considerable age.</p></blockquote>

<p>That's not quite right. Although the average life expectancy was low, that's the <a href="https://www.ons.gov.uk/peoplepopulationandcommunity/birthsdeathsandmarriages/lifeexpectancies/articles/howhaslifeexpectancychangedovertime/2015-09-09">average <em>at birth</em></a> - with a large number of infant mortalities dragging down the average. When you look at the full data, you'll see <a href="https://www.psychologytoday.com/us/blog/data-for-health/202509/there-were-still-old-people-when-life-expectancy-was-35">people used to live long lives</a> even in the distant past.</p>

<p>In a way, it reminds me of <a href="https://shkspr.mobi/blog/2019/10/book-review-invisible-women-caroline-criado-perez/">Invisible Women</a>. A national tragedy hidden from view.</p>

<p>It builds to a rousing end. There are parts of the world where witchcraft is still taken seriously - with devastating consequences. The febrile atmosphere which led to unfounded accusations against women is still prevalent even in modern societies.</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:women">
<p>And a small number of men. But this is firmly focused on the overwhelming majority.&nbsp;<a href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/#fnref:women" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:para">
<p>As opposed to paranormal.&nbsp;<a href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/#fnref:para" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70322&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/#comments" thr:count="4" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/book-review-how-to-kill-a-witch-a-guide-for-the-patriarchy-by-claire-mitchell-and-zoe-venditozzi/feed/atom/" thr:count="4" />
			<thr:total>4</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[RSS Club for WordPress]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/" />

		<id>https://shkspr.mobi/blog/?p=70024</id>
		<updated>2026-04-14T22:11:25Z</updated>
		<published>2026-04-16T11:34:10Z</published>
		<category scheme="https://shkspr.mobi/blog" term="[RSS Club]" /><category scheme="https://shkspr.mobi/blog" term="atom" /><category scheme="https://shkspr.mobi/blog" term="HowTo" /><category scheme="https://shkspr.mobi/blog" term="rss" /><category scheme="https://shkspr.mobi/blog" term="RSS Club" /><category scheme="https://shkspr.mobi/blog" term="WordPress" />
		<summary type="html"><![CDATA[What if I told you there was a secret social network, hidden in plain sight? If you&#039;re reading this message, you&#039;re now a member of RSS Club!  RSS Club is a series of posts which are only visible to RSS / Atom subscribers. Like you 😃  If you want this for your own WordPress site, here&#039;s what you&#039;ll need:   A blog post which is only visible in RSS / Atom. Which has no HTML rendering on your site. A…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/"><![CDATA[<p>What if I told you there was a <em>secret</em> social network, hidden in plain sight? If you're reading this message, you're now a member of <a href="https://daverupert.com/rss-club/">RSS Club</a>!</p>

<p>RSS Club is a series of posts which are <em>only</em> visible to RSS / Atom subscribers. Like you 😃</p>

<p>If you want this for your own WordPress site, here's what you'll need:</p>

<ol>
<li>A blog post which is <em>only</em> visible in RSS / Atom.</li>
<li>Which has no HTML rendering on your site.</li>
<li>And cannot be found in your site's search.</li>
<li>Nor via search engines.</li>
<li>Also, doesn't appear on your mailing list.</li>
<li>Does not get shared or syndicated to the Fediverse.</li>
</ol>

<p>(This is a <em>bit</em> more strict than <a href="https://daverupert.com/2018/01/welcome-to-rss-club/">the original rules</a> which allow for web rendering and being found via a search engine.)</p>

<h2 id="start-with-a-category"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#start-with-a-category">Start With A Category</a></h2>

<p>The easiest way to do this in WordPress is via a category - <em>not</em> a tag.</p>

<p>After creating a category on your blog, click the edit link. You will see in the URl bar a <code>tag_id</code>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/Category-ID.webp" alt="Screenshot of the WordPress website." width="1283" height="877" class="aligncenter size-full wp-image-70025">

<p>Whenever you want to make an RSS-exclusive post, you select the category before you publish.</p>

<h2 id="disable-display"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#disable-display">Disable Display</a></h2>

<p>This code stops any page in the RSS Club category from being displayed on the web.</p>

<pre><code class="language-php">function rss_club_post_blocker(): void {
    if (    is_singular( "post" )
        &amp;&amp;  has_category( "rss-club" )
        &amp;&amp; !current_user_can( "edit_posts" ) )
    {
        status_header( 403 );
        echo "You must be a member of RSS Club to view this content.";
        exit;
    }
}
add_action( "template_redirect", "rss_club_post_blocker" );
</code></pre>

<p>Editors can still see it, but everyone else gets a blocked message.</p>

<h2 id="remove-from-site-search-and-sitemap"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#remove-from-site-search-and-sitemap">Remove From Site Search and SiteMap</a></h2>

<p>Here's a snippet to stick in your <code>functions.php</code> - it removes the category from any queries unless it is for the admin pages or the RSS feeds.</p>

<pre><code class="language-php">//  Remove the RSS Club category from search results.
//  $query is passed by reference
function rss_club_search_filter( \WP_Query $query ): void {
    //  Ignore admin screens.
    if ( !is_admin() &amp;&amp; !is_feed() ) {
        //  Find the RSS-Club category ID.
        $category = get_category_by_slug( "rss-club" );

        //  Remove it from the search results.
        if ( $category ) {
            $query-&gt;set( "category__not_in", [$category-&gt;term_id] );
        }       
    }
}
add_action( "pre_get_posts", "rss_club_search_filter" );
</code></pre>

<p>This code also redacts that category from the build-in sitemap. Note - the <em>name</em> of the category still shows up in the XML, but it leads to a 404.</p>

<h2 id="exclude-from-email-and-social-media-rss-feeds"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#exclude-from-email-and-social-media-rss-feeds">Exclude From Email and Social Media RSS Feeds</a></h2>

<p>My mailing list and social media posts are fed from RSS. So how do remove an entire category from an RSS feed?</p>

<p>Simple! Append <code>?cat=-1234</code> to the end!</p>

<p>A negative category ID will remove the category from being displayed. So my email subscribers won't see the RSS only content. Of course, they get email-only exclusive posts, so don't feel too bad for them 😊</p>

<h2 id="fediverse-exclusion"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#fediverse-exclusion">Fediverse Exclusion</a></h2>

<p>The manual way is easiest. Assuming you have the <a href="https://github.com/Automattic/wordpress-activitypub/">ActivityPub plugin</a> and a the <a href="https://github.com/janboddez/share-on-mastodon/">Share On Mastodon plugin</a>, you can unselect the sharing options before publishing.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/No-Masto.webp" alt="Screenshot showing no sharing selected." width="600" class="aligncenter size-full wp-image-70028">

<p>If you think you might forget to toggle those boxen, there is <a href="https://github.com/janboddez/share-on-mastodon/issues/31">a filter for the share plugin</a>:</p>

<pre><code class="language-php">function rss_club_mastodon_filter( bool $is_enabled, int $post_id ): bool {
    global $exclude;
    if ( has_category( $exclude, $post_id ) ) {
        return false;
    }
    return $is_enabled;
}
add_filter( "share_on_mastodon_enabled", "rss_club_mastodon_filter", 10, 2 );
</code></pre>

<p>Similarly, there's a <a href="https://github.com/Automattic/wordpress-activitypub/blob/730d0ae51ce77be28439969dd9788c745a46681f/includes/functions-post.php#L77">filter for the ActivityPub plugin</a>:</p>

<pre><code class="language-php"><br>function rss_club_activitypub_filter( bool $disabled, \WP_Post $post ): bool 
{
    global $exclude;
    if ( has_category( $exclude, $post ) ) {
        return true;
    }

    return $disabled;
}
add_filter( "activitypub_is_post_disabled", "rss_club_activitypub_filter", 10, 2 );
</code></pre>

<h2 id="enjoy"><a href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#enjoy">Enjoy!</a></h2>

<p>If you've set up your own RSS Club feed, <a href="https://edent.tel/">drop me a line</a> so I can subscribe 😊</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70024&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/rss-club-for-wordpress/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Why is it so hard to passively stalk my friends' locations?]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/" />

		<id>https://shkspr.mobi/blog/?p=68114</id>
		<updated>2026-03-27T16:09:46Z</updated>
		<published>2026-04-15T11:34:45Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="FourSquare" /><category scheme="https://shkspr.mobi/blog" term="geolocation" /><category scheme="https://shkspr.mobi/blog" term="location" />
		<summary type="html"><![CDATA[I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say &#34;Hey! Why didn&#039;t you let me know you were in my neck of the woods?&#34;  Similarly, if I bump into an old acquaintance at a conference, we both tend to say &#34;If only I&#039;d known you were here, we could have had dinner together last night!&#34;  I do enjoy the serendipity of events like FOSDEM - randomly…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/"><![CDATA[<p>I feel terribly guilty when I visit a new city, post photos of my travels, only to have a friend say "Hey! Why didn't you let me know you were in my neck of the woods?"</p>

<p>Similarly, if I bump into an old acquaintance at a conference, we both tend to say "If only I'd known you were here, we could have had dinner together last night!"</p>

<p>I do enjoy the serendipity of events like FOSDEM - randomly seeing a mate and expressing the joy of spontaneity. But I also like arranging to meet up in advance.</p>

<p>At the moment, my strategy is sending a blast on social media saying "I'm visiting [this city] next week, anyone fancy a beer and a natter?" I've met friends all over Europe, Australia, and New Zealand that way.  <a href="https://shkspr.mobi/blog/2025/06/meeting-my-fedifriends-afk/">It mostly works</a>.  But I can't help feeling it is inefficient and prone to missing connections.</p>

<p>I even wrote my own code to auto-post FourSquare checkins to my other social media sites.</p>

<p>Here are my ideal scenarios. Imagine something built in to Signal / WhatsApp / Whatever app you already use.</p>

<h2 id="plan-in-advance"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#plan-in-advance">Plan In Advance</a></h2>

<p>I tell my app that I'm going to Barcelona from 14th - 19th February and am happy to meet any of my friends.</p>

<p><em>✨Background Magic✨</em></p>

<p>My friend Alice has also planned a trip to Barcelona around those dates. She gets a ping saying that one of her friends is going to be in the same city. Does she want to know more?</p>

<p>So far, so <a href="https://en.wikipedia.org/wiki/Dopplr">Dopplr</a>.</p>

<p>My friend Bob lives just outside of Barcelona. He's set his "willing to travel" settings to be about 30 minutes, so also receives a ping.</p>

<p>I don't know that either of them have seen the notification until they decide they want to meet.</p>

<h2 id="spontaneous-fun"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#spontaneous-fun">Spontaneous Fun</a></h2>

<p>I step off the train in Manchester, England England.  Perhaps the app notices I'm away from home, or maybe I press the "Anyone Around?" button.</p>

<p>On a map I can see friends who have shared their rough location. I decide to message Chuck to see if he's free for a chat.</p>

<p>Dave notices my location is now within his preferred travel distance. He gives me a ring.</p>

<p>A bit like how FourSquare used to be - but with less precision.</p>

<h2 id="downsides"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#downsides">Downsides</a></h2>

<p>The above is very much the "happy path". It doesn't look at any of the knotty problems or grapple with the UI that would be needed to make this work.  But we know the technology for sharing location is viable - so what are the social issues that make this so difficult?</p>

<h3 id="social-awkwardness"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#social-awkwardness">Social Awkwardness</a></h3>

<p>"Oh, fuck, Edgar's location says he's in town. Can we pretend to be out of the country?"</p>

<p>Alternatively, "Huh, I know at least a dozen people who live in Skegness. Why aren't any of them responding to me?"</p>

<p>Social pressure and awkwardness are hard problems. No one wants to use the app that makes you feel like a friendless loser.</p>

<h3 id="privacy"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#privacy">Privacy</a></h3>

<p>Do you <em>want</em> your friends knowing your every movement? I'm sure some people do, but most probably don't. It's possible to sketch out some vague controls:</p>

<ul>
<li>Only send a notification if I push this button.</li>
<li>Don't send alerts if I am within this radius of my home / work.</li>
<li>Fuzz my location to the city / state / country level.</li>
</ul>

<h3 id="danger"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#danger">Danger</a></h3>

<p>Is it a risk to let people know vaguely where you are? Is meeting up with (semi-) strangers from the Internet a smart life choice? Is having an app stalk you across the globe giving too much data to advertisers?</p>

<p>Does that creep from work abuse the system to keep popping up whenever you're out with friends?</p>

<h2 id="technology"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#technology">Technology</a></h2>

<p>I said the technology exists for this, and that was sort of true. Every device has GPS &amp; an Internet connection. Storing a log of friends and sending them a message is a solved problem.</p>

<p>But is it solved in a decentralised and privacy preserving way?</p>

<p>No one wants to give all this power to one company. Google will build it and kill it. Facebook will sell your secrets to dropshippers. A funky start-up will be acquhired by Apple &amp; restricted to iOS devices.</p>

<p>My location is fuzzed to an acceptable degree of imprecision and then sent… where? To all my friends directly? To a central server? Can <a href="https://en.wikipedia.org/wiki/K-anonymity"><em>k</em>-anonymity</a> help?</p>

<p>Is this a separate app? Everyone seemed to leave FourSquare after they buggered around with it. Perhaps it is just a feature in existing apps?</p>

<h3 id="whats-already-there"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#whats-already-there">What's Already There?</a></h3>

<p>Messaging apps like Signal, Telegram, and WhatsApp allow you to share your location with one or more friends.</p>

<p>To me, it feels a bit weird to manually send a dropped pin to some / all of my contact. It also doesn't let you share "tomorrow I will be in…"</p>

<p>Using "Stories" is the common way to share an update with all contacts - but none of them let you automatically share your location in a story.</p>

<p>FourSquare's Swarm app allows you to check in to a "neighbourhood". But there's no obvious way of saying "London" or "Manchester" - and I'm not sure how close to an area you need to be to get an alert that your friend is there.</p>

<h2 id="whats-next"><a href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#whats-next">What's Next?</a></h2>

<p>I don't want to build this. Trying to get everyone I know to adopt a new app isn't going to happen. With the fragmentation of messaging and the lack of interoperability, this is likely to remain an unsolved problem for some time.</p>

<p>So here's my strategy.</p>

<ul>
<li>Get back in to using FourSquare. Most of my friends seemed to stop using it back in 2017 when it was split into Swarm. But a few are still on there.</li>
<li>Manually post a story on Mastodon, BlueSky, Facebook, WhatsApp, Signal, and Telegram saying "Visiting Hamburg next week. Anyone want a beer?"</li>
<li>Hope that something better comes along.</li>
</ul>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68114&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/#comments" thr:count="4" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/why-is-it-so-hard-to-passively-stalk-my-friends-locations/feed/atom/" thr:count="4" />
			<thr:total>4</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Android now stops you sharing your location in photos]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/android-now-stops-you-sharing-your-location-in-photos/" />

		<id>https://shkspr.mobi/blog/?p=70143</id>
		<updated>2026-04-06T14:28:44Z</updated>
		<published>2026-04-13T11:34:48Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="android" /><category scheme="https://shkspr.mobi/blog" term="geolocation" /><category scheme="https://shkspr.mobi/blog" term="geotagging" /><category scheme="https://shkspr.mobi/blog" term="google" /><category scheme="https://shkspr.mobi/blog" term="OpenBenches" />
		<summary type="html"><![CDATA[My wife and I run OpenBenches. It&#039;s a niche little site which lets people share photos of memorial benches and their locations. Most modern phones embed a geolocation within the photo&#039;s metadata, so we use that information to put the photos on a map.  Google&#039;s Android has now broken that.  On the web, we used to use:  &#60;input type=&#34;file&#34; accept=&#34;image/jpeg&#34;&#62;   That opened the phone&#039;s photo picker…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/android-now-stops-you-sharing-your-location-in-photos/"><![CDATA[<p>My wife and I run <a href="https://openbenches.org">OpenBenches</a>. It's a niche little site which lets people share photos of memorial benches and their locations. Most modern phones embed a geolocation within the photo's metadata, so we use that information to put the photos on a map.</p>

<p>Google's Android has now broken that.</p>

<p>On the web, we used to use:</p>

<pre><code class="language-html">&lt;input type="file" accept="image/jpeg"&gt;
</code></pre>

<p>That opened the phone's photo picker and let the use upload a geotagged photo. But a while ago Google deliberately broke that.</p>

<p>Instead, we were <a href="https://issuetracker.google.com/issues/243294058#comment27">encourage to use the <em>file</em> picker</a>:</p>

<pre><code class="language-html">&lt;input type="file"&gt;
</code></pre>

<p>That opened the default file manager. This had the unfortunate side-effect of allowing the user to upload <em>any</em> file, rather than just photos. But it did allow the EXIF metadata through unmolested.  <a href="https://issuetracker.google.com/issues/428397711">Then Google broke that as well</a>.</p>

<p>Using a "Progressive Web App" doesn't work either.</p>

<p>So, can users transfer their photos via Bluetooth or QuickShare? No. <a href="https://issuetracker.google.com/issues/485307531">That's now broken as well</a>.</p>

<p>You can't even directly share via email without the location being stripped away.</p>

<p>Literally the <em>only</em> way to get a photo with geolocation intact is to plug in a USB cable, copy the photo to your computer, and then upload it via a desktop web browser?</p>

<h2 id="why"><a href="https://shkspr.mobi/blog/2026/04/android-now-stops-you-sharing-your-location-in-photos/#why">Why?!?!?</a></h2>

<p><del>Because Google run an anticompetitive monopoly on their dominant mobile operating system.</del></p>

<p>Privacy.</p>

<p>There's a worry that users don't know they're taking photos with geolocation enabled. If you post a cute picture of your kid / jewellery / pint then there's a risk that a ne’er-do-well could find your exact location.</p>

<p>Most social media services are sensible and strip the location automatically. If you try to send a geotagged photo to Facebook / Mastodon / BlueSky / WhatsApp / etc, they default to <em>not</em> showing the location. You can add it in manually if you want, but anyone downloading your photo won't see the geotag.</p>

<p>And, you know, I get it. Google doesn't want the headline "Stalkers found me, kidnapped my baby, and stole my wedding ring - how a little known Android feature puts you in danger!"</p>

<p>But it is just so <em>tiresome</em> that Google never consults their community. There was no advance notice of this change that I could find. Just a bunch of frustrated users in my inbox blaming me for breaking something.</p>

<p>I don't know what the answer is. Perhaps a pop up saying "This website wants to see the location of your photos. Yes / No / Always / Never"? People get tired of constant prompts and the wording will never be clear enough for most users.</p>

<p>It looks like the only option available will be to develop a native Android app (and an iOS one?!) with all the cost, effort, and admin that entails. Android apps have <a href="https://developer.android.com/training/data-storage/shared/media#location-media-captured">a special permission for accessing geolocation in images</a>.</p>

<p>If anyone has a <em>working</em> way to let Android web-browsers access the full geolocation EXIF metadata of photos uploaded on the web, please drop a comment in the box.</p>

<p>In the meantime, please leave a +1 on <a href="https://github.com/whatwg/html/issues/11724#issuecomment-4192228562">this HTML Spec comment</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70143&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/android-now-stops-you-sharing-your-location-in-photos/#comments" thr:count="21" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/android-now-stops-you-sharing-your-location-in-photos/feed/atom/" thr:count="21" />
			<thr:total>21</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Cheapest way to keep a UK mobile number using an eSIM]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/cheapest-way-to-keep-a-uk-mobile-number-using-an-esim/" />

		<id>https://shkspr.mobi/blog/?p=69140</id>
		<updated>2026-03-30T07:48:52Z</updated>
		<published>2026-04-11T11:34:38Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="eSIM" /><category scheme="https://shkspr.mobi/blog" term="mobile" /><category scheme="https://shkspr.mobi/blog" term="phone" /><category scheme="https://shkspr.mobi/blog" term="sim" />
		<summary type="html"><![CDATA[I have an old mobile phone number that I&#039;d like to keep. I think it is registered with a bunch of services for 2FA by SMS, but I can&#039;t be sure. So I want to keep it for a couple of years just in case I need it to log on to something.  I don&#039;t want to faff around with physical SIMs, so I went looking for the cheapest way to keep my number for the longest time. There are a whole bunch of providers…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/cheapest-way-to-keep-a-uk-mobile-number-using-an-esim/"><![CDATA[<p>I have an old mobile phone number that I'd like to keep. I <em>think</em> it is registered with a bunch of services for 2FA by SMS, but I can't be sure. So I want to keep it for a couple of years just in case I need it to log on to something.</p>

<p>I don't want to faff around with physical SIMs, so I went looking for the <em>cheapest</em> way to keep my number for the longest time. There are a whole bunch of providers out there who will do low-cost <em>monthly</em> contracts (like Spusu), which I don't want. Similarly, there are some pure PAYG providers who require you to top-up with £10 every few months (like 1pmobile).</p>

<p>In the end, I went with <a href="https://aklam.io/yJrzBWhD">Lyca Mobile</a> (affiliate link). Total cost was £10 which should last indefinitely.</p>

<p>The process isn't particularly straightforward.  Here's how it works:</p>

<p>First, add a PAYG SIM to your basket and select "eSIM"</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/Add-to-basket.webp" alt="Screen with a £6 SIM in the basket." width="1400" height="900" class="aligncenter size-full wp-image-69143">

<p>Next, click the Bin icon (🗑) in the top right. You'll get this pop-up:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/Discard.webp" alt="Screen saying are you sure and offering other choices." width="1400" height="1000" class="aligncenter size-full wp-image-69142">

<p>Select "Discard plan &amp; add credit" - you'll return to this screen:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/Add-top-up.webp" alt="A screen letting you add a top up." width="1400" height="974" class="aligncenter size-full wp-image-69141">

<p>The minimum top-up is a tenner, so select that. From there, you can add details of your old number, its porting code, and when you want the port to take place.  Then pay.</p>

<p>Done! You'll receive your eSIM instantly. Scan it with your phone and you'll be up and running. The phone number porting will take as long as it takes.</p>

<p>OK, but will Lyca let you keep a number indefinitely? Here's what they say:</p>

<blockquote><h2 id="how-long-can-i-keep-my-number-for-if-i-dont-use-any-of-lyca-mobiles-services"><a href="https://shkspr.mobi/blog/2026/04/cheapest-way-to-keep-a-uk-mobile-number-using-an-esim/#how-long-can-i-keep-my-number-for-if-i-dont-use-any-of-lyca-mobiles-services">How long can I keep my number for if I don’t use any of Lyca Mobile’s services?</a></h2>

<p>Normally we will keep your number for 120 days if you do not use our service. However, you may also keep your Lycamobile number for up to 1 year without using our service. Just dial  <code>*139*9999#</code> from your Lycamobile and follow the instructions on the screen. Please be aware that there will be a fixed annual fee of £15 which will be deducted from your balance.</p>

<p><a href="https://www.lycamobile.co.uk/en/general/how-long-can-i-keep-my-number-for-if-i-dont-use-any-of-lycamobiles-services/">Source</a></p></blockquote>

<p>Note, their chatbot says the fixed fee is a fiver. Like all half-baked AI systems, it is wrong.</p>

<p>So, what does "using" consist of? This is hard to find out! I <em>think</em> is any chargeable event.  Based on their <a href="https://www.lycamobile.co.uk/en/rates/national/#prepaid">current PAYG pricing</a> the cheapest options are:</p>

<ul>
<li>Send an SMS for 23p</li>
<li>Use 1MB of data for 15p.</li>
</ul>

<p>If I'm right, you could use 1MB of data every 120 days. That would deplete your credit in about 22 years. More than long enough for me!</p>

<p>There you have it, I'm pretty sure that's the cheapest way to keep a UK mobile number on an eSIM. You can keep it switched off for 119 days, flick it on, send a quick message, then shut it down again.</p>

<p>Click the referral link to <a href="https://aklam.io/yJrzBWhD">join Lyca Mobile</a></p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=69140&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/cheapest-way-to-keep-a-uk-mobile-number-using-an-esim/#comments" thr:count="10" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/cheapest-way-to-keep-a-uk-mobile-number-using-an-esim/feed/atom/" thr:count="10" />
			<thr:total>10</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[[RSS Club] Why do you use RSS rather than Atom?]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-why-do-you-use-rss-rather-than-atom/" />

		<id>https://shkspr.mobi/blog/?p=70257</id>
		<updated>2026-04-09T15:24:22Z</updated>
		<published>2026-04-10T11:34:36Z</published>
		<category scheme="https://shkspr.mobi/blog" term="[RSS Club]" /><category scheme="https://shkspr.mobi/blog" term="atom" /><category scheme="https://shkspr.mobi/blog" term="rss" /><category scheme="https://shkspr.mobi/blog" term="RSS Club" />
		<summary type="html"><![CDATA[This post is exclusive to feed subscribers. Enjoy!  This whole experiment is called RSS Club - but perhaps it should be called &#34;XML-based distributed feed club&#34;?  I&#039;ve been playing about with local-only and privacy-conscious view tracking. I can see how many people click on my stories from HN or Google or anywhere else. I also decided to add the number of times a story is viewed by someone…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/rss-club-why-do-you-use-rss-rather-than-atom/"><![CDATA[<p><mark>This post is exclusive to feed subscribers. Enjoy!</mark></p>

<p>This whole experiment is called <a href="https://daverupert.com/rss-club/">RSS Club</a> - but perhaps it should be called "XML-based distributed feed club"?</p>

<p>I've been playing about with <a href="https://shkspr.mobi/blog/2025/09/reasonably-accurate-privacy-conscious-cookieless-visitor-tracking-for-wordpress/">local-only and privacy-conscious view tracking</a>. I can see how many people click on my stories from HN or Google or anywhere else. I also decided to add the number of times a story is viewed by someone reading via feeds - like you!</p>

<p>Here's a typical day of page views:</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/Atom-v-RSS.webp" alt="Screenshot showing 596 Atom views vs 492 RSS views." width="440" height="200" class="aligncenter size-full wp-image-70258">

<p>First of all, I'm staggered that so many of you read this via feeds! Hurrah! And I'm amazed that I get more readers via feeds than Google. Every member of this secret RSS club is awesome 😘</p>

<p>When I originally set up this blog, it only supported RSS. At some point, WordPress added the more modern Atom feed format. Both get full support from me. But I'm wondering why so many people are still on RSS rather than Atom? Are there clients which don't support Atom? Is it just a legacy thing?</p>

<p>Should I redirect the RSS feed to the Atom feed or would that break things for you?</p>

<p>If you have any strong views on RSS 🆚 Atom, please <a href="https://edent.tel/">drop me a comment via your favourite method</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70257&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-why-do-you-use-rss-rather-than-atom/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/rss-club-why-do-you-use-rss-rather-than-atom/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Book Review: Small Comfort by Ia Genberg ★★☆☆☆]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-small-comfort-by-ia-genberg/" />

		<id>https://shkspr.mobi/blog/?p=70017</id>
		<updated>2026-04-04T13:03:54Z</updated>
		<published>2026-04-09T11:34:59Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="Book Club" /><category scheme="https://shkspr.mobi/blog" term="Book Review" />
		<summary type="html"><![CDATA[I was left somewhat unconvinced by this book. I liked the concept - a series of interrelated stories all told in different styles.  Much like the film &#34;Lola RenntRun Lola Run&#34; there&#039;s a briefcase full of cash, a cast of morally ambiguous characters, and a meandering philosophical discussion about the nature of economic salvation.  It slams together the naïve and the cynical into a bunch of …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/book-review-small-comfort-by-ia-genberg/"><![CDATA[<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/hbg-title-small-comfort.webp" alt="Book cover." width="200" class="alignleft size-full wp-image-70019"> I was left somewhat unconvinced by this book. I liked the concept - a series of interrelated stories all told in different styles.</p>

<p>Much like the film "<ruby lang="de">Lola Rennt<rt lang="en">Run Lola Run</rt></ruby>" there's a briefcase full of cash, a cast of morally ambiguous characters, and a meandering philosophical discussion about the nature of economic salvation.</p>

<p>It slams together the naïve and the cynical into a bunch of uneasy conversations.</p>

<p>I loved the slow-burn of the first story - the way it gradually revealed more and more about the characters. But throughout I was left wondering "where is this going?" The answer, disappointingly, was nowhere.</p>

<p>That's the heart of my problem with the book - it was compelling and frustrating in equal measure. The author herself states it best:</p>

<blockquote><p>The reader needs something to hold on to. A glimmer of hope</p></blockquote>

<p>It was stylish, there's no doubt about that. The texture of each story was gorgeous. The plotting was inventive and the morality interesting. I also enjoyed the bluntness of the social politics of economics. I just felt the whole was much less than the sum of its parts.</p>

<p>I read this as part of a new book club I'm attending. Thankfully, everyone else seemed to agree that it was a bit of a let down.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70017&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-small-comfort-by-ia-genberg/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/book-review-small-comfort-by-ia-genberg/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Theatre Review: Avenue Q ★★★★★]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/theatre-review-avenue-q/" />

		<id>https://shkspr.mobi/blog/?p=70160</id>
		<updated>2026-04-08T09:00:22Z</updated>
		<published>2026-04-08T11:34:25Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="comedy" /><category scheme="https://shkspr.mobi/blog" term="Theatre Review" />
		<summary type="html"><![CDATA[I&#039;ll admit, I was a little sceptical about returning to Avenue Q. I saw it on its original West End run back in… OH MY GOD I AM SO OLD! FUCK! Where did the time go?  It&#039;s always hard to know how much to update a show. Does it need constant reinvention to stay in the zeitgeist or can it be pickled forever as a classic?  &#34;I wish I had taken more pictures&#34; was something that utterly resonated with …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/theatre-review-avenue-q/"><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/AVEQ.webp" alt="Colourful puppets surround the letter Q." width="256" height="256" class="alignleft size-full wp-image-70161">

<p>I'll admit, I was a little sceptical about returning to Avenue Q. I saw it on its original West End run back in… OH MY GOD I AM <em>SO</em> OLD! FUCK! Where did the time go?</p>

<p>It's always hard to know how much to update a show. Does it need constant reinvention to stay in the zeitgeist or can it be pickled forever as a classic?</p>

<p>"I wish I had taken more pictures" was something that utterly resonated with me about my university experience. Photos were a rare commodity back when film still cost a couple of quid to develop. Perhaps today's uni students will sing "I wish I had posted less on Instagram"?</p>

<p>The show has been sympathetically updated. Some of the references have been modernised, a transphobic joke given the boot, and the lyrics tweaked to sometimes devastating effect. The song "Everyone's A Little Bit Racist" seems to have the most changes - and all for the better.</p>

<p>Parts of the show are adapted for a UK audience. Barely anyone here knows who Gary Coleman was so his intro is changed (although I guess part of the metajoke is that we all watched foreign celebrities on Sesame Street when we were growing up - so what's one more obscure cultural reference?). In the American show, the Bad Idea Bears proffer Long Island Ice Teas - that was a bit tame for UK audiences, so in the <a href="https://playbill.com/article/diva-talk-catching-up-with-avenue-qs-ann-harada-plus-news-of-buckley-and-york-com-162426">original UK run they guzzled absinthe daiquiris</a> - a change inexplicably reverted for this limited run.</p>

<p>As a piece of pure entertainment it is spectacular. The laughs are genuinely non-stop and the whole auditorium rose to give the performers a well-deserved ovation. It is a tender and beautiful show which shows off the power of live theatre.</p>

<p>The songs are still stuck in my head and the puppetry is still amazing. Absolutely hilarious, genuinely shocking in places, utterly filthy - an excellent night out.</p>

<h2 id="pre-and-post-show"><a href="https://shkspr.mobi/blog/2026/04/theatre-review-avenue-q/#pre-and-post-show">Pre- and Post-Show</a></h2>

<p>I've written before about <a href="https://shkspr.mobi/blog/2024/12/the-art-of-the-pre-show-and-post-show/">The art of the Pre-Show and Post-Show</a>. With West End prices higher than ever, it is incumbent on theatres to make their shows a memorable and spectacular evening out. That can be as simple as a bit of set dressing in the foyer, or as extravagant as they can get away with.</p>

<p>The offering is pretty reasonable here. You can buy the T-shirt, hoodie, and commemorative socks at exorbitant prices. The souvenir programme is £8 and, while lush with photos, is pretty sparse. The original West End programme from the early 2000s had a pin-up calendar of Lucy The Slut, a bunch more funny photos, and fake autographs of the puppets.</p>

<p>There's a photo-booth for taking selfies, but it appeared to be broken.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/broken.webp" alt="A broken photo stand." width="1024" height="771" class="aligncenter size-full wp-image-70215">

<p>It might been nice to have a few puppets placed around for people to take photos with.</p>

<p>One of the simplest things a venue can do is put on a themed cocktail menu. I'm surprised more shows don't do that. Who is going to turn down a glass of "The Internet Is For Pornstar Martini"?</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/cocktails.webp" alt="Cocktails include &quot;The Internet is for pornstar martini&quot; a &quot;Chardenfreude&quot; made with green chartreuse, a &quot;fuzzy neighbour&quot;, and a mocktail called &quot;Canadian Girlfriend&quot;." width="1024" height="768" class="aligncenter size-full wp-image-70216">

<p>The Shaftesbury Theatre itself isn't too cramped, even in the cheap seats. Although, at the back of the stalls, the overhang cuts off the top of the set which means you will miss a bit of action in some scenes.</p>

<p>While we were waiting for the show to start, the auditorium was filled with soundscape of subway cars rattling and distorted announcements. Again, fairly cheap and simple, but a nice way to build the mood.</p>

<p>As we exited, we were handed leaflets encouraging us to come back and bring our friends. Even better was the £10 discount on our next booking!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/leaflet.webp" alt="A leaflet offering a discount on Avenue Q." width="1024" height="831" class="aligncenter size-full wp-image-70218">

<p>Considering this is a limited run, the production has done a fair job of getting the audience in the mood and rewarding them for their patronage.</p>

<p>Well done to all involved!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70160&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/theatre-review-avenue-q/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/theatre-review-avenue-q/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Did WordPress VIP leak my phone number?]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/did-wordpress-vip-leak-my-phone-number/" />

		<id>https://shkspr.mobi/blog/?p=69804</id>
		<updated>2026-04-06T14:55:30Z</updated>
		<published>2026-04-07T11:34:43Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="automattic" /><category scheme="https://shkspr.mobi/blog" term="gdpr" /><category scheme="https://shkspr.mobi/blog" term="privacy" /><category scheme="https://shkspr.mobi/blog" term="WordPress" />
		<summary type="html"><![CDATA[As discussed in my last blog post, the scumsuckers at Apollo.io have been giving out my personal details.  Not only did they have my email address, they also had a copy of one of my phone numbers. I asked them where they got it from and they said:  Your phone number came from Parsely, Inc (wpvip.com) one of our customers who participates in our customer contributor network by sharing their…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/did-wordpress-vip-leak-my-phone-number/"><![CDATA[<p>As discussed <a href="https://shkspr.mobi/blog/2026/04/someone-at-browserstack-is-leaking-users-email-address/">in my last blog post</a>, the scumsuckers at Apollo.io have been giving out my personal details.</p>

<p>Not only did they have my email address, they also had a copy of one of my phone numbers. I asked them where they got it from and they said:</p>

<blockquote><p>Your phone number came from Parsely, Inc (wpvip.com) one of our customers who participates in our customer contributor network by sharing their business contacts with the Apollo platform.</p></blockquote>

<p>I've never done any business with <a href="https://www.parse.ly/">Parsely</a>. They have no reason to have my phone number and <em>absolutely</em> no permission to share it with other organisations.</p>

<p>Back in 2021, <a href="https://wpvip.com/blog/parse-ly-is-now-a-core-part-of-wordpress-vips-platform/">Parsely became part of WordPress VIP</a>. Ah yes, our old "friends" at Automattic with their <a href="https://shkspr.mobi/blog/2024/12/is-wordpress-org-gdpr-compliant/">somewhat lax attitude to privacy</a>.</p>

<p>I took advantage of <a href="https://wpvip.com/vip-and-the-gdpr/">WordPress VIP's GDPR policy</a> and sent a terse but polite "Hey, WTAF?" to them. Their response was quick:</p>

<blockquote><p>Thanks for reaching out. We are currently investigating our systems to locate any personal data regarding your request. We appreciate your patience.</p></blockquote>

<p>After a bit of prodding, they eventually replied with:</p>

<blockquote><p>It appears that we obtained your contact information as a result of a meeting you had with a representative for the WPScan service around August 5, 2022. WPScan is owned by our parent company Automattic.</p>

<p>We have no record of Parsely, Inc. (which is no longer in existence) or WPVIP Inc. (the owner of the Parse.ly service) having any relationship with Apollo.io.</p>

<p>We also have no record of Parsely, Inc. or WPVIP Inc. having sold or otherwise provided your information to any third party.</p></blockquote>

<p>I have no memory and no record of meeting anyone from WPScan - although I concede it is possible I did as part of a previous job.</p>

<p>But even if it was in an email signature when I contacted them that still doesn't explain how it made its way to Apollo for them to give to spammers everywhere. Was it a hack? A data leak? A treacherous employee? A deliberate sale? A sneaky app update? Or maybe just Apollo lying to me.</p>

<p>I don't care any more. I'm just so tired of shitty companies treating personal data as a commodity to be traded, sold, repackaged, and abused.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=69804&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/did-wordpress-vip-leak-my-phone-number/#comments" thr:count="1" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/did-wordpress-vip-leak-my-phone-number/feed/atom/" thr:count="1" />
			<thr:total>1</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[[RSS Club] Banana for scale]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-banana-for-scale/" />

		<id>https://shkspr.mobi/blog/?p=70063</id>
		<updated>2026-04-05T22:19:46Z</updated>
		<published>2026-04-06T11:34:00Z</published>
		<category scheme="https://shkspr.mobi/blog" term="[RSS Club]" /><category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="meme" /><category scheme="https://shkspr.mobi/blog" term="RSS Club" />
		<summary type="html"><![CDATA[This post is exclusive to RSS feed subscribers. Enjoy!  I&#039;ve had this idea stuck in my head for a while, so I decided to make it.  This is &#34;Scan Slowly And See&#34;.    The code is made by cloning some of the banana&#039;s spots. Do let me know if the QR code works for you 🍌 …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/rss-club-banana-for-scale/"><![CDATA[<p><mark>This post is exclusive to RSS feed subscribers. Enjoy!</mark></p>

<p>I've had this idea stuck in my head for a while, so I decided to make it.</p>

<p>This is "Scan Slowly And See".</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/04/banana.webp" alt="A banana with a QR code on it in the style of banana spots." width="2138" height="3104" class="aligncenter size-full wp-image-70064">

<p>The code is made by cloning some of the banana's spots. Do let me know if the QR code works for you 🍌</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70063&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/rss-club-banana-for-scale/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/rss-club-banana-for-scale/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Someone at BrowserStack is Leaking Users' Email Address]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/someone-at-browserstack-is-leaking-users-email-address/" />

		<id>https://shkspr.mobi/blog/?p=68665</id>
		<updated>2026-03-27T16:09:35Z</updated>
		<published>2026-04-05T11:34:03Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="gdpr" /><category scheme="https://shkspr.mobi/blog" term="privacy" />
		<summary type="html"><![CDATA[Like all good nerds, I generate a unique email address for every service I sign up to. This has several advantages - it allows me to see if a message is legitimately from a service, if a service is hacked the hackers can&#039;t go credential stuffing, and I instantly know who leaked my address.  A few weeks ago I signed up for BrowserStack as I wanted to join their Open Source programme. I had a few…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/someone-at-browserstack-is-leaking-users-email-address/"><![CDATA[<p>Like all good nerds, I generate a unique email address for every service I sign up to. This has several advantages - it allows me to see if a message is legitimately from a service, if a service is hacked the hackers can't go credential stuffing, and I instantly know who leaked my address.</p>

<p>A few weeks ago I signed up for <a href="https://www.browserstack.com/">BrowserStack</a> as I wanted to join their Open Source programme. I had a few emails back-and-forth with their support team and finally got set up.</p>

<p>A couple of days later I received an email to that email address from someone other than BrowserStack. After a brief discussion, the emailer told me they got my details from Apollo.io.</p>

<p>Naturally, I reached out to Apollo to ask them where they got my details from.</p>

<p>They replied:</p>

<blockquote><p>Your email address was derived using our proprietary algorithm that leverages publicly accessible information combined with typical corporate email structures (e.g., firstname.lastname@companydomain.com).</p></blockquote>

<p>Wow! A <em>proprietary</em> algorithm, eh? I wonder how much AI it takes to work out "firstname.lastname"????</p>

<p>Obviously, their response was inaccurate. There's no way their magical if-else statement could have derived the specific email I'd used with BrowserStack. I called them out on their bullshit and they replied with:</p>

<blockquote><p>Your email address came from BrowserStack (browserstack.com) one of our customers who participates in our customer contributor network by sharing their business contacts with the Apollo platform.</p>

<p>The date of collection is 2026-02-25.</p></blockquote>

<p>So I emailed BrowserStack a simple "Hey guys, what the fuck?"</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/No-spam.webp" alt="Web contact form. It says &quot;No spam, we promise.&quot;" width="630" height="552" class="aligncenter size-full wp-image-68669">

<p>I love their cheery little "No spam, we promise!"</p>

<p>Despite multiple attempts to contact them, BrowserStack never replied.</p>

<p>Given that this email address was only used with one company, I think there are a few likely possibilities for how Apollo got it.</p>

<ul>
<li>BrowserStack routinely sell or give away their users' data.</li>
<li>A third-party service used by BrowserStack siphons off information to send to others.</li>
<li>An employee or contractor at BrowserStack is exfiltrating user data and transferring it elsewhere.</li>
</ul>

<p>There are other, more nefarious, explanations - but I consider that to be unlikely. I suspect it is just the normalisation of the shabby trade in personal information undertaken by entities with no respect for privacy.</p>

<p>But, it turns out, it gets worse. My next blog post reveals how Apollo got my phone number from from a <em>very</em> big company.</p>

<p>Be seeing you 👌</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=68665&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/someone-at-browserstack-is-leaking-users-email-address/#comments" thr:count="5" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/someone-at-browserstack-is-leaking-users-email-address/feed/atom/" thr:count="5" />
			<thr:total>5</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Welcome to RSS Club!]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/" />

		<id>https://shkspr.mobi/blog/?p=70043</id>
		<updated>2026-04-03T14:42:06Z</updated>
		<published>2026-04-04T11:34:13Z</published>
		<category scheme="https://shkspr.mobi/blog" term="[RSS Club]" /><category scheme="https://shkspr.mobi/blog" term="meta" /><category scheme="https://shkspr.mobi/blog" term="rss" /><category scheme="https://shkspr.mobi/blog" term="RSS Club" />
		<summary type="html"><![CDATA[What if I told you there was a secret social network, hidden in plain sight? If you&#039;re reading this message, you&#039;re now a member of RSS Club!  RSS Club is a series of posts which are only visible to RSS / Atom subscribers. Like you 😃  If I&#039;ve done everything right, this page isn&#039;t visible on the web. It can&#039;t be found by a search engine. It doesn&#039;t share to Mastodon or appear syndicated to Ac…]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/"><![CDATA[<p>What if I told you there was a <em>secret</em> social network, hidden in plain sight? If you're reading this message, you're now a member of <a href="https://daverupert.com/rss-club/">RSS Club</a>!</p>

<p>RSS Club is a series of posts which are <em>only</em> visible to RSS / Atom subscribers. Like you 😃</p>

<p>If I've done everything right<sup id="fnref:huh"><a href="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/#fn:huh" class="footnote-ref" title="There is every possibility I have not and am now scrambling to fix things." role="doc-noteref">0</a></sup>, this page isn't visible on the web. It can't be found by a search engine. It doesn't share to Mastodon or appear syndicated to ActivityPub.</p>

<p>Of course, that also means that I can't receive any comments or feedback about it. I'd love it if you dropped me a note to say you found this post.  My contact details are on <a href="https://edent.tel/">https://edent.tel/</a> - feel free to use whichever method you like.</p>

<p>So, what can you expect from this <em>exclusive</em> content? More of the same old nonsense - but probably stuff I don't want to argue about on Social Media.</p>

<p>As a first pass, let's talk about this "<a href="https://mattellery.co.uk/posts/2026/04/01/lets-write-a-constitution/">Let's write a constitution</a>" post from Matt Ellery. In it, he discusses various fun / sensible things you could do with a written constitution. I particularly like the idea of having a "Prime Number Election".</p>

<p>In my modernist tweak, I'd set up something like this:</p>

<ul>
<li>Local council elections every 3 years.</li>
<li>National MP elections every 5 years.</li>
<li>Upper chamber elections every 7 years.</li>
</ul>

<p>That ensures that no one party can dominate. Once every 35 years, the upper chamber elections would be brought forward by one year, with their next term lengthened to 8 years.</p>

<p>I'm less sure about having the locals be at the same time for <em>every</em> council. I think that could be a lot of work for democratic volunteers. Perhaps stagger them into thirds or quarters of the year?</p>

<p>Either way, I doubt we'll be getting a written constitution any time soon!</p>

<div id="footnotes" role="doc-endnotes">
<hr aria-label="Footnotes">
<ol start="0">

<li id="fn:huh">
<p>There is every possibility I have not and am now scrambling to fix things.&nbsp;<a href="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/#fnref:huh" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=70043&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/welcome-to-rss-club/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
		<entry>
		<author>
			<name>@edent</name>
							<uri>https://edent.tel/</uri>
						</author>

		<title type="html"><![CDATA[Book Review: Superintelligence - Paths, Dangers, Strategies by Nick Bostrom ★★★★⯪]]></title>
		<link rel="alternate" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-superintelligence-paths-dangers-strategies-by-nick-bostrom/" />

		<id>https://shkspr.mobi/blog/?p=69922</id>
		<updated>2026-03-30T08:37:40Z</updated>
		<published>2026-04-03T11:34:34Z</published>
		<category scheme="https://shkspr.mobi/blog" term="/etc/" /><category scheme="https://shkspr.mobi/blog" term="AI" /><category scheme="https://shkspr.mobi/blog" term="Book Review" />
		<summary type="html"><![CDATA[When I finally invent time-travel, the first thing I&#039;ll do is go back in time and give everyone a copy of this book. Published in 2014, it clearly sets out the likely problems with true Artificial Intelligence (not the LLM crap we have now) and what measures need to be put in place before it is created.  It opens with The Unfinished Fable of the Sparrows:    Which, frankly, should be the end of …]]></summary>

					<content type="html" xml:base="https://shkspr.mobi/blog/2026/04/book-review-superintelligence-paths-dangers-strategies-by-nick-bostrom/"><![CDATA[<img src="https://shkspr.mobi/blog/wp-content/uploads/2026/03/superintelligence.webp" alt="Book cover featuring an owl." width="200" class="alignleft size-full wp-image-69924">

<p>When I finally invent time-travel, the first thing I'll do is go back in time and give everyone a copy of this book. Published in 2014, it clearly sets out the likely problems with <em>true</em> Artificial Intelligence (not the LLM crap we have now) and what measures need to be put in place <em>before</em> it is created.</p>

<p>It opens with The Unfinished Fable of the Sparrows:</p>

<iframe title="The Unfinished Fable of the Sparrows" width="620" height="349" src="https://www.youtube.com/embed/7rRJ9Ep1Wzs?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Which, frankly, should be the end of the discussion. Oh Scronkfinkle, why didn't they listen to you?</p>

<p>This book attempts to set out they <em>why</em> and the <em>how</em> of protecting humanity from the (inevitable?) arrival of machines which we would describe as "superintelligent". That is, capable of human-level reasoning and understanding, but unlimited in terms of speed, working memory, and accuracy.</p>

<p>For example, automated trading algorithms caused a "<a href="https://en.wikipedia.org/wiki/2010_flash_crash">Flash Crash</a>" of the stock market in 2010. Unchecked machines very nearly destabilised the financial work. As Bostrom writes:</p>

<blockquote><p>[…] while automation contributed to the incident, it also contributed to its resolution. The pre-preprogrammed stop order logic, which suspended trading when prices moved too far out of whack, was set to execute automatically because it had been correctly anticipated that the triggering events could happen on a timescale too swift for humans to respond. The need for pre-installed and automatically executing safety functionality—as opposed to reliance on runtime human supervision—again foreshadows a theme that will be important in our discussion of machine superintelligence.</p></blockquote>

<p>So where are those safety functions now? Are any of the AI providers building in guardrails to prevent atrocities? We know that <a href="https://shkspr.mobi/blog/2025/03/how-to-dismantle-knowledge-of-an-atomic-bomb/">some LLMs are restricted from sharing details about devastating weapons of mass destruction</a> - but there seems little else put in place.</p>

<p>The book is mostly accessible but veers wildly between casual language, deep philosophical tracts, pointed snark, and the occasional dive into maths and physics. For anyone with even a passing interest in the progression of <em>any</em> technology, it is a worthwhile read.</p>

<p>Many of the predictions are spot on:</p>

<blockquote><p>As of 2012, the Zen series of go-playing programs has reached rank 6 dan in fast games (the level of a very strong amateur player), using Monte Carlo tree search and machine learning techniques. Go-playing programs have been improving at a rate of about 1 dan/year in recent years. If this rate of improvement continues, they might beat the human world champion in about a decade.</p></blockquote>

<p>In fact, <a href="https://en.wikipedia.org/wiki/AlphaGo_versus_Lee_Sedol">AlphaGo achieved mastery at the end of 2016</a>.</p>

<blockquote><p>In the slightly longer term, the cost of acquiring additional hardware may be driven up as a growing portion of the world’s installed capacity is being used to run digital minds […] as investors bid up the price for existing computing infrastructure to match the return they expect from their investment</p></blockquote>

<p>As I wrote about in "<a href="https://shkspr.mobi/blog/2026/02/ai-is-a-nand-maximiser/">AI is a NAND Maximiser</a>" this too has come to pass.</p>

<p>While LLMs weren't yet invented when this was written, there's an excellent prediction about how an AI could become a pernicious psychological adversary:</p>

<blockquote><p>Caution and restraint would be required, however, for us not to ask too many such questions—and not to allow ourselves to partake of too many details of the answers given to the questions we do ask—lest we give the untrustworthy oracle opportunities to work on our psychology (by means of plausible-seeming but subtly manipulative messages). It might not take many bits of communication for an AI with the social manipulation superpower to bend us to its will.</p></blockquote>

<p>Indeed, I think it is clear that this is already happening. While I don't ascribe malice (or any other motivation) to the AIs, it is clear that their makers have a bias towards obsequiousness.</p>

<p>Other predictions are perhaps a little wide of the mark:</p>

<blockquote><p>if somebody were to succeed in creating an AI that could understand natural language as well as a human adult, they would in all likelihood also either already have succeeded in creating an AI that could do everything else that human intelligence can do, or they would be but a very short step from such a general capability.</p></blockquote>

<p>We're a few years in to the LLM revolution and, while we can quibble about what "understand" means, it's clear that natural language can now mostly be interpreted by computers. But that doesn't seem to have made the leap to <em>general</em> intelligence, nor the acceleration of art and science.</p>

<p>Others are hopeful but possibly a bit naïve:</p>

<blockquote><p>A future superintelligence occupies an epistemically superior vantage point: its beliefs are (probably, on most topics) more likely than ours to be true. We should therefore defer to the superintelligence’s opinion whenever feasible.</p></blockquote>

<p>Yes, there probably are modern concepts which have more in common with "phlogiston" than reality. But if a scientist were to time-travel back to the early 1700s, how easy would it be for them to disprove the theory? Perhaps AI ought to exist in the "trust but verify" space?</p>

<p>It is slightly over-footnoted, with no distinction between citation and diverting passage. There's also a tendency to go off in fanciful directions - the stuff on genetically enhancing humans goes on a bit too long for my tastes. Similarly, the philosophy of maximising happiness by emulating brains and virtually doping them seemed unconvincing.</p>

<p>That said, some of the thought experiments are both fun and profound - the seminal "Paperclip Maximiser" was introduced in this book.</p>

<p>There are some downsides. An over-reliance on specific individuals like Eliezer Yudkowsky crowds out some of the other important thinkers.</p>

<p>One of the suggestions made has already fallen:</p>

<blockquote><p>One valuable asset would be a donor network comprising individuals devoted to rational philanthropy, informed about existential risk, and discerning about the means of mitigation. It is especially desirable that the early-day funders be astute and altruistic, because they may have opportunities to shape the field’s culture before the usual venal interests take up position and entrench.</p></blockquote>

<p>The "Effective Altruism" movement is now hopelessly compromised and seemingly in tatters. Similarly, the cult of rationalism has taken an unfortunate turn to the bizarre and dangerous.</p>

<p>Nevertheless, it's hard to argue with the philosophy. Whether or not "superintelligence" is ever achieved, we should have systems in place <em>now</em> to protect us. It's the same as any other technology - the time to set up nuclear non-proliferation agreements and the systems to monitor them was <em>before</em> we invented them.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=69922&HTTP_REFERER=Atom" alt width="1" height="1" loading="eager">]]></content>
		
					<link rel="replies" type="text/html" href="https://shkspr.mobi/blog/2026/04/book-review-superintelligence-paths-dangers-strategies-by-nick-bostrom/#comments" thr:count="0" />
			<link rel="replies" type="application/atom+xml" href="https://shkspr.mobi/blog/2026/04/book-review-superintelligence-paths-dangers-strategies-by-nick-bostrom/feed/atom/" thr:count="0" />
			<thr:total>0</thr:total>
			</entry>
	</feed>
