Spotted in a parking lot:

At least they caught it before the end of the row.
Verily, it is written that Computer Science has only two hard problems:
- Cache invalidation
- Naming things
- Off-by-one errors
I hate it when that happens on my projects …
The Smell of Molten Projects in the Morning
Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
And kvetching, too

Spotted in a parking lot:

At least they caught it before the end of the row.
Verily, it is written that Computer Science has only two hard problems:
I hate it when that happens on my projects …

The most recent Tide HE Laundry Detergent bottles seemed smaller than the one we were about to empty and, indeed, they were:

Call it 9% smaller, based on the volume in liters. I suspect the price was also 9% higher, but that would require more digging in the file cabinet than seems justified.
Note that both bottles claim “64 loads”, each with an asterisk (well, a lozenge ◊ symbol) explained on the label:

That’s the new chart. The old chart was more explanatory:

Note the “just below Bar 1 on cap” weasel wording. The term “meniscus” enters the chat, although laundry detergent doesn’t have much in the way of surface tension.
One might reasonably assume the bars on the new cap have gotten shorter, so that the volume of detergent used for each load would be smaller.
One would be wrong:

The blue cap on the right is one we’ve been using for the last few years, because I put black tape at the level of the first bar to match our “Medium” loads. I cannot imagine how much dirt would require filling the cap to Bar 5.
The clear cap on the left is the new cap. I filled the blue tap to the top of Bar 5 with water and poured it into the clear cap, where it comes about 3/4 of the way to the top of the new Bar 5. Evidently, the amount of detergent required to get grubby clothes clean has increased by 33%.
The old cap holds just shy of 4 fluid ounces to the top of Bar 5:

The new cap holds 5.5 fluid ounces to the top of its Bar 5:

If you have really crusty clothing, you’re now using 36% more detergent per load.
The obvious arithmetic shows the old bottle holds 23 “Bar 5” loads and the new bottle holds 15.
To the limit of my measuring ability, both caps hold 1.3 fluid ounces to the top their respective Bar 1 levels. I cannot vouch for the “just below” level, but I suspect more accurate measurements would show the new caps have slightly lower volume at that level, juuust enough to make the “64 loads” weasel wording come out right.
As with all too many such claims, they lie.

Another switch for the temporary basement LED light strips failed the same way:

As always with such things, I suspect the only reason it has a UL mark on the back is because somebody else hasn’t missed theirs yet.
So I got a three-pack of inline switches with cute little indicator lights and set about replacing all of them:

These switches carry absolutely no regulatory approval markings, although they do claim to carry 10 A at 250 V, which I take with another load of salt.
At least here in the US-of-A, a 240 VAC outlet has two “hot” wires carrying 120 VAC 180° out of phase, which means both conductors must be switched. Despite the voltage rating, only the L path goes through the clicky switch, with the N path along a strap just below the switch toggle. Using it on a 240 VAC circuit will kill you stone cold dead should you assume whatever it controls is turned off.
I secured the Line and Neutral conductors with crimp connectors, rather than just wrapping the 20 AWG wires around the screw terminals, because the case halves join without perimeter nesting: a bare millimeter of air in the gap between the halves separates the terminals from my fingers. A layer of good electrical tape on each side improved that situation, but not by much.
The complete lack of strain relief clamping on the cords prompted me to route the wires around the screw bosses. After a function check, squirts of hot melt glue anchored the two cords somewhat better.
Aaaaand I secured that loose strap on the right with an (identical to the others!) screw from the Tray o’ Random Screws. The other switches had both screws installed, so this one must have been a QC escape.
They suffice for the purpose, but … caveat emptor!

Attempting to use the guest WiFi network requires agreeing to their Terms of Use:

While it may be possible to read that, I pretty much gave up.
While one should never ascribe to malice what can be explained by stupidity, it’s also true that any sufficiently advanced stupidity is indistinguishable from malice.

