<?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-07-07T22:18:19+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 287: Network trouble</title><link href="https://po-ru.com/2026/07/07/week-287-network-trouble" rel="alternate" type="text/html" title="Week 287: Network trouble" /><published>2026-07-07T19:27:00+00:00</published><updated>2026-07-07T19:27:00+00:00</updated><id>https://po-ru.com/2026/07/07/week-287-network-trouble</id><content type="html" xml:base="https://po-ru.com/2026/07/07/week-287-network-trouble"><![CDATA[<p><strong>A mysterious problem</strong> afflicted our home internet connection. The symptoms
were strange: 50%+ packet loss to the outside internet, and anything that
relied on a connection was very unreliable, <em>except</em> my desktop computer, which
was also unreliable, but was able to communicate perfectly with the outside
world when connected to a VPN.</p>

<p>I ran a test on the VDSL line, which identified a real fault: “impairment in copper
joint”. I contacted my <a href="https://www.aa.net.uk/">ISP</a>; they weren’t seeing any packets loss on
the connection, but they would contact OpenReach to fix the hardware.</p>

<p>This implied that there was a problem inside the house. I unplugged
all the wired devices, and the wireless devices instantly enjoyed perfect
internet access. I plugged wires back in until I found the culprit: my desktop.</p>

<p>I thought that it might be the network hardware or its driver (it’s a Realtek,
so it seemed a likely culprit), but connecting via a USB ethernet adapter
resulted in the same problem: within a few minutes of being plugged in, every
other device in the house experienced degraded service.</p>

<p>Someone more knowledgeable said that it sounded like a bridge loop. One thing
that creates a lot of bridges is Docker. I stopped that, and the problem went
away. I don’t know exactly what Docker was doing, because I deleted all the
containers and networks that I no longer needed, which was all of them, because
they were all for work, and …</p>

<p><strong>With the end of the quarter,</strong> my contract came to an end. They’ve been
lovely people to work with, but I’m very glad to have a summer holiday and
enjoy a bit of time off.</p>

<p>Every time I finish a contract, I wonder if it will be my last software job.
I might think AI is a waste of everyone’s time and the planet’s resources,
but if a bunch of know-nothing managers are convinced it’s the future, there
are fewer jobs to go around, and the ones remaining require an obeisance to the
machine god that I will not make. It might all go pop, but the market can
remain irrational for a famously long time. At least I made some decent
pension contributions and ISA savings while I could, so I might just about
find myself thrown free of the wreckage – unless, of course, the bursting
of the bubble wrecks all that as well.</p>

<p><strong>The engineer from OpenReach</strong> turned up a couple of days after I contacted
the ISP. He fixed a dodgy termination at the cabinet and the reported
impairment disappeared. I don’t think it’s made any discernible change to the
service, however. The noticeable problems were already fixed by terminating
Docker.</p>

<p><strong>I spent the rest of the week</strong> doing domestic chores and working on my
<a href="https://www.emfcamp.org/">EMF</a> talk.</p>

<p><strong>The United States of America</strong> is 250 years old, which doesn’t seem like a
thing worth celebrating. I hope for all our sakes they don’t make it to 300
without serious constitutional and attitudinal adjustment.</p>

<p><strong>It’s been hot,</strong> but bearably so, and not nearly as hot as the week before.</p>

<p><strong>Just a few links</strong> for this week:</p>

<ul>
  <li><a href="https://www.theguardian.com/technology/2026/jun/24/cory-doctorow-on-elon-musk-ai-bubble-bosses-cruel-fantasies">‘You can’t make billions without hurting people’: Cory Doctorow on Elon Musk, the AI bubble and bosses’ cruel fantasies</a> 
“Bosses are haunted by the knowledge that even though they fancy that
they’re driving the car, if they don’t show up, everything continues to
work. Whereas if the workers don’t show up, everything shuts down. And so
perhaps they’re in the back seat with a toy steering wheel. AI is the
promise of wiring that toy steering wheel directly into the drivetrain of
the car.”</li>
  <li><a href="https://www.streetskitchen.org/2026/06/smell-is-not-a-crime-the-cruel-rebranding-of-the-vagrancy-act">The Cruel Rebranding of the Vagrancy Act</a> 
