<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://po-ru.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://po-ru.com/" rel="alternate" type="text/html" hreflang="en-GB" /><updated>2026-06-03T01:25:04+00:00</updated><id>https://po-ru.com/feed.xml</id><title type="html">po-ru.com</title><subtitle>Paul Battley’s blog, publishing since 2002</subtitle><entry><title type="html">Week 282: Frankenpad</title><link href="https://po-ru.com/2026/06/02/week-282-frankenpad" rel="alternate" type="text/html" title="Week 282: Frankenpad" /><published>2026-06-02T19:17:00+00:00</published><updated>2026-06-02T19:17:00+00:00</updated><id>https://po-ru.com/2026/06/02/week-282-frankenpad</id><content type="html" xml:base="https://po-ru.com/2026/06/02/week-282-frankenpad"><![CDATA[<p><strong>I attended a Prokofiev concert.</strong> Not that one, although <a href="https://www.gabrielprokofiev.com/">Gabriel Prokofiev</a>
<em>is</em> <a href="https://en.wikipedia.org/wiki/Gabriel_Prokofiev">the Russian composer’s grandson</a>. Even though I used to go to gigs at
<a href="https://iklectik.org/">Iklectik</a> regularly when they were in Waterloo, since they’ve moved into their
new venue <em>in the same building I work in</em> I hadn’t been until last week.
It doesn’t help that their website’s “What’s on” page still says that they’re
updating it; I only knew about the event from a poster.</p>

<p>The programme was some of his older work followed by a UK première of his <a href="https://www.nonclassical.co.uk/events/2026/5/13/album-launch-gabriel-prokofiev-dark-lights-live">Dark
Lights</a> album for electronics and chamber orchestra. I sat right in front of
the stage and felt completely immersed.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/gabriel-prokofiev-dark-lights.webp"><img src="https://images.po-ru.com/opt/gabriel-prokofiev-dark-lights.webp" alt="A man playing a keyboard and electronic controller at a table; behind him
is a double-bass player, mid-pizzicato-pluck, and a cellist bowing" /></a>
  
  <figcaption><p>Gabriel Prokofiev and some of the orchestra</p>
</figcaption>
  
</figure>

<p><strong>The hinge on L—’s laptop broke,</strong> though through wear and tear rather than an
accident (like when I <a href="/2024/12/03/week-204-gravitational-event#:~:text=As%20I%20swung,close%20it.">dropped mine on the floor</a>). I looked
on eBay for viable used ThinkPads and found one that was very cheap (about £80)
and in excellent condition apart from some keys that didn’t work. It was a
T470s, exactly the same as <a href="/2024/12/08/week-205-decades-happen#:~:text=I%20fixed%20my,for%20it%20to%20do.">the one I fixed</a>, which meant that I had a
spare keyboard of exactly that model.</p>

<p>In fact, not only did I have a keyboard, the half-a-ThinkPad in the loft had
a better processor, too, and I had spare RAM and an SSD that were an
improvement on what was in there, so I transplanted the motherboard across,
repasting the heatsink in the process, and installed the SSD and RAM.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/t470s-brain-transplant.webp"><img src="https://images.po-ru.com/opt/t470s-brain-transplant.webp" alt="Two laptops next to each other, with the bottom cover removed and
various electronics exposed." /></a>
  
  <figcaption><p>Performing the brain transplant</p>
</figcaption>
  
</figure>

<p><strong>The Frankensteined laptop needed an operating system,</strong> and for her needs
that has to be Windows. Windows 10 is nearly at its end of life, so I went for
Windows 11. That wasn’t straightforward, because the processor is slightly too
old to be officially supported. It works – in fact, the original SSD had
Windows 11 running on it – the installer just won’t let you install it without
a bit of a workaround.</p>

<p>However, that workaround requires a computer running Windows, and I don’t have
one of those. I first needed to run a Windows virtual machine on my computer,
so that I could run [Rufus] and build an install image with the CPU check
patched out (and, as a bonus, some of the bloat not installed by default).
[Rufus]: https://rufus.ie/en/</p>

<p>But that wasn’t easy, either, <em>because of AI</em>. Let me explain. I used
<a href="https://github.com/quickemu-project/quickemu"><code class="language-plaintext highlighter-rouge">quickget</code> and <code class="language-plaintext highlighter-rouge">quickemu</code></a> to download and set up a virtual machine.
In the past, this worked very smoothly, and lived up to its promise that</p>

<blockquote>
  <p><code class="language-plaintext highlighter-rouge">quickget</code> automatically downloads the upstream OS and creates the
configuration</p>
</blockquote>

<p>Nowadays, however, every second website has some kind of bot challenge, because
badly-behaved LLM agents are <abbr title="Distributed Denial-of-Service attack">DDoS</abbr>-ing the web, and <code class="language-plaintext highlighter-rouge">quickemu</code>
can’t fetch the <code class="language-plaintext highlighter-rouge">virtio-win.iso</code> CD image it needs at boot to give the
installer the drivers it needs to see the virtual hard disk. Unfortunately,
it doesn’t realise that it failed; all that happens is that the fragment of
HTML that it saves in an unusable <code class="language-plaintext highlighter-rouge">.iso</code> file doesn’t load properly.</p>

<p>Jobs, a habitable planet, politics, culture, the very epistemic basis of
knowledge itself, and now downloading a <code class="language-plaintext highlighter-rouge">.iso</code> file. Truly, there is nothing
that the AI boom can’t make worse.</p>

<p>I eventually sorted it out, wrote the patched installer to a USB drive, and
installed Windows 11.</p>

<p><strong>I went about cleaning up the default installation</strong> and adding programs
she wanted. The stock experience of Windows 10 and 11 is awful, full of
annoyances and distractions and unnecessary software and services, but under
all that there’s actually a perfectly usable and, actually, pretty snappy
operating system. It wouldn’t be my first choice, but it’s not bad! If only
Microsoft had any respect for their users, they could <em>ship</em> a good operating
system.</p>

<p>Windows 11 comes with <a href="https://learn.microsoft.com/en-us/powershell/scripting/overview?view=powershell-7.6">PowerShell</a> and <a href="https://learn.microsoft.com/en-us/windows/package-manager/winget/">WinGet</a>, so you can install
software – including third-party software – via a command-line tool,
rather than having to search for an installer and avoid getting scammed. You
can also <em>uninstall</em> Windows components and programs, and it turns out that
if you remove all the Bing components, and the widgets, and CoPilot, it
runs very well, and no longer needs all that processing power and RAM just
to stand still. Thus, another computer is saved from planned obsolescence.</p>

<p><strong>The Pope released his encyclical,</strong> <em><a href="https://www.vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html">Magnifica humanitas: On safeguarding the
human person in the time of artificial intelligence</a></em>. I wouldn’t normally find
myself in the position of eagerly awaiting a papal encyclical, and I don’t
think that you’ve entirely gotta hand it to the Catholic Church, and even though
I’m sick of hearing about AI and even sicker of being obliged to engage with
its output when other people employ the infernal machines to produce
software, I am interested in what people who actually read, and write, and
think deeply about these things have to say.</p>

<p>Unfortunately, he did not call for a <a href="https://dune.fandom.com/wiki/Butlerian_Jihad">Butlerian <del>jihad</del></a> <em>crusade</em>
against the thinking machines. Alas.</p>

<p>It’s very long, and I’ve only given it a quick first reading so far, but
there’s a lot of thought on the relationship of humanity to technology, and the
inability of machines to make moral or artistic choices, and the antagonism of
capitalism and war to human dignity and the planet. I would characterise it,
more than anything else, as a very <em>humanistic</em> document. It’s very quotable:</p>

<blockquote>
  <p>If a system is designed or used in a way that treats some lives as less
worthy, or excludes them without the possibility of appeal, then it is not
merely a tool “to be used well,” since it has already introduced criteria
that contradict the inalienable dignity of the human person. For this reason,
ethical discernment cannot be limited to asking whether we are using a system
for good or bad purposes; it must also examine how that system is designed
and what vision of the human person and society is embedded in the data and
models that guide it.</p>
</blockquote>

<p>Whether those of his flock in positions of power and influence (JD Vance or Tony
Blair, for example) will read and act on it, I don’t know. I suspect not.</p>

<p><strong>We now have a <a href="https://southwarknews.co.uk/featured/new-council-leaders-confirmed-after-green-party-and-lib-dem-form-coalition-pact/">Green Party-led coalition</a></strong> running Southwark Council as
a result of the local elections. There was an extraordinary general meeting of
Southwark Green Party earlier in the week to vote on the proposed coalition,
which we both attended remotely. There are dangers to any coalition, but
they’re pretty normal in countries with less absurd voting systems, and I think
if you have the opportunity to effect political change you should take it. And
this means I personally know some of the people running the council after
knocking doors and delivering leaflets with them.</p>

