We spotted a plump mushroom cluster nestled at the base of a neighbor’s tree:

Eight days later they’d started curling:

Mushrooms growing on tree roots generally mean the tree is in trouble and, indeed, it’s a battered Black Locust.
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.
Growing and sometimes fixing

We spotted a plump mushroom cluster nestled at the base of a neighbor’s tree:

Eight days later they’d started curling:

Mushrooms growing on tree roots generally mean the tree is in trouble and, indeed, it’s a battered Black Locust.

In late May we deployed six sticky traps in and around the onion bed, attempting to reduce the number of Onion Fly maggots. By mid-June the sheets were covered with the shredded leaves Mary uses to mulch the onions, but half a dozen flies were out of action:

We’re pretty sure that’s what these things are:

They’re supposed to have red eyes, but being affixed to a sheet of snot for a few weeks doesn’t do the least bit of good for your eyes.
We replaced the sheets and left them in place until the end of July:

The sheets took another half-dozen flies out of circulation, Mary began harvesting the onions, and observed it was the healthiest onion harvest she’s ever had.
We declared victory, removed the traps, and the remaining onions suffered considerable maggot damage over the next few weeks.
Anecdotally, it seems reducing the Onion Fly population by (what seems to be) a small amount and maintaining pressure on the population dramatically reduces the number of maggots available to damage the onion crop. At least for a single bed in a non-commercial setting.
The plural of anecdote is not anecdata, but we’ll try it again next year, leave the traps in place while the onions are in the ground, and see what happens.

Mary found a rusted Fiskars bypass pruner in the trash pile near her Vassar Farms plot and brought it home for proper disposal. The nuts and screws responded to an overnight penetrating oil treatment and it came apart easily:

The movable jaw may have once sported a PTFE coating, but it’s likely just a different steel alloy.
After scrubbing the pieces with an abrasive pad, a little diamond filing, and (at the insistence of the Squidwrench chorus) some Dremel wire-wheel action, it looks almost new:

The blades sport a few nicks from their previous life, but work well enough.

Mary bound up a mesh cover for the shelter frame and deployed it to protect some yummy seedlings:

Those will become the next round of lunchtime sandwiches:

It’s a quarter-pounder: 4 oz of turkey, 4 oz of lettuce, and a layer of Swiss and good stinky Provolone cheese. Yum!

This is laid in against a need I hope never occurs:

It’s intended to clamp around one of the Dripworks mainline pipes carrying water from the pressure regulator to the driplines in the raised beds, should an errant shovel or fork find the pipe.
It descends from a long line of soaker hose clamps, with a 25 mm ID allowing for a silicone tape wrap as a water barrier.
The solid model has no surprises:

The OpenSCAD source code as a GitHub Gist:
| // Dripworks 3/4 inch mainline clamp | |
| // Ed Nisley KE4ZNU 2021-06 | |
| Layout = "Build"; // [Hose,Block,Show,Build] | |
| HoseOD = 25.0; | |
| TestFit = false; // true to build test fit slice from center | |
| //- Extrusion parameters must match reality! | |
| /* [Hidden] */ | |
| ThreadThick = 0.25; | |
| ThreadWidth = 0.40; | |
| HoleWindage = 0.2; | |
| Protrusion = 0.1; // make holes end cleanly | |
| inch = 25.4; | |
| function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit); | |
| ID = 0; | |
| OD = 1; | |
| LENGTH = 2; | |
| //———- | |
| // Dimensions | |
| // Hose lies along X axis | |
| Hose = [200,HoseOD,HoseOD]; // X = longer than anything else | |
| NumScrews = 2; // screws along each side of cable | |
| WallThick = 3.0; // Thinnest printed wall | |
| PlateThick = 1.5; // Stiffening plate thickness | |
| // 8-32 stainless screws | |
| Screw = [4.1,8.0,50.0]; // OD = head LENGTH = thread length | |
| Washer = [4.4,9.5,1.0]; | |
| Nut = [4.1,9.7,3.3]; | |
| Block = [30.0,Hose.y + 2*Washer[OD],HoseOD + 2*WallThick]; // overall splice block size | |
| echo(str("Block: ",Block)); | |
| ScrewMinLength = Block.z + 2*PlateThick + 2*Washer.z + Nut.z; // minimum screw length | |
| echo(str("Screw min length: ",ScrewMinLength)); | |
| Kerf = 1.0; // cut through middle to apply compression | |
| CornerRadius = Washer[OD]/2; | |
| ScrewOC = [(Block.x – 2*CornerRadius) / (NumScrews – 1), | |
| Block.y – 2*CornerRadius, | |
| 2*Block.z // ensure complete holes | |
| ]; | |
| echo(str("Screw OC: x=",ScrewOC.x," y=",ScrewOC.y)); | |
| //———————- | |
| // Useful routines | |
| module PolyCyl(Dia,Height,ForceSides=0) { // based on nophead's polyholes | |
| Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2); | |
| FixDia = Dia / cos(180/Sides); | |
| cylinder(d=(FixDia + HoleWindage),h=Height,$fn=Sides); | |
| } | |
| // Hose shape | |
| // This includes magic numbers measured from reality | |
| module HoseProfile() { | |
| NumSides = 12*4; | |
| rotate([0,-90,0]) | |
| translate([0,0,-Hose.x/2]) | |
| resize([Hose.z,Hose.y,0]) | |
| cylinder(d=Hose.z,h=Hose.x,$fn=NumSides); | |
| } | |
| // Outside shape of splice Block | |
| // Z centered on hose rim circles, not overall thickness through center ridge | |
| module SpliceBlock() { | |
| difference() { | |
| hull() | |
| for (i=[-1,1], j=[-1,1]) // rounded block | |
| translate([i*(Block.x/2 – CornerRadius),j*(Block.y/2 – CornerRadius),-Block.z/2]) | |
| cylinder(r=CornerRadius,h=Block.z,$fn=4*8); | |
| for (i = [0:NumScrews – 1], j=[-1,1]) // screw holes | |
| translate([-(Block.x/2 – CornerRadius) + i*ScrewOC.x, | |
| j*ScrewOC.y/2, | |
| -(Block.z/2 + Protrusion)]) | |
| PolyCyl(Screw[ID],Block.z + 2*Protrusion,6); | |
| cube([2*Block.x,2*Block.y,Kerf],center=true); // slice through center | |
| } | |
| } | |
| // Splice block less hose | |
| module ShapedBlock() { | |
| difference() { | |
| SpliceBlock(); | |
| HoseProfile(); | |
| } | |
| } | |
| //———- | |
| // Build them | |
| if (Layout == "Hose") | |
| HoseProfile(); | |
| if (Layout == "Block") | |
| SpliceBlock(); | |
| if (Layout == "Show") { | |
| difference() { | |
| SpliceBlock(); | |
| HoseProfile(); | |
| } | |
| color("Green",0.25) | |
| HoseProfile(); | |
| } | |
| if (Layout == "Build") { | |
| SliceOffset = TestFit && !(NumScrews % 2) ? ScrewOC.x/2 : 0; | |
| intersection() { | |
| translate([SliceOffset,0,Block.z/4]) | |
| if (TestFit) | |
| cube([ScrewOC.x/2,4*Block.y,Block.z/2],center=true); | |
| else | |
| cube([4*Block.x,4*Block.y,Block.z/2],center=true); | |
| union() { | |
| translate([0,0.6*Block.y,Block.z/2]) | |
| ShapedBlock(); | |
| translate([0,-0.6*Block.y,Block.z/2]) | |
| rotate([0,180,0]) | |
| ShapedBlock(); | |
| } | |
| } | |
| } |

