Daily Digest — 2026-07-20

26 newsletters today.

In this digest


Abandoned Futures

The Lun-Class Ekranoplan MD-160: The 380-Ton Missile-Carrying Ground-Effect Ship That Skimmed the Caspian Sea at 340 MPH and Got Left to Rust on a Beach in 2020

2026-07-20

The Aerotrain and the smaller ekranoplans have been covered here before, but the Lun-class MD-160 deserves its own entry — it was the only operational combat ekranoplan ever built, and its 2020 fate says everything about how the West still doesn't know what to do with ground-effect technology.

Designed by Rostislav Alexeyev's Central Hydrofoil Design Bureau in Nizhny Novgorod, the MD-160 (NATO reporting name: Utka, "Duck") entered Soviet Navy service in 1987. It was 73 meters long, weighed 380 tonnes fully loaded, and cruised at 550 km/h (340 mph) roughly 4 meters above the water surface. Eight Kuznetsov NK-87 turbofans mounted on canard-like pylons blew exhaust under the stub wings to generate the "power-augmented ram" effect that got it out of the water; once airborne in ground effect, four of the eight engines could be shut down for cruise.

Its payload was six P-270 Moskit (SS-N-22 Sunburn) supersonic anti-ship missiles in dorsal launch tubes — the same missiles that were designed to sink American carriers. A Lun could sprint from Baku to the Persian Gulf entrance in under three hours, launch six Mach-3 sea-skimmers, and be back before a carrier group's E-2 Hawkeyes had processed the initial radar return. It flew below most surface-search radar horizons, was invisible to submarines (no wake, no acoustic signature), and moved faster than any ship afloat.

Why it died: The USSR collapsed in 1991. The second hull, being converted to a search-and-rescue variant called Spasatel, was 90% complete at the Volga shipyard when funding evaporated. The operational MD-160 sat at Kaspiysk naval base for 30 years. In 2020 it was towed 100 km down the Caspian coast to Derbent to become a museum piece — the tow itself made international news because nobody had seen it move in decades. It now sits on a beach, corroding.

Why it deserves a second look in 2026:

  • Composite structures: The Lun was aluminum-magnesium alloy — heavy, corrosion-prone in salt spray. Modern carbon-fiber composites (the same used on the 787 fuselage) would cut empty weight ~30% and eliminate the corrosion problem that grounded it.
  • Fly-by-wire: The Lun required two pilots and a flight engineer working constantly to manage ground-effect stability. Modern FBW with radar altimeters accurate to centimeters — the same tech in autonomous aerial refueling — makes ground-effect flight trivial.
  • Turbofan efficiency: The NK-87s burned kerosene at 1970s specific fuel consumption. Modern high-bypass turbofans (PW1000G, LEAP-1) cut fuel burn 40%+ at cruise.
  • The mission finally makes sense: China's DF-21D and DF-26 anti-ship ballistic missiles have made large surface combatants a targeting problem. Distributed maritime operations need fast, low-signature transports for moving Marines, missiles, and cargo across contested littorals — Taiwan Strait, South China Sea, GIUK gap. A modernized Lun carries 100 tons of cargo at 300+ knots below radar horizon. Nothing in the U.S. inventory does that.

Boeing's Pelican ULTRA concept (2002) proposed exactly this and died in PowerPoint. DARPA's Liberty Lifter program (2022–present) is finally admitting the Soviets were right, targeting a 100-ton WIG-craft for 2028 first flight. The Lun proved the physics in 1987. We just needed 40 years to admit it.

Key Takeaway: The Soviets built and operationally deployed a 380-ton missile ship that flew at 340 mph below radar in 1987 — DARPA is now spending nine figures to rediscover what a corroding hulk on a Dagestan beach already proved.

ArXiv Paper Digest

DiffTestGen: Change-Directed LLM-Based Testing for Exposing Behavioral Differences

2026-07-20

Authors: Huimin Hu, Cristian Cadar, Michael Pradel

ArXiv: 2607.16024v1

PDF: Download PDF

Imagine you've just tweaked a function in your codebase. Maybe you rewrote a loop for performance, or fixed what looked like an off-by-one error. Your test suite goes green. Ship it, right? Except… did you actually change the behavior of the code in some subtle way that none of your existing tests noticed? This is one of the most persistent nightmares in software engineering: silent behavioral drift between versions.

DiffTestGen tackles this problem head-on. It's a tool that automatically generates test cases specifically designed to expose behavioral differences between two versions of the same program — the old one and the new one. If the two versions truly behave identically, the test will confirm that. If they diverge, the test surfaces exactly how.

The trick is what the authors call change-directed testing. Traditional test generators — even fancy AI-based ones — throw more or less random inputs at a program and hope something breaks. That's wasteful. Most of a program's code isn't affected by any given change, so most randomly generated tests hit code paths where the two versions behave identically. You'd need thousands of tests to stumble onto the one input that touches the modified lines in a revealing way.

DiffTestGen instead looks at the diff itself — the actual lines that changed — and uses a large language model to reason about what kinds of inputs would reach that changed code and differentiate its behavior. Think of it like a lawyer who knows exactly which question will trip up a witness, rather than one who asks a hundred generic questions hoping something lands.

Concretely, the approach:

  • Analyzes the code change to understand what conditions must hold for the modified region to actually execute.
  • Prompts the LLM to synthesize inputs that satisfy those conditions and plausibly trigger a divergence — e.g. edge cases at the boundary the developer was trying to fix.
  • Runs both versions on the generated input and compares outputs, keeping tests that actually expose different behavior.

The result is a differential test generator that finds behavioral changes previous techniques miss — including intentional changes the developer wanted, and, more usefully, unintentional ones they didn't. That second category is where the gold lives: regressions that slipped past the existing test suite.

Why is this a big deal? Because most regressions aren't caused by dramatic rewrites. They're caused by innocent-looking edits — changing a comparison operator, tweaking a default value, refactoring a helper. Those are precisely the changes that pass code review, pass CI, and then break something obscure in production three weeks later. Change-directed differential testing is the kind of thing that could plausibly become a standard step in code review pipelines: not "does the new version pass the old tests?" but "does the new version agree with the old version on everything we can automatically probe?"

Why it matters: By pointing an LLM at the actual code diff rather than the whole program, DiffTestGen makes it feasible to automatically catch the silent behavioral regressions that traditional test suites routinely miss.

Daily Automotive Engines

Cylinder Head Porting: Port Taper and the Convergent-Divergent Debate

2026-07-20

You've heard that the port's minimum cross-section (MCSA) sets the flow ceiling, and that velocity beats volume. But where in the port does the MCSA live, and what happens to the cross-section between the port entry and the valve bowl? That's port taper, and it's one of the most misunderstood variables in head design.

An intake port is not a straight pipe. It changes cross-sectional area along its length, and the shape of that change is called the taper profile. Three profiles exist:

  • Convergent (tapered down): Port entry is larger than the MCSA near the valve. Air accelerates as it flows toward the valve. This is the classic high-performance layout — it keeps velocity high where it matters (at the valve) and uses the large entry to reduce inlet losses.
  • Straight (parallel): Cross-section stays roughly constant from entry to bowl. Simple to machine, but wastes potential — you either have a port that's too big at the valve or too small at the entry.
  • Divergent (tapered up): Port entry is smaller than the area near the valve. Rare in intakes but common in exhaust ports, where expanding cross-section helps hot gases decelerate and recover pressure before exiting the head.

The dominant intake design is convergent, and the reason is inertial ram effect. A large entry captures more air during the intake stroke's early acceleration phase, then the converging walls accelerate that column as it approaches the valve, arriving at peak velocity right as the valve is at max lift. Get the taper wrong and the air column arrives late or slow.

Real-world example: The Ford 4.6L Two-Valve "PI" (Performance Improved) heads that appeared on 1999+ Mustang GTs had a more aggressive convergent taper than the earlier "NPI" heads — entry area up about 8%, MCSA near the valve unchanged. Result: 20 more horsepower with the same cam, same valve size, same everything else. The taper alone did the work by capturing more air at higher entry velocity.

Rule of thumb — the 85% rule: The MCSA (usually just under the valve seat, in the bowl throat) should be roughly 80–85% of the port entry area for a naturally aspirated street/strip engine. Boosted applications can go to 90% since boost pressure does the work of accelerating the column. Go below 75% and you've over-converged — the port is choking itself before the valve.