<p>Our <a href="https://en.wikipedia.org/wiki/Neil_Coyle">Labour MP</a> is <a href="https://nitter.net/coyleneil/status/2060039203665199477">taking it extremely normally</a>:</p>

<blockquote>
  <p>This was, of course, in your former role before you jumped ship with other
Marxists no longer welcome in Labour. I suspect your impact will be just as
grim in your new role, but wanted to flag up some concerns at the outset.</p>
</blockquote>

<blockquote>
  <p>Despite this atrocity in the community I serve, you shamefully ignored the
police advice on counter-terrorism measures on Borough High Street —
prioritising a cycle lane instead.</p>
</blockquote>

<p>(I have no idea how a cycle lane is supposed to hamper counter-terrorism.) But
there’s a <a href="https://novaramedia.com/2025/07/17/how-labour-rigged-an-election-to-block-a-leftwinger-from-leading-a-council/">backstory</a> to his antipathy, and Coyle <a href="https://www.parliament.uk/business/news/2023/march-2023/independent-expert-panel-recommends-suspending-neil-coyle-mp-for-five-days-for-breaching-parliaments-bullying-and-harassment-policy/">has</a>
<a href="https://www.scotsman.com/news/politics/suspended-labour-mp-neil-coyle-had-sexual-harassment-complaint-upheld-over-incident-at-party-conference-4049293">form</a> for behaving badly.</p>

<p>James McAsh’s <a href="https://nitter.net/mcash/status/2060348188909768787#m">reply</a> was perfect:</p>

<blockquote>
  <p>I will not attempt to respond to the many factual inaccuracies in your
letter, in which even my name is misspelled. Instead, I will liaise with the
Chief Executive to find a time for the three of us to meet and discuss any
issues affecting your constituents.</p>
</blockquote>

<p><strong>I’m glad it’s a bit cooler.</strong> I can’t really cope with the heat. On Saturday,
I made it about halfway through preparing my bike to cycle to Sanshinkai
practice before I realised that I was already so overheated and agitated that
there was no chance of achieving anything. On such a hot day, there’s no good
way to get there. Cycling involves hills. (I could hire an electric bike, but
without a luggage rack I can’t take my sanshin.) Buses aren’t air-conditioned,
and the Tube is whatever the opposite of air-conditioned is. The Overground and
Elizabeth line are cool, but there’s too much walking at the other end for that
kind of weather.</p>

<p><strong>Some links:</strong></p>

<ul>
  <li><a href="https://esposito.ralsina.me/">ESP-Osito</a>.
This is the kind of software development that inspires and excites me. “You
can buy a ‘Cheap Yellow Display’ for $10. That is a dual core CPU,
gigabytes of storage, a full color touchscreen and more. If we treat it
like a real computer, that is a $10 computer. In our modern world, this is
hundreds of times slower than your phone. But … it is hundreds of times
faster than a Palm Pilot. And on palm pilot apps started instantly. And the
device turned on/off in under a second. Have you seen how long your good
pocket computer takes to TURN OFF? So, let’s take something cheap and make
it good.”</li>
  <li><a href="https://writewithharper.com/">Harper: The Private Grammar Checker</a>:
Works locally and doesn’t use an LLM.</li>
  <li><a href="https://handorf.org/thoughts/2026/05/25/blog.html">Unintended Consequences</a>.
“As you read this, please think about the echoing thought of ‘this is what
we are burning the planet for.’”</li>
  <li><a href="https://www.amnesty.org/en/documents/pol40/0996/2026/en/">Unlawful by design: Exposing the human rights costs of generative AI</a>.
From Amnesty International: “This briefing examines how standalone
generative AI systems, based on unlawful web scraping, are in conflict with
international human rights law (IHRL) and standards through their design,
development and deployment. While these technologies promise sophisticated
automation and efficiency, they rely on data collection and model training
practices that abuse privacy rights, enable discrimination, and threaten
freedom of expression and thought.”</li>
  <li><a href="https://nesbitt.io/2026/05/05/package-manager-threat-models.html">Package Manager Threat Models</a>.</li>
  <li><a href="https://taxpolicy.org.uk/2026/05/28/90-uk-taxes/">The UK has 90 taxes. Here they all are</a>.
An interactive visualisation.</li>
  <li><a href="https://lawyerwatch.wordpress.com/2026/05/28/pinsent-masons-la-ai-mvb-and-nvb/">Pinsent Masons: LA AI, MVB and NVB</a>.
A law firm gets in trouble. “Readers of AI hallucination cases have been to
this rodeo before: rely on hallucinations, get found out, create minimal
viable bullshit (MVB) to try and dig oneself out of the first hole, find
the second hole is much bigger and deeper because minimally viable BS is in
fact non-viable (NVB).”</li>
  <li><a href="https://spoon-tamago.com/iconic-shibuya-hands-to-close-november/">End of an Era: Iconic Shibuya Hands to Close After 48 Years</a> 
I think I’ve visited this shop every time I’ve been in Tokyo. It’s a warren
of three seven- and eight-storey buildings with different floor heights,
linked by a staircase, full of all kinds of hobby paraphernalia.</li>
  <li><a href="https://whatchord.earthmanmuons.com/articles/under-the-hood">Under the Hood: Building a Real-Time Chord Recognizer</a>.
“Piano players often leave out notes that a dictionary entry might expect.
Extended chords add notes that no fixed dictionary entry anticipates. […]
What you actually need is a scoring model.”</li>
  <li><a href="https://tuhinjubcse.github.io/granta-ngram-cartography.html?v=2">The Grove Remembers</a>.
The now-infamous AI-written Granta prize-winning short story, analysed.
“Every overlapping n-gram in the story, drawn against a web-scale corpus —
so you can see which phrases the writer invented, and which ones the world
had already said.”</li>
  <li><a href="https://tuhinchakrabarty.substack.com/p/ai-slop-grantagate-and-bad-writing">AI-slop, GrantaGate and Bad Writing</a>.
It writes like that because it’s regurgitating sequences from bad fan
fiction.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[I attended a Prokofiev concert. Not that one, although Gabriel Prokofiev is the Russian composer’s grandson. Even though I used to go to gigs at Iklectik regularly when they were in Waterloo, since they’ve moved into their new venue in the same building I work in I hadn’t been until last week. It doesn’t help that their website’s “What’s on” page still says that they’re updating it; I only knew about the event from a poster.]]></summary></entry><entry><title type="html">Week 281: Melting</title><link href="https://po-ru.com/2026/05/25/week-281-melting" rel="alternate" type="text/html" title="Week 281: Melting" /><published>2026-05-25T16:48:00+00:00</published><updated>2026-05-25T16:48:00+00:00</updated><id>https://po-ru.com/2026/05/25/week-281-melting</id><content type="html" xml:base="https://po-ru.com/2026/05/25/week-281-melting"><![CDATA[<p><strong>Hello from London on a 34 C bank holiday Monday.</strong> I’ve lived in
hotter places; I’ve even lived in places that were both hotter and more humid;
yet the UK remains one of the worst places to be in a heatwave. There’s little
air conditioning, and British houses lack the thermal mass to regulate the
temperature downwards. All they can do is keep the sun off, at best.</p>

<p><strong>Friday was also hot,</strong> and I decided to spend it walking in the countryside.
I followed <a href="https://www.walkingclub.org.uk/walk/harlington-to-flitwick/">Saturday Walkers Club’s Harlington to Flitwick</a> route, cutting
off a couple of kilometres between Priestly Farm and Flitwick at the end to get
back home at a reasonable time. I don’t know the exact distance, but it was at
least 20 km.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/daisies-harlington.webp"><img src="https://images.po-ru.com/opt/daisies-harlington.webp" alt="Large daisies in a grassy field on a sunny day" /></a>
  
  <figcaption><p>Huge daisies in a field somewhere near Harlington</p>
</figcaption>
  
</figure>

<p>I saw plenty of wildlife: a deer (possibly a muntjac); a cock pheasant; a
couple of red kites; some kind of large raptor being harried by a crow until
it flew away.</p>

<p>It was hot and tiring, but a good way to spend a day off.</p>

<p><strong>We did half of our Sanshinkai practice</strong> in the park on Saturday. I
appreciated the cool breeze, but I think the dancers appreciated it more.
A few curious passers by came to watch and ask questions.</p>