Mary chased a small rabbit out of her garden a few days ago, whereupon we up-armored a few vulnerable parts of the fence. The culprit turns out to be insufferably cute:

You cannot be annoyed with something like this:

Oh, yes, you can. Rabbits are basically eating machines:

They’re welcome to all the greenery in the yard, just nothing in the garden:

It’s known as a 2×2 Bunny, because it can fit through that size opening in a chain link fence while traveling at a dead run.
This one has yet to learn about being wary around the Big People:

The alert reader will have noted the crappy quality of the last three pictures, at least in comparison with the first two. It’s the difference between digital zoom on my Pixel 3a phone applied to a zoomed-all-the-way image and optical zoom on a “real” camera (admittedly, an old Sony DSC-H5). On the other paw, I had the phone in my pocket when Mary spotted the bunny on the driveway, which counts for everything in similar situations.
JPG compression doesn’t handle hair particularly well, so the low-res bunny wears a rather artistic brush-stroke coat; it’s OK if you like that sort of thing.

We recently installed a Dripworks drip irrigation system for Mary’s garden and, of course, pre-assembled the emitter / dripline tubing, fittings, and supply / filter / plumbing for each of the beds in the Basement Shop. A few days after burying the main lines, plumbing the filter + pressure regulator, and plugging in half a dozen bed assemblies, Mary noticed some emitter tubes weren’t delivering any water and other beds seemed too dry.
N.B.: We bought everything directly from Dripworks. This is not counterfeit crap from a sketchy Amazon seller.
I cut the dripline just downstream of the Micro-Flow valve on a completely dry bed, whereupon no water emerged. Cutting the supply tube just upstream of the valve produced a jet squirting halfway along the bed. I tried and failed to blow air through the valve: it was completely blocked despite being in the “open” position. I installed another valve and the emitter tube started working properly.
I sat down at the kitchen table with a bag of unused valves and peered through them (the pix are through the microscope):

That’s one of the better-looking valves, with only a little mold flash in the lumen.
Partially occluded lumens were more typical:

Quite a few were almost completely obstructed:

For lack of better instrumentation, I blew through the valves and sorted them by effort:

Two of the valves in the group on the left are completely blocked, with the others mostly blocked.
The middle group has enough mold flash to produce noticeable resistance to the air flow. I think water would have more trouble getting through, but the emitters would at least look like they’re delivering water.
The group on the right has mostly unblocked valves, with visible mold flash but little restriction.
I have no way to measure the actual water flow, so it’s entirely possible the QC spec allows considerable blockage while still delivering enough water to the emitters. More likely, the spec assumes a clear lumen and the mold flash is a total QC faceplant; it’s obviously not a controlled quantity.
Well, I can fix that:

That’s a 2.3 mm drill going straight through the valve body. I drilled the valves from both ends and blew out the swarf:

That produced twenty valves with clear lumens. Of course, the drill leaves a slightly rough interior surface, but it’s now much easier to blow air through them.
We hadn’t installed the driplines in two beds with three emitter tubes per bed. I cut out those six unused valves and sorted them by resistance:

Both of the valves on the left are blocked, the three on the right are mostly OK, and the one in the middle is partially blocked.
With two dozen repaired valves in hand, we returned to the garden, I cut 22 valves out of the installed driplines and replaced them under field conditions. Returning to the Basement Laboratory, I blew the water out (*), sorted them by resistance, and produced a similar distribution, albeit with no pictorial evidence. Although we have no immediate need for the used valves, they’re drilled out and ready for use.
In very round numbers, you should expect:
Plan to drill out all the Micro-Flow valves before you assemble your driplines.
AFAICT, none of the other ¼ inch fittings we used have any interior flash, so it’s only a problem with the valves.
We are, as the saying goes, not amused.
(*) If you will eat a peck of dirt before you die, I’m well on my way.