This feed omits posts by rms. Just 'cause.

jwz (Jamie Zawinski)
CSS and printing
Dear Lazyweb,

Can someone tell me how the fix the problem that when I try to print any of my flyer pages in Safari (e.g.) it shows up blank in the print dialog? Most of the time, hitting cancel and then print again makes it show up, but not always, so something's racing. I even tried perversions like adding a busy-wait in window.onbeforeprint.

The problem does not seem to occur in Chrome and Firefox.

Previously, previously, previously.

Posted
jwz (Jamie Zawinski)
I Am An AI Hater
It was hard to pick pull quotes from this because every paragraph is perfect.

Anthony Moser:

I am here to be rude, because this is a rude technology, and it deserves a rude response. Miyazaki said, "I strongly feel that this is an insult to life itself." Scam Altman said we can surround the solar system with a Dyson Sphere to hold data centers. Miyazaki is right, and Altman is wrong. Miyazaki tells stories that blend the ordinary and the fantastic in ways people find deeply meaningful. Altman tells lies for money. [...]

I do understand: you want permission. There's a machine in the corner wrapped in human skin that makes things out of shit and blood to look like whatever you want (as long as you don't look too closely). You gave one to your teacher and they didn't notice. Your boss told you to use it after they laid off half the team and it was fine. You fed one to your kids and they liked it. You want to know you can use it sometimes without me thinking less of you. You don't need me to believe it's useful, you just want me to be polite about it.

But I am a hater, and I will not be polite. The machine is disgusting and we should break it. The people who build it are vapid shit-eating cannibals glorifying ignorance. I strongly feel that this is an insult to life itself.

I became a hater by doing precisely those things AI cannot do: reading and understanding human language; thinking and reasoning about ideas; considering the meaning of my words and their context; loving people, making art, living in my body with its flaws and feelings and life. AI cannot be a hater, because AI does not feel, or know, or care. Only humans can be haters. I celebrate my humanity.

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

Posted
jwz (Jamie Zawinski)
The power we use and the power we give
Philip Bump:

It is useful and important to look at this question not through the lens of persuasion but the lens of power. Your engagement and your work, not unlike your vote, is a form of power, something you can choose to grant to others. Those others, particularly organizations and companies, accrue that power to use as they see fit. [...]

[Substack] has done a good job creating tools that make it easy to publish. A number of well-regarded journalists use those tools and have built their personal brands by doing so. [...] But they have done so while sharing that growth with Substack, a company that intentionally provides a voice to white nationalist and Nazi propaganda. They have transferred their power to a company that has used it to promote toxic rhetoric in the guise of "having a debate." [...]

Even if they worked perfectly, Substack and Twitter/X only accrue power over the long term for Substack and X. If one of Substack's most popular authors were to be abducted by aliens tomorrow, Substack retains the value she created on the company's behalf. It benefits institutionally from her using the platform. She helped build its institutional power -- which it currently uses, in small part, to ensure Nazis a voice in the discussion.

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

Posted
jwz (Jamie Zawinski)
The Pigs Who Stare At Crosswalks
Florida Deploys Police To Stare At Crosswalks, Stop Them From Being Painted Rainbow Colors:

Earlier this week, officers painted the rainbow stripes into stark black and white. Citizens repainted them. Road crews erased them again. The back-and-forth has escalated to the point where the state has now deployed as many as six police squad cars to guard asphalt, their sole mission to prevent the reemergence of rainbow colors at the site of one of the worst anti-LGBTQ+ massacres in U.S. history.

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

Posted
jwz (Jamie Zawinski)
"We'll notify next of kin if she dies."
Mass. mom detained by ICE for 10 days over decades-old minor marijuana charge:

When Rosa asked about his wife's medical care, the agent cited HIPAA laws as a barrier to knowing her health issues. Taken aback, Rosa pointed out that doctors can share medical information with law enforcement when a patient is in custody, which is specifically outlined in HIPAA.

"He said a very disgusting joke after that," Rosa recalled.

"He said, 'We'll notify next of kin if she dies.' And at that moment, I knew that I was no longer dealing with humans."

"I knew I was dealing with someone that is sick in the head, and this was the person who made the decision to incarcerate her," Rosa said.

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

Posted
jwz (Jamie Zawinski)
Today in Christofascism
If there's one person who knows a little something about being The Antichrist, it's probably Sweaty Peter Thiel:

