How to prevent Payment Pointer fraud


Web Monetization The Web Monetization API allows websites to automatically and passively receive payments from Web Monetization-enabled visitors.

There's a new Web Standard in town! Meet WebMonetization - it aims to be a low effort way to help users passively pay website owners. The pitch is simple. A website owner places a single new line in their HTML's <head> - something like this: <link rel="monetization" href="https://wallet.example.com/edent" /> That address is a "Payment Pointer". As a user browses the web, their browser takes note of all the sites they've visited. At the end of the month, the funds in the user's digital…

Continue reading →

Book Review: The Wicked of the Earth by A. D. Bergin


Book cover with a city in the background.

My friend Andrew has written a cracking novel. The English Civil Wars have left a fragile and changing world. The scarred and weary inhabitants of Newcastle Upon Tyne enlist a Scottish "Pricker" to rid themselves of the witches who shamelessly defy god. Many are accused, and many hang despite their protestations. The town settles into an uneasy peace. And then, from London, rides a man determined to understand why his sister was accused and whether she yet lives. Stories about the witch…

Continue reading →

Book Review: The Little Book of Ikigai - The secret Japanese way to live a happy and long life by Ken Mogi


Two koi carp swim on a book cover.

Can a Japanese mindset help you find fulfilment in life? Based on this book - the answer is "no". The Little Book of Ikigai is full of trite and unconvincing snippets of half-baked wisdom. It is stuffed with a slurry of low-grade Orientalism which I would have expected from a book written a hundred years ago. I honestly can't work out what the purpose of the book is. Part of it is travelogue (isn't Japan fascinating!) and part of it is history (isn't Japanese culture fascinating!). The…

Continue reading →

Create a Table of Contents based on HTML Heading Elements


The PHP logo.

Some of my blog posts are long. They have lots of HTML headings like <h2> and <h3>. Say, wouldn't it be super-awesome to have something magically generate a Table of Contents? I've built a utility which runs server-side using PHP. Give it some HTML and it will construct a Table of Contents. Let's dive in! Table of ContentsBackgroundHeading ExampleWhat is the purpose of a table of contents?CodeLoad the HTMLUsing PHP 8.4Parse the HTMLPHP 8.4 querySelectorAllRecursive loopingMissing…

Continue reading →

Why do all my home appliances sound like R2-D2?


Screenshot from Empire. A digital display with red writing.

I have an ancient Roomba. A non-sentient robot vacuum cleaner which only speaks in monophonic beeps. At least, that's what I thought. A few days ago my little cybernetic helper suddenly started speaking! 🔊 💾 Download this audio file. Not exactly a Shakespearean soliloquy, but a hell of a lot better than trying to decipher BIOS beep codes. All of my electronics beep at me. My dishwasher screams a piercing tone to let me know it has completed a wash cycle. My kettle squarks mourn…

Continue reading →

What does a "Personal Net Zero" look like?


Five years ago today, we installed solar panels on our house in London. Solar panels are the ultimate in "boring technology". They sit on the roof and generate electricity whenever the sun shines. That's it. This morning, I took a reading from our generation meter: 19MWh of electricity stolen from the sun and pumped into our home. That's an average of 3,800 kWh every year. But what does that actually mean? The UK's Department for Energy Security and Net Zero publishes quarterly reports…

Continue reading →

How to Dismantle Knowledge of an Atomic Bomb


A confused little cardboard robot is lost amongst the daisies

The fallout from Meta's extensive use of pirated eBooks continues. Recent court filings appear to show the company grappling with the legality of training their AI on stolen data. Evidence shows an employee asking if what they're doing it legal? Will it undermine their lobbying efforts? Will it lead to more regulation? Will they be fined? And, almost as an afterthought, is this fascinating snippet: If we were to use models trained on LibGen for a purpose other than internal evaluation, we…

Continue reading →

When Gaussian Splatting Meets 19th Century 3D Images


Two very similar photos of a horse and card in a street.

Depending on which side of the English Channel / La Manche you sit on, photography was invented either by Englishman Henry Fox Talbot in 1835 or Frenchman Louis Daguerre in 1839. By 1851, Englishman Sir David Brewster and Frenchman Jules Duboscq had perfected stereophotography. It led to an explosion of creativity in 3D photography, with the London Stereoscopic and Photographic Company becoming one of the most successful photographic companies of the era. There are thousands of stereoscopic…

Continue reading →

Review: WiFi connected Air Conditioner


Air con unit is 30 cm wide and deep. 70cm tall.

Summer is coming. The best time to buy air-con is before it gets blazing hot. So, off to the Mighty Internet to see if I can find a unit which I can attach to my burgeoning smarthome setup. I settled on the SereneLife 3-in-1 Portable Air Conditioning Unit. It's a small(ish) tower, fairly portable, claims 9000 BTU, is reasonable cheap (£160ish depending on your favourability to the algorithm), and has WiFi. Why WiFi? I know it is a trope to complain about appliances being connected to the …

Continue reading →

Extracting content from an LCP "protected" ePub


Chrome debug screen.

As Cory Doctorow once said "Any time that someone puts a lock on something that belongs to you but won't give you the key, that lock's not there for you." But here's the thing with the LCP DRM scheme; they do give you the key! As I've written about previously, LCP mostly relies on the user entering their password (the key) when they want to read the book. Oh, there's some deep cryptographic magic in the background but, ultimately, the key is sat on your computer waiting to be found. Of…

Continue reading →

Some thoughts on LCP eBook DRM


The Readium logo.

There's a new(ish) DRM scheme in town! LCP is Readium's "Licensed Content Protection". At the risk of sounding like an utter corporate stooge, I think it is a relatively inoffensive and technically interesting DRM scheme. Primarily because, once you've downloaded your DRM-infected book, you don't need to rely on an online server to unlock it. How does it work? When you buy a book, your vendor sends you a .lcpl file. This is a plain JSON file which contains some licencing information and a…

Continue reading →

Ter[ence|ry]


A visitor badge with my name hideously misspelled.

My name is confusing. I don't mean that people constantly misspell it, but that no-one seems to know what I'm called. Let me explain. British parents have this weird habit of giving their children long formal names which are routinely shortened to a diminutive version. Alfred becomes Alf, Barbara becomes Babs, Christopher becomes Chris - all the way down to the Ts where Terence becomes Terry. And so, for most of my childhood, I was Terry to all who knew me. There was a brief dalliance in my…

Continue reading →