Daily Digest — 2026-07-21

25 newsletters today.

In this digest


Abandoned Futures

The A-12 Avenger II: The Navy's Flying Dorito Stealth Bomber That Consumed $5 Billion, Never Flew, and Left a 30-Year Gap in Carrier-Based Strike Aviation

2026-07-21

In January 1988, the U.S. Navy awarded General Dynamics and McDonnell Douglas a fixed-price contract to build the A-12 Avenger II, a carrier-based stealth attack aircraft meant to replace the A-6 Intruder. It was a flying wing shaped like a perfect isoceles triangle — pilots called it "the Flying Dorito." Three years later, on January 7, 1991, Defense Secretary Dick Cheney cancelled it for default in what remains the largest weapons program termination in Pentagon history. The Navy has never replaced the strike capability it lost.

The design. A pure flying wing, 70.25 ft wingspan folding to 36.3 ft for carrier stowage, two General Electric F412-GE-D5F2 non-afterburning turbofans buried in the airframe, internal weapons bay carrying 5,160 lb of ordnance including two AIM-120 AMRAAMs, and a projected combat radius of 800 nautical miles — nearly double the F/A-18C. Top speed Mach 0.9. Radar cross-section targets were classified but reportedly comparable to the F-117. Two crew, side-by-side. It would have been the first tactical stealth aircraft designed from day one to operate off a pitching deck.

Why it collapsed. Three failures compounded:

  • Weight. The composite airframe kept coming in heavy. By late 1990 the aircraft was 30% overweight — roughly 8,000 lb above its 80,000 lb catapult limit. Nobody told the Navy for months.
  • Composites. The contractors had never built a composite structure of this size. Delamination, tooling failures, and cure defects piled up. The fixed-price contract meant the contractors ate every overrun.
  • Concealment. A December 1990 audit by Chet Paul Christie revealed the program was 18 months behind schedule and $1 billion over budget, and the contractors had actively hidden it. Cheney gave the program 5 days to justify itself. It couldn't.

General Dynamics and McDonnell Douglas sued the government for wrongful termination. The case dragged on for 23 years. In 2014 it was finally settled with Boeing (which had absorbed McDonnell Douglas) and General Dynamics paying the government $400 million in aircraft and services. The Navy got nothing that flew.

Why it could work now. Every technical problem that killed the A-12 has been solved:

  • Composite manufacturing. Automated fiber placement (AFP) machines now lay up B-21 and 787 structures within 1% of design weight. The B-21 Raider — a larger flying wing — is flying today at Palmdale.
  • Digital thread. Model-based systems engineering catches interface weight growth before metal is cut. The 30% overweight problem is now discoverable in CAD.
  • Naval stealth is proven. The F-35C operates from carriers with a low-observable coating that survives salt spray, catapult shock, and arrested landings. In 1990 nobody knew if RAM would survive a wire trap.
  • The mission gap is real. The F/A-18E/F Super Hornet has a combat radius of ~390 nautical miles. The Navy's carriers now have to sail inside Chinese DF-26 range to hit targets an A-12 could have reached from 800 miles offshore. The gap the A-12 was designed to fill has become a strategic emergency.

The Navy's F/A-XX program, expected to fly in the 2030s, is essentially a second attempt at the A-12's mission. Boeing and Northrop Grumman are competing. Both proposals reportedly feature a tailless flying-wing planform with an internal bay and an ~800 nm radius. The Dorito is coming back — 40 years late and after a $5 billion tuition payment.

Key Takeaway: The A-12 wasn't a bad aircraft — it was a good aircraft built with 1988 composite tooling under a fixed-price contract that punished honesty, and every technical obstacle that killed it has been solved by the aircraft the Navy is now paying to design from scratch.

ArXiv Paper Digest

TRIM: Reducing AI-Generated CodeSlop via Agent Trajectory Minimization

2026-07-21

Authors: Alex Mathai, Shobini Iyer, Aleksandr Nogikh, Petros Maniatis

ArXiv: 2607.18161v1

PDF: Download PDF

If you've ever used a coding agent to fix a bug or build a feature, you may have noticed something odd: the diff it produces is often huge. Where a human might change 10 lines, the agent changes 80 — with extra helper functions, defensive try/except blocks, logging statements, and comments explaining what the code obviously does. The tests pass, but the pull request looks bloated. The authors of TRIM call this "CodeSlop", and this paper is about where it comes from and how to get rid of it.

Their key insight is that CodeSlop isn't really a problem with how the agent writes code — it's a problem with how it searches for a solution. When a coding agent is grinding toward a passing test, it makes lots of speculative edits along the way: it adds a helper it thinks it might need, tries a defensive check, guesses at an edge case, changes its mind, tries something else. When a test finally passes, the agent stops. But all those speculative additions from earlier in the trajectory are still sitting in the final diff, even though many of them aren't actually necessary for the fix.

TRIM's approach is refreshingly direct: after the agent finishes, take the final diff and try to remove pieces of it. For each addition, ask, "Do the tests still pass without this?" If yes, drop it. If no, keep it. It's essentially delta debugging applied to agent output — the same technique used to minimize failing test cases, but pointed at the reverse problem of minimizing succeeding ones.

The results, per the abstract, show meaningful reductions in diff size while preserving correctness. A few things this unlocks:

  • Reviewable PRs. A 15-line diff is something a human can actually read and reason about; an 80-line diff often gets rubber-stamped or rejected outright.
  • Less technical debt. Speculative helpers and unused abstractions become future maintenance burden even if they don't break anything today.
  • A cleaner signal about what the agent actually understood. When you strip away the search residue, you see the real fix — and whether it makes sense.

The broader lesson is that agent outputs shouldn't be treated as final products. There's a post-processing step available — verify-then-shrink — that most agent frameworks skip because they stop as soon as the green checkmark appears. TRIM argues that's exactly the wrong stopping point.

Why it matters: As coding agents ship more real PRs, the difference between "tests pass" and "code is actually good" becomes a first-class engineering problem — and post-hoc minimization is a surprisingly cheap fix.

Daily Automotive Engines

Cylinder Head Porting: Port Wall Coatings and Ceramic Thermal Barriers

2026-07-21

You've spent hours smoothing the port floor to the right roughness, blending the bowl, radiusing the seat. Now the airflow is right. But there's one more surface treatment that separates a good port from a great one on a boosted or high-compression engine: thermal barrier coatings on the port walls, particularly the exhaust side.

The problem is heat transfer. On the intake side, hot port walls warm the incoming charge, reducing density and knock margin. On the exhaust side, hot gas dumps energy into the head, raising coolant load, warping the deck, and — critically for turbo engines — bleeding exhaust enthalpy that should be spinning the turbine wheel.