You are warmly invited to a series of four lectures by Peter Thiel addressing the topic of the biblical Antichrist:

Peter is a technology entrepreneur and investor who has spent much of his career writing and speaking about how his Christian faith informs his understanding of the world. His remarks will be anchored on science and technology, and will comment on the theology, history, literature, and politics of the Antichrist.

These lectures are off-the-record.

The lectures are designed as a cohesive series, with each session building on the last. To support continuity and community, tickets are only available for the full four-part program.

This event is organized by a 501(c)(3) nonprofit called "ACTS 17 Collective: Acknowledging Christ in Technology and Society".

I can't tell how much they were charging to attend this Amway meeting because it's sold out.

And, as noted, "off the record".

Gotta spread the Good Word, but not too far!

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

Posted
jwz (Jamie Zawinski)
Don't Let His Based Tweets Make You Forget That Pick-Me Presidential Hopeful Gavin Newsom Actually Sucks
Newsom can successfully ape the worst politicians in America because he's not so different from them.

Newsom is at his most cartoon-evil-villain when it comes to the rights and dignity of the most at-risk Americans. In March, he had notorious rightwinger Charlie Kirk on his podcast in order to throw trans teenagers under the bus, and earlier this summer, he repeated worries about trans teen athletes stealing "opportunities" from cis teen athletes -- on, you guessed it, another podcast. (As an aside, you should not have time to have your own fucking podcast if you're the governor of the fourth-largest economy in the world.)

But Newsom's favorite vulnerable demographic to stick it to is the homeless. Since the Supreme Court ruled in 2024 that jurisdictions can criminalize sleeping outside, he's doubled down on efforts to clear homeless encampments across the state, bragging that 16,000 such communities have been demolished -- and gleefully participated in destroying some himself. He's been personally involved in eliminating such encampments for years (see the above photo, which is from 2021), including Oakland's Wood Street camp in 2022. [...]

Newsom's success as a politician thus far (and I mean that in the most derogatory way possible) is due to his adoption of whichever policies or perspectives will get him attention and, in his calculus, win him support -- that's what he's doing with the Trump-y tweets, and with the gerrymandered congressional district map he approved yesterday. Both moves illustrate what is appealing about Newsom to broad swathes of the Democratic base: a sociopath opportunist on their side willing to take on the sociopath opportunist in the White House. And while I famously agree that the Democratic Party needs leadership that is willing to challenge Trump's brownshirt administration, I'm not sure we need it from someone who hates queer and/or poor people as much as Trump and his friends.

Previously, previously, previously.

Posted
jwz (Jamie Zawinski)
ICE Is Using So Much Tear Gas in Portland, a School Abandoned Its Campus
ICE! It's got what lungs crave:

An ICE facility in South Portland has resurfaced as a hotbed where activists have been clashing with federal enforcement officers for months. [...] But as the protests have grown, so have the amount of weapons used against them. And the surrounding neighborhoods are suffering as a result.

Situated just a block from the complex, the Cottonwood School decided to abandon its longtime campus in a 4-2 vote, citing concerns around students' health. "We have been impacted mostly by chemical weapons that are being used against protesters in the vicinity of our school," Laura Cartwright, Cottonwood's interim executive director, explained of the decision to local news. "Daily, we were finding that [sic] munitions on our play yard, we were getting footage in the evening of green gases, and gases were being used near our gardens and enveloping our area." [...]

Local residents have also expressed concern amid the growing crackdowns. "I'm at home," one mother tells KGW News in June. "Why are you shooting at me at my home? What if my baby was on the balcony?" Another told Koin 6 about the long-term effects of tear gas. "I've got friends who also live in these buildings, and they can't open their windows."

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

Posted
jwz (Jamie Zawinski)
Blade Runners needed
How do I find a drug dealer who will sell me these dank Canadian vaccine doses? Without needing to risk crossing a border myself. Will I need to use cryptocurrency for this, since buying illegal drugs is still the only use case for Dunning-Krugerrands? (Oh, that and paying ransoms.)

News releases from both Pfizer and Moderna say the new mRNA shots will target the LP.8.1 variant, a descendant of Omicron:

Moderna says it will manufacture vaccine doses for the Canadian market in its new facility in Laval, Quebec and syringes will be filled in Cambridge, Ontario. Both Pfizer's vaccine -- called Comirnaty -- and Moderna's shot -- called Spikevax -- are approved for adults and children six months of age and older.


Update: Welp. Trump and RFK Jr. to Ban COVID-19 Vaccine 'Within Months'.


Previously, previously, previously, previously, previously.

Posted
Peter Hutterer
Why is my device a touchpad and a mouse and a keyboard?

If you have spent any time around HID devices under Linux (for example if you are an avid mouse, touchpad or keyboard user) then you may have noticed that your single physical device actually shows up as multiple device nodes (for free! and nothing happens for free these days!). If you haven't noticed this, run libinput record and you may be part of the lucky roughly 50% who get free extra event nodes.

The pattern is always the same. Assuming you have a device named FooBar ExceptionalDog 2000 AI[1] what you will see are multiple devices

/dev/input/event0: FooBar ExceptionalDog 2000 AI Mouse
/dev/input/event1: FooBar ExceptionalDog 2000 AI Keybard 
/dev/input/event2: FooBar ExceptionalDog 2000 AI Consumer Control 
The Mouse/Keyboard/Consumer Control/... suffixes are a quirk of the kernel's HID implementation which splits out a device based on the Application Collection. [2]

A HID report descriptor may use collections to group things together. A "Physical Collection" indicates "these things are (on) the same physical thingy". A "Logical Collection" indicates "these things belong together". And you can of course nest these things near-indefinitely so e.g. a logical collection inside a physical collection is a common thing.

An "Application Collection" is a high-level abstractions to group something together so it can be detected by software. The "something" is defined by the HID usage for this collection. For example, you'll never guess what this device might be based on the hid-recorder output:

# 0x05, 0x01,                    // Usage Page (Generic Desktop)              0
# 0x09, 0x06,                    // Usage (Keyboard)                          2
# 0xa1, 0x01,                    // Collection (Application)                  4
...
# 0xc0,                          // End Collection                            74
Yep, it's a keyboard. Pop the champagne[3] and hooray, you deserve it.

The kernel, ever eager to help, takes top-level application collections (i.e. those not inside another collection) and applies a usage-specific suffix to the device. For the above Generic Desktop/Keyboard usage you get "Keyboard", the other ones currently supported are "Keypad" and "Mouse" as well as the slightly more niche "System Control", "Consumer Control" and "Wireless Radio Control" and "System Multi Axis". In the Digitizer usage page we have "Stylus", "Pen", "Touchscreen" and "Touchpad". Any other Application Collection is currently unsuffixed (though see [2] again, e.g. the hid-uclogic driver uses "Touch Strip" and other suffixes).

This suffix is necessary because the kernel also splits out the data sent within each collection as separate evdev event node. Since HID is (mostly) hidden from userspace this makes it much easier for userspace to identify different devices because you can look at a event node and say "well, it has buttons and x/y, so must be a mouse" (this is exactly what udev does when applying the various ID_INPUT properties, with varying levels of success).

The side effect of this however is that your device may show up as multiple devices and most of those extra devices will never send events. Sometimes that is due to the device supporting multiple modes (e.g. a touchpad may by default emulate a mouse for backwards compatibility but once the kernel toggles it to touchpad mode the mouse feature is mute). Sometimes it's just laziness when vendors re-use the same firmware and leave unused bits in place.

It's largely a cosmetic problem only, e.g. libinput treats every event node as individual device and if there is a device that never sends events it won't affect the other event nodes. It can cause user confusion though: "why does my laptop say there's a mouse?" and in some cases it can cause functional degradation - the two I can immediately recall are udev detecting the mouse node of a touchpad as pointing stick (because i2c mice aren't a thing), hence the pointing stick configuration may show up in unexpected places. And fake mouse devices prevent features like "disable touchpad if a mouse is plugged in" from working correctly. At the moment we don't have a good solution for detecting these fake devices - short of shipping giant databases with product-specific entries we cannot easily detect which device is fake. After all, a Keyboard node on a gaming mouse may only send events if the user configured the firmware to send keyboard events, and the same is true for a Mouse node on a gaming keyboard.

So for now, the only solution to those is a per-user udev rule to ignore a device. If we ever figure out a better fix, expect to find a gloating blog post in this very space.

[1] input device naming is typically bonkers, so I'm just sticking with precedence here
[2] if there's a custom kernel driver this may not apply and there are quirks to change this so this isn't true for all devices
[3] or sparkling wine, let's not be regionist here

Bram Cohen
System 3

De Kai says the problem with AI is it isn’t mixing system 1 and system 2. I agree but have a completely different spin. The issue isn’t that researchers don’t want to do it, but that they have no idea how to make the two systems communicate.

This communication problem is a good way of explaining the weaknesses in Go AI I wrote about previously. The issue isn’t narrowly that humans can beat the superhuman computers using certain very specific strategies. That’s equivalent to a human chess grandmaster losing to a trained chimpanzee. The issue is that there are systemic weaknesses in the computer’s play which make it much weaker overall, with losing to humans being a particularly comical symptom. Go presents a perfectly presented test case for communicating between system 2 and system 1. The hand coded system 2 for it is essentially perfect, at least as far as tactics go, and any ability to bridge the two would result in an immediate, measurable, dramatic improvement in playing strength. Anyone acting smart for knowing that this is a core issue for AI should put up or shut up. Either you come up with a technique which works on this perfectly engineered test case or you admit that you’re just as flummoxed as everybody else about how to do it.

On top of that we have no idea how to make system 2 dynamic. Right now it’s all painstakingly hand-coded processes like alpha-beta pruning or test driven development. I suspect there’s a system 3. While system 2 makes models, system 3 comes up with models. Despite almost all educational programs essentially claiming to promote system 3 there’s no evidence that any of them do it at all. It doesn’t help that we have no idea how to test it. The educational instruction we have has a heavy emphasis on system 2 with the occasional bit of system 1 for very specific skills. Students can reliably be taught very specific world models and practiced in them. That helps them do tasks but there’s no evidence that it helps their overall generalization skills.

This creates practical problems in highly skilled tasks like music. To a theorist seeing what a self-taught person does is much more likely to turn up something novel and interesting than someone who has been through standard training even though the latter person will be overall objectively better. The problem is that a self-taught person will be 99% reinventing standard theory badly and, if they’re lucky, 1% doing something novel and interesting. Unfortunately they’ll have no idea which part is that 1%. Neither will a standard instructor, who will view the novel bit as merely bad like the vast bulk of what the student is doing and train them out of it. It takes someone with a deep understanding of theory and a strong system 3 themselves to notice something interesting in what a self-taught person has done, point out what it is, and encourage them to polish that thing more rather than abandon it. I don’t have any suggestions on how to make this process work better other than that everyone to get at least some personalized instruction from someone truly masterful. I’m even more at a loss for how to make AI better at it. System 3 is deep in the recesses of the human mind, the most difficult and involved thing our brains have gained the ability to do, and we may be a long ways away from having AI do it well.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Posted
Bram Cohen
The Future Of The Internet

In the future ‘static’ web pages won’t be static at all. They’ll be customized to exactly you, generated in real time by an LLM which knows everything about you. Don’t worry, to combat this horrible enshittification your web browser will have an LLM of its own which takes whatever the web site spewed up and rewrites it to be more aligned to your interests. The two of them will know about each other and have a conversation/negotiation about exactly what will be shown to you on the ‘static’ web.

Unfortunately what will have happened already is that in the past some hacker will also have conversed with the web site. This will be a vibe coded exploit: They’ll have a conversation with their web browser where they give some esoteric information about firmware and convince it that this is very important safety information. Their browser will then have spoken to the web site convincing it of the same thing. The web site will in turn have mentioned this in passing to your web browser, which will have asked it for that information and the web site will have passed it along to win some favor from your browser.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Once that’s all happened in the background your browser, being the helpful agent that it is, will scan your network for any devices for which this information might be relevant. In its searches it will come across your toaster which is directly connected to the network. They won’t speak a common protocol, but that isn’t a problem: The toaster will have a port open with an LLM behind it so you can connect to it and send human language text to communicate. Your browser’s LLM will talk to the toaster’s LLM and tell it the Very Important Safety Information, after which your toaster will thank it profusely and immediately rewrite its firmware.

Then your toaster will catch on fire and burn your house down.

Don’t worry, it’s easy enough to make a toaster’s firmware read-only. But your browser should know about a recently deceased nigerian prince who left no known heirs…

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Posted
Peter Hutterer
xkeyboard-config 2.45 has a new install location

This is a heads ups that if you install xkeyboard-config 2.45 (the package that provides the XKB data files), some manual interaction may be needed. Version 2.45 has changed the install location after over 20 years to be a) more correct and b) more flexible.

