"Oh yes, please give me a plausible-sounding almost-summary of things I am pretending to be interested in. You know. Technologies. Companies. Fast lane."
But it's a good reminder to download my data before they inevitably self-immolate.

Part 2 is, perhaps suprisingly, a follow-up to libinput and lua-plugins (Part 1).
The moon has circled us a few times since that last post and some update is in order. First of all: all the internal work required for plugins was released as libinput 1.29 but that version does not have any user-configurable plugins yet. But cry you not my little jedi and/or sith lord in training, because support for plugins has now been merged and, barring any significant issues, will be in libinput 1.30, due somewhen around October or November. This year. 2025 that is.
Which means now is the best time to jump in and figure out if your favourite bug can be solved with a plugin. And if so, let us know and if not, then definitely let us know so we can figure out if the API needs changes. The API Documentation for Lua plugins is now online too and will auto-update as changes to it get merged. There have been a few minor changes to the API since the last post so please refer to the documentation for details. Notably, the version negotiation was re-done so both libinput and plugins can support select versions of the plugin API. This will allow us to iterate the API over time while designating some APIs as effectively LTS versions, minimising plugin breakages. Or so we hope.
What warrants a new post is that we merged a new feature for plugins, or rather, ahaha, a non-feature. Plugins now have an API accessible that allows them to disable certain internal features that are not publicly exposed, e.g. palm detection. The reason why libinput doesn't have a lot of configuration options have been explained previously (though we actually have quite a few options) but let me recap for this particular use-case: libinput doesn't have a config option for e.g. palm detection because we have several different palm detection heuristics and they depend on device capabilities. Very few people want no palm detection at all[1] so disabling it means you get a broken touchpad and we now get to add configuration options for every palm detection mechanism. And keep those supported forever because, well, workflows.
But plugins are different, they are designed to take over some functionality. So the Lua API has a EvdevDevice:disable_feature("touchpad-palm-detection")
function that takes a string with the feature's name (easier to make backwards/forwards compatible this way). This example will disable all palm detection within libinput and the plugin can implement said palm detection itself. At the time of writing, the following self-explanatory features can be disabled: "button-debouncing", "touchpad-hysteresis", "touchpad-jump-detection", "touchpad-palm-detection", "wheel-debouncing". This list is mostly based on "probably good enough" so as above - if there's something else then we can expose that too.
So hooray for fewer features and happy implementing!
[1] Something easily figured out by disabling palm detection or using a laptop where palm detection doesn't work thanks to device issues
I recently made some improvements to my resize.pl script, which I wrote so that I wouldn't have to understand filtergraph, and it doesn't get a lot of downloads so I figured I might as well hype it. It is one of the single most useful scripts I've written. I used it daily for all sorts of things, and it has underlain many of my workflows for years. If you also would prefer to not learn filtergraph, this is for you. Run it with --help for examples.
Can someone explain to me why lame and ffmpeg have such different ideas about audio volume? Is there some conversion factor that will let me take ffmpeg's number and make it match lame's number?
For example:
# yt-dlp 'https://www.youtube.com/watch?v=c2vCpT1H7u0' # ffmpeg -I *c2vCpT1H7u0* -acodec pcm_s16le -ar 44100 test.wav # lame --replaygain-accurate -f test.wav /dev/null 2>&1 | grep ReplayGain ReplayGain: +6.2dB # lame --replaygain-fast -f test.wav /dev/null 2>&1 | grep ReplayGain ReplayGain: +6.2dB # lame --replaygain-fast -v -f test.wav /dev/null 2>&1 | grep ReplayGain ReplayGain: +5.8dB # ffmpeg -i test.wav -af volumedetect -f null /dev/null 2>&1 | grep _volume: [Parsed_volumedetect_0 @ 0x600001078000] mean_volume: -25.3 dB [Parsed_volumedetect_0 @ 0x600001078000] max_volume: -8.8 dB # ffmpeg -i test.wav -af ebur128 -f null /dev/null 2>&1 | grep I: | tail -1 I: -22.7 LUFS