“Scrapping an old piece of paper means absolutely nothing when it’s
immediately replaced by fast-tracked dispersal orders, civil Respect
Orders, and the ongoing, daily theft of tents and sleeping bags by council
enforcement teams.”</li>
  <li><a href="https://tedium.co/2026/07/01/online-web-forums-retrospective/">What We Lost When We Quit Using Crappy Old Web Forums</a> 
They’re still out there, serving niches, and some of them are thriving and
pleasant communities.</li>
  <li><a href="https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/">.gitignore Isn’t the Only Way To Ignore Files in Git</a> 
Indeed not; I use <code class="language-plaintext highlighter-rouge">.git/info/exclude</code> regularly but still have to remind
myself of the path every time.</li>
  <li><a href="https://buttondown.com/maiht3k/archive/how-to-talk-about-ai-without-adding-to-the/">How to talk about “AI” without adding to the anthropomorphization</a>. 
These systems don’t think, they don’t reason, they don’t have intelligence
or agency, and perhaps we shouldn’t let ourselves be lured into talking
about them as if they do.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[A mysterious problem afflicted our home internet connection. The symptoms were strange: 50%+ packet loss to the outside internet, and anything that relied on a connection was very unreliable, except my desktop computer, which was also unreliable, but was able to communicate perfectly with the outside world when connected to a VPN.]]></summary></entry><entry><title type="html">Week 286: Thunderclap</title><link href="https://po-ru.com/2026/07/03/week-286-thunderclap" rel="alternate" type="text/html" title="Week 286: Thunderclap" /><published>2026-07-03T10:17:00+00:00</published><updated>2026-07-03T10:17:00+00:00</updated><id>https://po-ru.com/2026/07/03/week-286-thunderclap</id><content type="html" xml:base="https://po-ru.com/2026/07/03/week-286-thunderclap"><![CDATA[<p><strong>Very late this week,</strong> but hey, I never promised an <abbr title="Service Level Agreement">SLA</abbr> on these weeknotes.</p>

<p><strong>Starmer quit</strong> as prime minister – or, more accurately, announced his
intention to do so – having apparently realised several months later than the
rest of the country that he wasn’t going to make it anywhere near the next
election. I know there’s no great talent pool in the parliamentary Labour party
to draw from, but I still I don’t feel great about the fact that the next
PM-designate is just being shooed in based on a kind of media blitz, or that
he’s now beholden to an electorate in a reactionary constituency.</p>

<p><strong>In the early hours of Wednesday</strong> we were woken by a biblical thunderstorm,
and both sat bolt upright when a deafening thunderclap hit close by, setting
off car alarms.</p>

<p>I later found out exactly how close it hit: a house about 400 m away,
where it destroyed their TV and burnt a toilet roll. Despite this, both
building and occupants were unharmed.</p>

<p><strong>It was horribly hot all week.</strong> On Tuesday, I closed the curtains and
shutters all day and arrived home to a house that was only 27 C and felt
cool compared to 34 C outside. Closing off the heat from the outside
does work to an extent. If we had some of those external shutters you find on
old French houses, it would be even better.</p>

<p><strong>We watched <a href="https://www.ntlive.com/plays/les-liaisons-dangereuses/"><em lang="fr">Les Liaisons Dangereuses</em></a></strong> at the cinema via
National Theatre Live. It’s the first time I’ve watched one. It’s much cheaper
than the theatre, and whilst it lacks a certain feeling that you get when
something is happening in front of you, you’re closer to the action and the
view is better.</p>

<p>Lesley Manville and Aidan Turner were great in the lead roles; Turner was
especially menacing and venal, I thought. I loved the dance interludes at
scene changes and the opulent costumes.</p>