The taper is not linear either. Most of the area reduction should happen in the last third of the port, near the bowl, so velocity peaks precisely where the valve is opening.

Key Takeaway: A well-designed intake port converges from entry to valve — MCSA sized at 80–85% of entry area, with most of the taper concentrated near the bowl — so the air column arrives at peak velocity exactly when the valve is at max lift.

Daily Debugging Puzzle

Python's subprocess.run(list, shell=True) Trap: The Arguments That Become Shell Positional Parameters

2026-07-20

An SRE writes a disk-usage auditor for their weekly report. It "works" — no exceptions, plausible numbers — but the on-call engineer notices every mount point reports an identical size. This function is supposed to run du -sh <path> and return the size string.

import subprocess

def check_disk_usage(path):
    """Run `du -sh <path>` and return the size string, e.g. '1.2G'."""
    result = subprocess.run(
        ["du", "-sh", path],
        shell=True,
        capture_output=True,
        text=True,
        check=True,
    )
    # stdout looks like "1.2G\t/var/log"
    return result.stdout.split()[0]

for mount in ["/var/log", "/home", "/srv/data"]:
    print(f"{mount}: {check_disk_usage(mount)}")

# Output:
#   /var/log:   84K
#   /home:      84K
#   /srv/data:  84K

The Bug

The developer added shell=True reflexively — perhaps because a colleague's snippet had it, or to "enable shell features." With a string argument, shell=True works as expected. With a list argument, it silently mutilates the call in a way that's almost never what you want.

On POSIX, subprocess.run(["du", "-sh", path], shell=True) executes:

/bin/sh -c "du" "-sh" "/var/log"

The first list element becomes the shell's -c command string. The remaining elements become positional parameters to the shell itself$0, $1, $2 — not arguments to du. So the shell runs the literal command du, with no arguments. And du with no arguments summarizes the current working directory. Every call returns the same number because every call measures the same directory: whatever the auditor happens to be running from.

This is documented, but it's easy to miss: from the Python docs, "If args is a sequence, the first item specifies the command string, and any additional items will be treated as additional arguments to the shell itself." The trap is that nothing errors. du exits 0, stdout parses cleanly, and check=True is silent. The audit runs green for months.

Worse, the bug has a security cousin. Developers reach for shell=True when they need pipes or globs, then pass an unquoted f-string like f"du -sh {path}". A path of /tmp; rm -rf ~ is now a shell metacharacter injection.

The Fix

Drop shell=True. You almost never need it, and the list form is safer and clearer:

result = subprocess.run(
    ["du", "-sh", path],
    capture_output=True,
    text=True,
    check=True,
)

If you genuinely need shell features (pipes, redirections, globs), pass a single properly-quoted string and use shlex.quote on every interpolated value:

import shlex
cmd = f"du -sh {shlex.quote(path)} | tee -a /var/log/audit"
subprocess.run(cmd, shell=True, check=True)