<p><strong>I restored an old film camera.</strong> It’s an <a href="https://photothinking.com/20171021olympus-pen-s-the-never-ending-story/">Olympus Pen S</a>, a beautiful
tiny manual half-frame camera (i.e. it takes portrait photos that are half the
width of a normal 35mm frame) designed by <a href="https://en.wikipedia.org/wiki/Yoshihisa_Maitani">Yoshihisa Maitani</a> in the
late 1950s. I have the version with a 30 mm f/2.8 lens.
I picked it up cheap, and as far as I can tell there’s nothing
wrong with it beyond some degraded light seals.</p>

<p>I measured and cut new seals and installed them. As to how well it worked, I’ll
have to wait until I’ve finished off the roll of film and had it developed,
and even the 72-frame roll of film (two frames per
normal frame) and had it developed. If they’re good, I’ll post the SVG
templates for the benefit of others.</p>

<p><strong>Someone from Openreach came</strong> to carry out the initial stages of fibre
installation. They couldn’t get the cable to the front of our house, though,
because the duct is buried under two layers of paving slabs. It seems that
whichever cowboys installed the ugly paving in front of our house just laid
them directly on a set of very similar ugly paving.</p>

<p>The suction device he used to lift the paving – like a reverse hovercraft that
stuck itself onto the slab and provided a grab handle –
was impressive, though.</p>

<p>They’re going to come back and install a box in the pavement in front of our
house, but we still have to figure out how to get the cable across.
Ideally, we’d get rid of the slabs entirely, but I don’t think that will happen
in time, and if we don’t we’ll end up with an exposed cable run across the top
that makes it harder to sort out the front garden in the future.</p>

<p><strong>That’s all for now:</strong> it’s too hot!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Hello from London on a 34 C bank holiday Monday. I’ve lived in hotter places; I’ve even lived in places that were both hotter and more humid; yet the UK remains one of the worst places to be in a heatwave. There’s little air conditioning, and British houses lack the thermal mass to regulate the temperature downwards. All they can do is keep the sun off, at best.]]></summary></entry><entry><title type="html">Git push directly to another workstation</title><link href="https://po-ru.com/2026/05/21/git-push-directly-to-another-workstation" rel="alternate" type="text/html" title="Git push directly to another workstation" /><published>2026-05-21T20:15:00+00:00</published><updated>2026-05-21T20:15:00+00:00</updated><id>https://po-ru.com/2026/05/21/git-push-directly-to-another-workstation</id><content type="html" xml:base="https://po-ru.com/2026/05/21/git-push-directly-to-another-workstation"><![CDATA[<p>You don’t need GitHub to work with <a href="https://git-scm.com/">git</a> on multiple computers, and you don’t
even need a git remote set up to do it.</p>

<p>Sometimes I’m working on some code that is incomplete, or is speculative, or
there’s another reason that I don’t want to push it to the remote branch
yet, but I need to swap from my desktop to my laptop or <em>vice versa</em>.</p>

<p>Git is a <em>distributed</em> version control system, but I think people often forget
what that implies. A git repository can be as simple as a directory available
via <code class="language-plaintext highlighter-rouge">ssh</code>, which means that <em>your other computer is already a git repository</em>
as long as you can <code class="language-plaintext highlighter-rouge">ssh</code> to it.</p>

<!--8<-->

<p>Furthermore, you don’t have to go through the ceremony of setting your other
computer up as a named git remote; if you can <code class="language-plaintext highlighter-rouge">ssh</code> to it, you can access it
directly using a properly-constructed URL:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git push ssh://mylaptop.local/~/path/to/repo
</code></pre></div></div>

<p>You can do this for <code class="language-plaintext highlighter-rouge">pull</code>, <code class="language-plaintext highlighter-rouge">push</code>, <code class="language-plaintext highlighter-rouge">fetch</code>, and any other command where you’d
normally use a named remote.</p>

<p>There are some caveats:</p>

<ol>
  <li>The remote directory has to have a git repository already; if not, you’ll
have to <code class="language-plaintext highlighter-rouge">ssh</code> in and create one with <code class="language-plaintext highlighter-rouge">git init path/to/repo</code> (it will even
create the intervening directories for you).</li>
  <li>You can’t (by default) push to the currently active branch on the remote;
create or use a different branch instead.</li>
</ol>

<p>But most of the time, I’ve already been working on the same codebase on the
other machine. I have something that isn’t quite ready yet, so I make a
work-in-progress commit on a new branch, send it across, and pick up where I
left off.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[You don’t need GitHub to work with git on multiple computers, and you don’t even need a git remote set up to do it. Sometimes I’m working on some code that is incomplete, or is speculative, or there’s another reason that I don’t want to push it to the remote branch yet, but I need to swap from my desktop to my laptop or vice versa. Git is a distributed version control system, but I think people often forget what that implies. A git repository can be as simple as a directory available via ssh, which means that your other computer is already a git repository as long as you can ssh to it.]]></summary></entry><entry><title type="html">Week 280: Six days’ notice</title><link href="https://po-ru.com/2026/05/20/week-280-six-days-notice" rel="alternate" type="text/html" title="Week 280: Six days’ notice" /><published>2026-05-20T23:24:00+00:00</published><updated>2026-05-20T23:24:00+00:00</updated><id>https://po-ru.com/2026/05/20/week-280-six-days-notice</id><content type="html" xml:base="https://po-ru.com/2026/05/20/week-280-six-days-notice"><![CDATA[<p><strong>Amazon sent me an email</strong> on 14 May to tell me that my old Kindle would be
completely unsupported “Starting May 20, 2026” – i.e. six days later.</p>

<p>I knew that <em>some</em> Kindles were going to be no longer supported, but I didn’t
know mine was one of them, because their generation-based naming scheme is
hard to keep up with, especially when it isn’t marked on the device itself.</p>

<p>It’s not just that you can’t download new books, it’s a complete cessation of
service. If you reset the device, it will never work again.</p>

<blockquote>
  <p>You can continue to read books already downloaded on these devices, but you
will not be able to purchase, borrow, or download additional books on them
after that date.</p>
</blockquote>

<p>That’s bearable.</p>

<blockquote>
  <p>If you deregister or factory reset these devices, you will not be able to re-
register or use these devices in any way.</p>
</blockquote>

<p>What the hell, man?</p>

<p>I have decrypted and backed up every Kindle book L— and I ever bought, and I
don’t think I’ll be inclined to pay them for any more ebooks, even though I
also have a newer model that is still supported, and I don’t think I’d
buy another Kindle reader after this, not least because you can borrow
books from the library and read them on a Kobo, but not on a Kindle.</p>

<p>I prefer reading paper books, but an ereader is useful on holiday when I want
to minimise weight. For that, there’s the catalogue of <a href="https://standardebooks.org/">Standard
Ebooks</a> to work through.</p>

<p><strong>I’ve had enough of typing passwords</strong> and I was finally irritated enough to
<a href="/2026/05/12/using-a-u2f-key-instead-of-a-password-on-linux">find the solution</a>. I can now unlock my computers with a PIN and a hardware
token and every day is slightly less inconvenient.</p>

<p><strong>I stayed away from central London</strong> on Saturday out of caution after seeing
the aggression around <a href="/2025/09/16/week-245-infinite-variations#:~:text=Hundreds%20of%20thousands,terrified">last year’s racist jamboree</a>, but it seems like
it was much smaller than last time. A rare example of a positive change in the
current political climate.</p>

<p><strong>Quite a few links</strong> this week:</p>

<ul>
  <li><a href="https://www.france24.com/en/french-researcher-cracks-4-000-year-old-script-from-iran">French researcher cracks 4,000-year-old Elamite script from Iran</a>.
The key that unlocked it was a repeated name.</li>
  <li><a href="https://bigthink.com/strange-maps/irish-language-decline/">The Irish language is having a moment — and running out of time</a>.</li>
  <li><a href="https://github.com/angelos-p/llm-from-scratch">Train Your Own LLM From Scratch</a>: 
“A hands-on workshop where you write every piece of a GPT training pipeline
yourself, understanding what each component does and why.”</li>
  <li><a href="https://adamtownsend.com/heighthunt/">Height hunt</a>
is “a quest to find and visit every possible height restriction sign in the
UK.” They’re more complicated than you might think. This kind of proper
nerdy stuff is the internet at its best.</li>
  <li><a href="https://dafyddvaughan.uk/blog/2026/welsh-names-and-places-deserve-basic-respect/">Welsh names and places deserve basic respect</a>.