<p>We watched it at Peckhamplex on a hot evening, and that cinema doesn’t have
air conditioning. However, the cavelike proporties of the car park structure
kept the temperature pleasantly cool inside.</p>

<p><strong>As we emerged into the heat of the evening</strong> we were greeted by a row of
fire engines on Rye Lane. A stockroom on the first floor behind Khan’s Bargains
<a href="https://southwarknews.co.uk/area/peckham/rye-lane-fire-khans-bargains-and-copeland-park-survive-blaze-with-localised-damage/">caught fire</a> – refrigerators overheated in the weather, I heard –
but it was contained and the damage was minimal.</p>

<p><strong>I’d already planned</strong> to spend Friday in Brighton and go to a concert in the
evening, and it was an ideal day to escape the city. Brighton was much cooler
and overcast, at least until the early evening, and I felt a bit chilly
in my shorts at times. I sat on a foggy beach and had never been happier for
such weather.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/2026-06-26-foggy-brighton-beach.webp"><img src="https://images.po-ru.com/opt/2026-06-26-foggy-brighton-beach.webp" alt="Brighton beach; the tourist tower disappears into the fog, but people
are still sitting around enjoying their days out." /></a>
  
  <figcaption><p>Brighton beach: gloomy, foggy, pebbly, gorgeous</p>
</figcaption>
  
</figure>

<p>I walked to Kemptown to sit and read in a pub (<a href="https://www.instagram.com/the_well_brighton/">The Well</a> on St George’s Road,
a lovely little bar that feels like a sitting room) before the gig, then
strolled up the street to join a massive queue to get into the <a href="https://www.stgeorgesbrighton.com/">church</a> that
was the venue for the evening.</p>

<p><strong>The reason I’d gone to Brighton</strong> was that after the <a href="/2026/06/23/week-285-pigeon-with-a-death-wish">Mandalakia gig the
previous week</a>, talking to the singer, who also sings with <a href="https://www.idrisiensemble.com/">Idrîsî
Ensemble</a>, I mentioned that I’d missed out on tickets to see the
latter. “We’ve just announced a gig on the 26th,” she told me. At home, I
checked, but that gig was already almost sold out, with the only remaining
seats having a restricted view but still being quite expensive. However, I saw
that they were playing Brighton the previous evening. L— already had plans,
and I had the day free, so I decided to take a day trip to Brighton and bought
a ticket.</p>

<p>Idrîsî Ensemble played in a small group of singers, variously accompanied
by vielle, a small portative organ, and hurdy-gurdy. The programme, <em>Trinity &amp;
Quadrivium</em>, was inspired by <a href="https://en.wikipedia.org/wiki/Hildegard_of_Bingen">Hildegard von Bingen</a>, the Sibyl of the
Rhine, the first Renaissance Woman before there were any Renaissance Men, and
comprised Latin, Corsican, Occitan, and French pieces from the 12th to 14th
centuries.</p>

<p>It was excellent, and I highly recommend them to anyone who enjoys early music.</p>

<p><strong>After a quick dinner</strong> at the <a href="https://www.tofuvegan.com/">new outpost of Tofu Vegan</a> in the Lanes –
fish-fragrant aubergine and rice, if you’re interested – I caught the
air-conditioned Thameslink back to London. The Jubilee Line was two stops of
actual sauna temperatures, and it was followed by another night of sleeping on
top of the bed, but at least I experienced a bit of cool during the day.</p>

<p><strong>L— ate something dodgy</strong> on Friday while I was in Brighton – we suspect
<a href="https://www.sciencedirect.com/science/chapter/edited-volume/abs/pii/B9780123850072000206"><em>B. cereus</em></a> from rice in a sushi roll – and ended up with food
poisoning that left her lying abed feeling sorry for herself for the whole
weekend. She’s mostly recovered now.</p>

<p><strong>Have you ever wondered</strong> what happens if you heat up a skillet that is
sitting on a cork mat on top of an induction hob?</p>