Two coating families dominate:

  • Intake port coatings — typically a thin (0.001-0.003") ceramic-filled polymer or dry-film thermal dispersant. The goal isn't insulation; it's reflecting radiant heat back into the aluminum head so the incoming air doesn't pick it up. Also, many of these coatings are hydrophobic, keeping fuel droplets from wetting out on the wall in port-injected engines.
  • Exhaust port coatings — genuine thermal barrier coatings (TBCs), usually yttria-stabilized zirconia (YSZ) applied by plasma spray at 0.005-0.015" thickness. Zirconia has thermal conductivity around 2 W/m·K, versus aluminum at 200 W/m·K. That's a 100:1 insulation ratio at the surface.

Real-world example: Formula 1 turbo-hybrid engines coat exhaust ports with YSZ to preserve exhaust gas temperature for the MGU-H turbine. Cummins does the same on heavy-duty diesel manifolds and ports to protect aftertreatment light-off temperature. On a street turbo build, a properly coated exhaust port can raise turbine inlet temperature by 40-80°F, measurably tightening spool and reducing coolant heat rejection by 5-10%.

Rule of thumb: For every 100°F you keep out of the head via exhaust port coating, you keep roughly 1-2% more exhaust enthalpy available at the turbine. On a 400 hp turbo build with 1500°F EGT, that's not trivial — it can shave 200-400 RPM off spool threshold.

The catch: bond coat is everything. YSZ won't stick directly to aluminum or cast iron. You need a NiCrAlY bond coat (0.003-0.005") sprayed first, which mechanically keys to a grit-blasted surface (Ra 250-400 μin — deliberately rough, unlike your polished port floor). Skip the bond coat and the ceramic sheets off in a few hundred heat cycles. Also, coatings reduce port cross-section, so if you're right at MCSA, coat first and port to final dimension after.

See it in action: Check out engine cylinder honing #mechanic by GMF to see this theory applied.
Key Takeaway: Thermal barrier coatings on exhaust ports preserve exhaust enthalpy for the turbine and protect the head from heat soak, but they require a rough bond coat and reduce port cross-section — coat first, then finish-port to size.

Daily Debugging Puzzle

C++'s std::optional<bool> Truthiness Trap: The Guard That Fires Whether the Flag Is True or False

2026-07-21

This billing routine looks at a per-user override flag. If the user has explicitly opted out of billing (skip_billing = true), we skip the charge. Otherwise we process payment. The flag is stored in a map, so a missing entry means "not set — use the default (bill them)."

#include <optional>
#include <iostream>
#include <unordered_map>
#include <string>

std::unordered_map<std::string, bool> user_flags;

std::optional<bool> get_user_flag(int user_id, const std::string& flag) {
    auto key = std::to_string(user_id) + ":" + flag;
    auto it = user_flags.find(key);
    if (it == user_flags.end()) return std::nullopt;
    return it->second;
}

void process_payment(int, double);  // charges the card

void charge_user(int user_id, double amount) {
    auto skip_billing = get_user_flag(user_id, "skip_billing");
    if (skip_billing) {
        std::cout << "Skipping billing for user " << user_id << "\n";
        return;
    }
    process_payment(user_id, amount);
}

The unit tests pass. Users without any flag get billed. Users with skip_billing = true are skipped. Ship it.

Then support pings you: a customer who explicitly turned billing on (setting skip_billing = false through a UI toggle) hasn't been charged in three months.

The Bug

std::optional<T> has an explicit operator bool(). It returns true when the optional contains a value — not when that value is truthy. So if (skip_billing) asks "is the flag present?", not "is the flag set to true?"

For a std::optional<int> or std::optional<std::string> the type mismatch is obvious the moment you try to use it. But std::optional<bool> collapses two orthogonal pieces of information — present/absent and true/false — into one syntactic check, and the compiler will happily accept whichever one you meant, silently doing the other.

The three states you actually have are nullopt, bool(false), and bool(true). The buggy code treats them as two: absent vs. present. So the customer who set skip_billing = false lands in the "present" bucket and gets the skip path — the exact opposite of what they asked for.

The fix is to be explicit about which question you're asking:

if (skip_billing.value_or(false)) {   // default when absent: don't skip
    std::cout << "Skipping billing for user " << user_id << "\n";
    return;
}
process_payment(user_id, amount);

Or, if you want the intent to leap off the page:

if (skip_billing.has_value() && *skip_billing) { ... }

Both compile to the same thing. Both are impossible to misread six months later. if (opt) on an optional<bool> is almost never what you want — some linters (clang-tidy's bugprone-optional-value-conversion family, and a few in-house checkers) flag it precisely because it's a landmine.

A broader lesson: any type that overloads operator bool to mean "engaged / valid / non-null" becomes hazardous the moment you put a bool inside it. The same trap lurks in std::variant<std::monostate, bool>, in hand-rolled Result<bool> types, and — in other languages — in Rust's Option<bool> (though Rust forces you to match or call .unwrap_or(), which shuts the door). C++'s implicit-ish conversions leave the door wide open.

Key Takeaway: if (opt) asks whether an std::optional is engaged, not whether its contents are truthy — for optional<bool>, always spell out opt.value_or(default) or opt && *opt.

Daily Digital Circuits

The StrongARM Latch: How Hardware Builds the Fastest Comparator by Regenerating a Voltage Difference to Full Swing

2026-07-21

Every high-speed ADC, SerDes receiver, and SRAM sense amp needs to answer one question millions of times per second: is voltage A greater than voltage B? A linear op-amp comparator burns static current and is slow. The StrongARM latch (originally called the Kobayashi latch, popularized in the DEC StrongARM CPU in 1996) does it in ~50 picoseconds with zero static current. It's arguably the most-copied circuit in modern mixed-signal design.

The topology has three phases driven by a clock:

  • Reset (clock low): PMOS switches precharge both output nodes and both internal drain nodes to VDD. The tail NMOS is off, so no current flows.
  • Sampling (clock rising): Tail NMOS turns on. A differential input pair (M1/M2) begins discharging the two output nodes at rates proportional to Vin+ and Vin−. Whichever input is higher discharges its side faster.
  • Regeneration: Once the output nodes fall below VDD−|Vtp|, a cross-coupled inverter pair (back-to-back PMOS+NMOS) kicks in. This positive-feedback latch amplifies the tiny voltage difference exponentially: ΔV(t) = ΔV₀ · e^(t/τ), where τ ≈ Cload/gm. Within one time constant, the winning side snaps to VDD and the loser to GND.

The key insight: the input pair only needs to create a tiny voltage imbalance (~10 mV) before regeneration takes over. That's why StrongARM latches can resolve millivolt-scale inputs in tens of picoseconds without amplification — you're not amplifying, you're tipping a metastable node the right direction.

Real-world example: A 12-bit, 1 GS/s pipelined ADC uses ~24 StrongARM comparators per stage (one per 1.5-bit sub-ADC). At 1 GHz, each comparator resolves a decision in under 500 ps and dissipates only dynamic energy (CV²f). If you tried this with static op-amps, you'd burn ~100× the power and never hit the speed.

Rule of thumb: The regeneration time to resolve ΔV₀ into a full logic swing VDD is t_reg ≈ τ · ln(VDD/ΔV₀). For τ = 5 ps, VDD = 1.0 V, and a 10 mV input: t_reg ≈ 5 · ln(100) ≈ 23 ps. Halve the input and you only add τ·ln(2) ≈ 3.5 ps — logarithmic scaling is the entire point.

The catch: if the input difference is below the latch's offset voltage (typically 5–20 mV due to threshold mismatch), the decision becomes random — this is metastability, same as any flip-flop. Designers add offset-cancellation phases or use larger input transistors (offset scales as 1/√WL) to trade area for resolution.

Key Takeaway: The StrongARM latch resolves millivolt inputs in picoseconds with zero static current by using cross-coupled positive feedback to exponentially amplify a small imbalance into rail-to-rail swing.

Daily Electrical Circuits

The TL431 Shunt Regulator: The Most Versatile Three-Terminal IC You've Never Fully Appreciated

2026-07-21

The TL431 is a programmable shunt regulator that has been shipping in billions of units since 1978 — you'll find one in nearly every switching power supply, laptop charger, and TV. It looks like a three-terminal Zener but it's actually an op-amp, a precision 2.495 V bandgap reference, and a shunt transistor in a TO-92 package. Understanding it unlocks a huge design vocabulary.

The three pins are reference (R), anode (A), and cathode (K). Internally, an op-amp compares the reference pin against the internal 2.495 V reference, and drives the K-A shunt transistor to sink whatever current is needed to keep VREF = 2.495 V. If you tie R directly to K, it behaves as a fixed 2.495 V shunt regulator. Add a resistor divider from K to R to ground, and you get:

VK = 2.495 × (1 + R1/R2)

That's it — that's the whole programming equation. Want a 5 V rail? Use R1 = R2 = 10 kΩ. Want 12 V? R1 = 38.3 kΩ, R2 = 10 kΩ.

Three canonical applications:

  • Precision Zener replacement: Drop-in for a 2.5–36 V reference with 0.5% initial accuracy and ~50 ppm/°C drift — orders of magnitude better than any Zener.
  • Isolated feedback in flyback converters: The classic optocoupler + TL431 combo on the secondary side of an offline supply. The TL431 senses the output, drives the optocoupler LED with error current, and the primary-side controller reads the phototransistor. This is the reason your USB charger regulates within 1%.
  • Undervoltage lockout / crowbar trigger: Wired as a comparator with a bit of hysteresis (add a resistor from K back to R), it becomes a precision threshold detector for firing an SCR crowbar or shutting down a rail.

Design gotchas: The TL431 needs at least 1 mA of cathode current to regulate — always add a pull-up resistor sized so that (VK − Vsupply) / R ≥ 1 mA under worst-case load. It's also famously conditionally stable: the phase margin depends on cathode capacitance. The datasheet's "stability map" shows a forbidden zone roughly between 1 nF and 1 µF at the cathode — either stay well below or well above it, or you'll get oscillation. In optocoupler feedback loops, put the compensation cap (typically 10–100 nF) directly across R-to-K, not K-to-ground, to avoid this trap.

Its lower-drift cousin the TL431A (0.5%) and precision LM431 (0.4%) are pin-compatible upgrades. For very low quiescent current there's the TLV431, which drops the minimum cathode current to 100 µA and the reference to 1.24 V.

Key Takeaway: The TL431 is really a precision 2.495 V reference plus op-amp plus shunt transistor — treat it as a programmable error amplifier, not just a fancy Zener, and mind its stability map when adding cathode capacitance.

Daily Engineering Lesson

Hypoid Gears: Offset-Axis Bevel Gears That Power Rear-Wheel Drive

2026-07-21

A hypoid gear looks like a spiral bevel gear at first glance — curved teeth, angled shafts — but with one critical difference: the pinion axis is offset from the ring gear axis, rather than intersecting it. That offset changes everything about how the gear behaves and why it exists.

Why offset the axis? In a rear-wheel-drive car, the driveshaft runs from the transmission to the rear differential. If you used spiral bevel gears (intersecting axes), the driveshaft would sit at the exact center height of the rear axle. That forces a hump in the floorpan directly under the passenger cabin. Drop the pinion below the ring gear centerline — that's a hypoid — and the driveshaft tucks lower, giving you a flatter floor. Nearly every rear-drive and 4WD vehicle uses hypoids in the differential for this reason.

The mechanical trade-off: The offset introduces significant sliding along the tooth face, on top of the normal rolling contact. Spiral bevels roll; hypoids slide and roll simultaneously. That sliding action gives hypoids advantages:

  • Quieter operation — multiple teeth are always in mesh with a gradual load transfer
  • Higher reduction ratios in a single stage (up to ~10:1 vs. ~6:1 for spiral bevel)
  • Larger pinion diameter for a given ring gear size, meaning stronger teeth

But the sliding also demands extreme-pressure (EP) gear oil — specifically GL-5 rated. Standard motor oil or even GL-4 gear oil will fail: the pressure between sliding tooth faces exceeds what an ordinary oil film can support, and you get metal-to-metal galling within hundreds of miles. This is a common mistake when someone tops off a differential with the wrong lubricant.

Rule of thumb for offset: The pinion offset is typically 10–20% of the ring gear diameter. A 9-inch ring gear (a classic Ford differential) uses about 1.5 inches of offset. More offset means more sliding, more reduction capability, but worse efficiency — hypoids run at roughly 90–95% efficiency, versus 98%+ for spiral bevels. That lost 5–8% shows up as heat in the differential oil, which is why performance vehicles often add a differential cooler.

Assembly matters as much as design: Hypoid gears are lapped as matched sets at the factory. You never replace just the pinion or just the ring gear — always both, together. Setting them up requires measuring the tooth contact pattern with marking compound and adjusting pinion depth with shims until the pattern centers correctly on both drive and coast sides.

See it in action: Check out 1) Bevel 2)Spur 3)Worm 4)Helical 5)Planetary 6)Herringbone #3danimation #cad #gear #engineering #3d by Mech Mechanism to see this theory applied.
Key Takeaway: Hypoid gears trade efficiency for a lower driveshaft, higher reduction, and quieter mesh — but the sliding contact demands GL-5 oil and matched-set replacement.