Dw i’n cytuno’n llwyr.</li>
  <li><a href="https://github.com/uk-gov-mirror">[Unofficial] UK Government Mirror</a>:
“An unofficial mirror of every UK Government Github repository, to preserve
repositories that are removed or made private. Updated at least weekly.”</li>
  <li><a href="https://virtualosmuseum.org/">The Virtual OS Museum</a>.
“This is a virtual museum of [over 570] operating systems (and standalone
applications) running under emulation, implemented as a Linux VM for QEMU,
VirtualBox, or UTM.”</li>
  <li><a href="https://github.com/DOS-History/Paterson-Listings">Paterson Listings</a>:
“Tim Paterson’s DOS listings, containing source code of 86-DOS 1.00 kernel,
various PC-DOS 1.00 pre-release kernels and utilities, and the Microsoft
BASIC-86 Compiler runtime library.”</li>
  <li><a href="https://www.bbc.co.uk/news/articles/c78k405j8pdo">Snack giant Calbee switches to black and white packaging as Iran war hits ink supplies</a>.
And gets a lot of free publicity, which might be the real goal.</li>
  <li><a href="https://imaginaryinstruments.org/">Museum of Imaginary Musical Instruments</a>.</li>
  <li><a href="https://www.theregister.com/ai-ml/2026/05/14/ontario-auditors-find-doctors-ai-note-takers-routinely-blow-basic-facts/5240771">Ontario auditors find doctors’ AI note takers routinely blow basic facts</a>.
“Nine out of 20 AI systems reportedly ‘fabricated information and made
suggestions to patients’ treatment plans” that weren’t discussed in the
recordings.’”</li>
  <li><a href="https://thenewstack.io/php-web-skills-hiring-age/">Who will maintain the web when PHP’s veterans retire?</a> 
PHP is the asbestos of web development.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[Amazon sent me an email on 14 May to tell me that my old Kindle would be completely unsupported “Starting May 20, 2026” – i.e. six days later.]]></summary></entry><entry><title type="html">Using a U2F key instead of a password on Linux</title><link href="https://po-ru.com/2026/05/12/using-a-u2f-key-instead-of-a-password-on-linux" rel="alternate" type="text/html" title="Using a U2F key instead of a password on Linux" /><published>2026-05-12T11:27:00+00:00</published><updated>2026-05-12T11:27:00+00:00</updated><id>https://po-ru.com/2026/05/12/using-a-u2f-key-instead-of-a-password-on-linux</id><content type="html" xml:base="https://po-ru.com/2026/05/12/using-a-u2f-key-instead-of-a-password-on-linux"><![CDATA[<p>This is an update and expansion on something I wrote a few years ago about
using my SoloKey U2F USB key for <a href="/2019/06/22/using-u2f-for-passwordless-sudo">passwordless <code class="language-plaintext highlighter-rouge">sudo</code></a>.</p>

<p>Recently, I ended up typing my password into a Slack window while trying to
unlock my computer. By the time I’d realised that it wasn’t locked but had
merely blanked the screen, my muscle memory was far ahead of my brain. As I
went through the hassle of updating my password and brain, I couldn’t help
wondering whether there was a better way.</p>

<p>The solution I’ve found lets me unlock my computer with a short PIN and
my U2F key, and to use just the key for <code class="language-plaintext highlighter-rouge">sudo</code>.</p>

<p>These instructions are for Debian with Gnome; they will probably work on
Ubuntu, and for other distributions and desktop environments you might have to
make some changes.</p>

<h3 id="setting-up-the-solokey">Setting up the SoloKey</h3>

<p>First, you need to set the PIN on your U2F key. I have an original <a href="https://solokeys.eu">SoloKey</a>
(two of them, in fact), so I need to use the <code class="language-plaintext highlighter-rouge">solo1</code> command. This is afflicted
by bitrot, but if you have Python installed you can work around the problem:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pip <span class="nb">install </span>pipx
pipx <span class="nb">install</span> <span class="nt">--preinstall</span> <span class="s2">"fido2==0.9.3"</span> solo1
</code></pre></div></div>

<p>This installs <code class="language-plaintext highlighter-rouge">solo1</code> in its own Python virtual environment. You can now use
this to set the PIN:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>~/.local/bin/solo1 key set-pin
</code></pre></div></div>

<p>Obviously, choose a PIN you won’t forget, and/or make a note somewhere.</p>

<p>If you have a different type of U2F key, you’ll have to use their tools for
setting the PIN; the rest of the process is the same.</p>

<h3 id="configuring-pam">Configuring PAM</h3>

<p>Now, install the relevant <a href="http://www.linux-pam.org/">PAM</a> library and tools:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install libpam-u2f pamu2fcfg
</code></pre></div></div>

<p>Next, you need to enroll your key. Plug it in and run:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pamu2fcfg | <span class="nb">sudo tee</span> /etc/u2f_mappings
</code></pre></div></div>

<p>You’ll be asked to enter your PIN, then press the button. You can enroll
additional keys, but note the additional parameters:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>pamu2fcfg <span class="nt">-n</span> | <span class="nb">sudo tee</span> <span class="nt">-a</span> /etc/u2f_mappings
</code></pre></div></div>

<p>For a multi-user system with multiple key holders you’ll have to do something
a bit more complicated so that you end up with one line per user.</p>

<p>It’s a good idea to restrict permissions on the mappings file:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo chmod </span>600 /etc/u2f_mappings
</code></pre></div></div>

<h3 id="authenticating-sudo">Authenticating sudo</h3>

<p>To authenticate <code class="language-plaintext highlighter-rouge">sudo</code> by clicking on the key, enter the following line
into <code class="language-plaintext highlighter-rouge">/etc/pam.d/sudo</code> <strong>above</strong> <code class="language-plaintext highlighter-rouge">@include common-auth</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>auth sufficient pam_u2f.so authfile=/etc/u2f_mappings cue
</code></pre></div></div>

<p>Putting this before <code class="language-plaintext highlighter-rouge">common-auth</code> means that you won’t be asked for a password
if U2F authentication succeeds. Using <code class="language-plaintext highlighter-rouge">sufficient</code> (rather than <code class="language-plaintext highlighter-rouge">required</code>)
allows it to fall back to password authentication if you don’t have your key to
hand.</p>

<p>Save the file <strong>but don’t close the editor yet.</strong> Open a new terminal, and test
that it’s working:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo echo </span>OK
</code></pre></div></div>

<p>You should see something like <code class="language-plaintext highlighter-rouge">Please touch the FIDO authenticator</code> followed by
<code class="language-plaintext highlighter-rouge">OK</code> once you have done so.</p>

<h3 id="unlocking-the-computer">Unlocking the computer</h3>

<p>The procedure for unlocking is similar. This time, the relevant file is
<code class="language-plaintext highlighter-rouge">/etc/pam.d/gdm-password</code>, and once again we add a line above
<code class="language-plaintext highlighter-rouge">@include common-auth</code>:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>auth sufficient pam_u2f.so authfile=/etc/u2f_mappings cue pinverification=1
</code></pre></div></div>

<p>The addition of <code class="language-plaintext highlighter-rouge">pinverification=1</code> tells the system to prompt for the PIN in
addition to asking you to press the button. This prevents someone who gains
physical access to the key from authenticating unless they also know the PIN.
You can add the same constraint to <code class="language-plaintext highlighter-rouge">sudo</code> if you wish, depending on your threat
model.</p>

<p>Thanks to <a href="https://github.com/solokeys/solo1-cli/issues/151#issuecomment-2406661867">Jookia</a>, <a href="https://karubits.com/posts/Debian-Passwordless-Authentication/">Karubits</a> and <a href="https://support.yubico.com/s/article/Ubuntu-Linux-login-guide-U2F">Yubico</a> for helping me fill in some of the blanks.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[This is an update and expansion on something I wrote a few years ago about using my SoloKey U2F USB key for passwordless sudo.]]></summary></entry><entry><title type="html">Week 279: Two out of three</title><link href="https://po-ru.com/2026/05/11/week-279-two-out-of-three" rel="alternate" type="text/html" title="Week 279: Two out of three" /><published>2026-05-11T23:20:00+00:00</published><updated>2026-05-11T23:20:00+00:00</updated><id>https://po-ru.com/2026/05/11/week-279-two-out-of-three</id><content type="html" xml:base="https://po-ru.com/2026/05/11/week-279-two-out-of-three"><![CDATA[<p><strong>It was a short work week</strong> thanks to the bank holiday on Monday. I spent
a few hours on Monday typesetting various pieces of music; I feel like I
understand <a href="https://lilypond.org/">Lilypond</a> better and better.</p>