<p>It works almost as usual, but the mat does get a bit scorched on the pan side.</p>

<p>It wasn’t an intentional experiment, but at least nothing bad happened. I only
heated it up to warm some flatbreads, so it wasn’t running particularly hot
or particularly long.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Very late this week, but hey, I never promised an SLA on these weeknotes.]]></summary></entry><entry><title type="html">Week 285: Pigeon with a death wish</title><link href="https://po-ru.com/2026/06/23/week-285-pigeon-with-a-death-wish" rel="alternate" type="text/html" title="Week 285: Pigeon with a death wish" /><published>2026-06-23T23:01:00+00:00</published><updated>2026-06-23T23:01:00+00:00</updated><id>https://po-ru.com/2026/06/23/week-285-pigeon-with-a-death-wish</id><content type="html" xml:base="https://po-ru.com/2026/06/23/week-285-pigeon-with-a-death-wish"><![CDATA[<p><strong>We had a gardener round</strong> to look at our front and back garden – well, expanse
of paving slabs – to start the process of getting them turned into something
with less concrete and more life. The good news is that they can do it all from
the outside, so it shouldn’t be too disruptive for us.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/2026-06-21-sailing-on-greenland-dock.webp"><img src="https://images.po-ru.com/opt/2026-06-21-sailing-on-greenland-dock.webp" alt="Small sailing boats on a dock with buildings in the background. The boats
have identical fluorescent sails and they're all in a row." /></a>
  
  <figcaption><p>Greenland Dock on a sunny Sunday</p>
</figcaption>
  
</figure>

<p><strong>We were woken in the middle of Monday night</strong> by cheering. I assume it was the
football, probably the Iran–New Zealand match that kicked off at 02:00 UK
time. Some of the games are at very unsociable hours from a western European
perspective. I don’t know which neighbours it was, or which team they support.</p>

<p>I know I have Turkish neighbours, and there’s a 03:00 game coming up, so I’ll
find out soon enough if they’re football fans.</p>

<p><strong>I potted the pothos cuttings</strong> I’d been cultivating on my desk. Technically
it’s <a href="https://en.wikipedia.org/wiki/Epipremnum_aureum"><em>Epipremnum aureum</em></a>, which is no longer classified in the <em>Pothos</em> genus,
but that’s not my problem, is it? They seem to be doing well so far.</p>

<p><strong>HMRC owe me</strong> a decent (four figure) amount of overpaid tax from last
year. That’s nice. The process of getting paid the money is pretty onerous
these days, however. It used to be simpler, but now you have to download an
official government app and scan your driving licence. Or passport, I guess,
but I don’t have a valid UK passport. I tried the alternative method of
answering a few questions, but after a lot of weirdly specific questions about
my precise credit card transactions it told me no. At least I was able to
install the app on GrapheneOS, even though there’s no way to do so without
getting it from US Big Tech.</p>

<p>I don’t know what you do if you’re a non-driving foreign national. Or if you
don’t own an appropriately powerful and modern phone. HMRC get to keep your
money, I suppose.</p>

<p>Even though I haven’t got the money yet, the prospect was a bright spot after a
rather dispiriting day of unproductive JavaScript wrangling.</p>

<p><strong>The <a href="/2026/06/10/week-283-expensive-plastic">replacement fridge door shelf</a></strong> arrived from France. It fits
perfectly, I saved £41, and I’m happy.</p>

<p><strong>I nearly ran over a pigeon.</strong> I was rolling rather slowly around the corner
of the docks, not even pedalling at the time, when a pair of birds walked
straight in front of my bicycle wheel. I was sure I’d crushed one, but when I
looked round they had both flown away. I stayed around for a little while, but
didn’t see any obviously injured pigeons. I hope they were OK. I was a little
traumatised by the event.</p>