Forgotten Books

The Soviet Astronomer Who Proved Stars Are Still Being Born

2026-07-21

Book: CIA Reading Room cia-rdp80-00809a000600290768-8: ASTROPHYSICAL OBSERVATORY MAKES NEW DISCOVERIES; GEOPHYSICS OBSERVATORY CELEBRATES ANNIVERSARY by CIA Reading Room (1950)

Read it: Internet Archive

Buried in a declassified CIA translation of a 1949 issue of the Soviet newspaper Kommunist is a report on a young observatory perched 1,500 meters above sea level in Armenia — and a discovery that quietly upended the origin story of the universe.

In 1947–48, V. A. Ambartsumyan discovered the existence of new stellar systems forming the Galaxy. This discovery brought about an important change in our conception of the origin of stars and of celestial bodies in general. Many idealistic astrophysicists assumed that all stars composing the Galaxy were formed in some very remote epoch billions of years ago, and that, at present, star-forming processes are no longer occurring. The discovery of stellar associations appeared as evidence of the existence of isolated groups of young stars formed from other, formerly unknown heavenly bodies -- the so-called protostars (protozvezd).

The document is a CIA intelligence digest — Cold War analysts scanning Soviet newspapers for anything that hinted at the USSR's scientific capabilities. What they captured, without perhaps realizing it, was the announcement of one of the most important astronomical ideas of the 20th century.

Viktor Ambartsumyan, working at the newly built Byurakan Astrophysical Observatory in Soviet Armenia, had noticed something strange: certain loose groupings of hot, luminous O- and B-type stars were flying apart from each other so quickly that they could only have formed together within the last few million years — cosmic yesterday. In a Galaxy supposedly 10 billion years old, this was impossible unless star formation was still happening right now.

At the time, this was heretical. The dominant Western view was that stars had all condensed from primordial gas in the distant past. Ambartsumyan's "stellar associations" showed the opposite: the Galaxy was, and is, a maternity ward.

He was right. Modern astronomy has completely vindicated him:

  • Every image the Hubble and James Webb telescopes have returned of the Orion Nebula, the Eagle Nebula's "Pillars of Creation," or the Carina Nebula shows exactly what Ambartsumyan predicted — protostars condensing out of gas clouds in real time.
  • His term "stellar association" is still the standard technical term in astronomy today (OB associations, T associations).
  • The Byurakan Observatory he helped found is still operating.

The propaganda flourish in the CIA excerpt — "the discovery of these stellar associations proves the point of view of Soviet cosmogonical science" — is almost funny in retrospect. Soviet dialectical materialism happened to insist the universe was in perpetual change and renewal, which put ideological pressure on Soviet astronomers to look for exactly this kind of ongoing process. In this case, ideology and reality lined up. Ambartsumyan looked for continuous creation because his political system demanded it, and the sky obliged.

When you next see a Webb Telescope image of a newborn star punching through a dust cloud, remember: an Armenian astronomer told us that was happening in 1947, using nothing more than the proper motions of a few dozen blue stars — and a CIA analyst quietly filed it away as unevaluated information.

The forgotten claim: A Soviet astronomer proved in 1947 that stars are still being born throughout our Galaxy — a then-radical idea that every modern deep-space telescope has since confirmed in vivid color.

Forgotten Darkroom

The Century-Old Home Orchard Revolution That Almost Was

2026-07-21

Book: Apple trees – Dwarf by McFarland, J. Horace (John Horace), 1859-1948 (1923)

Read it: Internet Archive

This "book" isn't a book at all — it's a photographic index card from the archive of J. Horace McFarland, one of the most consequential Americans you've never heard of. McFarland ran the Mount Pleasant Press in Harrisburg, Pennsylvania, printed the great seed catalogs of his era, presided over the American Civic Association, and personally lobbied Woodrow Wilson to create the National Park Service. He was also an obsessive photographer of plants, cataloging thousands of images with cards like these:

NUMBER · Variety · Date · Remarks · Stored in Div. · Property of · For exclusive use · Engraved · Line or H.T. · Proofs of engravings made from this photograph are pasted below