Our medical practice has been Borged by Optum, which is, through a number of corporate cutout layers, owned by UnitedHealth Group, so (despite claims to the contrary) our doctors effectively work for a health insurance company. No, they may not be paid by UHG, but following the money in reverse shows the flow of influence.
Apparently this has slightly affected the original practice’s reliance on Phreesia for pre-visit sign-in information collection although, as before, Phreesia still really wants to scatter your precious personal bits to the far corners of the InterWebs:

The wall o’ text is a bit shorter then the earlier version and cannot be scrolled or printed. It still admits:
There is the potential for my health information … to be subject to redisclosure and to no longer be protected by the HIPAA Privacy Rule.
Yes, I understand that’s the whole point of getting me to agree to release my private bits to Phreesia, so they can make money by selling it to the highest bidder(s).
What’s new is the previous page in the sequence, of which I do not have a screenshot, presumably coming from Optum, emphasizing in bold type that I do not have to authorize Phreesia’s data collection.
I infer this means two things:
Yes, I understand that I have no privacy and should get over it, but somehow this sort of behavior rankles …

A pair of frost-free sillcock faucets arrived to replace the house’s leaky and un-repairable hose bibs. The faucet must be mounted at a 5° angle to let the water drain out when it’s closed:

One might expect the Alignment Wedge included with the faucet to have a 5° angle. Because I can both measure and math, it has a 1° angle.
Well, I can fix that.
Start by scanning the bottom (widest side) of the wedge and apply GIMP’s Select by color tool:

After a little manual cleanup in Quick Mask mode, apply a 1 mm inset to ensure it snaps around the pipe, convert the selection to a path, export it as an SVG image, and import it into OpenSCAD to cut the angle:
// Sillcock faucet alignment wedge
// Ed Nisley KE4ZNU - May 2024
MaxThick = 5.0;
Tilt = -5.0;
PlateOA = [60,40,MaxThick]; // XY = original angle plate size
difference() {
linear_extrude(height=MaxThick,convexity=5)
offset(r=-1.0)
import("/mnt/bulkdata/Cameras/2024/Shop Projects/Sillcock Faucets/Sillcock faucet angle washer - outline.svg",
center=true);
translate([-PlateOA.x/2,-PlateOA.y/2,MaxThick])
rotate([Tilt,0,0])
cube(PlateOA,center=false);
}
The solid model goes into PrusaSlicer for duplication & slicing:

And comes off the printer looking just about like you’d expect:

The far side of both wedges are 5 mm tall, but you can see the difference four more degrees makes in the front.
It’s even more obvious from the edge:

The wood siding where these will fit is perfectly vertical, so getting the wedge angle right isn’t really optional.
I must drill the existing hole in the sill plate out to 1-1/8 inch to clear the pipe fittings, plus the wood around the screws holding the current bibs to the wall will surely need some buttressing, but all that’s in the nature of fine tuning.
FWIW, this was the first 3D print after the move and I’m happy to say the M2 had no any need of adjustments.
The WordPress AI image generator apparently ignored the post text and produced a stylin’ picture of an arched bathroom faucet over a rimless sink, which I shall leave to your imagination.

A recent Manjaro update killed whatever magic held the passwords used for public-key ssh access from my desktop box, requiring me to remember the passords and type them correctly.
After considerable thrashing around doing what I thought I knew about ssh_agent (which, yes, was being autostarted to no avail), it seems that thread applies and the fix now requires creating /etc/profile.d/gcr-keyring.sh with this burst of line noise:
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/gcr/ssh
Then tell systemd about it:
systemctl --user enable gcr-ssh-agent.socket
systemctl --user enable gcr-ssh-agent.service
Whereupon, after a reboot presumably causing systemd to make the right thing perform the right act at the right time, It Just Worked™.
I used to have some mild sysadmin mojo, but obviously if you don’t do it all the time, everything you think you know becomes wrong.
The WordPress AI did generate an image based on the above text and the prompt linux overlapping windows on monitor:

Which looks a lot like those stock photos filling otherwise empty space in spammy web pages, doesn’t it? In point of fact, the AI Feedback on Post had this to say:
While the AI-generated image may align with the content, consider using original or more contextually relevant visuals to maintain the professional look of the website.
Couldn’t have put it better myself. Thank you, AI image & text generators, for your help.