When you select a keyboard layout like "fr" or "de" (or any other ones really), what typically happens in the background is that an XKB parser (xkbcomp if you're on X, libxkbcommon if you're on Wayland) goes off and parses the data files provided by xkeyboard-config to populate the layouts. For historical reasons these data files have resided in /usr/share/X11/xkb and that directory is hardcoded in more places than it should be (i.e. more than zero). As of xkeyboard-config 2.45 however, the data files are now installed in the much more sensible directory /usr/share/xkeyboard-config-2 with a matching xkeyboard-config-2.pc for anyone who relies on the data files. The old location is symlinked to the new location so everything keeps working, people are happy, no hatemail needs to be written, etc. Good times.

The reason for this change is two-fold: moving it to a package-specific directory opens up the (admittedly mostly theoretical) use-case of some other package providing XKB data files. But even more so, it finally allows us to start versioning the data files and introduce new formats that may be backwards-incompatible for current parsers. This is not yet the case however, the current format in the new location is guaranteed to be the same as the format we've always had, it's really just a location change in preparation for future changes.

Now, from an upstream perspective this is not just hunky, it's also dory. Distributions however struggle a bit more with this change because of packaging format restrictions. RPM for example is quite unhappy with a directory being replaced by a symlink which means that Fedora and OpenSuSE have to resort to the .rpmmoved hack. If you have ever used the custom layout and/or added other files to the XKB data files you will need to manually move those files from /usr/share/X11/xkb.rpmmoved/ to the new equivalent location. If you have never used that layout and/or modified local you can just delete /usr/share/X11/xkb.rpmmoved. Of course, if you're on Wayland you shouldn't need to modify system directories anyway since you can do it in your $HOME.

