This is, to some degree, a followup to this 2014 post. The TLDR of that is that, many a moon ago, the corporate overlords at Microsoft that decide all PC hardware behaviour decreed that the best way to handle an eraser emulation on a stylus is by having a button that is hardcoded in the firmware to, upon press, send a proximity out event for the pen followed by a proximity in event for the eraser tool. Upon release, they dogma'd, said eraser button shall virtually move the eraser out of proximity followed by the pen coming back into proximity. Or, in other words, the pen simulates being inverted to use the eraser, at the push of a button. Truly the future, back in the happy times of the mid 20-teens.

In a world where you don't want to update your software for a new hardware feature, this of course makes perfect sense. In a world where you write software to handle such hardware features, significantly less so.

Anyway, it is now 11 years later, the happy 2010s are over, and Benjamin and I have fixed this very issue in a few udev-hid-bpf programs but I wanted something that's a) more generic and b) configurable by the user. Somehow I am still convinced that disabling the eraser button at the udev-hid-bpf level will make users that use said button angry and, dear $deity, we can't have angry users, can we? So many angry people out there anyway, let's not add to that.

To get there, libinput's guts had to be changed. Previously libinput would read the kernel events, update the tablet state struct and then generate events based on various state changes. This of course works great when you e.g. get a button toggle, it doesn't work quite as great when your state change was one or two event frames ago (because prox-out of one tool, prox-in of another tool are at least 2 events). Extracing that older state change was like swapping the type of meatballs from an ikea meal after it's been served - doable in theory, but very messy.

Long story short, libinput now has a internal plugin system that can modify the evdev event stream as it comes in. It works like a pipeline, the events are passed from the kernel to the first plugin, modified, passed to the next plugin, etc. Eventually the last plugin is our actual tablet backend which will update tablet state, generate libinput events, and generally be grateful about having fewer quirks to worry about. With this architecture we can hold back the proximity events and filter them (if the eraser comes into proximity) or replay them (if the eraser does not come into proximity). The tablet backend is none the wiser, it either sees proximity events when those are valid or it sees a button event (depending on configuration).

This architecture approach is so successful that I have now switched a bunch of other internal features over to use that internal infrastructure (proximity timers, button debouncing, etc.). And of course it laid the ground work for the (presumably highly) anticipated Lua plugin support. Either way, happy times. For a bit. Because for those not needing the eraser feature, we've just increased your available tool button count by 100%[2] - now there's a headline for tech journalists that just blindly copy claims from blog posts.

[1] Since this is a bit wordy, the libinput API call is just libinput_tablet_tool_config_eraser_button_set_button()
[2] A very small number of styli have two buttons and an eraser button so those only get what, 50% increase? Anyway, that would make for a less clickbaity headline so let's handwave those away.

Posted Thu Jun 19 01:44:00 2025 Tags:

(satire) *Kristi Noem: Sen. Padilla Had Even Deadlier Opinion That Failed To Go Off.*

Posted Wed Jun 18 22:55:23 2025 Tags:

*CDC official in charge of Covid data resigns ahead of vaccine meeting. … She does not have confidence data will be use[d] to make "evidence-based vaccine policy decisions."*

Resigning from an official position makes no impression on magats. They do not care about the capacity to judge carefully, based on evidence, a question they prefer to judge based on emotion alone, so the government's loss of that capacity does not strike them as significant.

It would be more effective to stay in the position and criticize vociferously whenever magat officials. Eventually they will fire you, and your reproach will win more attention.

Posted Wed Jun 18 22:55:23 2025 Tags:

*California bill proposes misdemeanor for officers who cover their face on duty.*

I would expect there to be an exception for undercover cops that infiltrate criminal activities. That activity is useful. But it will be a challenge to draw up a rule to distinguish legitimate undercover investigation from anonymous snatches.

Posted Wed Jun 18 22:55:23 2025 Tags:

Explaining how the UK could take over the incompetent and corrupt water companies without giving them to any other companies, and without paying a ransom to anyone.

Posted Wed Jun 18 22:55:23 2025 Tags:

*Israeli government issuing "illegal" orders that must not be obeyed, say IDF intelligence officers.*