<p><strong>I’ve been busy with the local elections</strong> recently, and especially on
election day itself on Thursday. I woke just after 6 and spent a few hours
delivering election day leaflets to identified Green supporters to encourage
them to get out and vote.</p>

<p>After work, L— and I spent an hour telling outside a polling station –
that’s the thankless task of standing outside in the cold asking people if you
can check off their poll number so that they don’t end up getting disturbed
later on. After that, we went to knock on the doors of people to encourage
them to vote before polls closed at 10.</p>

<p>All that is a lot of work, and walking, and doing things that I really don’t
particularly enjoy, but the past few months paid off: in the target ward
(Rotherhithe) we got two out of three Green candidates elected.</p>

<p>Because the effort was focused on wards identified as winnable, in our own ward
of Surrey Docks there was no activity and only paper candidates. In the final
count, however, the Green candidate who came fourth was only 27 votes away from
third place. It’s a shame, but it bodes well for the general election.</p>

<p>For Greens in Southwark it was a good result: Labour no longer have control
(down from 52 out of 63 councillors at the last vote) and the council is now
split: 29 Labour; 22 Green; 12 Liberal Democrat.</p>

<p>I completely wrecked my voice shouting over the din at the celebrations on
Friday night; I was still a bit croaky on Sunday.</p>

<p><strong>We dropped into the Surrey Docks Farm Spring Fair</strong> on Saturday, where a
friend was singing with the <a href="https://londonseashantycollective.com/">London Sea Shanty Collective</a>. That was
a lot of fun to listen to.</p>

<p>I left after their first performance with the intention of cycling
to Sanshinkai practice, but a busy week, not enough sleep, and a late night on
Friday caught up with me and I took a 1½-hour nap instead.</p>

<p><strong>I’m going to <a href="https://www.emfcamp.org/">Electromagnetic Field</a></strong> (aka EMF Camp) 2026 in July. I
went for the first time <a href="/2024/06/05/electromagnetic-field-2024">in 2024</a>, and loved it. This year, however,
the tickets sold out within seconds, before I could even open the drop-down
menu and click “buy”, and I resigned myself to missing it unless I managed to
snag a last-minute ticket again. But I also submitted a couple of talk
proposals. One was accepted, so I was able to buy a ticket without needing
gamer reflexes, at a bit of a discount.</p>

<p>It’s a talk proposal that I first sketched out a few years ago, and it’s been
percolating in my mind for a long time. I’m looking forward to making it real
at last.</p>

<p><strong>I’ve heard far too much</strong> of that excessively auto-tuned new song by the
Strokes on the radio this week. I hope it drops out of 6 Music’s playlist soon.</p>

<p><strong>Links:</strong></p>

<ul>
  <li><a href="https://github.com/fliperama86/pico_hdmi">PicoHDMI</a> 
“leverages the RP2350’s dedicated HSTX (High-Speed Transmit) peripheral
with hardware TMDS encoding. No bit-banging, no overclocking required: just
near-zero CPU overhead for video output.”</li>
  <li><a href="https://www.agwa.name/blog/post/fastcgi_is_the_better_protocol_for_reverse_proxies">FastCGI: 30 Years Old and Still the Better Protocol for Reverse Proxies</a>.</li>
  <li><a href="https://arstechnica.com/ai/2026/05/influential-study-touting-chatgpt-in-education-retracted-over-red-flags/">Influential study touting ChatGPT in education retracted over red flags</a>.
But after a year and 504 citations, much damage is already done. “It really
seemed like a paper that should not have been published in the first
place.”</li>
  <li><a href="https://github.com/shorepine/amy">AMY</a> 
is a high-performance fixed-point synth library, written in C, that runs on
almost anything and implements Juno-style analogue, DX7-style FM, and
wavetable synthesis as well as sample playback.</li>
  <li><a href="https://www.techdirt.com/2026/04/30/palantir-workers-are-finally-noticing-the-skulls-on-their-caps/">Palantir Workers Are Finally Noticing The Skulls On Their Caps</a>.</li>
  <li><a href="https://simonomi.dev/blog/color-code-your-bytes/">Your hex editor should color-code bytes</a>.
Makes a convincing case.</li>
  <li><a href="https://tante.cc/2026/04/21/ai-as-a-fascist-artifact/">AI as a Fascist Artifact</a>.</li>
  <li><a href="https://sdg2advocacyhub.org/beans-is-how/">Beans is How</a>:
“A campaign to double global bean consumption by 2028”.</li>
  <li><a href="https://www.newscientist.com/article/2525315-backlash-builds-over-nhs-plan-to-hide-source-code-from-ai-hacking-risk/">Mythos: Backlash builds over NHS plan to hide source code from AI hacking risk</a>.
“NHS England is pulling its open-source software from the internet because
of fears around computer-hacking AI models like Mythos. Opposition is
growing among those who say the move is bad for transparency and
efficiency, and will also do nothing to improve security”.</li>
  <li><a href="https://keepthingsopen.com/">Keep things open: it makes things better</a>.
An open letter asking NHS England to keep its code open.</li>
  <li><a href="https://www.tedcromwell.com/blog/that-pending-paypal-charge-email-is-a-scam-even-though-it-really-came-from-paypa">That “Pending PayPal Charge” Email Is a Scam — Even Though It Really Came From PayPal</a>.
“PayPal lets anyone send small amounts of money to anyone else, and that
PayPal will dutifully email the recipient a notification. […] PayPal’s
system then automatically generates and sends you a real, legitimate,
fully-authenticated email confirming the transaction. Here’s the catch: the
email’s subject line is whatever the scammer typed when they set up the
payout. PayPal doesn’t sanitize it.” Eek.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[It was a short work week thanks to the bank holiday on Monday. I spent a few hours on Monday typesetting various pieces of music; I feel like I understand Lilypond better and better.]]></summary></entry><entry><title type="html">Week 278: Jack in the Green</title><link href="https://po-ru.com/2026/05/05/week-278-jack-in-the-green" rel="alternate" type="text/html" title="Week 278: Jack in the Green" /><published>2026-05-05T12:58:00+00:00</published><updated>2026-05-05T12:58:00+00:00</updated><id>https://po-ru.com/2026/05/05/week-278-jack-in-the-green</id><content type="html" xml:base="https://po-ru.com/2026/05/05/week-278-jack-in-the-green"><![CDATA[<p><strong>May Day fell on Friday</strong> this year, and what better way is there to celebrate
workers than by not doing any work? It was hot and sunny, so I slathered on
some sun cream, put on a hat, and went down to Deptford to catch the <a href="https://en.wikipedia.org/wiki/Jack_in_the_Green">Jack in
the Green</a> procession.</p>

<p>I bumped into a few people I knew, and chatted as I followed the troupe for
the first hour.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/jack-in-the-green-2026-1.webp"><img src="https://images.po-ru.com/opt/jack-in-the-green-2026-1.webp" alt="A crowd of people, many in headgear festooned with plants. In the centre
is the Jack in the Green: a person in a huge frame covered in leaves and
flowers" /></a>
  
  <figcaption><p>The Jack in the Green</p>
</figcaption>
  
</figure>

<p>If you’re wondering about the huge (mock) cleavers, that’s the <a href="https://www.instagram.com/deptford_gutgirls/">Deptford Gut
Girls</a>, who celebrate <a href="https://www.instagram.com/p/C6f3lqgIMwX/">the women who worked in the Foreign Meat
Market</a> in Deptford in the late 19th century:</p>

<blockquote>
  <p>One of the most unpleasant jobs was cleaning cattle and sheep intestines,
which were used for making sausage skins (and, according to a later source,
condoms). Originally men’s work, in about 1891 they went on strike for more
pay: management responded by assigning the work to women. The wages were
still much higher than most working class women and ten times higher than
‘going into service, which is what they were eventually forced to do.</p>
</blockquote>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/jack-in-the-green-2026-2.webp"><img src="https://images.po-ru.com/opt/jack-in-the-green-2026-2.webp" alt="Drummers in a variety of festive attire: one wears an orange boiler suit
and white face paint; others have hats with leaves. The Jack in the Green is
off to the left hand side" /></a>
  
  <figcaption><p>Drummers</p>
</figcaption>
  
</figure>

<p>As well as drummers, there were pipers of various kinds, and people playing
guitar, banjo, concertinas, accordions, and even a hurdy gurdy. Somehow, they
all managed to play together, and it sounded much more cohesive than you might
expect from such a motley assortment.</p>