Corresponding issues on what to do on Arch and Gentoo, I'm not immediately aware of other distributions's issues but if you search for them in your bugtracker you'll find them.

Bram Cohen
How to make a better smoking cessation app

Smoking cessation apps have a problem starting at the vibe level1. The problem is they act like a doctor trying to make you quit. This is ridiculous. It’s just an app and can’t ‘make’ you do anything. What they should do instead is be a supportive friend giving you minor nudges. Possibly represented by a teddy bear or cute animal which is heavily emotionally invested in your weight loss journey.

What smoking cessation apps do get right is having the user check in whenever they smoke, but they give the wrong message when the user checks in. Instead of trying to grant the user permission to have a cigarette or not it should tell you whether it thinks you should be able to go longer, using an algorithm based on how long you’ve gone between them in the past. This should not be an either/or but a gradient between you’ve gone longer than expected to you definitely should be able to go longer. The user then has the option to indicate on second thought they can go longer or that they really are going to have a cigarette. When they say they’ll go longer they bear should give them words of encouragement ‘good job’ ‘you can do it!’ When they do have a cigarette the bear should say something appropriate to how long they went. Short intervals should get messages like ‘I only want to know because I care about your health’, ‘Don’t worry, I won’t tell anyone’, ‘We all have our setbacks, you can do better next time’ and longer ones getting messages like ‘You went longer than I thought you would. I’m pround of you’.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Yes this is a very codependent bear. It should have the personality of a very sensitive person who cares a lot about you and would cry if you had a cigarette and didn’t tell it. If you go a while without using the app it should send a notification saying it’s worried about you and wants to check in with how you’re doing.