As a rule of thumb: shell=True and a list argument together are almost always a bug. Some linters (e.g. bandit's B602/B604) will flag shell=True broadly — treat those warnings as an invitation to check whether you needed the shell at all.

Key Takeaway: With shell=True, a list argument's first element is the shell command and the rest become the shell's positional parameters — not arguments to your program — so use a string with shell=True, or (better) a list without it.

Daily Digital Circuits

Matrix Arbiters: How Hardware Picks the Least-Recently-Served Requester in One Cycle

2026-07-20

Round-robin arbiters are fair, but they don't remember who actually got service — just whose turn is next in a fixed rotation. If a requester keeps dropping out and coming back, round-robin can still favor it over someone who's been waiting longer. A matrix arbiter tracks the full priority order among N requesters and hands the grant to the one that was served least recently. It's the hardware equivalent of an LRU replacement policy, but it fits in a single clock cycle for small N.

The trick is a triangular bit matrix. For N requesters, you keep an N×N array of flip-flops where W[i][j] = 1 means "requester i has higher priority than requester j." Only the upper triangle matters (the lower triangle is its inverse), so you need N(N-1)/2 bits. Two rules:

  • Grant logic: requester i wins if it's requesting AND, for every other requesting j, W[i][j] = 1. That's a wide AND of the row.
  • Update logic: when i is granted, set row i to all zeros and column i to all ones — meaning "everyone else now has higher priority than i."

That single update flips i to the bottom of the priority order. Whoever was above i stays above i; whoever was below i moves above i. On the next cycle, the requester at the "top" of the remaining requesters wins. No counters, no pointer, no starvation.

Concrete example: a 4-port NoC router uses a matrix arbiter to pick which input port drives the crossbar this cycle. Ports 0, 2, and 3 all have packets waiting. The matrix currently says 2 > 3 > 0 > 1 in priority. Port 2 wins. Next cycle the matrix updates so port 2 is now lowest: order becomes 3 > 0 > 1 > 2. If ports 0 and 3 request again, port 3 wins. Port 0 is guaranteed to win within N-1 cycles of any competitor becoming eligible — bounded fairness, not just weak fairness.

Rule of thumb: matrix arbiters cost N(N-1)/2 flip-flops and an N-wide AND per requester, so area is O(N²). They're excellent up to N=8 or so (28 bits, 8-wide ANDs). Beyond N=16 the O(N²) wiring and the wide AND fan-in kill you — switch to hierarchical arbiters (matrix at the top of a tree of round-robins) instead.

The killer feature: unlike round-robin, a requester that goes idle for 100 cycles and comes back keeps its accumulated "I haven't been served" priority. That's exactly what you want for fair bandwidth allocation on a shared bus.

Key Takeaway: A matrix arbiter stores the full pairwise priority order in an N×N bit array, granting the least-recently-served requester in one cycle and providing true bounded fairness at O(N²) cost.

Daily Electrical Circuits

Charge Amplifiers for Piezoelectric Sensors: Reading Sensors That Output Coulombs, Not Volts

2026-07-20

Piezoelectric sensors — accelerometers, force gauges, ultrasonic transducers, knock sensors — are unusual: they generate charge proportional to mechanical stress, not voltage or current. Yes, you can read them with a high-impedance voltage buffer, but the output voltage depends on the sensor's self-capacitance plus cable capacitance. Swap a 1 m cable for a 3 m cable and your sensitivity changes. Unacceptable for calibrated measurement.

The charge amplifier fixes this by clamping the sensor's terminal voltage to zero and dumping all generated charge into a known feedback capacitor.

Topology: An op-amp in inverting configuration with a capacitor Cf in the feedback path (no input resistor — the sensor connects directly to the inverting node). The inverting input is a virtual ground, so cable capacitance sees no voltage swing and contributes nothing to the transfer function.

Transfer function: Vout = –Q / Cf

That's it. Output voltage depends only on the charge Q from the sensor and your feedback cap. Cable length, sensor capacitance, connector quality — all irrelevant to the gain.

The DC drift problem: A pure capacitor in feedback provides no DC path, so bias current and offset voltage will ramp the output into the rail within seconds. You must place a large resistor Rf in parallel with Cf. This creates a high-pass corner at fc = 1 / (2π Rf Cf). Choose it below your lowest signal of interest.

Worked example — an IEPE-style accelerometer: Sensor charge sensitivity is 10 pC/g. You want 100 mV/g at the output. Solve Cf = Q / V = 10 pC / 100 mV = 100 pF. For a 1 Hz high-pass corner: Rf = 1 / (2π × 1 × 100 pF) ≈ 1.6 GΩ. Yes, gigaohms — use a low-leakage discrete resistor (or a T-network of two smaller resistors) and a JFET or CMOS op-amp with sub-picoamp bias current (LMC6001, OPA129, ADA4530).

Practical rules of thumb:

  • PCB leakage will destroy you — use a guard ring around the summing junction, driven by the op-amp output.
  • Keep the input trace short and clean the board thoroughly; even flux residue conducts nanoamps.
  • Feedback resistors above ~100 MΩ often use glass-encapsulated or specialty parts; regular thick-film resistors leak.
  • Add a small series resistor (10–100 Ω) at the sensor input to prevent instability with long cables that add capacitance to the summing node.

Modern IEPE accelerometers hide the charge amp inside the sensor housing and output a low-impedance voltage over 2-wire constant-current bias. But when you need extreme temperature range (600 °C+ engine sensors) or custom bandwidth, external charge amps are still the answer.

Key Takeaway: A charge amplifier's gain depends only on its feedback capacitor, making the measurement immune to sensor and cable capacitance — but the required gigaohm feedback resistor demands leakage-obsessed layout with guard rings and femtoamp-class op-amps.

Daily Engineering Lesson

Bevel Gears: Transmitting Power Between Intersecting Shafts

2026-07-20

When two shafts meet at an angle—usually 90°—you can't use spur or helical gears. You need bevel gears: conical gears whose teeth are cut on the surface of a cone rather than a cylinder. The pitch surfaces roll on each other like two ice cream cones tip-to-tip.

The three flavors you'll actually encounter:

  • Straight bevel gears — teeth cut straight along the cone's slant. Simple, cheap, and noisy. Good for low speeds (under ~1000 rpm) and where axial thrust must be minimized. Think hand drills and differential gears in cheap tools.
  • Spiral bevel gears — teeth are curved and angled, so multiple teeth engage gradually. Quieter, smoother, and can handle 2–3× the load of straight bevels at high speeds. Automotive differentials use these almost exclusively.
  • Hypoid gears — a spiral bevel variant where the pinion axis is offset from the gear axis (doesn't intersect). This lets you lower the driveshaft in rear-wheel-drive cars, dropping the transmission tunnel. Trade-off: high sliding action requires extreme-pressure (EP) gear oil, which is why you never put motor oil in a diff.

Real-world example: A hand-cranked eggbeater. The handle rotates a large bevel gear whose axis is horizontal. It meshes with two smaller bevel gears mounted on vertical shafts (the beater blades). One crank rotation drives the beaters at a much higher rpm, and the 90° change of axis is what lets your hand rotate horizontally while the beaters spin vertically.

The rule of thumb: Gear ratio equals the ratio of pitch cone radii (or tooth counts), just like spur gears:

ratio = N_gear / N_pinion

A 12-tooth pinion driving a 36-tooth bevel gear gives a 3:1 reduction. But unlike spur gears, bevel gears generate significant axial thrust—the teeth are trying to push the gears apart along their shafts. You must use thrust bearings (tapered rollers are the standard choice) and set the correct backlash and tooth contact pattern during assembly. This is done by shimming the pinion in and out until a mark of Prussian blue on the teeth shows contact centered on the tooth face. Get this wrong and you'll hear whining, feel vibration, and destroy the gear set in hours.

Design gotcha: Bevel gears must be mounted in matched pairs. You can't swap in a pinion from another gear set even with identical specs—they're lapped together at the factory.

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: Bevel gears transmit power between intersecting shafts by rolling cone on cone, but their axial thrust demands proper thrust bearings and precise contact-pattern setup, or the gearset self-destructs.

Forgotten Books

The 1944 Victory Garden Tomato That Won an Award — And Then Vanished

2026-07-20

Book: Breeze Hill news by Breeze Hill Gardens (Harrisburg, Pa.) (1944)

Read it: Internet Archive

Tucked into a February 1944 wartime garden newsletter, past the earnest reminders that "there's a war on!", is a small note that would be easy to miss:

At Breeze Hill we found Jubilee Tomato to be a good orange-yellow variety with thick flesh of fine flavor. It slices to advantage and makes excellent juice as well.

Breeze Hill news was the "quite irregular publication" of J. Horace McFarland's Breeze Hill Gardens and Mount Pleasant Press in Harrisburg, Pennsylvania. McFarland was a giant of American horticulture — a printer, rose breeder, and conservationist who pioneered color garden catalogs when most were still black-and-white. The 1944 issue is a fascinating snapshot: staff being drafted, the government printer commandeering their presses, and the garden pushing "millions more of what it takes to promote the Victory Garden."

The Jubilee reference is a small artifact of a big moment. Burpee had introduced the Jubilee tomato just the year before, in 1943, to celebrate their fiftieth anniversary. It promptly won the All-America Selections award — the horticultural equivalent of an Oscar. Breeze Hill's endorsement in early 1944 is essentially a real-time trial report on what was then the hottest new vegetable in America.

Here's what's been forgotten: orange-yellow tomatoes were once considered mainstream, not exotic. During the Victory Garden era — when 20 million American households were producing an estimated 40% of the country's fresh vegetables — pale, low-acid tomato varieties were prized for their mildness, their sliceability, and (as gardeners of the time understood) their gentler effect on people with sensitive stomachs. Modern research has confirmed what those growers noticed empirically: yellow and orange tomatoes generally contain less citric and malic acid than red ones, though their sugar content is comparable, which is why they taste sweeter.

Then supermarkets happened. Postwar consolidation of tomato breeding aimed at one thing: red, round, and shippable. Jubilee, Golden Queen, and the entire orange-yellow class were pushed to the margins. By the 1980s most Americans had never seen a yellow tomato outside a farmers' market.

The irony is that the heirloom tomato revival of the last twenty years has rediscovered exactly what Breeze Hill was quietly noting in 1944 — that a thick-fleshed orange tomato "slices to advantage." Jubilee itself is still available from a handful of heirloom seed companies. It is, in a sense, a Victory Garden veteran that's been through:

  • A world war (its debut)
  • Half a century of near-extinction
  • A hipster resurrection at farm-to-table restaurants charging $14 for a tomato salad

Next time you see rainbow heirloom tomatoes at a farmers' market, remember: your great-grandmother probably grew the yellow ones in her backyard as a patriotic duty.

The forgotten claim: Orange-yellow tomatoes like the 1943 Jubilee variety were once considered superior slicing and juicing tomatoes — a mainstream Victory Garden staple that was nearly erased by postwar breeding for redness and shippability.

Forgotten Darkroom

The Soviet-Captured Chemical Plant That Invented Modern Media

2026-07-20

Book: The SAG Kraska in Wolfen by CIA Reading Room (1951)

Read it: Internet Archive

Buried in a routine 1951 CIA intelligence report about East German industrial output is a casual inventory that reads like a hidden origin story for the entire 20th-century media industry. The document describes the Agfa film plant at Wolfen — then operating under Soviet control as the "SAG Kraska" (a Sowjetische Aktiengesellschaft, or Soviet Joint Stock Company that had seized German industry as war reparations).

The Agfa film plant in Wolfen was said to have reached its prewar production... Films were the main production item. The Apia color film, famous for its stereoscopical qualities, was constantly being improved. In addition the plant produced various kinds of rayon, cellulose fabrics, cellulose wool, cellulose cotton, synthetic fiber, cellulose ether, magnetophone tape ("Magnetofonband"), "Perwolit" and other goods.

Read that list again. In a single sentence, buried in a translated intelligence bulletin, we have:

  • Agfacolor film — the first practical single-strip color film process for consumers, released in 1936. The German patents were confiscated as war reparations and became the basis for nearly every color film stock made outside Kodak's ecosystem: Sovcolor, Fujicolor, Ferraniacolor, Anscocolor.
  • Magnetophone tape — invented at this exact plant complex in the 1930s. When American GIs found German Magnetophons at Radio Frankfurt in 1945, they mailed them home. One landed with Bing Crosby's engineer Jack Mullin, who used it to invent pre-recorded broadcasting. Ampex then reverse-engineered it. Every cassette, VHS tape, and hard drive descends from Wolfen tape coating chemistry.
  • Synthetic fibers and cellulose products — the polymer chemistry that became rayon, cellophane, and eventually the substrate for photographic film itself.

The odd phrase "famous for its stereoscopical qualities" is likely a translator's stumble over the German plastisch — meaning three-dimensional or lifelike depth, not literal stereoscopy. Agfacolor was renowned for exactly this: a warmer, more dimensional palette than Technicolor, which is why Leni Riefenstahl's late films and postwar Soviet cinema look so distinctive.

What's genuinely forgotten here is the concentration. A single chemical works in a small Saxon-Anhalt town simultaneously produced the color film that would define cinema, the magnetic tape that would define recorded sound, and the synthetic textiles that would define fashion — and then was captured whole, operated by Soviet managers, and quietly kept churning out revolutionary media substrates for the Eastern Bloc through the 1950s.

The plant, renamed VEB Filmfabrik Wolfen after being returned to East Germany in 1954, produced ORWO film until reunification. It went bankrupt in 1994 — killed not by Kodak but by digital photography. The Wolfen site is now an industrial museum. Almost no one visits.

The forgotten claim: A single German chemical plant invented both color film and magnetic recording tape, was seized by the Soviets in 1945, and kept quietly manufacturing the physical substrate of 20th-century media under a new name until digital killed it in the 1990s.

Forgotten Patent

Erna Schneider Hoover's "Feedback Control Monitor": The 1971 Patent a Bell Labs Mathematician Sketched From a Hospital Bed — and Invented the Load Balancer That Runs the Internet

2026-07-20

In February 1967, Erna Schneider Hoover filed a patent application from Bell Laboratories. She had drafted parts of it on a yellow legal pad while recovering in a maternity ward after the birth of her second daughter. Four and a half years later, on November 23, 1971, the U.S. Patent Office issued US Patent 3,623,007 — "Feedback Control Monitor for Stored Program Data Processing System." It is one of the earliest software patents ever granted.

To grasp why it mattered, picture the crisis it solved. Electronic switching systems (Bell's brand-new 1ESS) processed phone calls by scanning incoming lines, queuing tasks, and dispatching them to a central processor. When call volume spiked — Mother's Day, a snowstorm, a Super Bowl — the queue would overflow. The switch would seize up, drop calls, or worse, drop the line status of connected calls, leaving people talking into dead handsets. Existing overload controls were crude and reactive: cut off input entirely, dump the queue, reboot.

Hoover, a mathematician with a Yale PhD in philosophy of symbolic logic, saw the switch not as a phone system but as a control problem. Her patent proposed monitoring the rate at which the processor was actually completing tasks, comparing it continuously to the arrival rate, and using that ratio as feedback to throttle low-priority work before the queue exploded. If the system was falling behind, non-urgent scanning tasks were deferred; high-priority call setups still got through. The system self-regulated instead of collapsing.

Read that again. Monitor demand. Compare to capacity. Shed lower-priority load to keep the critical path healthy. That is, quite precisely, what every modern:

  • TCP congestion control algorithm does with packet flows (Van Jacobson's 1988 work is a direct descendant of this thinking)
  • Cloud auto-scaler does — AWS Auto Scaling, Kubernetes' Horizontal Pod Autoscaler, GCP's managed instance groups
  • API rate limiter does — token buckets, leaky buckets, adaptive concurrency limits at Netflix, Uber, Stripe
  • Circuit breaker does — Netflix's Hystrix, Envoy's outlier detection, Istio's traffic policies
  • CDN load balancer does when it routes around a hot origin

Hoover's insight — that a system under load should measure itself and gracefully degrade rather than crash — is the closed-loop feedback philosophy that keeps every hyperscale service alive. In 2024, when Cloudflare's traffic engineers describe "backpressure" or Google's SRE book talks about "adaptive throttling," they are describing the same control-theoretic idea Hoover formalized for a telephone switch.

What makes the patent genuinely surprising is who and when. In 1967, "software" was barely a category the patent office knew what to do with. Hoover's filing had to be argued as a novel apparatus — the software controlling a physical switching system — because pure algorithms were considered unpatentable. She was also, at that moment, one of the very few women technical supervisors at Bell Labs; she was promoted while on maternity leave, partly on the strength of this work.

The 1ESS switch and its successors ran on Hoover's control loop for decades, quietly handling billions of calls. When those switches were finally retired in the 2000s and traffic migrated to IP networks, the feedback principle didn't retire — it migrated with it, into every reverse proxy, every message broker, every serverless dispatcher on Earth.

She was inducted into the National Inventors Hall of Fame in 2008. Most engineers who write rate.NewLimiter() today have never heard her name.

Key Takeaway: Every modern load balancer, auto-scaler, and rate limiter is a great-grandchild of a 1967 patent sketched on a legal pad in a maternity ward — Erna Schneider Hoover's feedback-control monitor turned "shed load gracefully" into the operating principle of the internet.

Daily GitHub Zero Stars

rlaxmidevir03/intelligent-document-processing

2026-07-20

This little repo tackles a problem that's surprisingly annoying in day-to-day life: making sense of a stack of PDFs without shipping them off to a paid cloud service. It bundles extraction, classification, summarization, and question-answering for PDF documents, and it handles scanned pages via OCR — all with local, open-source AI models.

What makes this stand out from the sea of "chat with your PDF" projects is the deliberate stance on privacy and cost. The README pitch is refreshingly clear:

  • No API keys — nothing to sign up for, nothing to leak.
  • No paid services — runs entirely on models you host.
  • OCR for scanned pages — many similar tools fall over the moment a document isn't already text-selectable.
  • Multi-mode — not just Q&A, but classification and summarization too, which suggests a small pipeline rather than a single-shot LLM prompt.

Who benefits? A few obvious audiences:

  • Solo professionals — lawyers, accountants, researchers — who work with confidential documents that can't leave the machine for compliance reasons.
  • Homelabbers and self-hosters who already have Ollama or a similar local runtime and want a practical use case beyond chat.
  • Students and educators who need to digest scanned lecture notes or historical PDFs on a budget.
  • Developers looking for a readable reference implementation of an end-to-end RAG + OCR pipeline they can fork and adapt.

The repo is brand new and unstarred, so it's likely a personal or academic project rather than production-ready software. That's actually part of the appeal — small enough to read cover-to-cover, and a good jumping-off point for anyone wanting to understand how the pieces (PDF parser, OCR engine, embedding store, local LLM) fit together without wading through an over-engineered framework.

Why check it out: A privacy-first, zero-cost local PDF intelligence toolkit — practical for confidential work and readable enough to learn from.

Daily Hardware Architecture

The Complex Decoder vs. Simple Decoder Asymmetry: Why Only One Slot Handles the Weird Instructions

2026-07-20

x86 CPUs decode multiple instructions per cycle, but the decoders are not identical. On Intel's classic 4-wide front-end (Skylake through Golden Cove's legacy path), you get one complex decoder and three simple decoders. This asymmetry shapes performance in ways that surprise almost everyone who doesn't stare at Agner Fog's tables for a living.

A simple decoder handles instructions that produce exactly one micro-op. Add, mov reg-to-reg, xor, cmp, jmp — the daily bread. Fast, cheap, replicated three or four times because the silicon cost is small.

A complex decoder handles instructions that produce 2–4 µops. Anything that touches memory in a non-trivial way, computes a segment override, or does two logical things at once. Only one exists per cycle because the logic for splitting an instruction into multiple µops needs a wider datapath, more control signals, and more buffering. Building four of these would blow the area and power budget for something you rarely need.

Instructions producing 5+ µops bypass the decoders entirely and go to the microcode sequencer (MSROM) — a slow, serialized path that stalls the front-end for many cycles. CPUID, RDTSC, string operations with prefixes, and gather/scatter often land here.

The alignment rule (4-1-1-1): The decoders are positioned in order. Slot 0 is complex; slots 1, 2, 3 are simple. If a 2-µop instruction appears in slot 1 (a simple slot), that slot rejects it, and the instruction has to wait until the next cycle where it can land in slot 0. You just lost decode bandwidth for this cycle.

Real-world example: A tight loop of add [rdi+rax*8], rcx (memory-destination add — 2 µops: load, add-store). Even though you can theoretically dispatch four per cycle, the decoders can only produce one per cycle because each needs the complex decoder. Your effective front-end throughput drops from 4 IPC to 1 IPC — a 4× regression that doesn't show up in any static instruction count. Rewriting as separate load + add + store (three 1-µop instructions) can double throughput because now three simple decoders fire in parallel.

Rule of thumb: If your hot loop's IPC is mysteriously stuck near 1.0 despite plenty of independent work, check IDQ.MITE_UOPS vs UOPS_ISSUED.ANY. If MITE (decoder path) is your bottleneck, you're probably starving the simple decoders by feeding them multi-µop instructions.

The µop cache (DSB) exists largely to hide this asymmetry — decoded µops replay from cache and skip the 4-1-1-1 constraint entirely.

See it in action: Check out Salsa Night in IIT Bombay #shorts #salsa #dance #iit #iitbombay #motivation #trending #viral #jee by Vinit Kumar [ IIT BOMBAY ] to see this theory applied.
Key Takeaway: Only one x86 decoder slot per cycle can handle multi-µop instructions, so scattering complex ops through your hot code silently caps front-end throughput at ~1 IPC — a bottleneck the µop cache exists specifically to bypass.

Hacker News Deep Cuts

Sandbox Escape Vulnerabilities Across 4 Coding Agent Vendors

2026-07-20

Every developer running a coding agent locally is trusting a sandbox they've never audited. This post from Pillar Security reports on a coordinated disclosure covering four separate coding agent vendors, each shipping sandbox implementations that could be escaped. The fact that it's framed as "the week of sandbox escapes" suggests the researchers didn't have to work hard to find them — the ecosystem is that immature.

Why this matters right now:

  • The threat model has flipped. A year ago the worry was "will the agent break my code?" Today it's "will the agent be tricked into running attacker-controlled instructions?" Prompt injection via a README, a dependency's docstring, or a search result is a live attack surface. The sandbox is the last line of defense.
  • Sandboxes are hard. Chrome, Firefox, and iOS have spent two decades hardening theirs and still ship escapes. A coding-agent vendor bolting one on in a quarter is going to lose. Expect symlink tricks, TOCTOU races, /proc leaks, container escapes via mounted sockets, and the classic "we forgot about environment variables" bug.
  • Blast radius is unusually large. A coding agent typically has: your git credentials, your cloud CLI tokens, your SSH keys, your ~/.npmrc, and network egress. An escape isn't "attacker gets a shell" — it's "attacker gets your entire development identity, silently, while you review a diff."

The post likely walks through the specific escape techniques per vendor (Pillar's prior writeups have been technically detailed rather than marketing-fluff), which is exactly the kind of material the coding-agent community needs to internalize. Right now, most users pick between "YOLO mode" and "approve every command," with no honest picture of what the sandbox in between actually promises.

For anyone building an agent, deploying one to a team, or writing security policy around AI tooling, this is required reading. It's also a useful counter to the "just run it in a container" hand-wave — the vendors in question presumably did run it in a container, and it wasn't enough.

The fact that this has one upvote and zero comments while identical LLM-hype posts hit the front page daily is its own quiet indictment.

Why it deserves more upvotes: Coordinated-disclosure sandbox escapes across four coding-agent vendors is exactly the kind of concrete, unglamorous security work the AI-tooling gold rush is skipping past.

HN Jobs Teardown

Apixio: What Their Hiring Reveals

2026-07-20

Source: HN Who is Hiring

Posted by: na_ka_na

Apixio's terse three-line posting for a Frontend Tech Lead, Backend Tech Lead, and Director of Engineering — all ONSITE in San Mateo — is one of the most information-dense listings in the thread. Let's unpack what it actually reveals.

The stack tells a story: React, Scala, Java, Python, Cassandra, Elastic, Redis, all on AWS. This is a textbook "we started around 2013-2015 and grew up" stack. Scala + Cassandra points to heavy JVM-based distributed data processing — almost certainly Spark or Akka pipelines chewing through unstructured medical records. Python is likely the ML/NLP layer (extracting structure from doctor's notes, ICD coding, HCC risk adjustment). Elastic handles clinical document search. React is the clinician-facing UI. This is a polyglot data platform, not a CRUD app.

What the hiring pattern reveals: Simultaneously recruiting two tech leads AND a Director of Engineering is a loud signal. This isn't backfilling — this is a leadership vacuum or a deliberate re-org. Combined with the boast of being "profitable, mid-sized (less than 90)," Apixio is at that awkward Series C/D stage where the founding engineering leadership has moved on or been outgrown, and they need adult supervision to scale from ~40 engineers to 100+.

Trends highlighted:

  • Unstructured healthcare data as the last frontier: Their "80% of healthcare data is underused" pitch is the same thesis powering today's clinical LLM boom — Apixio was pre-LLM but chasing the same prize with classical NLP.
  • Profitability as a recruiting weapon: Explicitly leading with "profitable" during March 2020 (COVID onset) is deliberate positioning against burn-heavy competitors.
  • ONSITE in ALL CAPS: A statement of philosophy, not just logistics.

Red flags:

  • The posting is ten words of substance — no salary, no benefits, no team description, no interview process. "Email me or find me on LinkedIn" is founder-mode hiring at a 90-person company, which suggests HR/recruiting maturity is thin.
  • Hiring two tech leads simultaneously often means recent senior departures. Ask who left and why.
  • ONSITE-only in San Mateo during a pandemic (this was posted April 2020) shows inflexibility that will haunt them within 18 months.

Green flags: Profitable at 90 people in healthcare tech is genuinely rare. A Scala/Cassandra shop that actually ships to healthcare payers is doing hard, defensible work — not another wellness app.

The signal: When a profitable mid-sized company posts for two tech leads and a Director of Engineering in the same breath, they're not growing — they're restructuring, and the next 12 months will determine whether they become an acquisition target or a category leader.

Daily Low-Level Programming

Kernel Page Table Isolation (KPTI): Why Every Syscall Now Costs an Extra CR3 Write

2026-07-20

Before 2018, every process's page tables mapped the entire kernel into the upper half of its virtual address space. The pages were marked supervisor-only, so ring 3 couldn't touch them — but they were present. Meltdown showed that speculative execution could bypass the supervisor check and leak kernel memory through cache side channels. The fix was structural, not microcode: unmap the kernel entirely when running in user mode.

The two page tables. Under KPTI (called PTI in Linux), each process now has two sets of page tables:

  • The user page table maps user memory plus a tiny kernel "trampoline" — just enough code to switch CR3 and jump to the real handler. Roughly 4 KB of kernel is visible.
  • The kernel page table maps everything: user memory plus the full kernel.

The cost. Every syscall now does: swap CR3 to the kernel table on entry, swap it back on exit. Writing CR3 is expensive — it historically flushes the TLB. PCID (Process-Context Identifiers) saves us here: Linux assigns two PCIDs per process (one for user, one for kernel), so the flush is avoided, but the CR3 write itself still costs 200–500 cycles on the entry and again on the exit.

Concrete example. Before KPTI, a getpid() syscall on a Skylake box took about 65 ns. After KPTI with PCID enabled, it jumped to roughly 125 ns. Without PCID (older CPUs), it went to 400+ ns because every syscall flushed the TLB. This is why the FSGSBASE, vDSO, and io_uring topics keep coming up — they're all attempts to avoid the syscall boundary now that it's twice as expensive.

Rule of thumb. KPTI adds ~60 ns per syscall round trip on PCID-capable hardware. If your workload does 100k syscalls/sec per core, that's 6 ms/sec of pure overhead — 0.6% of a core, quietly. At 1M syscalls/sec you're burning 6% before you compute anything.

Turning it off. nopti on the kernel command line disables it. You'll see this on air-gapped machines, sealed embedded systems, or CPUs immune to Meltdown (AMD Zen, Intel post-Ice Lake with the fix in silicon). Check /sys/devices/system/cpu/vulnerabilities/meltdown: "Not affected" means KPTI is off by default because the hardware doesn't need it.

The trampoline detail. The user-visible kernel stub is called the entry trampoline, mapped at a fixed address in every process. It switches to the per-CPU kernel stack, writes CR3, then jumps into the real syscall handler. Look for entry_SYSCALL_64_trampoline in the kernel source — it's under 100 instructions and is the only kernel code an unprivileged user process can even see the address of.

Key Takeaway: KPTI unmaps the kernel from user page tables to defeat Meltdown, but the resulting CR3 swap on every syscall roughly doubles syscall latency — which is why bypass mechanisms like vDSO and io_uring became critical to modern performance.

RFC Deep Dive

RFC 5082: The Generalized TTL Security Mechanism (GTSM)

2026-07-20

RFC: RFC 5082

Published: 2007

Authors: V. Gill, J. Heasley, D. Meyer, P. Savola (Ed.), C. Pignataro

GTSM is one of the internet's most elegant hacks: a single-field trick that turns an ancient IP header quirk into a robust defense for BGP and other single-hop protocols. It replaces (and formalizes) an earlier experimental spec, RFC 3682, and it works by exploiting the one thing about the IP Time-To-Live field that cannot be forged from far away: routers decrement it, and they cannot un-decrement it.

The problem. BGP sessions run over TCP between directly-connected routers. A remote attacker who can spoof the peer's source IP can flood a router with SYNs, RSTs, or bogus BGP messages, chewing CPU on TCP state and, worse, potentially tearing down peerings. MD5 authentication (RFC 2385) helps against session hijacking, but validating an MD5 signature is itself expensive — an attacker who fires millions of bogus packets can still exhaust the control plane just by making the router check them. Route processors on carrier-grade routers are often surprisingly weak CPUs; a modest DDoS aimed at TCP/179 was, and still is, a real operational threat.

The trick. For a protocol that is only ever spoken between adjacent boxes, set the outgoing IP TTL (or IPv6 Hop Limit) to 255, and configure the receiver to drop the packet unless the arriving TTL is 255 (or, more generally, >= 255 - hops). Since every router on the path must decrement TTL by at least one, any packet originating more than N hops away arrives with a TTL lower than the threshold. The check is a single integer comparison in the fast path — often done in silicon before the packet ever reaches the CPU.

Why this is stronger than it looks. The TTL field is not spoofable across the internet. You can lie about your source address, your TCP flags, your MD5 key attempt — but you cannot make a packet you launched from 12 hops away arrive with TTL 255. To defeat GTSM, an attacker must be on the same L2 segment as the victim (or must have compromised a directly-adjacent router). That collapses the threat surface from "the entire internet" to "the local wire," which is precisely the surface operators can control with physical and link-layer security.

Design decisions worth noting.

  • Send 255, check on receive. The RFC deliberately does not require negotiation. Either end can start sending TTL 255 unilaterally; only the receiver's check matters. This made deployment trivial in an era where you couldn't count on your peer upgrading.
  • Generalized to N hops. Though most famous for eBGP-multihop-of-1, the "generalized" part of the name matters: GTSM permits configuring an expected hop count, so it also protects LDP, MSDP, and multi-hop eBGP sessions between loopbacks a few hops apart.
  • Explicitly not a cryptographic control. The RFC is careful to say GTSM is a filter, not authentication. It complements MD5/TCP-AO; it doesn't replace them. The threat model it addresses is resource exhaustion and off-path injection, not on-path tampering.
  • IPv6 parity. The mechanism applies identically to the IPv6 Hop Limit, which was one motivation for restating RFC 3682 as a Standards Track document.

Why it still matters. Every major router vendor implements GTSM (Cisco calls it ttl-security, Juniper multihop ttl), and it is essentially universal on internet exchange peerings today. It is also a lovely teaching example of defense in depth done cheaply: a two-line config change that pushes an entire class of attack down to hardware-speed drops. When you next design a protocol between adjacent nodes, ask whether a TTL check would save you a lot of authentication cost.

Why it matters: GTSM turns the unforgeable IP TTL field into a cheap, hardware-fast filter that shields BGP and other single-hop protocols from off-path resource-exhaustion attacks.

Stack Overflow Unanswered

Does MASM x64 (ml64.exe) generate incorrect assembly in regards to where function arguments should be located (ABI)?

2026-07-20

Stack Overflow: View Question

Tags: assembly, x86-64, masm, calling-convention, abi

Score: 6 | Views: 169

The asker is porting a function originally written using GCC inline assembly into an MSVC x64 project. Because there's no intrinsic for ltr (Load Task Register), they've placed the routine in a standalone .asm file and are assembling with ml64.exe. They suspect MASM is generating code that violates the Windows x64 calling convention — placing arguments in the wrong registers.

Why this is interesting: The Windows x64 ABI is quite specific — the first four integer/pointer arguments go in RCX, RDX, R8, R9, with 32 bytes of "shadow space" reserved on the stack by the caller. Any asymmetry between what the C compiler emits at the call site and what the assembler emits inside the callee will silently corrupt state. The question probes whether ml64.exe's PROC directive with typed parameters actually honors this ABI, or whether it does something unexpected (like using fastcall-style register mapping that mirrors 32-bit conventions).

Approach:

  • Skip PROC's parameter list entirely. MASM's high-level parameter syntax is a legacy holdover with limited x64 semantics. Write the function as a bare label and reference RCX/RDX/R8/R9 directly. This eliminates any translation layer MASM might apply.
  • Inspect the disassembly with dumpbin /disasm asm.obj to verify exactly what bytes ml64 emitted, rather than trusting the source listing.
  • Compare against a C stub that calls the same signature compiled with cl /FAs. If the caller places the argument in RCX but MASM's PROC generates a prolog that reads from [RSP+8], that's the bug.
  • For ltr specifically, its operand is a 16-bit segment selector — declare it accordingly and load it via LTR CX after the caller passed it in RCX.

Gotchas:

  • ltr is CPL=0 only. If this is user-mode code, it'll #GP regardless of ABI correctness — the asker should confirm they're in a kernel/hypervisor context.
  • The 32-byte shadow space must exist even if the callee doesn't use it. MASM's PROC with FRAME handling may add its own prolog that shifts RSP, changing offsets.
  • Unwind info matters for SEH — a hand-written function without proper .pushreg/.setframe annotations will crash on any exception unwind, which can look like "wrong ABI" symptoms.
  • Name decoration: x64 MASM does not decorate names, but a stray C vs STDCALL in old code may still cause surprises.
The challenge: Diagnosing whether MASM's high-level PROC abstraction actually respects the Windows x64 ABI, or whether hand-rolled register access is the only reliable path.

Daily Software Engineering

The 2Q Cache with Multiple Ghost Tiers: When One Ghost List Isn't Enough

2026-07-20

Classic 2Q maintains one probationary FIFO queue (A1in), one hot LRU queue (Am), and one ghost list (A1out) of recently-evicted keys. If a request hits A1out, the key gets promoted straight to Am — the ghost list says "we saw this recently, we were wrong to evict it." Simple. But it collapses two very different signals into one bucket: keys evicted seconds ago and keys evicted minutes ago both get the same promotion. That's a bug when your workload has multiple reuse-distance populations.

Multi-tier ghosts fix this. Instead of one A1out, you keep several ghost tiers — say A1out-hot (recent), A1out-warm (medium), A1out-cold (old). A hit in the hot tier is a strong signal: promote aggressively to Am and maybe grow A1in. A hit in the warm tier promotes to Am but doesn't tune sizing. A hit in the cold tier just gets treated as a fresh insert into A1in — the ghost was too stale to trust as a hot-key signal.

Real-world example: A CDN edge caches product images for an e-commerce site. During a flash sale, a specific SKU's thumbnail goes viral for 20 minutes, then dies. Classic 2Q evicts it from A1in as newer thumbnails flood in. Twenty minutes later a straggler request hits A1out → promoted to Am → sits there wasting hot-tier space for hours. With tiered ghosts, that 20-minute-old hit lands in the cold ghost tier and gets treated as a new insert, not a promotion. Meanwhile, a genuinely re-accessed hero-banner image gets a hot-tier ghost hit and jumps straight to Am. Same mechanism, but the tier resolution stops one-hit wonders from squatting in your protected pool.

Rule of thumb for sizing: Split total ghost budget as roughly 50/30/20 across hot/warm/cold tiers. Set the hot tier's capacity to about 0.5× A1in size — anything evicted "recently enough" that promotion is almost certainly correct. Warm tier ≈ 1× A1in. Cold tier ≈ 1× Am — long enough to catch periodic access patterns but not so long that ancient evictions look like hot data.

When it's worth the complexity: workloads with clear time-locality tiers (news feeds, promotional content, session data with variable TTLs). When it's not: uniform access patterns, small caches (<10K entries), or when you're already using ARC/W-TinyLFU — those solve the same problem differently and stacking mechanisms just fights itself.

See it in action: Check out Oculus quest 2 battery be like: by JeffT to see this theory applied.
Key Takeaway: A single ghost list conflates "just evicted" with "evicted a while ago" — tiering ghosts by age lets you promote confidently on recent hits and stay skeptical of stale ones.

Tool Nobody Knows

getent: Query the Name Service Switch the Way glibc Actually Does

2026-07-20

You have a support ticket: "shaun can log in but can't sudo." You grep shaun /etc/passwd. Nothing. You grep shaun /etc/group. Nothing. But he's logged in right now. Because your box speaks LDAP, or SSSD, or systemd-userdb, or nis, or all four — and /etc/nsswitch.conf is the traffic cop. grep only knows flat files. getent knows everything glibc knows.

The basics. Any NSS database, any key:

getent passwd shaun        # resolve user via *all* NSS sources
getent passwd 1000         # or by uid
getent group wheel         # group members, wherever they come from
getent hosts google.com    # /etc/hosts + DNS + mDNS, ordered by nsswitch.conf
getent services 22/tcp     # what claims port 22?
getent shadow shaun        # if you're root and shadow is nss-enabled

Enumerate the whole database. Give a database with no key and you get the lot — same as walking /etc/passwd, except this actually includes your 40,000 LDAP users:

getent passwd | wc -l      # every account glibc can see
getent group  | awk -F: '$4 ~ /shaun/ {print $1}'   # every group containing shaun

The one flag nobody remembers: -s SOURCE. Restrict the lookup to a single NSS backend, which is how you actually debug NSS problems:

getent -s files passwd shaun    # only /etc/passwd
getent -s sss   passwd shaun    # only SSSD
getent -s ldap  passwd shaun    # only LDAP (via nss-ldap)
getent -s systemd passwd shaun  # only systemd-userdb / DynamicUser= accounts

Ticket resolved in three commands: -s files misses, -s sss hits, id shaun shows he lacks wheel because his SSSD group memberships are wrong. You never had to touch ldapsearch.

Host resolution the way libc does it. dig lies to you: it hits DNS directly, ignoring /etc/hosts, mdns, and your nsswitch.conf order. getent uses the same call path as curl, ssh, and every other program on your box:

getent hosts    printer.local        # respects mdns_minimal in nsswitch
getent ahosts   dual-stack.example.  # getaddrinfo() — both A and AAAA
getent ahostsv4 example.com          # v4 only

When someone swears their app can't reach a host that dig resolves fine, getent ahosts is the first thing to run. It'll expose the missing search domain, the broken /etc/hosts line, or the fact that files is listed after dns.

Supplementary groups without the lie. id shaun only shows groups id can see. getent initgroups shaun asks NSS the same question setgroups(2) asks at login — which is why a freshly-added LDAP group won't show up in id for existing sessions but will show up here:

getent initgroups shaun
# shaun 1000 27 100 998 4242

The obscure databases that pay off once a year.

getent netgroup engineering    # NIS netgroups, still alive in fossil environments
getent ethers  aa:bb:cc:dd:ee:ff  # MAC → hostname if you populate /etc/ethers
getent rpc     nfs               # RPC program numbers, when portmap acts up
getent protocols icmp            # /etc/protocols with NSS semantics

Shipped with glibc. Zero dependencies. Been there since the 90s. Nobody teaches it.

Key Takeaway: When your machine speaks LDAP, SSSD, or anything past flat files, grep /etc/passwd is fiction and dig is a liar — getent is the only tool that answers the question glibc actually asks.

What If Engineering

What If We Built a Skyscraper-Sized Compressed-Air Reservoir Inside an Abandoned Salt Dome to Store a Nation's Wind Power?

2026-07-20

Salt domes are geology's gift to energy storage: impermeable, self-healing under stress, and already hollowed out by decades of solution mining. The U.S. Strategic Petroleum Reserve lives inside them. So let's fill one with compressed air instead of crude and see how much wind power we can bottle.

The cavern. A typical solution-mined salt cavern near Beaumont, Texas is a vertical cylinder about 70 m in diameter and 600 m tall — call it a skyscraper-shaped bubble a kilometer underground. Volume: V = π(35)² × 600 ≈ 2.3 × 10⁶ m³. That's roughly 920 Olympic pools.

How much energy fits? Salt creeps under stress, so operators cycle between a floor and ceiling pressure — typically P₁ = 45 bar and P₂ = 75 bar at that depth (overburden gradient ~0.22 bar/m). Treat the air as ideal and isothermal (the cavern walls buffer temperature). Useful stored energy:

W = P₁·V·ln(P₂/P₁)
W = 4.5×10⁶ Pa × 2.3×10⁶ m³ × ln(75/45)
W ≈ 5.3 × 10¹² J ≈ 1,470 MWh

Real CAES plants (Huntorf, McIntosh) recover about 50% round-trip because compression heats air and expansion cools it — you either waste the heat or burn gas to reheat on discharge. Adiabatic CAES, which stores compression heat in a bed of ceramic pebbles or molten salt, pushes efficiency to ~70%. Call it 1,000 MWh delivered per cavern.

Scaling to a nation. The U.S. averages ~450 GW of electricity demand. Storing one full day requires ~10,800 GWh. At 1 GWh per cavern, we'd need ~10,000 caverns. The Gulf Coast salt basin plausibly hosts a few thousand; add the Michigan basin, the Zechstein salts in Germany, and the Permian, and you're within an order of magnitude of a continental-scale battery.

Charge/discharge rate. Mass flow through the wellbore limits power. A 1 m-diameter well pushing air at Mach 0.3 (~100 m/s) at 60 bar delivers roughly:

ṁ = ρ·A·v = 70 kg/m³ × 0.785 m² × 100 m/s ≈ 5,500 kg/s

Expanding that through a turbine yields around 300 MW per well. Drill four wells per cavern: 1.2 GW discharge — comparable to a nuclear reactor, sustainable for ~1 hour.

The salt creep problem. Halite flows like extremely stiff toffee: strain rate ~10⁻¹⁰/s at cavern conditions. Over 30 years, a cavern shrinks about 1–3% by volume if pressure sags too low. Keep minimum pressure above ~30% of lithostatic and creep stays manageable. Cycling too fast, however, causes thermal spalling — the walls flake as they breathe. Practical duty cycle: one full charge/discharge per day, not per hour.

The catch. Real energy density is embarrassingly low: 5.3 TJ / 2.3 million m³ ≈ 2.3 MJ/m³, about 0.6 kWh/m³. A lithium pack stores 500× more per volume. CAES wins only because the hole is free — the salt did the excavation for us over 250 million years, and the marginal cost of another cubic meter of storage is essentially the electricity to dissolve more halite.

Key Takeaway: A single salt-dome cavern stores ~1 GWh of wind power at 70% round-trip efficiency, and the Gulf Coast alone could plausibly host a nation's worth of daily storage — because geology already dug the tank.

Wikipedia Rabbit Hole

Thermoacoustic imaging

2026-07-20

Imagine shining a radio wave into a human body and listening to the tissue sing back. That's not a metaphor — it's thermoacoustic imaging, a medical technique where you fire a pulse of electromagnetic energy into a patient and record the ultrasound waves that emerge microseconds later. Cancer, it turns out, is louder than healthy tissue.

The physics is beautifully simple. When tissue absorbs a burst of microwave or radio-frequency energy, it heats up by a tiny fraction of a degree — we're talking millikelvins. That heating causes near-instantaneous thermal expansion, which launches a pressure wave. That pressure wave is sound. Put an array of ultrasound transducers around the body, record the arrival times, and you can reconstruct a 3D map of exactly where the energy was absorbed. It's essentially sonar, but the "ping" comes from inside the patient rather than an external speaker.

Theodore Bowen proposed this in 1981 as a way to study tissue absorption properties non-invasively. What makes it clinically interesting is the physics of why tumors absorb differently. Malignant tissue is often more vascularized and has different water and ion content than surrounding healthy tissue, which changes its dielectric properties at microwave frequencies. A breast tumor can absorb several times more RF energy than the fatty tissue around it — so it "shouts" while its neighbors whisper. Traditional mammography relies on X-ray attenuation differences that are frustratingly small for dense breast tissue; thermoacoustic contrast can be an order of magnitude larger.

You've probably heard of its close cousin, photoacoustic imaging, which does the same trick but with laser pulses instead of microwaves. Photoacoustics is dominating the research literature right now — you can image individual blood vessels a few millimeters deep by exploiting hemoglobin's optical absorption. The tradeoff is penetration: light scatters ferociously in tissue after about a centimeter, while microwaves punch through the whole body. This is why thermoacoustics has attracted attention for breast cancer screening, where you need depth and soft-tissue contrast.

There's a lovely engineering wrinkle: the pulses have to be short. Really short. If your energy pulse lasts longer than the acoustic transit time across the absorbing region, the pressure wave leaks away before it can build up — a condition called "stress confinement." Practical systems use pulses under a microsecond, which means the RF hardware borrows tricks from radar engineering rather than from conventional medical imaging.

  • Spatial resolution is set by ultrasound, not by the wavelength of the incoming energy — so you get sub-millimeter images from centimeter-scale microwaves.
  • Contrast is set by electromagnetic absorption — so you see chemistry, not just density.
  • It's essentially free of ionizing radiation, unlike X-ray or CT.

The kicker: your body already does a version of this every day. When you get an MRI, the RF pulses deposit energy that produces tiny acoustic clicks inside you — usually treated as noise. Thermoacoustic imaging is what happens when you decide those clicks are the signal.

Down the rabbit hole: Your tumors are literally louder than your healthy tissue when zapped with a microwave — and doctors are learning to listen.

Daily YT Documentary

SORENIA (2026) | Independent Sci-Fi Horror Film

2026-07-20

SORENIA (2026) | Independent Sci-Fi Horror Film

Channel: SHEEPCOTE. (43 subscribers)

Honest disclosure: this batch is thin. Most candidates are trailers, teasers, or announcement videos from tiny channels — none deliver the kind of "teach a specific skill" or "explain a concept in depth" content that ranks highest. Given the constraint to pick the least bad option, SORENIA stands out as the most substantive.

It's a complete independent sci-fi horror film (not a teaser) from a 43-subscriber channel, which makes it a genuinely rare artifact: a finished narrative work by a first-time or near-first-time filmmaker being watched by almost no one. The premise — a lone protagonist waking on an alien world with dwindling oxygen and no memory — is a well-worn setup, but micro-budget sci-fi is interesting precisely because the constraints force creative solutions. You get to see how someone with essentially no resources handles world-building, practical effects, sound design, and pacing on a genre that Hollywood spends nine figures on.

Watching indie sci-fi at this scale is educational in a different way than a tutorial: it's a live demonstration of what's achievable with modern consumer tools, and where the seams show. If you're interested in filmmaking, DIY VFX, or the current state of solo-production sci-fi, this is worth 90 minutes of curiosity.

Why watch: A finished micro-budget sci-fi horror feature from a 43-subscriber channel — a rare chance to see what one person can build with modern tools and no money.

Daily YT Electronics

Building a Three-Element KJ6ER PERformer In My Ham Shack: Part 1

2026-07-20

Building a Three-Element KJ6ER PERformer In My Ham Shack: Part 1

Channel: Out N' Aboot With VE9CF (8190 subscribers)

Of the ten candidates today, most are Shorts, hashtag spam, or vague "building something" clips with no substance. This one stands out as a genuine, long-form electronics build from a licensed amateur radio operator working through a real antenna project in his shack.

The KJ6ER PERformer is a phased vertical array design that's become popular in the portable HF community for its performance-to-size ratio. A three-element version is a meaningful step up in complexity — you're not just cutting wire to length, you're dealing with phasing lines, feedpoint impedance matching, and element spacing that all interact to produce directional gain and front-to-back ratio on the target band.

Part 1 builds are useful because they typically cover the theory and materials selection before the soldering starts: why this geometry, what the phasing network needs to do, how the coax lengths become part of the electrical design, and what compromises come with a shack-built (rather than field-deployed) version. For anyone interested in RF, transmission line theory, or the practical side of getting from a schematic to an antenna that actually radiates efficiently, this is the kind of content that rewards watching.

The channel sits just under 10k subscribers and produces the kind of patient, walk-through content that's increasingly rare on YouTube.

Why watch: A real ham-radio operator walks through the theory and construction of a phased vertical antenna array — practical RF engineering, not clickbait.

Daily YT Engineering

Unsteady State Conduction Explained | Heat Transfer Fundamentals Made Easy | Thermodynamic Course S5

2026-07-20

Unsteady State Conduction Explained | Heat Transfer Fundamentals Made Easy | Thermodynamic Course S5

Channel: Eng Ali Hassan (MPE) (2990 subscribers)

Unsteady state (transient) conduction is the messy, real-world counterpart to the tidy steady-state problems most textbooks lead with. When you quench a steel bar, cool a battery cell, or wait for a roast to reach temperature at its center, the temperature field is a function of both space and time — and that time dependence is where the interesting engineering lives.

This lesson is episode 5 of a structured heat-transfer course, which matters: by this point the instructor has already built up conduction, convection, and steady-state analysis in the earlier episodes, so transient conduction is introduced with the right conceptual scaffolding rather than dropped in cold. Expect coverage of the governing PDE, the role of the Biot number in deciding whether lumped-capacitance analysis is valid, and the exponential temperature-vs-time response that falls out of it. For thicker bodies where Biot is large, Heisler charts or the analytical series solutions typically come in — worth watching to see how the instructor bridges the "small object, uniform temperature" case to the "big object with internal gradients" case.

The channel is a small independent course (under 3k subs) building up a full thermodynamics/heat-transfer sequence — genuine teaching content, not a compilation. Worth watching if you're studying for an ME/ChemE exam or just want to sharpen your intuition about how things heat up and cool down.

Why watch: A clear, structured lesson on transient heat conduction — the time-dependent regime that governs quenching, cooling, and cooking in the real world.

Daily YT Maker

Waste to Wonder! ♻️ Kids Made an Extension Board from a Used Engine Oil

2026-07-20

Waste to Wonder! ♻️ Kids Made an Extension Board from a Used Engine Oil

Channel: Creativity Adda Official (965 subscribers)

Honestly, the pickings from this batch were slim — most candidates are podcast throwbacks, library-science lectures, or hashtag-spam Shorts. This one stands out because it actually shows a hands-on fabrication project with a clear teaching angle: young makers at an Indian maker space turning a discarded engine oil jug into a functional multi-outlet extension board.

What makes it worth watching is the combination of upcycling and practical electrical work. Repurposing a rigid HDPE oil container as an enclosure is genuinely clever — the plastic is chemical-resistant, sturdy, and free. Viewers get to see the full workflow: cleaning and cutting the container, laying out socket positions, wiring the sockets in parallel, adding a switch and indicator LED, and terminating the mains cable. It's a good introduction to enclosure design constraints (heat dissipation, strain relief, insulation) that most beginner electronics tutorials skip entirely.

The safety caveat is real — mains wiring in a plastic jug isn't something you'd want as a permanent fixture — but as a teaching exercise for kids learning circuit basics, tool use, and the value of reusing waste materials, it's a solid demonstration. The Creativity Adda maker space seems focused on introducing engineering thinking through low-cost, accessible projects, which is exactly the kind of small-channel content worth surfacing.

Why watch: A clever upcycling project that teaches enclosure design, basic mains wiring, and the maker mindset of turning trash into working tools.

Daily YT Welding

Three Creative Tools That Welders Rarely Talk About | DIY Iron Clamp

2026-07-20

Three Creative Tools That Welders Rarely Talk About | DIY Iron Clamp

Channel: DIYMO,D (183 subscribers)

Shop-made tooling is one of the most underrated skills a fabricator can develop. Commercial clamps and fixtures are expensive, often over-engineered for the job at hand, and rarely fit odd geometries. This video from DIYMO,D walks through three homemade tools built from scrap steel, centered on a DIY iron clamp that solves a real workholding problem.

What makes this worth watching is that the maker shows the full fabrication process — layout, cutting, drilling, and welding — rather than just presenting a finished product. You get to see the design decisions: where the pivot point goes, how the jaw geometry affects clamping force, and which welds are structural versus cosmetic. For anyone building out a home shop, this kind of content is more valuable than buying yet another off-the-shelf clamp, because the skills transfer to any custom fixture you might need later.

The channel is small (183 subs) but the presentation is clear and the projects are practical. If you have a MIG or stick welder and a pile of offcuts, you can replicate all three tools in an afternoon. It's the kind of resourceful, make-your-own-tools content that used to define the DIY metalworking corner of YouTube before everything got monetized into product reviews.

Why watch: Learn to fabricate three genuinely useful shop clamps from scrap, with the full build process shown instead of just the finished result.

All newsletters