Why airdropping food in Gaza causes casualties on the ground and will not function as a way to keep the people supplied with food.
It would be easy to bring in enough food by truck, if only Israel did not block the trucks.
It is useless to try to "boost the economy" by expanding an airport unless you arrange for lots more flights to result.
Since lots more flights will advance global disaster, perhaps that amounts to another reason not to expand the airport. The last ones a government should listen to about this question are the airline companies.
The persecutor is reopening various old prisons.
Some were known for illegal cruelty towards the prisoners.
Many of them would be operated by private prison profiteers, make more money if they give prisoners inadequate food and clothing, and cut them off from families.
*In Act of "Brutal Sadism," Israel Bans Gazans From Entering Sea Under Pain of Death.*
In the past, though Israel did not forbid people in Gaza from going into the sea or on a boat, sometimes it killed the people who did.
The persecutor has adopted a clever suggestion for how to strew confusion in the records about people in deportation prison: by having National Guard soldiers handle the processing of jailing them.
Since those soldiers have no experience in doing this, they are sure to make lots of random mistakes, which will prevent the prisoners from contacting their families, contacting their lawyers, or getting medical attention.
Israel's citizenry: punish our nation! *We, Israelis dedicated to a peaceful future for our country and our Palestinian neighbours, write this with grave shame, in rage and in agony. Our country is starving the people of Gaza to death and contemplating the forced removal of millions of Palestinians from the Strip. The international community must impose crippling sanctions on Israel until it ends this brutal campaign and implements a permanent ceasefire.*
The signatories are prominent and admired Israelis; each one's claim to fame is listed.
Here is more about the letter.
I admire their courage and support their call.
It should be noted that Israelis carry out sadistic oppression in the West Bank too
- seizing village land, historical land and water,
- destruction of herds and orchards,
- killing civilians of all persuasions,
- and cruelty,
An Israeli expat explains why sanctions can overcome Netanyahu's political power.
*Advocates of a two-state solution realize time to act is now.* Israel is setting out on to expel Palestinians and colonize, in Gaza and the West Bank. If this isn't stopped now, it will be too late.
The saboteur in chief wants LLMs to draw a blank when they encounter "woke" concepts such as transgender and systemic racism.
This would finally give validity to the acronym "AI", standing for "Artificial Ignorance".
Some forests in Britain are being wiped out by global heating. The old trees are not all dying, but no new trees survive.
The government of occupation is pushing to criminalize nonviolent resistance to the deportation thugs, including identifying those thugs and giving protesters face masks that protect them against pepper spray.
People comprehend better the significance of global heating when the facts are presented in terms of qualitative changes, X happens but previously it didn't, rather than gradual increase in temperatures.
Well, I was right. They are all using the same contractor. But the reality is even more horrible than you probably imagined.
I hesitate to link to someone who doesn't have the good sense to stop holding court in the Nazi Bar (Substack is the Nazi Bar) but here we are:
The Mothership Vortex: An Investigation Into the Firm at the Heart of the Democratic Spam Machine:To understand Mothership's central role, one must understand its origins. The firm was founded in 2014 by senior alumni of the Democratic Congressional Campaign Committee (DCCC): its former digital director, Greg Berlin, and deputy digital director, Charles Starnes. During their tenure at the DCCC, they helped pioneer the fundraising model that now dominates Democratic inboxes -- a high-volume strategy that relies on emotionally charged, often hyperbolic appeals to compel immediate donations. This model, sometimes called "churn and burn," prioritizes short-term revenue over long-term donor relationships. [...]
The core defense of these aggressive fundraising tactics rests on a single claim: they are brutally effective. The FEC data proves this is a fallacy. An examination of the money flowing through the Mothership network reveals a system designed not for political impact, but for enriching the consultants who operate it. [...]
After subtracting these massive operational costs -- the payments to Mothership, the fees for texting services, the cost of digital ads and list rentals -- the final sum delivered to candidates and committees is vanishingly small. My analysis of the network's FEC disbursements reveals that, at most, $11 million of the $678 million raised from individuals has made its way to candidates, campaigns, or the national party committees.
But here's the number that should end all debate:
This represents a fundraising efficiency rate of just 1.6 percent.
This month was a Patreon milestone, and not in a good way: this was the first month since January 2019 that I did not have to mail out any new Patreon cards. That's right, this is the first month ever that we had zero new sign-ups... Patreon has been an extremely helpful channel for helping keep this club alive, so please tell your friends.
If you come to a couple shows a month, it's a bargain. But it's even more of a bargain if you only come to one show a year, because it leaves open the possibility that you will ever be able to see a show here again. Your membership helps ensures that the club will still be around when you need it in the future. (Do you want us to go the way of Oasis? Because otherwise that's how we go the way of Oasis.)
And if you're already a member, thank you for your ongoing support! Can you up your pledge by a few bucks?
I don't want to jinx it, but we may have an incipient plumbing disaster brewing again, so.... Patreon!
It has been a slow few months. Overall attendance has been down. Some folks are theorizing that people are staying home because they are depressed about our country's ongoing self-immolation and speed-run toward fascism and economic collapse. Maybe, who knows. I don't get that, though. Why be sad and drink alone at home when you could be sad and drink alone in a loud room full of strangers?
We've been trying a few new things, throwing stuff at the wall to see what sticks. We have a few flavors of "pop music from 10 years ago" that are sometimes clicking, and we've been trying a few variations of "latin party". Sometimes the secret sauce with those is having both the words "Bad" and "Bunny" on the flyer, but sometimes that doesn't help. Not really the same thing, but Gothicumbia has been killing it, though. Coming up this Saturday!
Every few months I read a breathless article about how the Hot New Trend With The Youth is dance parties that end by 10pm, so they can Get To Bed at a Reasonable Hour. This offends me deeply, because back in my day we twentysomethings and thirtysomethings went to work sleep deprived and hung over and we liked it that way. (We also stunk of other people's cigarettes and I do not miss that.) Yes yes, Old Man Yells At Cloud, I know. Anyway, we tried throwing one of those last week and it flopped. Maybe we'll try again.
And, here are some upcoming events, and some photos from recent parties: Buy tickets! In advance! Berate your friends!
Faux toes...

Yet another day, yet another need for testing a device I don't have. That's fine and that's why many years ago I wrote libinput record
and libinput replay
(more powerful successors to evemu and evtest). Alas, this time I had a dependency on multiple devices to be present in the system, in a specific order, sending specific events. And juggling this many terminal windows with libinput replay
open was annoying. So I decided it's worth the time fixing this once and for all (haha, lolz) and wrote unplug. The target market for this is niche, but if you're in the same situation, it'll be quite useful.
Pictures cause a thousand words to finally shut up and be quiet so here's the screenshot after running pip install unplug
[1]:
This shows the currently pre-packaged set of recordings that you get for free when you install unplug. For your use-case you can run libinput record
, save the output in a directory and then start unplug path/to/directory
. The navigation is as expected, hitting enter on the devices plugs them in, hitting enter on the selected sequence sends that event sequence through the previously plugged device.
Annotation of the recordings (which must end in .yml
to be found) can be done by adding a YAML unplug:
entry with a name
and optionally a multiline description
. If you have recordings that should be included in the default set, please file a merge request. Happy emulating!
[1] And allowing access to /dev/uinput. Details, schmetails...
I really think that Doctor Durand would have been more appropriate.
By champion of electro-therapeutics Samuel Howard Monell, a physician who the American X-Ray Journal cite, rather wonderfully, as having "done more for static electricity than any other living man". [...]
Monell claims that his high frequency currents of electricity could treat a variety of ailments, including acne, lesions, insomnia, abnormal blood pressure, depression, and hysteria. Although not explicitly delved into in this volume, the treatment of this latter condition in women was frequently achieved at this time through the use of an early form of the vibrator (to save the physician from the manual effort), through bringing the patient to "hysterical paroxysm".
We see here that the good name of Tesla has always been usurped by hucksters and quacks:
"It comprises a charging circuit interrupter, condenser, and primary and secondary coils, and is the only Tesla transformer ever brought within so small a compass."
But never mind that, show me some ankle, baby! Oh yeah that's the stuff.
Previously, previously, previously, previously, previously, previously, previously, previously, previously, previously, previously.
Planet Debian upstream is hosted by Branchable.