The card's subject — Apple trees – Dwarf — is the artifact. In 1923, a nationally famous horticultural photographer thought dwarf apple trees deserved their own catalog category, alongside the ornamental Boltonias and Aubrietas in the neighboring drawers. That fact alone is a message from a lost world.

Because in 1923, the American home orchard was still a normal thing. Suburban lots routinely held two or three dwarf apples, a dwarf pear, and maybe a cherry, all trained as espaliers along a fence or clustered by the kitchen door. Nursery catalogs of the era — the very catalogs McFarland's press was printing — advertised dwarf stock as the practical answer for the "man of moderate means with a small city plot." A tree that topped out at eight feet, bore fruit in three years, and could be picked without a ladder was considered basic domestic infrastructure, like a clothesline.

Then it vanished. The interwar consolidation of orchards onto standard rootstocks, the post-1945 rise of supermarket produce, and the suburban lawn aesthetic (grass, foundation shrubs, and nothing you had to prune) killed the home orchard within a generation. By 1975, the average American had never seen a dwarf apple tree and wouldn't have known what to do with one.

Here's the twist: McFarland was ahead of his time twice. The commercial dwarfing rootstocks he was photographing — likely Paradise and Doucin stocks from the East Malling research station in England, which had just begun standardizing them in 1917 — went on to become the M9 and M27 rootstocks that now underpin virtually every commercial apple orchard on Earth. High-density modern orchards produce five times the fruit per acre of the 1920s standards, all thanks to the dwarfing genetics McFarland was documenting for suburban gardeners.

The commercial industry adopted his dream. Homeowners forgot it.

The recent explosion of "backyard orchard culture," the popularity of columnar apples at big-box stores, and community grafting workshops are, essentially, a rediscovery of what McFarland thought was already common knowledge in 1923. If you're planting a dwarf apple this fall, you're not being innovative. You're catching up.

The forgotten claim: A century ago, dwarf fruit trees were standard equipment for a small American home — a domestic technology so ordinary that a top horticultural photographer catalogued them like office supplies, before suburbia forgot they existed.

Forgotten Patent

George Antheil & Hedy Lamarr — Wait, That's Taken. Try: Vladimir Zworykin's "Iconoscope": The 1923 Patent That Invented the Electronic TV Camera — and Was Ruled to Have Been Beaten by a Farm Boy in a Utah Barn

2026-07-21

On December 29, 1923, a 34-year-old Russian émigré at Westinghouse named Vladimir Zworykin filed a patent application titled "Television System." It described an all-electronic camera tube — a vacuum vessel whose inner face was coated with a mosaic of tiny photosensitive globules, each acting as a microscopic capacitor that stored charge in proportion to the light hitting it. An electron beam swept across the mosaic, discharging each cell in turn and reading out the accumulated charge as a video signal.

Zworykin called it the Iconoscope. The patent — eventually granted as US 2,141,059 after a brutal 15-year prosecution — is the direct ancestor of every electronic image sensor ever made. The idea of charge storage and sequential readout is the operating principle of every CCD in a Hubble Space Telescope image and every CMOS sensor in every smartphone on Earth.

The problem: Zworykin's 1923 filing described the concept, but he couldn't actually build a working Iconoscope until roughly 1931. Meanwhile, in a converted garage in San Francisco, a 21-year-old Philo Farnsworth had transmitted the first all-electronic television image on September 7, 1927, using his Image Dissector — and filed his own patent (US 1,773,980) months earlier than Zworykin could demonstrate anything working.

RCA, which had absorbed Zworykin's work, sued. The case dragged on for years. In 1934, patent examiner Richard Lubcke ruled decisively for Farnsworth. The killer piece of evidence: Farnsworth's high-school chemistry teacher, Justin Tolman, produced a blackboard sketch the teenage Farnsworth had drawn for him in 1922 — a year before Zworykin's filing — showing the exact scanning geometry. RCA eventually paid Farnsworth a $1 million licensing fee, the first time the giant had ever licensed a patent instead of buying the inventor.