<p>I peeled off at St Nicholas’ church (where <a href="https://www.findagrave.com/memorial/8017/christopher-marlowe">Christopher Marlowe is
buried</a>) and walked down the high street for lunch at the <a href="https://waitingroomse8.co.uk/">Waiting
Room</a>.</p>

<p><strong>When I set up my new phone</strong> a few weeks ago, I configured <a href="https://syncthing.net/">Syncthing</a> to
upload new photos, but without downloading the old ones to my new phone. At
least, that was my intention, but at some point it had synchronised the other
way and deleted the old photos everywhere.</p>

<p>I had set it to keep backups for a week, but more than a week had elapsed by
the time I realised.</p>

<p>This still wouldn’t be a problem except that I hadn’t got round to sorting and
importing pictures into my photo management program for a few months.</p>

<p>After a bit of panic, I realised that the photos were still on my old phone,
which was switched off, so I just walked down the street until I was out
of range of our home network, switched the phone on, and set it to aeroplane
mode. Back at home, I plugged it in and pulled all the photos off via USB.</p>

<p>And then I remembered that I had taken a backup of that phone just before I
bought the new one, so it was never going to be as catastrophic as it
seemed in the moment.</p>

<p>Nonetheless, it’s a reminder: synchronisation alone is not a backup strategy.</p>

<p>Unfortunately, thanks to “AI” companies having bought up all disks (as well as
memory and graphics cards) and made them unaffordable, backups are no longer
quite so easy. Yet another thing ruined by LLMs!</p>

<p><strong>I spent a quarter of an hour</strong> running around the house on Friday night
trying to work out where I’d put my music stand. I searched high and low, and
even in the loft, but it was nowhere to be seen.</p>

<p>It was in the middle of the living room with a score open on it. You’d think
that would be obvious, but I was oblivious: I was looking for a small black
folded package, not the deployed stand. L— saw the stand, but assumed I was
looking for a different one, because surely I couldn’t fail to see
something so conspicuous. No, really, I could.</p>

<p><strong>The Sanshinkai performance at Yokimono Market</strong> on Saturday went well. We
ended up playing both sets an hour later than scheduled because, although we
had sent detailed instructions to the organisers, no one had communicated the
staging requirements to the people responsible on the ground.</p>

<p>Whether in Dalston or Stratford, Yokimono always seems to be the most chaotic
of all the events we play, but it’s popular. Both sets went well, and we
finished before the rain started; we were covered, but the audience
wasn’t, and it would be a downer if everyone ran for shelter in the middle
of a performance.</p>

<p>Although it rained in the early evening, the weather was lovely for most of
the day. Between sets, I took advantage of the proximity of Westfield to escape
the captive pricing and massive queues, picked up a marinara pizza from
Franco Manca – still good value, even if the price has now broken above £7 –
and ate it on the river bank under a weeping willow. It would have been even
better if I’d chosen a spot without ants.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/ucl-building-stratford.webp"><img src="https://images.po-ru.com/opt/ucl-building-stratford.webp" alt="A vast brutalist edifice stands alone. Its façade is made of dozens of
narrow concrete columns" /></a>
  
  <figcaption><p>The UCL East Marshgate building at Stratford looks like it would
have been rejected as a bit too imposing for Albert Speer’s Berlin</p>
</figcaption>
  
</figure>

<p><strong>I had a bit of success</strong> in speeding up a slow connection negotiation process
at $CLIENT. This is a tool that attempts to connect to a router via a UDP
protocol. The previous algorithm tried each network device in turn, and ran
through three attempts with a generous timeout before trying the next one. If
the relevant device was low down the list, it could take several minutes.</p>

<p>Instead, I rewrote it try each device once with a short timeout, then repeat
with a slightly longer timeout, then finally a longer one still. This typically
finds the connection in a few seconds.</p>

<p><strong>My new toothbrush arrived,</strong> although as you’ll find out, that was really
<em>last</em> week’s news. I didn’t necessarily want to buy a new electric toothbrush,
but my old one stopped working. I <a href="/2025/04/02/week-221-cell-rejuvenation#:~:text=I%20replaced%20the%20battery,18%20years.">replaced the battery last year</a> and
had hoped that it would manage another decade, but it seems that opening it up
compromised the seal and it corroded on the inside.</p>

<p>I don’t mind using an old-fashioned manual toothbrush, but the dentist seems
insistent that I should use an electric toothbrush (with a pressure sensor).</p>

<p>After reading around a bit, I ordered a <a href="https://www.trysuri.com/">Suri 2.0</a>. It’s well reviewed,
it looks stylish, it’s less covered in gunk-harbouring greebling than most of
the other ones, and it promises less plastic waste. And as it uses vibration
rather than an oscillating head it doesn’t have any moving parts to nip my
tongue.</p>

<p>The toothbrush is great. The online purchasing experience, not so great.</p>

<p>16 April:</p>

<blockquote>
  <p>We’re busy putting the finishing touches to your SURI order and we’ll keep
you updated on its journey and tracking details as we get ready to ship it
soon.</p>
</blockquote>

<p>22 April, after I enquired whether it would be shipped soon, given that
it was supposed to be 48 hour delivery:</p>

<blockquote>
  <p>Your order is still being prepared and hasn’t been dispatched yet. You’ll
receive a shipping confirmation and tracking details as soon as your order
leaves our warehouse.</p>
</blockquote>

<p>25 April, after I sent an email cancelling the order, because I realised I
could just buy one in Boots instead:</p>

<blockquote>
  <p>We’ve finished packing your SURI order #XXXXXXX, and it’s now ready to
leave our warehouse with our delivery partner.</p>

  <p>If your delivery service includes tracking, we’ll send you an update once
your parcel is on the way.</p>
</blockquote>

<p>27 April, after they read the email asking to cancel:</p>

<blockquote>
  <p>I’ve checked your order, and it’s currently marked as delivered.</p>
</blockquote>

<p>And there, in the screenshot, was a Royal Mail tracking number and the detail
that it was delivered two days before they told me it was still being prepared,
and five days before they told me they had finished packing it:</p>

<blockquote>
  <p>Your item was delivered on 20-04-2026</p>
</blockquote>

<p>Maybe I should have checked the post room every day just in case they had sent
it when they said they hadn’t, but it’s a big building and the post room is
enough of a mess that I don’t generally go hunting for parcels I’ve been led to
believe aren’t there.</p>

<p>Again, I’m very happy with the toothbrush, but it seems you’d be better off
buying one from a retailer with more business-to-consumer experience.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[May Day fell on Friday this year, and what better way is there to celebrate workers than by not doing any work? It was hot and sunny, so I slathered on some sun cream, put on a hat, and went down to Deptford to catch the Jack in the Green procession.]]></summary></entry><entry><title type="html">Week 277: An annual inconvenience</title><link href="https://po-ru.com/2026/04/29/week-277-an-annual-inconvenience" rel="alternate" type="text/html" title="Week 277: An annual inconvenience" /><published>2026-04-29T21:53:00+00:00</published><updated>2026-04-29T21:53:00+00:00</updated><id>https://po-ru.com/2026/04/29/week-277-an-annual-inconvenience</id><content type="html" xml:base="https://po-ru.com/2026/04/29/week-277-an-annual-inconvenience"><![CDATA[<p><strong>I gave blood on Wednesday.</strong> I usually go to Stratford, but they’re currently
refurbishing the donor centre, and the temporary replacement (a van in a car
park) has far fewer slots. And, of course, it’s a van in a car park, which is
not such a pleasant experience. But on Tuesday, as I was looking for slots for
Friday, I noticed that there was a session in Peckham the very next day, only a
minute’s walk away from where I rent a desk. I booked in for mid-afternoon and
spent a relaxing hour reading (<a href="https://app.thestorygraph.com/books/8bafe1e6-ec6a-42fb-ba3c-f81af521bd79"><em>A Short History of Tractors in
Ukrainian</em></a>, loved it) while I waited, donated, and ate crisps
afterwards. Maybe it doesn’t sound like a relaxing afternoon break to most
people, but it was for me.</p>

<p><strong>I started trying to tidy up my office</strong> at home, which has been a disaster
since I dumped everything in there after our house was renovated. There’s a
long way to go, but it’s a start.</p>

<p><strong>Everybody loves the London Marathon</strong> except for those of us for whom it’s an
annual inconvenience. We don’t live <em>near</em> the marathon; no, we’re surrounded
on three sides by it. You can’t cross the road; you can’t take the tube without
queueing for hours to get into the station; there are crowds hooting and
hollering everywhere. And, even worse, apparently they want to make it a
<a href="https://www.bbc.co.uk/sport/athletics/articles/cqxl8yn4gxwo">two-day event</a> next year.</p>