<p><strong>I went to see <a href="https://mandalakia.bandcamp.com/">Mandalakia</a></strong> play Greek <a href="https://en.wikipedia.org/wiki/Rebetiko">rebetiko</a> music at <a href="https://www.sandsfilms.co.uk/">Sands Films</a>, from a
front row seat. People seem so reluctant to take front row seats; perhaps they
still think they’re at school. I’m happy to get a good view.</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/2026-06-17-mandalakia.webp"><img src="https://images.po-ru.com/opt/2026-06-17-mandalakia.webp" alt="Musicians on stage: kanun, clarinet, singer, electric guitar, percussion" /></a>
  
  <figcaption><p>Mandalakia</p>
</figcaption>
  
</figure>

<p>It was a very tight performance, and <a href="https://www.dunjabotic.com/">the singer</a> is absolutely stellar.</p>

<p>While purchasing a CD from the merch stand afterwards, I learned that, while
<em>μανταλάκια</em> (<em>mandalakia</em>) does mean “clothes pegs” in Greek, it
also refers to the microtonal adjustment fixtures on the <a href="https://en.wikipedia.org/wiki/Qanun_(instrument)">kanun</a>, known as
<em>mandallar</em> in Turkish (itself originally a loan from the same root
in Ancient Greek).</p>

<p><strong>Of four job postings</strong> to the <a href="https://lrug.org/"><abbr title="London Ruby User Group">LRUG</abbr></a> mailing list in the past week, one
is actually in Cambridge (daily, in person), one is for a mid-level role, and
the other two both require that the candidate fully embrace the synthetic text
extruders:</p>

<ul>
  <li>“Successful candidates will … be using AI to responsibly write all their code”</li>
  <li>“Day to day you will … Champion AI-assisted development”</li>
</ul>

<p>It’s safe to say I won’t be doing either of those things, and if that means I
never get another software development job in my life, it wouldn’t be the worst
outcome in the world.</p>

<p><strong>Okinawa Day went well.</strong> I played four sets: two of music and singing, and
two accompanying the <em>eisa</em> dancers. I didn’t mess up the piece I was most
worried about, one which leaves the player absolutely nowhere to hide. Many
friends came to watch and support – even an old university friend visiting
from Singapore for a few days!</p>

<p><strong>I’ve been hoarding links</strong> lately:</p>

<ul>
  <li><a href="https://www.science.org/doi/10.1126/science.aec7671">Home alone: Remote work, isolation, and mental health</a>.
“Our results suggest that remote work substantially increases isolation and
worsens mental health, particularly for those living alone. Although a
large body of research finds that workers want to work remotely, our
findings suggest that workers may not realize the costs of remote work for
their well-being, which may take time to accumulate.”</li>
  <li><a href="https://mridge.bandcamp.com/album/gritcore">Gritcore by Norfolk Trotter</a> 
is “[t]wo textured walls sourced from playing sandpaper discs on a modified
turntable at 8 RPM, track 1 is coarser grit whilst track 2 is a slightly
finer grit.”</li>
  <li><a href="https://www.thevinylfactory.com/films/rebel-synths-of-cabo-verde">Watch our short film on the cosmic sound of Cabo Verde</a>.
In 1968, a cargo of modern synthesisers washed ashore in Cabo Verde; hidden
from colonial authorities, they ended up influencing the sound of the
resistance against Portuguese rule.</li>
  <li><a href="https://unu.edu/inweh/news/environmental-cost-of-AIs-Enrgy-use-carbon-water-and-land-footprints">Rising Emissions, Depleting Water and Vanishing Land—UN Scientists: AI Is
Threatening Natural Resources for Billions</a>.
“By 2030, AI’s water use will match the needs of 1.3
billion people while its power use triples that of 650 million”.</li>
  <li><a href="https://www.theatlantic.com/philosophy/2026/06/no-artificial-intelligence-is-not-conscious/687378/?gift=G2UApu_7OP_KIX5vvk_5C38w0xA4pwTNegSpaXYDIwc">No, Artificial Intelligence Is Not Conscious</a>,