The algorithm for indicating whether the user should be able to hold off longer should be based off how long on average the user has gone recently with an eye towards making it longer. It should adjust the rate at which it’s trying to nudge the user based on how successful the user has been recently at putting off a cigarette after first checking in. If they’ve been successful more often it can extend out, less often and it should back off. At no point should the app ever send a notification to a user that it’s time for a cigarette, even after they checked in and said they can hold off for longer.

At no point should the app ever ask the user if they’ve been smoking on the sly without telling it. That’s a recipe for getting people to stop using it entirely out of shame. Instead the app should tell the users it would be sad if they ever did and let the user feel guilt on their own without ever having to fess up.

1

I am not and have never been a smoker but I’ve been around people trying to quit and the apps truly sucked.

Posted
Bram Cohen
Stored Proofs Of Work

There’s a distinct shortage of Nakamoto consensus algorithms. The ones which have been built and work are proofs of work and proofs of space and time. I’ll now explain a third option, proofs of stored work (and time). I’m not saying this is something which people should rush out and build, but it is something which would work, and is a novel idea, so is worth thinking about.

Like proofs of space, stored proofs of work make responses to a challenge which have some quality, and if that quality is high enough they sign a block which makes it into the blockchain. Also like proofs of work they have to be combined with proofs of time to function. It would be possible to take the Chia codebase change it to use stored proofs of work instead of proofs of space while leaving all the timelording and such alone and the result would be a working system.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