<p>At least we have a few underpasses and bridges that cross the route near here,
so we were able to escape to the riverward side of the route and cycle along
the Thames to the South Bank.</p>

<p><strong>At the Hayward Gallery,</strong> we met a friend and visited a combined double
exhibition.</p>

<p><a href="https://www.southbankcentre.co.uk/whats-on/yin-xiuzhen-heart-to-heart/">Yin Xiuzhen</a>’s installation was charming, and varied in scale from tiny
and whimsical cities stitched from old cloths to a vast heart in which a dozen
people can sit.</p>

<p>Pictures can’t capture the sheer amount of thread in <a href="https://www.southbankcentre.co.uk/whats-on/chiharu-shiota-threads-of-life/">Chiharu Shiota</a>’s
installation. It’s like several cat’s cradles, each the size of a room, and had
me puzzled just trying to work out how you’d even construct such a thing.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/shiota-threads.webp"><img src="https://images.po-ru.com/opt/shiota-threads.webp" alt="An art installation. There are old-fashioned beds covered in a web-like
structure made of interlocking threads like a massive cat's cradle" /></a>
  
  <figcaption><p>Threads of Life by Chiharu Shiota</p>
</figcaption>
  
</figure>

<p>If you time your visit well, I hear that you can even see performers get in and
out of the beds through some invisible gaps in the webs. (We didn’t.)</p>

<p><strong>I’ll be playing sanshin and guitar and singing</strong> with <a href="https://sanshinkai.uk/">London Okinawa
Sanshinkai</a> at <a href="https://www.eventbrite.co.uk/e/yokimono-japanese-market-in-stratford-queen-elizabeth-olympic-park-free-tickets-1986890248218">Yokimono Market</a> in Stratford this coming Saturday.
We’re doing two half-hour sets, one at 12:00 and the other at 15:30.</p>

<p>Fun fact: the Japanese word for <em>set</em> in the context of a musical performance
is <span lang="ja">ステージ</span> <em>(sutēji)</em>, from English <em>stage</em>. And
<em>stage</em> shouldn’t be mixed up with スタジオ <em>(sutajio)</em> which means <em>studio</em>.
It can get confusing in a multilingual setting.</p>

<p><strong>I slightly regret missing <a href="https://haggisruby.co.uk/">Haggis Ruby</a>.</strong> It would have
been an excellent excuse for a trip to Glasgow, and I was tempted.</p>

<p>However, I’m avoiding conferences this year because I can’t face the prospect
of being trapped in a room having AI explained at me. I would be very keen
to attend a 100% Generative AI Free conference somewhere reachable by train, if
anyone wants to promise such a thing.</p>

<p><strong><em><a href="https://www.bbc.co.uk/culture/article/20240903-why-slow-horses-is-the-ultimate-british-tv-show">Slow Horses</a></em> is good,</strong> isn’t it? We’re very late to the party, but that
means we won’t run out for a while. I have a lot or respect for Gary Oldman
for making himself quite so repulsive in it: I fully believe that that shirt
wasn’t washed at any point during the making of the first two seasons.</p>

<p><strong>I have a prediction:</strong> some time between now and the local elections on 7
May, BBC News will run another set of migrant-bashing headlines like their
recent “undercover investigation” into immigration lawyers.</p>

<p><strong>Links:</strong></p>

<ul>
  <li><a href="https://www.theverge.com/podcast/917029/software-brain-ai-backlash-databases-automation"> The people do not yearn for automation</a>.
“But: not everything is a business. Not everything is a loop! The entire
human experience cannot be captured in a database. That’s the limit of
software brain. That’s why people hate AI. It flattens them.”</li>
  <li><a href="https://ky.fyi/posts/ai-burnout">Do I belong in tech anymore?</a> 
“Ironically, what I’ve gained from AI is a deeper appreciation for human
communication, in all its messy imperfection.” This rings true to me too.</li>
  <li><a href="https://git.drupalcode.org/project/parli_protect">parli_protect</a>
for Drupal. “The Parliament Protect module will protect your website from
UK Parliament. There are two options for protection: A silly form asking
for far too much personal information or a simple message to be displayed.”
There’s a convenient list of IP addresses in the source if you too want to
inconvenience the MPs responsible for the Online Safety Act.</li>
  <li><a href="https://www.tunera.xyz/">Tunera Type Foundry</a> 
offers attractive and usable free SIL-licensed fonts.</li>
  <li><a href="https://www.nebulasans.com/">Nebula Sans</a> 
is Nebula’s new brand typeface, based on Source Sans, free under the SIL
Open Font License.</li>
  <li><a href="https://medialoot.com/blog/how-to-create-a-responsive-navigation-menu-using-only-css/">How To Create A Responsive Navigation Menu Using Only CSS</a>.</li>
  <li><a href="https://arcade.pirillo.com/fontcrafter.html">FontCrafter: Create Your Handwriting Font for Free</a>.
Print page, write letters, scan, get font.</li>
  <li><a href="https://smallsheds.garden/blog/2026/on-the-acceptance-of-genai/">On the acceptance of GenAI</a>.
“If any of these facts are new to you, you haven’t been doing your due
diligence.”</li>
  <li><a href="https://chrisdown.name/2026/03/24/zswap-vs-zram-when-to-use-what.html">Debunking zswap and zram myths</a>. 
“If in doubt, prefer to use zswap. Only use zram if you have a highly
specific reason to.”</li>
  <li><a href="https://github.com/OHF-Voice/piper1-gpl">Piper</a> 
is a “fast and local neural text-to-speech engine that embeds espeak-ng for
phonemization.”</li>
  <li><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>.</li>
  <li><a href="https://github.com/LoredCast/filewizard/tree/main">File Wizard</a> 
is a “self-hosted, browser-based utility for file conversion, OCR and audio
transcription.” Can be run via a Docker image.</li>
  <li><a href="https://github.com/murpg/document-converter">Document Converter Pro</a> is
“A powerful, Docker-based document and image conversion application with a
modern web interface built using Streamlit. Convert between multiple
document and image formats with ease, including batch processing
capabilities.”</li>
  <li><a href="https://binaryigor.com/modern-frontend-complexity.html">Modern Frontend Complexity: essential or accidental?</a> 
Presents an alternative: “We can utilize HTMX, HTML Web Components and a
templating language to build websites and apps in a way much more aligned
with how the browser works - without sacrificing user experience, complex
features or developer experience.”</li>
  <li><a href="https://github.com/WeebLabs/DSPi">DSPi</a> 
“transforms a Raspberry Pi Pico or other RP2040-based board into a very
competent and inexpensive little digital audio processor.”</li>
  <li><a href="https://github.com/ramonvermeulen/whosthere">whosthere</a> is a
LAN discovery tool with an interactive TUI.</li>
  <li><a href="https://kayrock.org/kr106/">Ultramaster KR-106</a> is an
open source Roland Juno 106 emulator.</li>
  <li><a href="https://disconnect.blog/on-the-abdication-of-chief-prophet-tim-cook/">On the abdication of Chief Prophet Tim Cook</a>.
John Ternus has been appointed as Steve’s representative on Earth.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[I gave blood on Wednesday. I usually go to Stratford, but they’re currently refurbishing the donor centre, and the temporary replacement (a van in a car park) has far fewer slots. And, of course, it’s a van in a car park, which is not such a pleasant experience. But on Tuesday, as I was looking for slots for Friday, I noticed that there was a session in Peckham the very next day, only a minute’s walk away from where I rent a desk. I booked in for mid-afternoon and spent a relaxing hour reading (A Short History of Tractors in Ukrainian, loved it) while I waited, donated, and ate crisps afterwards. Maybe it doesn’t sound like a relaxing afternoon break to most people, but it was for me.]]></summary></entry><entry><title type="html">Wild axolotls</title><link href="https://po-ru.com/2026/04/23/wild-axolotls" rel="alternate" type="text/html" title="Wild axolotls" /><published>2026-04-23T08:49:00+00:00</published><updated>2026-04-23T08:49:00+00:00</updated><id>https://po-ru.com/2026/04/23/wild-axolotls</id><content type="html" xml:base="https://po-ru.com/2026/04/23/wild-axolotls"><![CDATA[<p>How many wild axolotls are there in the UK? I heard a news segment on the
<a href="https://www.bbc.co.uk/6music">radio</a> this morning about an axolotl that had been caught in the wild in
Wales. Here’s a transcript:</p>