Unlike the usual position of Israeli opposition to the war, based on the wish to ransom the Israeli hostages soon, this opposition is based on recognizing the right to life of Palestinians. The "illegal orders" are illegal because they are orders to kill innocent Palestinians, with no military justification — and that makes them war crimes.

And they are being presented by prestigious army officers who back up their criticism with defiance — refusing to obey those illegal orders.

This resistance has the potential to shake the Netanyahu government. I hope so.

Posted Wed Jun 18 22:55:23 2025 Tags:

Lawful protesters should be free to cover their faces, and in the US, the Supreme Court has recognized their right to do so.

The article contrasts lawful protest with civil disobedience. However, it is an obvious error to categorized whistleblowing as a kind of civil disobedience. Whistleblowing is not symbolic disobedience, it is direct action.

Posted Wed Jun 18 22:55:23 2025 Tags:

The proposed My Body, My Data Act would prohibit "collecting, using, retaining or disclosing information about someone’s reproductive health," except for a "specific request". Because of the words "collecting" and "retaining", this might do some real good. Texas can't use a subpoena retroactively to make a system collect or retain data that it did not collect or did not retain.

It would be crucial to make sure that offer the option of storing the data solely on the device. If the only mode of operation that an app offers is to store the data in some cloudy server, and the user asks the app to do anything with per data, that might create a loophole: asking the app to do anything might be construed as an "explicit request" for the app/server to collect the data and retain it.

Other dark patters or manipulative money saving offers might also be used to manipulate people into making the poisonous "request".

As the Texas example shows, reproductive health data is not the only data that can be used for faith-based repression of abortion, birth control and medicine. Location data can serve the same unjust purpose. The requirements for collecting or retaining location records must be made bulletproof against fanatical officials willing to distort the truth or lie outright.

Posted Wed Jun 18 22:55:23 2025 Tags:

Organized groups of Muslims in Australia are pressuring for a unified definition of racism (or bigotry), so as to block the push for an unjust criterion for antisemitism.

Bravo! This is an important issue, and they have chosen the right direction for solving it.

Side issue:

The word "racism" means prejudice based on race. A prejudice based on religion, sex, gender, national origin, or caste, is not racism. It is a similar moral issue, and may be equally unjust, but it doesn't fit into the word "racism".

Let's not adopt terminology that builds confusion into the moral foundation of our views. When we want to reject bigotry whether based on race or not, let's use the broader word "bigotry".

Posted Wed Jun 18 22:55:23 2025 Tags:

An ecologically important protected wetland in Australia has been attacked by a toxic algae bloom, brought about by human-caused global heating and pollution. The bloom is likely to repeat whenever the high temperatures repeat.

Posted Wed Jun 18 22:55:23 2025 Tags:

To ensure Americans get less help in coping with disasters, the wrecker plans to abolish FEMA and take direct White House control over the distribution of aid.

Giving the job to people he has personally appointed will also cause confusion that will surely reduce what really gets done.

Posted Wed Jun 18 22:55:23 2025 Tags:

There’s a deep and technical literature on ways of evaluating algorithms for picking the winner of ranked choice ballots. It needs to be said that especially for cases where there’s only a single winner most of the time all the algorithms give the same answer. Ranked choice ballots are so clearly superior that getting them adopted at all, regardless of the algorithm, is much more important than getting the exact algorithm right. To that end instant runoff has the brand and is the most widely used because, quite simply, people understand it.

In case you don’t know, instant runoff is meant to do what would happen if a runoff election would take place but it happens, well, instantly. Technically (well, not so technically) that algorithm isn’t literally used. That algorithm would involve eliminating all candidates except the top two first place vote getters and then running a two way race between them on the ballots. That algorithm is obviously stupid, so what’s done instead is the candidate who gets the fewest first place votes is eliminated and the process is repeated until there’s only one candidate left. So there’s already precedent for using the term ‘Instant Runoff’ to refer to ranked ballot algorithms in general and swapping out the actual algorithm for something better.

There’s a problem with instant runoff as commonly implemented which is a real issue and is something the general public can get behind. If there’s a candidate which is listed second on almost everyone’s ballots then they’ll be the one eliminated first even though the voters would prefer them over all other candidates. Obviously this is a bad thing. The straightforward fix for this problem is to simply elect the candidate who would win in a two-way race against all other candidates, known as the condorcet winner. This is easy to explain but has one extremely frustrating stupid little problem: There isn’t always a single such candidate. Such scenarios are thankfully rare but unfortunately the algorithms proposed for dealing with them tend to be very technical and hard to understand and result in scaring people into sticking with instant runoff.