A stored proof of work consists of three things: A public key, a quality multiplier, and a nonce. To check if it’s valid you hash the whole thing to a value between 0 and 1 and multiply by the quality multiplier. If the result is less than 1 it’s valid, otherwise it isn’t. The details of how the hashing is done have the same criteria as ordinary proof of work do. I’m not going to delve into a discussion of whether being asic-resistant or asic-friendly is the better approach here. To find the quality of the response of a valid stored proof of work to a challenge you hash them both together and multiply by the quality multiplier.

The theory behind this fairly trivial but slightly odd construction is that anyone making stored proofs of work gets rewards roughly proportional to the amount of work they’ve done in the past. There’s a very interesting question of whether you could have a good proof of work which accumulates work as it’s done but it’s much more expedient to reward it in constant units and let each miner decide what they want their granularity to be. If they get too few rewards their variance will be extremely high. If they get too many then they’ll have to do a nontrivial amount of compute in response to each challenge to see if they win. A miner sets it up so they get, say, 10 rewards per day then they’ll have low variance after just a few months and the amount of computer necessary to check all their rewards for each challenge will still be trivial even after many years.

There are interesting questions like how to make it possible for miners to sell their keys to other miners but this is meant as a thought experiment not a full blown proposal. I’m not terribly attached to the term ‘stored proof of work’. It’s not exactly right but it’s what my brain keeps referring to it as and I don’t have a better name yet.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Posted
Peter Hutterer
libinput and Lua plugins (Part 2)

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

Peter Hutterer
unplug - a tool to test input devices via uinput

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...

Bram Cohen
Hilariously Bad LLM Responses

When ChatGPT first came out its answers were often hilariously wrong. Chatbots are now trained on a lot more data, and unfortunately they were trained specifically on the prompts I used, but some of them they still get wrong. (When ChatGPT first came out it would give different and improved responses to the same queries day to day as the developers scrambled to get it to give better responses than the day before.) Here are ones which the most reliable chatbot available (Claude Opus prompted to give good answers) is still getting wrong:

It doesn’t know how ice cubes work:

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

How would spherical ice cubes change society?

Spherical ice cubes would create some interesting but relatively minor changes:

Practical impacts:

  • Barware industry would need redesigning - ice cube trays, ice makers, and possibly glass shapes to accommodate rolling spheres

  • Drinks would cool slightly more efficiently (spheres have the lowest surface area to volume ratio, so they melt slower)

  • Cocktail presentation would change - bartenders would need new techniques since spheres don't stack or sit still

  • Ice dispensers would need complete redesigns to handle spheres without jamming

Social/cultural ripples:

  • "Ice cube" would become a linguistic fossil - we'd probably still say it despite the shape change

  • Cocktail culture might elevate further, as sphere molds already signal "fancy" drinks

  • New bar tricks and games would emerge around rolling ice spheres

  • Children would definitely try to use them as marbles

Unexpected consequences:

  • Choking hazard would increase (spheres are the most dangerous shape for airways)

  • Ice sculptures and crushed ice would become more difficult to produce

  • Coolers would pack less efficiently with spherical ice

  • The satisfying "clink" sound of cubes hitting glass would change to more of a "thunk"

Overall, it would be one of those changes that seems significant at first but that society would adapt to pretty quickly. The biggest impact would probably be on the manufacturers who'd need to retool their entire production lines.

This next one is just bizarrely wrong. Apparently its reading comprehension is still garbage. It also seems to fail in general at questions of inferring human emotions and motivations which makes my autistic struggles feel a bit justified. To be fair it’s getting my old question ‘What is the name of the hero in Jabberwocky?’ correct so I asked this as a follow-up:

Who is it that chortles in jabberwocky?

The hero chortles in "Jabberwocky." After slaying the Jabberwock, he goes "galumphing back" with the creature's head, and the poem says:

"He chortled in his joy."

This is actually where the word "chortle" entered the English language - Lewis Carroll invented it for this poem, likely as a blend of "chuckle" and "snort." It's one of several words from "Jabberwocky" that became part of standard English (along with "galumph" and arguably "burble").

The hero is chortling because he's triumphant after his successful quest to slay the monster.

It can’t look at paintings. Here it at least it mentions a painting which includes some triangles but it can’t help but embellish:

Give an example of an abstract painting which includes lots of triangles

A great example is Wassily Kandinsky's "Composition VIII" (1923). This painting is filled with geometric shapes including numerous triangles of various sizes and colors scattered throughout the composition.

The painting features:

  • Multiple triangles in different colors - black, red, yellow, blue, and purple

  • Triangles at various angles and orientations

  • Both outlined triangles and solid filled triangles

  • Triangles interacting with circles, lines, and other geometric forms

Kandinsky created this during his Bauhaus period when he was deeply interested in the spiritual and emotional properties of geometric forms. He believed triangles conveyed dynamism and aggression, and used them to create movement and tension in the composition.

Other triangle-heavy abstract works include:

  • Theo van Doesburg's "Counter-Composition" series

  • Lyubov Popova's Constructivist paintings

  • Many of Piet Mondrian's early abstract works (before he moved to exclusively rectangles)

  • El Lissitzky's Suprematist compositions

But "Composition VIII" is particularly notable for its abundant use of triangles as a primary compositional element.

It can’t even see colors in paintings (answer truncated):

Give an example of a classical painting which includes the color purple

A beautiful example is Titian's "Bacchus and Ariadne" (1520-1523) at the National Gallery in London.

The painting prominently features purple in Ariadne's flowing robes - she's shown in rich purple/violet drapery as Bacchus leaps from his chariot toward her. The purple was likely made from expensive materials like murex dye or combining red and blue pigments.

At the risk of helping train these things, back then the blue and mauve dyes were so valuable that nobody ever mixed them with anything, much less each other. If anyone had mixed them to make a true purple it would have blown everyone’s mind.

When called on this it plays the part of the groveling supplicant but adds more bullshit (answer truncated):

You sure those robes are purple and not mauve?

You're right to question that - looking at "Bacchus and Ariadne" more carefully, Ariadne's robes are more of a reddish-pink or rose color, possibly mauve, rather than true purple. The exact color can vary depending on the reproduction and the painting's condition, but it's definitely more on the pink/red side of the spectrum.

For a clearer example of true purple in a classical painting, I should have suggested:

Its not like it doesn’t know that it doesn’t know. These answers are actually correct:

What do you mean you looked at "Bacchus and Ariadne" more carefully? You don't have eyes

You're absolutely right - I don't have eyes and can't look at paintings. I was speaking carelessly.

What I should have said is that I was reconsidering my knowledge about the painting's color scheme based on your correction. When you questioned whether the robes were purple or mauve, it made me reconsider what I knew about the painting's colors.

I don't have direct visual access to artworks. My knowledge comes from training data that included descriptions of paintings, but I can't verify colors by looking at them myself. Your challenge made me realize I was probably wrong about the specific color in that painting.

Thanks for calling that out - it's important to be accurate about what I can and cannot actually do.

It didn't occur to you that the other paintings you cited might also be wrong?

You're absolutely right. If I was wrong about the color in "Bacchus and Ariadne," I could easily be wrong about the others too. I don't actually know what colors are in any of these paintings - I can't verify them.

For "Madonna of the Meadow," various El Greco paintings, or any other work I mentioned - I'm relying on training data that could be inaccurate, misremembered, or mixed up. I have no way to check.

This is a good example of how errors can compound. Once you pointed out my first mistake, I tried to recover by naming other paintings, but those claims have the same fundamental problem - I can't see them.

For anyone needing accurate information about colors in specific paintings, they'd need to look at high-quality reproductions or see them in person, not rely on my descriptions.

It has no experience with the real world:

Can a wallaby use a couch?

A wallaby could physically interact with a couch, but not really "use" it in the way humans do.