says Ted Chiang. “Generative AI is harmful enough when we understand it as
a conventional technology, but if we confuse fluency at generating text
with consciousness or moral agency, we’re at risk of assigning
responsibility to entirely the wrong parties whenever anyone uses a
chatbot.”</li>
  <li><a href="https://bubbles.town/">Bubbles</a>:
“Somewhere out there, someone wrote a really good blog post today. You’ll
probably never find it. Google won’t show it to you. Social media buried it
under engagement bait. Bubbles tries to surface it.”</li>
  <li><a href="https://earlyweblinks.com/">Early Web Links</a>:
“Before the internet went corporate, it was weird, wonderful, and deeply
personal. People built websites just because they had something to share.
This directory is full of sites that bring back that feeling.”</li>
  <li><a href="https://hyperblam.how/">HYPERBLAM</a> 
“lets you make music with HTML. It’s a declarative implementation of the
Web Audio API and is completely dependency free.
Create pedal boards, drum machines, sampled instruments. And don’t write a
single line of JavaScript in the process. Unless you really want to.”</li>
  <li><a href="https://salvagedcircuitry.com/sigma-45mm.html">Sigma 45mm f/2.8 Lens Repair &amp; Analysis</a>:
A write-up of a successful repair of the microelectronics on a modern
camera lens.</li>
  <li><a href="https://restofworld.org/2026/tech-facebook-google-whatsapp-scams/">Big Tech, big cons: Scammers are hiding in the apps that make your life easy</a>.
Google <em>et al</em> are no longer a reliable source of information about
anything: not even your neighbourhood wine shop. This story comes from
India, but it’s happening everywhere.</li>
  <li><a href="https://lr0.org/blog/p/arabic/">An interactive introduction to the terrific experience of rendering Arabic typography and its technical debt</a>.
“To understand why every machine since Gutenberg has wrestled this script
and mostly lost, you need one structural fact: Arabic is cursive always.
There is no print-versus-handwriting distinction, no block letters. The
letters connect in stone inscriptions, in manuscripts, in metal, on
screens. Each letter therefore changes shape depending on its neighbours
(an isolated form, an initial, a medial, a final), and six letters refuse
to connect forward at all, which breaks words into joined clusters and
gives the script its rhythm. The shapes are not costumes over some
underlying “real” letter. The positional variation is the letter.”</li>
  <li><a href="https://www.cityam.com/there-should-have-been-an-op-ed-here-but-you-filed-ai-slop/">There should have been an op-ed here but you filed AI slop</a>.
“In this slot there should have been an op-ed. A punchy one from a
high-flying lawyer on the ever raging debate around inheritance tax,
perfectly attuned to the interests of City AM readers. However, as is now
happening at an alarming regularity, what said lawyer filed was not an
insightful piece drawing on their many years of experience and expertise,
but 600 words of AI-generated slop.”</li>
  <li><a href="https://seriot.ch/computation/jira.html">Jira IS Turing-Complete</a>.</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[We had a gardener round to look at our front and back garden – well, expanse of paving slabs – to start the process of getting them turned into something with less concrete and more life. The good news is that they can do it all from the outside, so it shouldn’t be too disruptive for us.]]></summary></entry><entry><title type="html">Week 284: Damaged/restored</title><link href="https://po-ru.com/2026/06/17/week-284-damaged-restored" rel="alternate" type="text/html" title="Week 284: Damaged/restored" /><published>2026-06-17T22:49:00+00:00</published><updated>2026-06-17T22:49:00+00:00</updated><id>https://po-ru.com/2026/06/17/week-284-damaged-restored</id><content type="html" xml:base="https://po-ru.com/2026/06/17/week-284-damaged-restored"><![CDATA[<p><strong>I left a glass on the floor</strong> at the top of the stairs to remind me to take
it down, thinking that surely I couldn’t miss it. But of course I could. It
didn’t smash, but I watched it bounce down the steps two at a time, leaving a
big obvious dent (or pair of dents) in the oak of each one it hit.</p>