As a practical matter, the improved algorithm which would be bar far the easiest to get adopted would be this one: If there’s a single Condorcet winner they win. If not then the candidate with the fewest first place votes is eliminated and the process is repeated. This is easy enough to understand that politicians won’t be scared by it and in every case it either gives the same answer as the standard instand runoff or a clearly superior one, so it’s clearly superior with no real downsides.

This algorithm also has the benefit that it may be objectively the best algorithm. If the more technical methods of selecting a winner are used then there’s a lot of subtle gaming which can be done by rearranging down-ballot preferences to make a preferred candidate win, including insidious strategies where a situation where there is no single Condorcet winner are generated on purpose to make the algorithm do something wonky. Looking only at top votes minimizes the amount of information used hence reducing potential gaming potential and also maximizes the damage votes are doing to their own ballot if they’re trying to play games. In this case the general voter’s intuitions that complex algorithms are scary and top votes are very important are good ones.

Posted Wed Jun 18 21:06:23 2025 Tags:
Lately I am getting a bunch of 404s that are a real url but with "/null" on the end, and this just makes me so, so sad. I deserve a better class of attacker.

Previously, previously.

Posted Mon Jun 16 06:58:51 2025 Tags:
Trying something new on the DNA Lounge calendar pages, let me know how it works. When an event has embedded videos, they no longer play inline and tiny: when you click on them, a full-width player pops up.

The good:

  • The page loads faster because it's just loading a thumbnail image from my site, instead of pulling in megabytes of iframe embed crap from YouTube even if you aren't going to ever press play;

  • One less surveillance tracker from Google, because nothing is loaded from their site until and unless you actually press play.

The bad:

  • The animation when it expands from the thumbnail to the player is kind of stuttery. Maybe I should turn that off?

  • To the shock of absolutely nobody, I can't figure out how to get the popup video to auto-play on iOS, even though this is all in direct response to a click/touch event. If anyone can make that go, please let me know.

    To the shock of... well... me, autoplay seems to work fine on desktop Safari, Firefox and Chrome.

Previously, previously.

Posted Sun Jun 15 19:05:37 2025 Tags:
I think maybe I have gotten the DNA Lounge webcast behaving better, but not entirely, and I could use some help understanding what's going wrong.

I think one of the things that did help was increasing the segment size from 2s to 6s, which flies in the face of 100% of the advice online.

I have also gotten my hls-continuity thing working again, which is the HLS proxy that I wrote with the intent that the stream should never stop sending video even when the source disconnects. I had to basically rewrite it to work with mediamtx instead of nginx, and I don't really understand what about it meant that it had been working fine with nginx, but was working decidedly not-fine with mediamtx. But it seems to mostly be working now?