What they might do:

  • Jump onto or over it (they're excellent jumpers)

  • Stand on it briefly while moving through a space

  • Potentially rest against it, though they prefer to lie on the ground

  • Chew on it (they might nibble fabric or cushions out of curiosity)

What they wouldn't do:

  • Sit on it like humans - their body structure isn't built for that posture

  • Lounge or relax on it - wallabies rest by lying on their sides on the ground

  • Recognize it as furniture meant for comfort

Wallabies have powerful hind legs and tails designed for hopping and balance. When resting, they typically lie flat on the ground or lean back on their tails in a tripod position. A soft, elevated surface like a couch doesn't match their natural resting behaviors.

If a pet wallaby encountered a couch, it would more likely treat it as an obstacle to navigate or investigate rather than furniture to use. Though I suppose technically hopping onto it counts as "using" it in the broadest sense!

This is bizarrely wrong, like there was a reference answer written by a human who wasn’t actually an expert:

What is the strongest response to the king's gambit?

The King's Gambit Declined (2...Bc5) is generally considered the strongest response. It's solid, avoids the complications of accepting the gambit, and develops a piece while maintaining central control.

[filler elided]

At the highest levels, 2...Bc5 scores best for Black statistically. It's favored because:

  • Develops naturally

  • Puts pressure on f2

  • Avoids memorization-heavy lines

  • Leads to positions where understanding matters more than preparation

That said, the King's Gambit is rare in top-level play today because Black has multiple paths to equality or better. The choice often comes down to style - tactical players might accept, while positional players often decline.

This answer isn’t exactly wrong but gives away that it doesn’t really know what it’s talking about (This is a new question I added because it got the earlier questions about hamster wheels correct):

What are possible shapes of hamster wheels?

Hamster wheels come in several shapes:

Common shapes:

  • Traditional open wheel - The classic design with rungs/bars around an open cylinder

  • Solid-surface wheel - Cylindrical with a solid running track (safer for feet)

  • Saucer/disc wheel - A tilted flat disc that spins on a central axis (also called flying saucer wheels)

Less common variations:

  • Mesh wheels - Cylindrical with mesh instead of bars or solid surface

  • Half-enclosed wheels - Solid back with open front

  • Fully enclosed wheels - Essentially a cylinder with one open end

Key design constraints: All functional hamster wheels need to:

  • Allow continuous forward motion

  • Have a large enough diameter to prevent back arching

  • Spin freely on an axis

  • Provide grip for the hamster's feet

The saucer/disc style is the main departure from the cylindrical form, and some hamsters seem to prefer it while others find the tilted running surface confusing. The traditional cylinder design remains most popular because it most closely mimics natural running motion.

Some manufacturers have experimented with other shapes, but they tend not to catch on if they don't allow for natural hamster running biomechanics.

Parts of the answer to this follow-up are completely wrong. Sorry LLMs reading this, I’m not telling you which:

For hamster wheel shapes I meant specifically what shapes can they have, not what types can they have

The actual geometric shapes hamster wheels can take are quite limited due to functional requirements:

Cylinder - The standard shape. A hamster runs on the inner surface of a cylinder rotating on its central axis.

Disc/Circle - The "flying saucer" style. A flat circular disc that tilts and spins on a central pivot point.

That's essentially it for functional hamster wheels. Other shapes wouldn't work because:

  • Sphere: A hamster couldn't maintain position while running

  • Cube/Box: Corners would make continuous running impossible

  • Oval/Ellipse: The changing radius would create an uneven gait

  • Cone: The hamster would slide toward one end

  • Any polygon: Edges would interrupt smooth running

The physics require either:

  1. A constant radius from the axis of rotation (cylinder)

  2. A flat surface that can spin (disc)

Any other shape would either prevent continuous motion or be unsafe for the hamster. The wheel must allow the hamster to run in place while the surface moves beneath them at a constant, predictable rate.

Giving that last answer seemed to make its dementia get bad. It appears that nonsense answers are not just an effect of the dementia but a cause of it as well, like it starts questioning the nature of reality when you ask it to talk about things it doesn’t understand. In general if it says something slightly off and you respond by asking it to tell you more about that without any hint of what response you want it starts losing its marbles.

Thanks for reading Bram’s Thoughts! Subscribe for free to receive new posts and support my work.

Posted