<p>When we had the house renovated a couple of years ago, we went for engineered
wood – it’s about 6 mm of wood on top of a plywood base – rather than
some kind of synthetic flooring because it looks nicer, and because our house
is so small that even expensive flooring doesn’t cost all that much. But there
was another reason: you can repair wood, and when the wood starts off
with a slightly rustic look (knots and filled-in cracks) it’s even easier to
camouflage further repairs.</p>

<p>I used <a href="https://www.youtube.com/watch?v=fOiRmqg55zM">a clothes iron and a damp cloth</a> to raise the dents, then
drop-filled with superglue where the varnish was damaged. When the glue had
hardened I scraped it level using a razor and polished it with some very fine
sandpaper.</p>

<p>It was only about half an hour of labour in total, but it worked well. The damage is
now invisible to all but the most careful of examination, and I don’t have to
engage in self-criticism over my own stupidity every time I walk upstairs.</p>

<p><strong>A horse came to Peckham Levels</strong> to take part in a musical performance
(a reprise of <a href="https://observer.co.uk/music/classical/article/oliver-leiths-garland-a-horse-a-car-park-and-a-night-of-pure-imagination">Oliver Leith’s <em>Garland</em></a>, I believe)
but I only saw the back end of the equine disappearing round a corner. I could
still smell it all the way through the building for some time afterwards.</p>

<p><strong>I cycled to IKEA</strong> on Friday to buy some more rechargeable batteries. They
sell cheap, good quality, <abbr title="Low self-discharge, i.e. they don't lose so much charge just sitting on a shelf">LSD</abbr> <abbr title="Nickel Metal Hydride">NiMH</abbr> batteries that are widely believed to be
<a href="https://eneloop101.com/batteries/rewrapped-batteries/">rebranded Eneloop</a>, and these ones are made in Japan which makes it
almost certain that they’re from the same factory.</p>

<p>I had a lunch of plant balls, naturally.</p>

<p>While I was there I also picked up a couple of <a href="https://www.ikea.com/gb/en/p/knagglig-box-pine-70292359/">Knagglig</a> pine crates to organise
the two compartments of chaos in our pantry cupboard. Apart from being a bit
tall, they’re just the right size. But they’re just pine; with a razor saw and
a couple of minutes I was able to modify the flat-packed sections and reduce
them from three-slats-high to two before assembly.</p>

<p><strong>I have two weeks of work left</strong> on my current contract. I’m looking
forward to a couple of months off after that; my plans include
<a href="https://www.emfcamp.org/">Electromagnetic Field</a> in July, and a walk with a friend to Canterbury
over several days (mostly following the pilgrimage route, but avoiding the bits
that are now the A2) in August. I’d also like to sleep a bit more than I have
recently. Even with a three-day weekend, there isn’t nearly enough time to do
the things I want.</p>

<p><strong>Before all that, there’s <a href="https://sanshinkai.uk/okinawa-day/">Okinawa Day</a></strong> on Saturday, for which I have
to finalise a guitar arrangement for a piece we only decided to add guitar to
last Friday. On the day, rather than juggle two instruments myself between
pieces, we’ve decided to assign someone as a roadie so I can just hand off my
sanshin and get a guitar back, and <em>vice versa</em>. That will be good if it works.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[I left a glass on the floor at the top of the stairs to remind me to take it down, thinking that surely I couldn’t miss it. But of course I could. It didn’t smash, but I watched it bounce down the steps two at a time, leaving a big obvious dent (or pair of dents) in the oak of each one it hit.]]></summary></entry><entry><title type="html">Week 283: Expensive plastic</title><link href="https://po-ru.com/2026/06/10/week-283-expensive-plastic" rel="alternate" type="text/html" title="Week 283: Expensive plastic" /><published>2026-06-10T20:49:00+00:00</published><updated>2026-06-10T20:49:00+00:00</updated><id>https://po-ru.com/2026/06/10/week-283-expensive-plastic</id><content type="html" xml:base="https://po-ru.com/2026/06/10/week-283-expensive-plastic"><![CDATA[<p><strong>The small crack</strong> in the shelf in the fridge door has graduated to a big
crack, and a shard even fell out. I looked up the spare part – it’s just a
squared-off polystyrene bucket – and it costs £82! That’s one eighth of the
cost of the entire fridge! Unfortunately, the extended warranty on the fridge
was only for three years, and this is closer to five years old.</p>