A few things about it are a little wonky, and if someone who understands this crap could help me diagnose this, that would be greatly appreciated:

  1. When it goes into colorbars mode, the player often does a little "loading" animation for a few seconds before showing the first colorbars segment. I absolutely do not understand why this is, because the m3u8 file already has the proper duration and number of segments. I believe all segments start with a keyframe.

  2. When coming out of colorbars mode and going back to real video, sometimes the video frame is frozen. Audio continue playing. Video comes back "after a while" or if you bonk the play-head slider.

  3. When I was serving the raw, non-proxied stream from mediamtx, the player's play-head behaved as I expected: always pegged to the right side, with the "live" light lit up. But with my proxy in place, very often the play-head will end up lagging behind. Even when colorbars are not involved. Dragging it to the right or bonking the "live" button brings it back, but shortly it happens again.

    As the proxy does not transcode video -- it uses exactly the same TS files, just with a regenerated m3u8 file with different sequence numbers -- I do not understand how this is possible or what is different.

  4. Sometimes I'll go a whole day without it going into colorbars mode. Sometimes, like right now for instance, it happens a lot, and usually for short durations, like 12 seconds / 2 segments. It seems that mediamtx is behaving as if the source had disconnected and then immediately reconnected. I don't know whether to blame OBS, mediamtx, Monkeybrains, or all three.

    OBS consistently says 0 dropped frames, 4% CPU.

    Sometimes I see this: the internal mediamtx will say:

    2025/06/13 14:06:14 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 2 frames 2025/06/13 14:06:15 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 26 frames 2025/06/13 14:06:18 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 10 frames 2025/06/13 14:06:19 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 37 frames 2025/06/13 14:06:20 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 35 frames 2025/06/13 14:06:21 WAR [RTMP] [conn [::1]:52386] connection is too slow, discarding 2 frames 2025/06/13 14:06:25 INF [RTMP] [conn [::1]:52386] closed: too many reordered frames (27) 2025/06/13 14:06:30 INF [RTMP] [conn [::1]:52427] opened

    and the external one will say:

    2025/06/13 14:06:25 INF [RTMP] [conn 52.119.114.44:52388] closed: EOF 2025/06/13 14:06:25 INF [HLS] [muxer live] destroyed: terminated 2025/06/13 14:06:33 INF [RTMP] [conn 52.119.114.44:52429] opened

    This sounds like the server is hanging up on OBS and it is reconnecting, but OBS doesn't give me any indication of that.

    It says a connection is too slow, but how could the connection between localhost OBS and localhost mediamtx be too slow, with 4% OBS load, load average 1.7, on a Mac mini M1? OBS is using Apple hardware MPEG encoding. (Or when it says "too slow" is it referring to the outgoing uplink connection? How would it even know?)

  5. Also sometimes the external server says this, which, WTAF, how is this even possible? Sometimes that number just keeps going up:

    2025/06/13 14:13:08 WAR [HLS] [muxer live] segment duration changed from 6s to 8s - this will cause an error in iOS clients

Ways in which you could help me out with this:

  1. Examine the DNA Lounge video stream as-is, and tell me what seems to be wrong with it; or

  2. Run hls-continuity.pl on your own system, proxying your own OBS / mediamtx stream, and see if you can detect any problems with that when you toggle the source on and off.

The Bothans thank you in advance.

Previously, previously, previously.

Posted Fri Jun 13 21:27:27 2025 Tags:

Spinning Platters did a nice write-up of our Lords of Acid + Little Miss Nasty show. (We almost never get reviews of our shows, or press about upcoming ones, so that's always great to see.)

A few notes on upcoming shows:

RIP Douglas McCarthy of Nitzer Ebb. For those wondering: McCarthy had stepped back from touring with the band due to his health, and had not been scheduled to be a part of this tour, so our Nitzer Ebb show on Sep 11 is still happening as planned, with founding member Bon Harris on vocals.

That's a busy weekend, because the following day we have Missing Persons and the day after that, Glōm Fest, both of which I'm looking forward to.

More immediately, let me draw your attention to:

Jul 4: we have a live performance by Dev (of Like a G6 and Bass Down Low fame.) She hasn't been back here since 2015.

Jun 7: the return of Gothicumbia, which is a really fun party.

Film screenings!

Coming up in just four weeks on Jul 5, Cyberdelia and 8bitSF present Super Mario Bros '93 ! A screening of the audacious 1993 cyberpunk masterpiece that Nintendo wishes we would all forget, this unhinged fever-dream is presented with a re-imagined musical score performed LIVE by San Francisco chiptune legend, Crashfaster! To be followed, of course, by a chiptunes dance party and a Luigi costume contest.

We had some difficulty getting the license for this, because at first they thought that we wanted to screen the 2023 movie, which is "in moratorium".

Reader, we did not.

Then on Sep 5 it's the big event, Cyberdelia proper, celebrating the thirtieth anniversary of Hackers.

On Nov 7 we've got Goblin Legacy with Maurizio Guarini, performing selections from their film scores for Suspiria, Patrick, Buio Omega, Deep Red, Tenebrae and Dawn of the Dead. This won't be a screening of an entire movie, but will feature clips from their long repertoire.

Street fair day shows!

We've got the Indie Oasis Big Gay Day Party on Jun 28, Pride weekend, 3pm - 9pm. And we will have a party in DNA Pizza during Dore Alley on Sep 27 with DJ PrepAPig, which is one of the best DJ names I've heard recently.

I haven't done a photo gallery round-up in quite some time, so here are some galleries from some recent notable shows that you should have come to:

Posted Fri Jun 13 20:20:21 2025 Tags:
Five months ago I added an infinite-nonsense honeypot to poison LLM scrapers.

Today, it comprises 25% of my total URLs served.


Previously, previously, previously, previously, previously, previously, previously, previously, previously, previously.

Posted Wed Jun 11 09:13:20 2025 Tags:
The weaponization of Waymo:

Other witnesses and journalists who were there shared the same story: People summoned the cars to light them on fire when they arrived. Protestors were reportedly calling them "spy cars" as they were vandalized and set ablaze, and some noted how the cars can share data with the LAPD.

As a result, there's been some speculation that the cars were burned to destroy evidence. There's likely more to it than that -- and that the cars weren't torched to destroy evidence as much to punish collaborators. [...]

ICE raids are carried out using data provided by Silicon Valley companies -- most notably Peter Thiel and Alex Karp's Palantir, which has a $30 million contract with ICE to manage a "real-time" surveillance system on immigrants. But whether directly or through third party contractors, much of big tech, including Google, has made deals with ICE, too. [...]

In light of previous epidemics of self-driving car trashings and torchings, such actions are liable to spring from the growing reservoir of public anger towards a Silicon Valley that has grown unaccountable and extractive -- and has now largely aligned itself with a punitive state.


Please send more photos of burning or burned murderbots. These images are my new happy place.

I will also accept donations of videos of same, but only if they don't have people talking over them or are loaded with watermarks. Those make me itch. Something with a nice crackle. Like a Yule log.


Previously, previously, previously, previously, previously, previously, previously, previously.

Posted Tue Jun 10 21:41:33 2025 Tags:
Why did the fires cause such obliteration? The answer starts with the battery.

Each I-Pace can carry roughly 90 kilowatt-hours of stored chemical energy, comparable to about 170 pounds (77 kilograms) of TNT. That energy is distributed across hundreds of lithium-ion pouch cells, which are sealed in flammable electrolyte and separated by polymer films as thin as snack-bag plastic. When any one cell is punctured or overheated -- or set aflame with an incendiary device -- chemical reactions generate more heat than the cell can shed, and neighboring cells follow in a chain reaction. This positive-feedback loop is called "thermal runaway." According to a 2024 study in the Journal of Power Sources, as the battery burns, its temperature can soar past 1,000 degrees Celsius.

At that point, the pack becomes its own furnace. Aluminum sections of the car's floor surrender, liquefying at about 660 degrees C and taking the underbody with them. Magnesium parts -- seat-base frames, the bracket that holds the steering column and the cross-car beam that is located behind the dashboard -- flare bright white. Patches of magnesium can catch fire and burn fiercely. Plastics disappear as vapor, wheels lose their tire, and even the lidar mast on the roof quickly resembles an overcooked marshmallow. A 2025 study in Fire Technology and a 2023 study in Applied Energy noted that the placement of the battery on the floor -- sometimes referred to as a "skateboard architecture" -- makes the floor the hottest zone. Thus, flames radiate upward and outward, cooking everything above.

All the while, the battery cells vent hydrogen fluoride, a toxic, lung-searing gas documented in laboratory test burns of commercial lithium packs. [...] Historically, first responders without supplied-air protection have developed throat burns and breathing difficulties upon arriving at scenes with burning lithium-ion batteries. Depending on the hydrogen fluoride levels, an exposed person can begin coughing up blood within minutes. [...]

Firefighters call such blazes "battery box fires," and they hate them. Flame-retardant foams do little, and fire departments now favor high-pressure water lances or immersion pits. Dousing a runaway battery usually means lowering temperatures below the runaway threshold for every last battery cell -- a task that, according to a 2021 interview with Thayer Smith of the Austin Fire Department, can swallow 30,000 to 40,000 gallons (about 114,000 to 151,000 liters) of water. That's at least 40 times the amount of water required to extinguish a gasoline-car fire.

Previously, previously, previously, previously, previously, previously, previously.

Posted Tue Jun 10 21:13:49 2025 Tags:

Planet Debian upstream is hosted by Branchable.