<blockquote>
  <p>An endangered Mexican axolotl, a species of aquatic salamander, has been
found living under a bridge near Bridgend in south Wales by a ten-year-old
girl. The amphibian is the size of a small cat, and it’s the first documented
discovery of the species in the wild in the UK.</p>

  <p>Evie Hill was on holiday with her family when they stopped at the dipping
bridge over the river Ogmore.</p>

  <blockquote>
    <p>I went down to the bank and there was this thing with gills on its head and
I’m like, that’s an axolotl, and I went, Mum, there’s an axolotl in the
river, and she said, no there’s not, you’re not going back in the water,
though I went back in the water anyway because I could see it and then I
caught it and brought it back and my cousin’s going mum, Evie’s caught the
axolotl, she’s caught it!</p>
  </blockquote>
</blockquote>

<p>So of course the first thing I did was to open a browser and search for a
picture of this small-cat-sized critter. I found a slightly longer <a href="https://www.bbc.co.uk/sounds/play/p0nfzcm7">standalone
version of the story</a> with a small picture of the axolotl’s face, but
nothing more.</p>

<p>I did, however, find <a href="https://www.facebook.com/groups/axolotlslovers/posts/1791405658411166/">something similar from September last year</a> in an
“Axolotls Lovers” [sic] group on Facebook.</p>

<blockquote>
  <p>Hi. My son recently rescued a axolotl from a river near us. Being the uk
waters and fast flowing waters she must have had a really bad time and lucky
my son found her. I managed to quickly get a tank together for her and shes
setting well i think lol. I have done alot of research and hope im doing
things right for her. Any tips on helping her gain weight as she was very
skinny and help her grow her fluffy gills again?also finding it straige she
has no black dots in her eyes they are see through. She obviously had a very
stressful time being dumped in a river. Any information il need to know would
be a massive help.</p>
</blockquote>

<p>A few seconds of searching for the author’s name led to their Instagram
account with <a href="https://www.instagram.com/p/DQRxKM5CKlt/">a video of the axolotl</a>.</p>

<p>So … is it <em>really</em> “the first documented discovery of the species in the wild
in the UK”? (And do BBC journalists actually go beyond merely repeating what
they’re told?)</p>

<p>An interesting detail is that this other person also appears to live in or
near Cardiff: they are pictured wearing <em>University of South Wales/<span lang="cy">Prifysgol De Cymru</span></em> scrubs and talk about visiting <a href="https://www.clearwellfarm.co.uk/">Clearwell
Farm</a>.
This raises the possibility that there are more axolotls living wild in south
Wales, and perhaps even that they can survive over the winter!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[How many wild axolotls are there in the UK? I heard a news segment on the radio this morning about an axolotl that had been caught in the wild in Wales. Here’s a transcript:]]></summary></entry><entry><title type="html">Week 276: Back to reality</title><link href="https://po-ru.com/2026/04/22/week-276-back-to-reality" rel="alternate" type="text/html" title="Week 276: Back to reality" /><published>2026-04-22T21:42:00+00:00</published><updated>2026-04-22T21:42:00+00:00</updated><id>https://po-ru.com/2026/04/22/week-276-back-to-reality</id><content type="html" xml:base="https://po-ru.com/2026/04/22/week-276-back-to-reality"><![CDATA[<p><strong>After a holiday</strong> that was busy, full of new places and experiences, but also
very relaxing, going back to sitting in front of a computer all day has been a
difficult adjustment.</p>

<p><strong>And as if just getting used to work again</strong> wasn’t enough, Tuesday ended up being
longer than anticipated. I hadn’t had a chance to check over my bike and pump
up the tyres over the weekend, so I took the Overground to Peckham on Monday
and Tuesday. That was fine until Tuesday afternoon, when I checked the time of
the next train and saw that they had all been cancelled.</p>

<p>Something had caught fire at Clapham Junction, at the end of the line, and as a
result trains on the entire Surrey Quays to Clapham Junction branch were
cancelled all afternoon and evening. One might naïvely ask why they couldn’t
just run the trains most of the way and back again, but I think all the
platforms along that branch serve multiple routes, and using one as a temporary
terminus would block other services.</p>

<p>I checked the options to get home: 56 minutes on the slow, winding 381 bus, or
58 minutes on foot. I chose to walk, as it costs nothing and it’s a bit more
pleasant – on a mild light evening, that is; it would have been different in
the rain. I used to walk home from Holborn fairly regularly when I worked
there; that was a little further but more picturesque, especially along the
river. However, I prefer to walk out of choice than out of necessity.</p>

<p><strong>On Wednesday evening</strong> we went to a Green Party fundraiser comedy gig,
conveniently located just upstairs from my desk. You never really know what
you’re going to get at that kind of event, but the overall standard was good,
and it was an entertaining evening.</p>

<p><strong>I saw an unhappy-looking vole</strong> in the garden on Friday afternoon. It was
just sitting there, looking unwell. It scampered away when I got close, but
I put some water out in case that was the problem. I haven’t seen a dead vole,
so perhaps it helped, but that’s all I know.</p>

<p><strong>We met a friend for brunch</strong> at the recently-opened <a href="https://www.instagram.com/simplicity_bakerycafe/">Simplicity
Bakery</a> in old Rotherhithe, in the premises that used to be the
otherwise unconnected Simplicity restaurant. The coffee was good, and the leek
and potato pastry was delicious. I hope it succeeds; that it was busy is a
promising sign.</p>

<p><strong>It’s been a while</strong> since I posted any links, so here’s a few:</p>

<ul>
  <li><a href="https://www.nippon.com/en/japan-data/h01362/">A Japanese Glossary of Chopsticks Faux Pas</a>.</li>
  <li><a href="https://www.v68k.org/advanced-mac-substitute/">Advanced Mac Substitute</a> 
“is an API-level reimplementation of 1980s-era Mac OS. It runs 68K Mac
applications in an emulator without an Apple ROM or system software.”</li>
  <li><a href="https://novaramedia.com/2026/02/17/the-media-let-mandelson-get-away-with-it-for-decades/">The Media Let Mandelson Get Away With It for Decades</a>.</li>
  <li><a href="https://www.newstatesman.com/technology/2026/04/the-silent-coup">AI’s sinister takeover of British politics</a>.
“British laws are already being written by AI.” But of course! Of course
those dunderheads would outsource their thinking to a machine.</li>
  <li><a href="https://eaw.app/picoz80/">picoZ80</a> is a
RP2350-based pin-compatible Z80 emulator plus RAM. It can also emulate a
disk controller and other peripherals.</li>
  <li><a href="https://github.com/ciscoriordan/kindling">Kindling</a> is a
fast, open source Kindle publishing toolkit that can also compile
dictionaries and comics.</li>
  <li><a href="https://bryankeller.github.io/2026/04/08/porting-mac-os-x-nintendo-wii.html">Porting Mac OS X to the Nintendo Wii</a>.</li>
  <li><a href="https://interblah.net/self-updating-screenshots">Self-updating screenshots</a>.
A simple great idea: capture your documentation screenshots in your build
system so that you don’t have to faff around updating them every time you
make a change.</li>
  <li><a href="https://essays.johnloeber.com/p/4-bring-back-idiomatic-design">Bring Back Idiomatic Design</a>.
Modern web applications are idiosyncratic and lack the consistency,
predictability, and consequent usability of older desktop environments.</li>
  <li><a href="https://www.newscientist.com/article/2521256-ai-data-centres-can-warm-surrounding-areas-by-up-to-9-1c/">AI data centres can warm surrounding areas by up to 9.1°C</a>.
Is that good?</li>
  <li><a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD06xx/EWD667.html">On the foolishness of “natural language programming”</a>.
Edgar Dijkstra: “The virtue of formal texts is that their manipulations, in
order to be legitimate, need to satisfy only a few simple rules; they are,
when you come to think of it, an amazingly effective tool for ruling out
all sorts of nonsense that, when we use our native tongues, are almost
impossible to avoid.”</li>
  <li><a href="https://www.b-list.org/weblog/2026/apr/09/llms/">Let’s talk about LLMs</a>.
“Very few organizations have the strong fundamentals needed to absorb even
a relatively moderate, incremental increase in the amount of code they
generate, which I suspect is why so many studies and reports find mixed
results and lots of broken CI pipelines. Not only is there no silver
bullet, there <em>especially</em> is no quick or magical gain to be had from
rushing to adopt LLM coding without first working on those fundamentals.”</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[After a holiday that was busy, full of new places and experiences, but also very relaxing, going back to sitting in front of a computer all day has been a difficult adjustment.]]></summary></entry></feed>