<p>However, I did find the same part for sale from France, with free delivery,
taxes paid, for half the price, so I’ve ordered it from there. It takes a
little longer, but I’ll put up with a few days’ delay to get it for half the
price.</p>

<p><strong>I found a mechanical keyboard</strong> for £5.50 in a charity shop, and, after a
quick search to see whether it’s possible to flash new firmware (yes), bought
it. It didn’t work as a keyboard when I plugged it in, but I could see it
was recognised as a USB device. I compiled <a href="https://qmk.fm/">QMK</a> and flashed it, and it worked! I
think it was just set up as a Bluetooth keyboard before; flashing it made it
work as a USB keyboard by default. It’s also supposed to have some LED
backlighting, but they’re off. I’m happy with that: I don’t need flashing
coloured lights on a keyboard.</p>

<p>It’s fun to be able to tweak my own keyboard layout; I’ve set it up so that
Tab works as a layer key when held down, and Tab-u gives me an underscore, the
key that I least enjoy having to stretch to reach on a normal keyboard (and
which I have to type a lot while programming).</p>

<p><strong>Friday was overcast,</strong> so the sun didn’t get a chance to heat up the loft,
and I finally had the opportunity to spend the day up there sorting it out.
I found a couple of things I had been looking for, cleared out a lot of old
cardboard boxes, and brought down some things to donate to the charity shop.</p>

<p>Now there’s more space up there, I was able to move some things from my office
that I don’t need so frequently.</p>

<p><strong>In the loft, I came across my old point-and-shoot camera,</strong> a Panasonic Lumix
DMC-FX01 with a 6 megapixel CCD sensor from 2006. I looked through the pictures
on it and was impressed with how good a job it did. The photos really look like
<em>photos</em> somehow. Here are a couple from 2013, taken in San Francisco in the
now-defunct United States of America:</p>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/sf-chinatown-2013.webp"><img src="https://images.po-ru.com/opt/sf-chinatown-2013.webp" alt="A street in San Franscisco's Chinatown, with signs in Chinese and lanterns
hanging across the street." /></a>
  
  <figcaption><p>San Francisco Chinatown</p>
</figcaption>
  
</figure>

<figure class="image-container">
  <a href="https://images.po-ru.com/opt/sf-hill-bay-bridge-2013.webp"><img src="https://images.po-ru.com/opt/sf-hill-bay-bridge-2013.webp" alt="A street in San Franscisco's Chinatown, with signs in Chinese and lanterns
hanging across the street." /></a>
  
  <figcaption><p>Looking downhill towards the Bay Bridge</p>
</figcaption>
  
</figure>

<p>Also on the 2 GB SD card: a photo of someone I used to work with, who
is now worth $3.9 billion (I checked). It’s a reminder of a very different
time in my life, that could have gone in another direction entirely. But I’m
glad my life turned out how it has, even if I do have to pay a mortgage.</p>

<p><strong>The rubberised coating</strong> on the camera had gone the way of all such rubberised
coatings, but with a bit of effort and some methylated spirits I was able to
remove it to leave a slightly shinier but no-longer-sticky device. I bought
a new battery (the old one no longer held a charge) and I’m going to take the
camera out for a photo walk some time soon.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[The small crack in the shelf in the fridge door has graduated to a big crack, and a shard even fell out. I looked up the spare part – it’s just a squared-off polystyrene bucket – and it costs £82! That’s one eighth of the cost of the entire fridge! Unfortunately, the extended warranty on the fridge was only for three years, and this is closer to five years old.]]></summary></entry><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></feed>