Why the Iconoscope still matters: Farnsworth won the priority fight, but Zworykin won the architectural argument. The Image Dissector had no charge storage — it only used the light hitting the sensor at the instant of scanning, which meant it needed searing illumination (Farnsworth's early demos required arc lamps that made the studio unbearable). The Iconoscope's mosaic accumulated charge between scans, giving it 100× the sensitivity. Every modern sensor works this way: photons hit a pixel, charge accumulates in a well during an exposure interval, then readout circuitry marches through the array.

The direct lineage:

  • Iconoscope (1923) → Image Orthicon (1939) → Vidicon (1950) — all charge-storage tubes.
  • Willard Boyle & George Smith's CCD at Bell Labs (1969, Nobel 2009) replaced the electron beam with a shift register but kept the mosaic-of-charge-wells idea intact.
  • The CMOS active-pixel sensor (Eric Fossum, JPL, 1993) put an amplifier at every pixel — but each pixel is still, in essence, one of Zworykin's tiny capacitors.

Zworykin lived to 92 and reportedly hated what television had become. Asked in the 1970s what he thought of the medium he'd helped invent, he said: "The technology is wonderful. I would never let my own children watch it." The mosaic he sketched in 1923 now stares out from roughly 5 billion camera-phone lenses.

Key Takeaway: Zworykin lost the priority fight for electronic television but won the architectural one — his 1923 charge-storage mosaic is the direct conceptual ancestor of every CCD and CMOS sensor ever manufactured.

Daily GitHub Zero Stars

ayrshirepixels/game-roulette

2026-07-21

Game Roulette is a Decky Loader plugin for the Steam Deck that solves a very modern problem: choice paralysis. If you're anything like most Steam Deck owners, you've amassed a library of hundreds of games — many of them impulse-bought during a Summer Sale — and now you spend more time scrolling through capsules than actually playing anything. This plugin turns that decision into a slot-machine spin.

The concept is delightfully simple:

  • It pulls in your Steam library's capsule art
  • Spins them like a slot-machine reel directly in the Steam Deck UI
  • Lands on a random pick — and you play it

What makes this repo interesting isn't just the novelty. It's the surface-level polish of the idea: rather than a plain "random game" button, the slot-machine metaphor injects a dose of playful anticipation into the mundane act of picking something. That small bit of theatre is what separates a fun tool from a forgettable one. It also demonstrates thoughtful integration with the Decky Loader ecosystem, which is the community's go-to way of extending SteamOS's gaming mode without cracking open desktop mode.

Who would benefit? A few groups come to mind:

  • Steam Deck hoarders with backlogs measured in the hundreds
  • Indie game explorers who want a serendipitous nudge toward forgotten purchases
  • Decky Loader plugin developers looking at a small, focused reference for building library-integrated UI
  • Parents or streamers who need a fair, no-arguments way to pick a game

It's the kind of small, playful project that feels handmade — the description even nudges the user with a friendly "so you stop staring at 300 games and just pick one." Zero stars today, but this is exactly the flavor of quality-of-life tool that thrives in the Steam Deck modding community once it gets discovered.

Why check it out: A charming slot-machine game picker for Steam Deck that turns backlog-scrolling paralysis into a moment of playful anticipation.

Daily Hardware Architecture

The Instruction Length Predecoder: How x86 CPUs Find Where Instructions Begin

2026-07-21

Fixed-width ISAs like ARM64 and RISC-V have it easy: every instruction is 4 bytes, so the decoder knows exactly where instruction N+1 starts before it even looks at instruction N. x86 doesn't have that luxury. An x86 instruction can be anywhere from 1 to 15 bytes, and you can't tell how long it is without partially decoding it. This creates a nasty serial dependency: to decode instruction 2, you first need to know where instruction 1 ends.

The instruction length predecoder (sometimes called the length decoder or ILD) is a small piece of hardware that sits between the L1 instruction cache and the actual decoders. Its only job is to scan the raw byte stream and mark the boundaries between instructions — where each one starts and where it ends. It doesn't figure out what the instructions do; it just finds their edges so the real decoders can work in parallel.

On Intel CPUs, the predecoder processes a chunk of bytes fetched from L1I (typically 16 bytes on older cores, up to 32 on newer ones) and produces a bitmap of instruction start positions. It handles prefixes, ModR/M bytes, SIB bytes, displacement fields, and immediates — enough to compute length without semantic decoding.

The catch: the predecoder has strict throughput limits. On Skylake, it can predecode at most 6 instructions per cycle, or up to 16 bytes per cycle, whichever comes first. If your average instruction is 4 bytes, you'll be byte-limited (16÷4 = 4 instructions/cycle) rather than instruction-limited. And there are painful edge cases: instructions with length-changing prefixes (LCPs — like a 16-bit immediate with an operand-size prefix) can stall the predecoder for 6 extra cycles because the prefix changes how many bytes the immediate occupies, and the predecoder has to reset its scan.

Real-world example: code compiled with 16-bit immediates (like mov ax, 1234h) inside a hot loop can tank front-end throughput on Intel chips. This is why compilers avoid emitting them in performance-critical code — a single LCP stall in a tight loop can drop IPC from 4 to under 1. Also, this is one of the biggest reasons the µop cache exists: once code has been predecoded once, subsequent iterations skip this hardware entirely and read pre-parsed µops directly.

Rule of thumb: if your x86 code averages more than 4 bytes per instruction and you're missing the µop cache, you're front-end bandwidth-limited before you even reach the decoders. Every extra REX prefix, every long immediate, every LCP is a tax that fixed-width ISAs simply don't pay.

Key Takeaway: Variable-length instruction encoding forces x86 CPUs to dedicate silicon just to finding where each instruction begins, and length-changing prefixes can stall this predecoder for cycles at a time.

Hacker News Deep Cuts

Why Are There No Empires in Age of Empires? (2019)

2026-07-21

Bret Devereaux runs A Collection of Unmitigated Pedantry (ACOUP), one of the finest public-facing history blogs on the internet. A military historian by training, he specializes in using popular media — video games, films, fantasy novels — as a hook to teach rigorous ancient and medieval history. This piece, part of a longer series, takes aim at the wildly misleading model of civilization baked into Ensemble Studios' beloved RTS franchise.

The core argument is deceptively simple: the "empires" you build in Age of Empires aren't empires at all. They're closer to autarkic city-states with an unusually diverse workforce. A real empire is defined by hegemony over other polities — the extraction of tribute, taxes, and labor from subject peoples who retain their own local structures. AoE has none of this. Your villagers chop your trees, mine your gold, and farm your fields on land you directly control. There is no periphery, no client kingdom, no tax collector riding out to a subordinate town.

Why should a technical audience care? A few reasons:

  • Systems modeling. Anyone who has built a simulation, an economic model, or a game engine will recognize the tension between playable abstraction and structural truth. Devereaux is essentially doing a code review of a design decision — showing which assumptions got hard-coded into the simulation and what they distort.
  • The resource-graph fallacy. AoE's food/wood/stone/gold model has quietly shaped how a generation of engineers imagines pre-modern economies. The post is a useful corrective for anyone building historical simulations, worldbuilding tools, or even LLM-driven strategy agents.
  • ACOUP as a whole. If you haven't found this blog yet, the "Fremen Mirage," "Siege of Gondor," and "Bread, How Did They Make It?" series are all first-rate. It's the sort of long-form, citation-heavy writing that used to define the early web and has become increasingly rare.

The piece is seven years old but has aged beautifully — the AoE franchise is still shipping expansions, and the underlying misconception about what "empire" means is if anything more pervasive now than in 2019. A perfect Tuesday-afternoon rabbit hole.

Why it deserves more upvotes: A meticulous historian dismantles a beloved video game's model of civilization, and in doing so quietly teaches you how real empires actually functioned.

HN Jobs Teardown

dMetrics: What Their Hiring Reveals

2026-07-21

Source: HN Who is Hiring

Posted by: tomersabo

Of the ten postings, dMetrics is the most revealing because it's the only one that describes its problem shape rather than its product features. Nearly every phrase is a technical tell.

1. The stack is implied, and that's the point

dMetrics doesn't name a single framework — no React, no Go, no Kubernetes. Instead, they name capabilities: "Internet scale data ingestion, near-deduplication, interactive pipeline orchestration, training & annotator management, visualization, signal validation." Read that list carefully — it's essentially the internal architecture diagram of a modern NLP platform (think Snorkel + Airflow + Label Studio + a serving layer), rewritten as a job requisition. The absence of buzzwords signals a team that assumes the reader can infer the stack from the workload. That's a filter, not an oversight.

2. Company stage and direction

They're calling it a "zero-code, end-to-end NLP framework for non-technical subject matter experts." Translation: they're building a vertical AI platform for domain experts (likely legal, medical, or financial analysts) before "AutoML for NLP" was a saturated category. The line "we are usually called upon when the usual run-of-the-mill solutions fail (serve grade A clients)" is a giveaway — they're a high-touch, enterprise-services-flavored startup, not a self-serve SaaS. They compete on capability, not price.

3. Skills and trends highlighted

  • Annotator management — human-in-the-loop labeling is a first-class engineering surface, not an afterthought
  • Near-deduplication at internet scale — MinHash/LSH territory; a training-data quality problem
  • Interactive pipeline orchestration — DAGs that non-engineers can manipulate live
  • Signal validation — model evaluation as a product feature, not an internal metric

This is the shape of an ML platform team circa 2020 that already understood data-centric AI before Andrew Ng popularized the term.

4. Flags

Green: "MIT PhD founders (male+female)" — an unusually direct diversity signal for the era, and academic credibility for an NLP shop. The specificity of the technical scope suggests engineers won't be flailing at ambiguous mandates.

Yellow: Onsite-only in NYC with no remote option, no salary band, and the phrase "looking to match the level on the eng[ineering]" hints founders feel the research bench outpaces the engineering bench — new hires will be catching up to PhDs, which is either exhilarating or exhausting.

The signal: The best ML teams in 2020 were already selling data infrastructure, not models — the moat was pipeline tooling and annotation quality, not algorithms.

Daily Low-Level Programming

The seccomp-bpf Filter: Sandboxing Syscalls with a JIT-Compiled Program the Kernel Runs on Every Entry

2026-07-21

You've seen landlock for filesystem sandboxing. But sandboxing at the syscall layer — deciding which of the ~350 Linux syscalls a process is even allowed to invoke — is done with seccomp-bpf. It's the mechanism behind Chrome's renderer sandbox, systemd's SystemCallFilter=, Docker's default profile, and Firefox's content processes.

The core idea: you install a small BPF program via prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog) or seccomp(2). On every syscall entry, before the kernel dispatches to the handler, it runs your BPF program against a struct seccomp_data containing the syscall number, architecture, instruction pointer, and first six argument registers. The program returns a 32-bit action:

  • SECCOMP_RET_ALLOW — proceed normally
  • SECCOMP_RET_ERRNO — skip the syscall, return an errno you pick (low 16 bits)
  • SECCOMP_RET_KILL_PROCESS — SIGSYS the entire thread group, no handler runs
  • SECCOMP_RET_TRAP — deliver SIGSYS to just this thread; handler can inspect and emulate
  • SECCOMP_RET_USER_NOTIF — park the caller and hand the syscall to a supervisor over a file descriptor (the basis for user-space syscall emulation in runtimes like gVisor)
  • SECCOMP_RET_LOG / TRACE — audit or hand to ptrace

Two invariants keep this safe. First, filters are append-only and only allow narrowing — once installed, a process can add more restrictive filters but never remove one, so a compromised child can't escape. Second, PR_SET_NO_NEW_PRIVS must be set (or you need CAP_SYS_ADMIN), which is what lets unprivileged processes install filters without becoming a privilege-escalation vector via setuid binaries.

