Is our military resilient when the attack is coming from inside the House? I doubt it. Hegseth rubber-stamps some unconstitutional order, then starts firing generals until they get to one who says yes. So either the military goes along with it, meaning now they're Trump's military instead of the USA's, which is not good, or they don't recognize the authority of their Commander in Chief, and the only way that story ends is with armed insurrection and the military installing a new president, which is also not good.
I hesitate to even post this worry for a few reasons:
- I don't need to have my time wasted by minimizing Reply Guys telling me "they wouldn't do that" or "that would be illegal" or "you're paranoid" or "let's give him a chance."
- There is absolutely nothing that you or I or anyone we know can do about it, short of offering up our torsos for target practice. Once the military is pointed at "The Enemy Within", the strategies of "sign this change dot org petition" and "vote harder in the next midterms" are kind of off the table.
Previously, previously, previously, previously, previously, previously.
Biden has authorized Ukraine to use long-range US missiles to attack places in Russia.
He should have done this months ago. Nuclear weapons aside, Putin attacks using every weapon he has available, in whatever ways will cause harm to someone. Even including war crimes.
Ukraine should not commit war crimes, and should not attack nuclear weapons and facilities, but aside from that it should not hold back.
For his enemies to restrain themselves in the hope that Putin will restrain himself is foolish ince Putin doesn't do that.
Robert Reich describes the damage that RFK Jr would be likely to do if he becomes Secretary of Health.
Australian aboriginals set fires to control the amount of shrubs, but only in some regions. In some other regions, they almost never set any fires.
Controlling large fires by setting small ones worked pretty well, but one new complicating factor is that nowadays there are is a scattering of man-made things that must not be burned — such as buildings and fields of crops.
how-i-fought-to-graduate-without-using-non-free-software.html gives more ideas, from a student who resisted very cleverly.
*Global plastic production must be cut to curb pollution, study says.*
The wrecker is steadfastly determined to exacerbate the climate crisis. To keep America under the Tr…ance as the early stages of agricultural failure grow and spread will require intensified disinformation and repression.
*Australia accused of "exporting climate destruction" on tiny Pacific neighbours with massive gas expansion plans.*
Australia is not alone in doing this, but every country doing this deserves condemnation in these clear terms.
*Mississippi's firearm-related death rate was nearly double that of Haiti, which is plagued by political and gang violence.*
Palestinians in Jabaliya in northern Gaza have run out of food and water due to Israel's siege, so many of them are now forced to leave, despite the danger and hardship of that.
I suppose those who are not capable of leaving will all die.
This is ethnic cleansing, a grave crime.
RFK Jr. promotes anti-vaccine disinformation, touts raw milk as a supposed cure (never mind that it can give you an infection), and supports conspiracy theories that demonize medicine.
Advice for journalists, organizations and individuals about surviving under fascism while dragging your heels against its evil plans.
In particular, don't obey demands by anticipation. For instance, Anthony Albanese, the PM of Australia, is resisting pressure from Australians who want to do that.
I would add one more suggestion: if you can't refuse to obey when power demands you do evil, at least refuse to disguise it. Show explicitly that you are obeying orders, not making a decision of your own.
A while ago I was looking at Rust-based parsing of HID reports but, surprisingly, outside of C wrappers and the usual cratesquatting I couldn't find anything ready to use. So I figured, why not write my own, NIH style. Yay! Gave me a good excuse to learn API design for Rust and whatnot. Anyway, the result of this effort is the hidutils collection of repositories which includes commandline tools like hid-recorder and hid-replay but, more importantly, the hidreport (documentation) and hut (documentation) crates. Let's have a look at the latter two.
Both crates were intentionally written with minimal dependencies, they currently only depend on thiserror and arguably even that dependency can be removed.
HID Usage Tables (HUT)
As you know, HID Fields have a so-called "Usage" which is divided into a Usage Page (like a chapter) and a Usage ID. The HID Usage tells us what a sequence of bits in a HID Report represents, e.g. "this is the X axis" or "this is button number 5". These usages are specified in the HID Usage Tables (HUT) (currently at version 1.5 (PDF)). The hut crate is generated from the official HUT json file and contains all current HID Usages together with the various conversions you will need to get from a numeric value in a report descriptor to the named usage and vice versa. Which means you can do things like this:
let gd_x = GenericDesktop::X; let usage_page = gd_x.usage_page(); assert!(matches!(usage_page, UsagePage::GenericDesktop));Or the more likely need: convert from a numeric page/id tuple to a named usage.
let usage = Usage::new_from_page_and_id(0x1, 0x30); // GenericDesktop / X println!("Usage is {}", usage.name());90% of this crate are the various conversions from a named usage to the numeric value and vice versa. It's a huge crate in that there are lots of enum values but the actual functionality is relatively simple.
hidreport - Report Descriptor parsing
The hidreport crate is the one that can take a set of HID Report Descriptor bytes obtained from a device and parse the contents. Or extract the value of a HID Field from a HID Report, given the HID Report Descriptor. So let's assume we have a bunch of bytes that are HID report descriptor read from the device (or sysfs) we can do this:
let rdesc: ReportDescriptor = ReportDescriptor::try_from(bytes).unwrap();I'm not going to copy/paste the code to run through this report descriptor but suffice to day it will give us access to the input, output and feature reports on the device together with every field inside those reports. Now let's read from the device and parse the data for whatever the first field is in the report (this is obviously device-specific, could be a button, a coordinate, anything):
let input_report_bytes = read_from_device(); let report = rdesc.find_input_report(&input_report_bytes).unwrap(); let field = report.fields().first().unwrap(); match field { Field::Variable(var) => { let val: u32 = var.extract(&input_report_bytes).unwrap().into(); println!("Field {:?} is of value {}", field, val); }, _ => {} }The full documentation is of course on docs.rs and I'd be happy to take suggestions on how to improve the API and/or add features not currently present.
hid-recorder
The hidreport and hut crates are still quite new but we have an existing test bed that we use regularly. The venerable hid-recorder tool has been rewritten twice already. Benjamin Tissoires' first version was in C, then a Python version of it became part of hid-tools and now we have the third version written in Rust. Which has a few nice features over the Python version and we're using it heavily for e.g. udev-hid-bpf debugging and development. An examle output of that is below and it shows that you can get all the information out of the device via the hidreport and hut crates.
$ sudo hid-recorder /dev/hidraw1 # Microsoft Microsoft® 2.4GHz Transceiver v9.0 # Report descriptor length: 223 bytes # 0x05, 0x01, // Usage Page (Generic Desktop) 0 # 0x09, 0x02, // Usage (Mouse) 2 # 0xa1, 0x01, // Collection (Application) 4 # 0x05, 0x01, // Usage Page (Generic Desktop) 6 # 0x09, 0x02, // Usage (Mouse) 8 # 0xa1, 0x02, // Collection (Logical) 10 # 0x85, 0x1a, // Report ID (26) 12 # 0x09, 0x01, // Usage (Pointer) 14 # 0xa1, 0x00, // Collection (Physical) 16 # 0x05, 0x09, // Usage Page (Button) 18 # 0x19, 0x01, // UsageMinimum (1) 20 # 0x29, 0x05, // UsageMaximum (5) 22 # 0x95, 0x05, // Report Count (5) 24 # 0x75, 0x01, // Report Size (1) 26 ... omitted for brevity # 0x75, 0x01, // Report Size (1) 213 # 0xb1, 0x02, // Feature (Data,Var,Abs) 215 # 0x75, 0x03, // Report Size (3) 217 # 0xb1, 0x01, // Feature (Cnst,Arr,Abs) 219 # 0xc0, // End Collection 221 # 0xc0, // End Collection 222 R: 223 05 01 09 02 a1 01 05 01 09 02 a1 02 85 1a 09 ... omitted for previty N: Microsoft Microsoft® 2.4GHz Transceiver v9.0 I: 3 45e 7a5 # Report descriptor: # ------- Input Report ------- # Report ID: 26 # Report size: 80 bits # | Bit: 8 | Usage: 0009/0001: Button / Button 1 | Logical Range: 0..=1 | # | Bit: 9 | Usage: 0009/0002: Button / Button 2 | Logical Range: 0..=1 | # | Bit: 10 | Usage: 0009/0003: Button / Button 3 | Logical Range: 0..=1 | # | Bit: 11 | Usage: 0009/0004: Button / Button 4 | Logical Range: 0..=1 | # | Bit: 12 | Usage: 0009/0005: Button / Button 5 | Logical Range: 0..=1 | # | Bits: 13..=15 | ######### Padding | # | Bits: 16..=31 | Usage: 0001/0030: Generic Desktop / X | Logical Range: -32767..=32767 | # | Bits: 32..=47 | Usage: 0001/0031: Generic Desktop / Y | Logical Range: -32767..=32767 | # | Bits: 48..=63 | Usage: 0001/0038: Generic Desktop / Wheel | Logical Range: -32767..=32767 | Physical Range: 0..=0 | # | Bits: 64..=79 | Usage: 000c/0238: Consumer / AC Pan | Logical Range: -32767..=32767 | Physical Range: 0..=0 | # ------- Input Report ------- # Report ID: 31 # Report size: 24 bits # | Bits: 8..=23 | Usage: 000c/0238: Consumer / AC Pan | Logical Range: -32767..=32767 | Physical Range: 0..=0 | # ------- Feature Report ------- # Report ID: 18 # Report size: 16 bits # | Bits: 8..=9 | Usage: 0001/0048: Generic Desktop / Resolution Multiplier | Logical Range: 0..=1 | Physical Range: 1..=12 | # | Bits: 10..=11 | Usage: 0001/0048: Generic Desktop / Resolution Multiplier | Logical Range: 0..=1 | Physical Range: 1..=12 | # | Bits: 12..=15 | ######### Padding | # ------- Feature Report ------- # Report ID: 23 # Report size: 16 bits # | Bits: 8..=9 | Usage: ff00/ff06: Vendor Defined Page 0xFF00 / Vendor Usage 0xff06 | Logical Range: 0..=1 | Physical Range: 1..=12 | # | Bits: 10..=11 | Usage: ff00/ff0f: Vendor Defined Page 0xFF00 / Vendor Usage 0xff0f | Logical Range: 0..=1 | Physical Range: 1..=12 | # | Bit: 12 | Usage: ff00/ff04: Vendor Defined Page 0xFF00 / Vendor Usage 0xff04 | Logical Range: 0..=1 | Physical Range: 0..=0 | # | Bits: 13..=15 | ######### Padding | ############################################################################## # Recorded events below in format: # E: . [bytes ...] # # Current time: 11:31:20 # Report ID: 26 / # Button 1: 0 | Button 2: 0 | Button 3: 0 | Button 4: 0 | Button 5: 0 | X: 5 | Y: 0 | # Wheel: 0 | # AC Pan: 0 | E: 000000.000124 10 1a 00 05 00 00 00 00 00 00 00
The trucks were transporting 4,040 cases of tequila, or 24,240 bottles, including Santo blanco, reposado and a specially-made extra añejo, which took 39 months to create. [...]
One truck was expected to arrive at a warehouse in California and the other to one in Pennsylvania, but neither arrived at their destination. Johanson then discovered that the loads had been "illegally double brokered" to different carriers, according to the report.
"We believe the GPS tracking signal we were monitoring was spoofed by a GPS emulator application used by the criminals," reads the report. [...]
"Data analytics from Verisk CargoNet project that cargo theft has reached an all-time high in 2024 and will be over 25 percent higher than in 2023," [...] They add that much of the theft in 2023 was related to hard seltzer, but this year, hard liquor like Santo is being targeted "almost exclusively."
Previously, previously, previously, previously, previously, previously, previously, previously, previously.
In this weekend’s edition of ‘Bram gets nerd sniped by something ridiculous so makes a blog post about it to make it somebody else’s problem’ Mark Rober said something about ‘A Lava Lamp made out of real lava’. Unfortunately he just poured lava on a regular lava lamp to destroy it but this does raise the question of whether you could have a real lava lamp which uses a molten salt instead of water.
First the requirements. The lamp is made of three substances: the lamp itself, the ‘liquid’ inside, and the ‘solid’ inside. The lamp must be transparent and remain solid across the range of temperatures used. The ‘liquid’ must be solid at room temperature, become liquid at a high but not too high temperature, and be transparent in its liquid phase. It should also be opaque in its solid phase to give a cool reveal of what the thing does as it heats up but but that’s hard to avoid. The ‘solid’ should have a melting point higher than the ‘liquid’ but not so high that it softens the lamp and be opaque. The density of the ‘solid’ should be just barely below that of the ‘liquid’ in its melted form and just barely above in its solid form to give it that distinctive lava lamp buoyancy effect. The ‘solid’ and ‘liquid’ should not react with each other or stick to the lamp or decompose over time.
That was a lot of requirements, but it does seem to be possible to meet them. The choice for the lamp is obvious: Borosilicate glass. That’s physically strong, transparent, can withstand big temperature changes (due to low thermal expansion) and is chemically inert. All the same reasons why it’s ideal for cookware. It doesn’t get soft until over 800C, so the melting points of the other materials should be well below that.
For the ‘liquid’ there also turns out to only be one real option: Zinc Chloride. That’s transparent and has a melting point of 290C and a density of 2.9 (it’s also opaque at room temperature). The other transparent salts aren’t dense enough.
For the ‘solid’ there once again only seems to be one option: Boron Trioxide. That has a melting point of 450C and a density of 2.46. Every other oxide has a density which is way too high, but this one overshoots it a bit. It’s much easier to get get the densities closer together by making mixing the Boron Trioxide with something heavy than the Zinc Chloride with something light, so some Lead(II) oxide can be mixed in. That has a density of 9.53 so not much of it is needed and a melting point of 888C so the combined melting point will still be completely reasonable. (Due to eutectic-type effects it might be barely higher at all.) It should also add some color, possibly multiple ones because the colors formed depend on how it cools. Bismuth(III) oxide should also work and may be a bit more colorful.
I’m crossing my fingers a bit on these things not reacting but given that they’re glasses and salts it seems reasonable. The glasses may have a bit of a tendency to stick to each other. Hopefully not so much because one is a solid at these temperatures and the other is a liquid, but it’s probably a good idea to coat the top and bottom of the insides of the lamp with Silicon and to use an overall shape where the pieces inside never come close to the walls, in particular having an inverted cone shape at the bottom and a similar tapering at the top. The whole lamp should also be sealed because oxygen and water might react at the high temperatures reached, and there should be an argon bubble at the top because there is some expansion and contraction going on. Those same concerns apply to regular lava lamps which explains a lot about how they’re shaped.
Anyone who wants to feel free to try this build. You don’t need any more permission from me. I’d like to see it happen and don’t have the time to spend on building it myself.
InfoWars, A Global Tetrahedron Company.
ANDROALPHUS: A powerful demon and a marquis of the infernal empire; he shows himself in the shape of a peacock with a deep voice. When he appears in human form, he can be forced to give lessons of geometry. He is an astronomer and, besides, he teaches how to skillfully argue over details.
I say to you, whomst among us has not leaned against the bar and drunkenly given lessons of geometry.
Previously, previously, previously, previously, previously, previously.
Scientists have found that a "rare intense wind event" during NASA's Voyager 2 flyby of Uranus in 1986 may have seriously messed with our understanding of the planet.
Previously, previously, previously, previously, previously, previously, previously.
Why can't we just agree to disagree? Demonizing Trump voters like me only leads to toxicity, and it's bad for your health to be so agitated. Let's find a way to unite so that this ugliness doesn't surface again when we head to the polls in four years. And if your worst-case scenario comes to pass -- that this was the last democratic election we'll have in this country -- think of how stress-free you'll be then. For now, maybe just pop a Xanax and have a little faith.
I personally believe we'll continue to have elections. We will elect Trump in 2028 and in 2032 and, God willing, every four years as long as he shall live. Or perhaps scientists will find a way to preserve his body and stop aging so that he can be our leader until the literal end of the world, which I know you think will happen soon because of climate change, and if you genuinely believe that, why are you so worried? You'll only have, what, twenty years or so of authoritarian rule before life becomes nothing but fleeing fire and flood. It'll be like those Irwin Allen disaster movies we loved as kids! I personally think it's awesome that my house in Central Massachusetts might be waterfront property sooner rather than later.
Previously, previously, previously, previously, previously, previously.
"Now that Dorsey has bailed as a board member and principal funder, Bluesky's DNA is basically [TESCREAL / Effective Altruist] people. It gets worse. Blockchain Capital LLC was co-founded by Steve Bannon pal Brock Pierce, a major crypto advocate, perennial presidential candidate, and close friend of Eric Adams. Pierce has dozens of other shady MAGA/Russia ties as well."
Planet Debian upstream is hosted by Branchable.