Concrete example — OpenSSH's privsep child: after authentication, sshd's unprivileged network-facing child installs a seccomp filter that permits roughly 40 syscalls (read, write, select, brk, mmap with anonymous flags, sigreturn, exit) and returns SECCOMP_RET_KILL_PROCESS for everything else. If a memory-corruption bug in the SSH protocol parser gives an attacker RIP control, they can't call execve, open, or socket — the kernel kills the process before the handler runs. The filter is 60 lines of hand-written BPF.

Rule of thumb — the cost: a seccomp filter adds roughly 100–300 ns per syscall depending on program length. On a workload doing 100k syscalls/second, that's ~1–3% CPU. Filters are JIT-compiled on x86-64 and arm64 (check /proc/sys/net/core/bpf_jit_enable), which is what keeps the overhead sub-microsecond — an interpreted filter would be 5–10× worse.

The classic footgun: filtering on syscall arguments that are pointers. BPF can't dereference user memory, so you can only match register values. A filter that "allows open only for /tmp/*" is impossible in seccomp alone — you match the flags and mode ints, but the path pointer is opaque. This is why USER_NOTIF exists: for path-based decisions, you delegate to a supervisor that can read the target's memory via /proc/pid/mem.

Key Takeaway: seccomp-bpf runs a JIT-compiled classifier on every syscall entry, letting an unprivileged process permanently drop access to syscalls it will never legitimately need — but only on register values, never on the memory those registers point to.

RFC Deep Dive

RFC 3401: Dynamic Delegation Discovery System (DDDS) Part One — The Comprehensive DDDS

2026-07-21

RFC: RFC 3401

Published: October 2002

Authors: Michael Mealling

RFC 3401 is the umbrella spec for the Dynamic Delegation Discovery System, a five-part family (RFCs 3401–3405) that quietly powers how the internet turns opaque identifiers into services. If you've ever placed a SIP call, resolved an ENUM phone number, or watched a DNS NAPTR record show up in dig output and wondered what it was for, you've been in DDDS territory.

The problem. By the late 1990s, the IETF kept inventing one-off ways to look things up in DNS. URN resolution wanted NAPTR. Telephone numbers wanted ENUM. SIP wanted service discovery. Each proposal reinvented the same wheel: take a string, apply some rules, get a URI, maybe apply more rules, eventually get an answer. Michael Mealling's insight was to factor out the algorithm and let each application supply its own rule set — an Application — while sharing a common Rule Database (usually DNS).

The abstraction. DDDS defines two things:

  • An Algorithm (RFC 3402) that iteratively applies regex substitution rules to an input string, walking from a generic starting point toward a specific answer.
  • A Rule Database that stores those rules. The DNS binding (RFC 3403) uses the NAPTR resource record, whose fields — order, preference, flags, services, regexp, replacement — map directly to DDDS concepts.

How it plays out. ENUM (RFC 3761) is the poster child. Feed it +1-770-555-1212, reverse and dot the digits to get 2.1.2.1.5.5.5.0.7.7.1.e164.arpa, then query for NAPTR records. Each record's regex rewrites the input into a URI like sip:[email protected]. Multiple records mean multiple services (SIP, mailto, tel, xmpp), ordered by preference. SIP itself uses S-NAPTR (RFC 3958) the same way: given a domain, discover which transports and servers handle SIP for it, without hardcoding _sip._udp conventions.

Design decisions worth noting.

  • Regex-based rewriting was controversial — POSIX extended regex embedded in a DNS record is not everyone's idea of elegant. But it kept the algorithm truly generic: any string-to-string transformation an Application needs can be expressed.
  • Terminal vs. non-terminal rules (the flags field) let a lookup either stop with a final URI or produce a new key to query again. This is what makes it a delegation system: authority for a subtree can be handed off mid-lookup.
  • Separating the algorithm from the database means DDDS is not DNS-specific in principle, though in practice DNS is the only Rule Database anyone ships.

Why it still matters. Modern SIP infrastructure, IMS core networks, and anything doing carrier-grade telephony discovery leans on NAPTR + DDDS daily. WebFinger and its cousins were partly a reaction to DDDS being too heavy for casual web use. When you see people arguing about whether to add yet another underscore-prefixed SRV-style record or reuse NAPTR, they're arguing about DDDS's core tradeoff: generality vs. simplicity.

Backstory. DDDS emerged from a painful realization during URN standardization: the original NAPTR spec (RFC 2915) had been quietly generalized by implementers well beyond URNs. Rather than fight it, Mealling wrote 3401–3405 to retrofit a clean theory onto what was already happening in the wild — a rare and honest case of the IETF documenting reality instead of prescribing it.

Why it matters: DDDS is the hidden framework that turns phone numbers, domain names, and abstract identifiers into concrete service endpoints across SIP, ENUM, and modern telephony — a generic lookup algorithm most engineers use without ever naming.

Daily Software Engineering

The Segmented LRU with Compressed Ghost Entries: Fitting More Eviction History Into Less RAM

2026-07-21

SLRU with ghost entries remembers what it evicted so it can promote returning keys faster. But ghost lists eat memory — a 1M-entry ghost list holding 32-byte keys plus pointers costs ~48 MB just to remember things you already threw away. Compressed ghost entries fix that by storing fingerprints instead of full keys.

The idea: a ghost entry doesn't need to reconstruct the original key. It only needs to answer "have I seen this key before?" with acceptable false-positive rates. So instead of storing the key, store a 4-byte or 8-byte hash fingerprint. Your 48 MB ghost list shrinks to 4–8 MB, and you can now remember 6–12× more evictions in the same RAM budget.

How it works in an SLRU cache:

  • Probationary and protected segments hold real entries (key + value + metadata).
  • Two ghost lists — one per segment — hold only fingerprint(key) in an LRU-ordered ring buffer.
  • On a miss, hash the key and check both ghost lists. A hit means "recently evicted" — admit directly into protected, skipping probation.
  • On eviction from a segment, replace the oldest fingerprint in that segment's ghost list with the new one.

Real-world example: Cassandra's row cache historically used simple LRU and suffered on scan-heavy workloads that flushed hot rows. Switching to an SLRU variant with compressed ghost lists let it remember ~10× more eviction history in the same JVM heap — enough that a hot row briefly displaced by a table scan gets promoted back to protected the moment it's re-read, instead of restarting probation. Hit rate improved 15–25% on mixed OLTP+analytics workloads without raising cache size.

Rule of thumb for sizing: ghost list capacity should equal 2× to 4× the segment it shadows. With 64-bit fingerprints and a false-positive rate of n / 2^64, even a 100M-entry ghost list has FP probability ~5 × 10⁻¹². Practically zero. If you use 32-bit fingerprints for extra compression, cap ghost size at ~100K entries or FP rate climbs above 1-in-40K — noticeable on high-QPS caches.

Tradeoff: you lose the ability to iterate ghost keys or inspect them for debugging. If eviction telemetry matters — say, you want to log "which keys are churning?" — keep a small uncompressed sample alongside the compressed list. The fingerprints answer the hot-path question; the sample answers the diagnostic one.

Key Takeaway: Ghost entries only need to answer "seen before?" — replace full keys with hash fingerprints to remember 6–12× more eviction history in the same RAM.

Tool Nobody Knows

renameutils: qmv, qcp, and Batch-Renaming in $EDITOR With Actual Cycle Handling

2026-07-21

Every few years someone rediscovers vidir from moreutils and posts it like it's magic. It's fine. But there's an older, sharper tool for the same itch that almost nobody installs: Oleg Broytmann's renameutils, shipped since 2001 as qmv, qcp, imv, and icp. The killer feature isn't the editor integration — it's that qmv knows how to unpick rename cycles without clobbering your data.

Basic usage looks like every other editor-based renamer:

qmv *.jpg          # opens $EDITOR with a two-column list

The default --format=destination mode is where it earns its keep. You get two tab-separated columns: source on the left (read-only), destination on the right (edit freely).

DSC_0001.jpg    DSC_0001.jpg
DSC_0002.jpg    DSC_0002.jpg
DSC_0003.jpg    DSC_0003.jpg

Do a :%s/DSC_/vacation-2026-/ in vim and save. Done. But now try the party trick — swap two files:

a.txt    b.txt
b.txt    a.txt

mv can't do this. vidir processes line by line and mangles it. mmv requires you to spell out a pattern. qmv detects the cycle, inserts a temp file, and executes a.txt → tmp → b.txt → a.txt in the right order. Same for three-way swaps, four-way, arbitrarily long chains — you edit the target column and it figures out ordering.

The under-appreciated flags:

  • qmv -f do — "destination-only" mode. Editor shows just filenames; original list is comments. Great for terse edits.
  • qmv -f dv — "dual" mode (default). Two columns.
  • qmv -R photos/ — recursive.
  • qmv --editor=nvim — override $EDITOR per invocation.
  • Delete a destination line entirely → source file is left alone (not deleted — safer than vidir, which unlinks anything you remove).

qcp is identical but copies instead of moves. imv and icp are single-file variants with readline editing on the target name — the fastest way to rename a file with a long, awkward name you don't want to retype:

$ imv "Screenshot from 2026-07-21 09-14-33.png"
Rename to: Screenshot from 2026-07-21 09-14-33.png
          ^^^ full readline editing here — cursor, kill-word, tab-complete

Real workflow I use constantly — pull a CSV of new filenames from somewhere, feed it in:

ls *.pdf | paste - new-names.txt \
  | qmv -f do -              # read from stdin, edit-approve, execute

The - stdin support means you can pipe in a plan generated by any script and use qmv just as the interactive confirm-and-execute step, with cycle handling as a bonus.

What it does better than the alternatives:

  • vs. mv: batch, in an editor, with all the power of your editor's regex.
  • vs. mmv: no pattern language to memorize; you just edit text.
  • vs. vidir: handles cycles; doesn't treat deleted lines as "delete the file."
  • vs. shell loops: a preview you can inspect and abort by quitting the editor without saving.

Install via apt install renameutils, brew install renameutils, or your distro's equivalent. It's ~1000 lines of C. Twenty-five years old. Still perfect.

Key Takeaway: When you need to batch-rename files, qmv gives you your editor's full power plus the one thing every other renamer gets wrong — safely resolving cyclic renames without a manual temp-file dance.

What If Engineering

What If We Built a Skyscraper-Sized Trompe — A Waterfall That Compresses Air With No Moving Parts?

2026-07-21

A trompe is a wonderfully weird 17th-century invention: pour water down a shaft, let it drag air bubbles with it, and the weight of the water column compresses that air. No pistons, no turbines, no seals. The Ragged Chutes trompe in Ontario (1910) still exists — a 106 m shaft delivering ~350 psi of clean, cool compressed air to Cobalt's silver mines. It ran for 70 years with essentially zero maintenance because it has essentially zero moving parts.

Now: what happens if we scale one to Burj-Khalifa proportions?

The Physics

At the top of the shaft, water enters through a head cone — a venturi that pulls in air the way a shower drain forms a vortex. Bubbles get entrained and dragged downward faster than their buoyancy can lift them (terminal rise ≈ 0.25 m/s for a 5 mm bubble; downflow velocity ≈ 3 m/s wins easily). At the bottom, water enters an expansion chamber, air separates upward, gets tapped through a pipe, and water exits through a tailrace whose height sets the back-pressure.

Compression pressure is simply hydrostatic:

P = ρ · g · h
P = 1000 kg/m³ × 9.81 m/s² × 500 m
P ≈ 4.9 MPa ≈ 49 bar (711 psi)

The 500-Meter Trompe

Imagine a shaft the depth of the Shanghai Tower is tall, drilled next to a river. Assume a modest 10 m³/s water flow (a small hydro plant's worth) with 10% air entrainment by volume at the intake.

  • Hydraulic input: ρgQh = 1000 × 9.81 × 10 × 500 ≈ 49 MW
  • Air volume entrained at 1 bar: 1 m³/s
  • Isothermal compression work (water absorbs heat, keeping bubbles at ~15 °C): W = P₁V₁·ln(P₂/P₁) = 10⁵ × 1 × ln(49) ≈ 390 kJ/s = 0.39 MW

Hmm — only 0.4 MW of compressed-air power from a 49 MW waterfall? That's <1% efficiency, and it's the reason trompes fell out of favor. The trick is ratio: entrain more air. Historical Ragged Chutes moved roughly 1 m³ air per m³ water. Push our ratio to 1:1:

  • Air at intake: 10 m³/s → compressed to 0.2 m³/s at 49 bar
  • Compression work: 10⁵ × 10 × ln(49) ≈ 3.9 MW of pneumatic power
  • Trompe efficiency historically 60–80% — call it 3 MW usable

Still modest, but the compressed air comes out at near water temperature because the surrounding water is an infinite heat sink. That's a big deal. Conventional compressors waste ~30% of their input as heat because adiabatic compression heats gas to 300+°C. A trompe is genuinely isothermal — the thermodynamic ideal.

What You'd Actually Do With It

3 MW of cold, oil-free, moisture-saturated compressed air is perfect for:

  • Grid-scale CAES (compressed-air energy storage) — store the air in a salt cavern; retrieve later through a turbine.
  • Direct pneumatic industry — foundries, mines, and pneumatic tools that currently run screw compressors at 40% efficiency.
  • Ventilating a deep mine, which is exactly what Ragged Chutes did.

The Structural Reality

The shaft itself must hold 49 bar of internal pressure at the bottom while conducting 10 m³/s of two-phase flow. A 3 m diameter concrete-lined bore with steel casing handles this — the same tech as deep hydro penstocks. The real engineering nightmare is vibration: bubble collapse and slug flow can shake a shaft apart. This is why real trompes are drilled into rock, not built as freestanding towers. Our "skyscraper-sized" trompe wants to be a hole, not a tower.

Key Takeaway: A trompe trades compression efficiency for mechanical simplicity and perfect isothermal cooling — a 500 m shaft can deliver a few MW of chilled, oil-free compressed air with no moving parts, which is why the technology refuses to fully die.

Wikipedia Rabbit Hole

Faraday's ice pail experiment

2026-07-21

In 1843, Michael Faraday walked into his lab at the Royal Institution carrying a metal pail meant for chilling wine. What he did with it over the next few hours would quietly rewrite our understanding of electricity — and eventually make possible everything from MRI machines to the metal skin of the airliner you last flew in.

The setup was almost comically simple. Faraday took a pewter ice pail, stood it on a wooden stool for insulation, and connected it to a gold-leaf electroscope — a delicate instrument whose two thin gold leaves splay apart when electrically charged. Then he lowered a charged brass ball, dangling from a silk thread, down into the pail without letting it touch the sides.

The leaves flew apart. Nothing surprising there. But then came the strange part:

  • As long as the ball stayed inside the pail, the leaves held exactly the same deflection — whether the ball hovered near the rim or plunged deep to the bottom.
  • When Faraday let the ball touch the inside wall, the leaves didn't budge. The charge had transferred completely to the pail's outside, leaving the ball entirely neutral.
  • The inside of a closed conductor, he realized, holds no net charge at all. Every bit of it migrates to the outer surface.

This was the first precise quantitative confirmation of what we now call Gauss's law for electricity — the principle that the total electric flux through any closed surface depends only on the charge inside it. Faraday, who famously couldn't do the mathematics, had brute-forced his way to a foundational theorem of electromagnetism using a wine bucket and some gold foil.

The practical payoff shows up everywhere once you know to look for it. The metal fuselage of a passenger jet is essentially a Faraday cage — lightning strikes commercial aircraft about once a year on average, and passengers rarely notice because the charge races along the outer skin without touching the cabin. Your microwave oven's door has a metal mesh with holes small enough (relative to 2.45 GHz wavelengths) to trap microwaves inside while letting visible light out. MRI rooms are lined with copper to keep stray radio signals from corrupting the scans. Even the antistatic bags shipping your new SSD are conductive plastic doing the same trick.

There's a wonderful piece of trivia buried here: Faraday later climbed inside a 12-foot wooden cube lined with metal foil and had assistants crank a powerful electrostatic generator until sparks flew off the outside. Inside, using his most sensitive electroscopes, he detected absolutely nothing. He had literally sat inside his own theorem.

The connection to today's world runs deeper than shielding. Every capacitor in every phone, every shielded cable in every data center, every electromagnetic-pulse-hardened military vault — all descend directly from a bucket, a ball, and a man patient enough to notice that the leaves didn't move when they should have.

Down the rabbit hole: Faraday proved one of physics' most important laws by lowering a brass ball into a wine-chilling pail — and later confirmed it by sitting inside a giant foil-lined box while sparks crackled around him.

Daily YT Documentary

Built For 450 Patients. It Held Over 2,300. Here's What Happened Next | ABANDONED AMERICA

2026-07-21

Built For 450 Patients. It Held Over 2,300. Here's What Happened Next | ABANDONED AMERICA

Channel: Abandoned Records (0 subscribers)

This documentary tells the story of Danvers State Hospital in Massachusetts, a 19th-century psychiatric institution designed on the Kirkbride Plan — an architectural philosophy that believed sunlight, fresh air, and long staggered wings could actually heal mental illness. Danvers was built to house 450 patients under this hopeful model. By the mid-20th century, it held over 2,300.

What makes this worth watching isn't just the crumbling gothic imagery — it's the collision between good intentions and institutional collapse. The video promises to explain how overcrowding, the rise of lobotomies and electroshock, and the eventual deinstitutionalization movement of the 1970s left behind 770 unmarked graves marked only by numbers. Those numbered stones sitting behind a modern apartment complex are a genuinely haunting piece of American medical history most people drive past without knowing.

The channel has zero subscribers, which is a gamble, but the description is specific and factual rather than clickbait — it names the location, cites real numbers, and points to a documented historical site. If the execution matches the framing, this is a solid intro to the Kirkbride era and why so many of these massive asylums ended up as ruins.

Why watch: A grounded look at how a hopeful 19th-century mental health architecture became one of America's most infamous asylum ruins.

Daily YT Electronics

Turn Any Bluetooth Earbuds into a Hearing Aid!

2026-07-21

Turn Any Bluetooth Earbuds into a Hearing Aid!

Channel: The Tech Mastery (533 subscribers)

Note: today's candidate pool was heavy on Shorts and hashtag spam. This one still carries the Shorts-style tags, but the underlying build is the most technically substantive of the batch, so it's the pick.

The project chains together three interesting pieces of hardware: an ESP32 as the compute and Bluetooth radio, an INMP441 as the audio front end, and a small OLED for status feedback. The INMP441 is a MEMS microphone that speaks I2S directly — no analog signal chain, no ADC noise floor to fight — which is exactly the right choice when you want clean audio into a microcontroller.

What makes this more than a toy is the signal path: capture PCM samples over I2S, then hand them back out over Bluetooth A2DP (or a similar profile) to standard earbuds. That means the ESP32 is acting as both an I2S slave-receiver from the mic and a Bluetooth audio source to the sink — a genuinely non-trivial dual-role configuration that trips up a lot of first-time ESP32 audio projects.

Even if the presentation is short-form, viewers can pull real takeaways: how I2S microphones differ from analog electret capsules, why buffer sizing matters for perceived latency in a hearing-aid use case, and how the ESP32's Bluetooth stack exposes audio profiles. It's also a good jumping-off point for adding gain control, a simple compressor, or bandpass filtering in software.

Why watch: A compact demo of ESP32 + I2S MEMS mic + Bluetooth audio streaming — a genuinely useful reference architecture for real-time audio projects.

Daily YT Engineering

SIG 516 Patrol Firing Cycle Explained | 3D Cutaway Animation

2026-07-21

SIG 516 Patrol Firing Cycle Explained | 3D Cutaway Animation

Channel: MechAnimations Lab (945 subscribers)

Most of the candidate pool this week is hashtag-spam shorts, generic "types of X" slideshow videos, or exam-cram content — none of which teach anything a curious engineer doesn't already know. This SIG 516 cutaway animation stands out because it takes a genuinely interesting mechanical system and shows you the internals in motion.

The SIG 516 is a short-stroke gas piston AR-pattern rifle, which is mechanically distinct from the direct-impingement system Eugene Stoner designed into the original AR-15. Instead of routing hot propellant gas back into the receiver via a tube, the 516 taps gas into a cylinder that drives a piston, which strikes an operating rod, which cycles the bolt carrier. The tradeoff — added reciprocating mass and complexity in exchange for a cleaner, cooler-running action — is one of the more debated topics in modern rifle design.

A good 3D cutaway is the right medium for this: you can actually see the gas tap, piston travel, bolt rotation via the cam pin, extraction, ejection, and the buffer spring resetting the carrier group. Static diagrams flatten all of that into arrows. If the animation timing is accurate, it's a useful complement to reading about locked-breech operation in something like Chinn's The Machine Gun.

Caveat: at 945 subscribers with no prior track record visible here, animation quality is unverified — worth a quick sanity check before committing full attention.

Why watch: A 3D cutaway is the clearest way to actually see how a short-stroke gas piston differs from direct impingement in an AR-pattern rifle.

Daily YT Maker

n8n vs Zapier vs Make? Try This Open-Source Automation Platform (Self-Hosted, No-Code)

2026-07-21

n8n vs Zapier vs Make? Try This Open-Source Automation Platform (Self-Hosted, No-Code)

Channel: CodeZero (30 subscribers)

Most of today's small-channel drop was low-signal "make money with AI" clickbait, so the pickings were slim — but this one is a genuine hands-on comparison rather than a hype reel.

The creator lines up the three dominant no-code automation platforms — n8n, Zapier, and Make — and calls out something anyone who's actually used them knows: the feature lists all look identical, but the day-to-day UX is where they diverge. Node spaghetti, buried menus, and painful debugging loops are the real cost, not the pricing page.

From there they pivot to a lesser-known self-hosted, open-source alternative pitched as friendlier to work in. For anyone running their own homelab or already stitching together workflows on a NAS or small VPS, a self-hosted option means no per-task billing, no data leaving your network, and full control over which integrations you trust. That's a meaningful practical angle for DIY-minded viewers who'd rather own their automation stack than rent it.

At 30 subscribers this is a very new channel, so temper expectations on production polish — but the framing (real usability critique, not feature-list bingo) is the right one.

Why watch: An honest UX-first comparison of the big automation platforms plus a self-hostable alternative worth knowing about if you'd rather own your workflows than rent them.

Daily YT Welding

XIONGGU on Changshi Natural Gas Pipeline – Pipeline Automatic Welder

2026-07-21

XIONGGU on Changshi Natural Gas Pipeline – Pipeline Automatic Welder

Channel: xionggu welding (405 subscribers)

Note: today's batch was thin — mostly hashtag-spam shorts and generic auto-generated compilations. This XIONGGU field video is the only entry with a real subject and a real description, so it wins by default.

This clip follows XIONGGU's automatic orbital welding rigs at work on the Changshi long-distance natural gas transmission pipeline — the kind of large-diameter cross-country job where every girth weld has to pass radiographic inspection and where a single failed joint can shut down a whole spread. Pipeline welding is one of the most demanding niches in the trade: root passes on beveled heavy-wall pipe, tight heat-input windows to avoid HAZ cracking in high-strength line-pipe steels (X65/X70), and the logistical challenge of doing it consistently in the field, in the wind, on a schedule.

Automatic bug-on-a-band systems like XIONGGU's replace the traditional crew of stovepipe stick welders with a mechanized carriage that rides a track clamped around the pipe, feeding wire and modulating parameters through each of the 5G positions (flat, vertical-down, overhead) as it circles the joint. It's worth watching even as a promo piece to see the track-and-carriage setup, the internal line-up clamp, and how the machine transitions arc parameters around the clock face — concepts that transfer directly to anyone learning orbital TIG on smaller tube work.

Why watch: A real-world look at mechanized orbital pipeline welding on a major gas transmission project — useful context for anyone curious about how cross-country pipe actually gets joined.

All newsletters