Daily Digest — 2026-05-20

27 newsletters today.

In this digest


Abandoned Futures

The General Atomics TRIGA-Powered Aircraft Concept and the Molten Plutonium Reactor Experiment: When Los Alamos Ran a Liquid-Fuel Reactor in 1962

2026-05-20

While Oak Ridge gets all the molten-salt glory, Los Alamos quietly operated the world's first liquid-metal-fueled reactor β€” the Los Alamos Molten Plutonium Reactor Experiment (LAMPRE-I) β€” from 1961 to 1963. It ran for over 2,500 hours at full power, using molten plutonium-iron eutectic fuel at 650Β°C, and was then shut down, dismantled, and effectively forgotten. The follow-on LAMPRE-II was canceled before construction. Sixty-three years later, every "advanced reactor" startup pitching liquid-fueled fast reactors is rediscovering ground that Los Alamos already walked.

What it was. LAMPRE-I was a 1 MW thermal fast-spectrum reactor designed by David Lillie's team at LASL. The fuel was not solid pellets but a liquid plutonium-iron alloy (Pu-2.5 wt% Fe) contained in tantalum capsules, cooled by flowing sodium. The vision was breathtaking: a reactor where fission products could be continuously removed from circulating fuel, where xenon poisoning was a non-issue, where you could refuel without shutting down, and where the fast neutron spectrum bred more fuel than it burned. A 500 MW commercial version was sketched in LA-3540 (1966).

Why it died. Several reasons converged:

  • Tantalum embrittlement. The capsules degraded faster than expected from plutonium attack at 650Β°C.
  • The AEC's bet on solid fuel. Argonne's EBR-II and the eventual Clinch River Breeder Reactor sucked up all the fast-reactor funding. Solid oxide fuel was "good enough" and politically safer.
  • Plutonium proliferation panic. By the late 1960s, anything involving liquid plutonium and online reprocessing was politically radioactive.
  • No champion. Lillie moved on. Los Alamos pivoted to weapons work. The institutional memory evaporated with the staff.

Why it deserves a second look in 2026. Three things changed:

  • Refractory alloys. We now have TZM (titanium-zirconium-molybdenum), ODS steels, and tantalum-tungsten-hafnium alloys that survive molten actinides for decades, not months. Idaho National Lab's recent work on Mo-Re cladding shows < 5 Β΅m/year corrosion rates in molten Pu-Fe.
  • Online reprocessing is now real. Electrorefining and fluoride volatility processes developed for IFR (Argonne, 1984-1994) and recent pyroprocessing demonstrations at INL mean you can actually skim fission products from a flowing fuel stream.
  • The waste problem. A LAMPRE-style reactor can burn its own actinides plus LWR spent fuel. The U.S. has 90,000 tons of spent fuel sitting in dry casks with nowhere to go. A fleet of fast-spectrum liquid-fueled burners could reduce that to fission products with ~300-year storage requirements instead of ~300,000 years.

The technical record is shockingly complete. LA-3073, LA-3540, and LA-2833 contain the full operational data β€” neutronics, corrosion measurements, thermal hydraulics. Yet when TerraPower, Oklo, and Southern Company pitch their fast reactors, LAMPRE is almost never cited. It's as if the 2,500 hours never happened.

The Chinese, of course, noticed. CIAE in Beijing referenced LAMPRE explicitly in their 2019 roadmap for molten-fuel fast reactors. The Russians built BR-5/BOR-60 with liquid sodium-bonded fuel, drawing the same lineage. America invented this technology, ran it successfully, wrote it up, and walked away.

Key Takeaway: LAMPRE proved liquid-plutonium fast reactors work in 1962 β€” modern refractory alloys and pyroprocessing could turn America's 90,000-ton spent fuel mountain into 300-year waste instead of 300,000-year waste, if anyone bothered to read the reports.

ArXiv Paper Digest

A Methodology for Selecting and Composing Runtime Architecture Patterns for Production LLM Agents

2026-05-20

Authors: Vasundra Srinivasan

ArXiv: 2605.20173v1

PDF: Download PDF

If you've ever tried to put an LLM into a real production system, you've felt the awkward seam: the model is a creative, unpredictable thing that generates plausible-sounding text, while the surrounding software is rigid, deterministic, and expects exact inputs. Most teams duct-tape across that seam with retries, JSON parsers, validators, and human approvals β€” but nobody really names the seam itself or treats it as a thing to design.

This paper does exactly that. It gives the seam a name: the stochastic-deterministic boundary, or SDB. And it argues that the SDB is the single most important architectural concept in any production LLM agent β€” more important than the model choice, the prompt, or the framework.

The author defines the SDB as a four-part contract:

  • Proposer β€” the LLM (or any stochastic component) that suggests an action.
  • Verifier β€” a deterministic check that asks "is this proposal valid and safe?"
  • Commit step β€” the moment the action actually touches the real world (writes a row, sends an email, charges a card).
  • Reject signal β€” a structured way to tell the proposer "no, try again, here's why."

The insight is that almost every reliability problem in production agents comes from a poorly-specified version of one of these four pieces. A weak verifier means hallucinations slip through. A commit step that happens before verification means you can't roll back. A vague reject signal means the LLM keeps making the same mistake. Teams that get burned by their agents usually skipped one of these.

From this primitive, the paper builds a methodology for selecting and composing runtime architecture patterns β€” things like guarded tool use, plan-then-execute, multi-agent review, and human-in-the-loop. Instead of treating these as competing trends, the paper shows they're all just different ways of arranging proposers, verifiers, and commits. That reframing lets you reason about which pattern fits your situation: how reversible are your actions, how expensive is verification, how much latency can you tolerate?

The practical payoff is that engineering teams stop arguing about "should we use LangGraph or build our own?" and start asking the right questions: where exactly does stochastic output become a real-world action, and what's checking it at that exact moment? That's a much more productive conversation, and it maps cleanly onto things SREs and architects already know how to reason about β€” transactions, idempotency, validation boundaries.

Why it matters: Naming the stochastic-deterministic boundary gives the LLM-agent field its first concrete architectural primitive β€” turning vague debates about "agent design" into engineering decisions about proposers, verifiers, and commits.

Daily Automotive Engines

Cylinder Bore Coatings: Plasma Spray and the Death of the Iron Liner

2026-05-20

Aluminum blocks are light, but aluminum makes a terrible bearing surface for piston rings β€” it galls, scuffs, and wears into an oval within thousands of miles. For decades, the fix was pressing cast-iron sleeves into the aluminum block. That works, but it's heavy, it limits how thin the cylinder walls can be, and the dissimilar metals expand at different rates (iron ~11 Β΅m/mΒ·Β°C, aluminum ~23 Β΅m/mΒ·Β°C), creating gap and distortion issues at temperature.

Modern engines increasingly skip the liner entirely and spray a microscopically thin steel coating directly onto the bare aluminum bore. The process is called plasma transferred wire arc (PTWA) or rotating single wire (RSW). A wire of low-carbon steel is fed into a plasma torch (~15,000Β°C) inside the cylinder. The plasma vaporizes the wire and atomized particles fly outward at supersonic speed, splatting onto the roughened aluminum wall and building up a coating roughly 0.15–0.3 mm thick.

What you get:

  • Iron-oxide-rich surface with embedded porosity (4–8% by volume) that traps oil β€” better lubrication than a smooth honed iron liner
  • Weight savings: roughly 1.5–2 kg per V8 block versus iron liners
  • Better heat transfer: thin coating bonded directly to aluminum conducts heat to the water jacket far better than a press-fit liner with its insulating air gap
  • Thinner cylinder walls mean closer bore spacing and more displacement in the same block footprint

Real-world example: The Nissan GT-R's VR38DETT uses PTWA-coated bores. So does the Ford Shelby GT350's Voodoo 5.2L flat-plane V8, the C8 Corvette's LT2, and most modern Mercedes-AMG engines. Bugatti's W16 uses it too. The Nikasil coating used by BMW in the 90s was an earlier electroplated nickel-silicon-carbide version β€” it worked great until high-sulfur US fuel ate the coating and BMW had to warranty entire engine blocks.

Rule of thumb for honing: A coated bore needs a finer final hone than iron β€” typically Ra 0.3–0.5 Β΅m versus 0.8–1.2 Β΅m for iron. The coating's inherent porosity provides oil retention, so you don't need the deep crosshatch valleys iron requires. Honing too aggressively strips the coating, exposes aluminum, and the bore fails catastrophically within hours.

The downside: you cannot bore oversize and rebuild. Once the coating is worn or damaged, the block goes back to a specialized facility for re-coating (around $400–$800 per cylinder), or it's scrap. The aftermarket rebuild culture that thrived on iron sleeves doesn't really exist for these blocks yet.

Key Takeaway: Plasma-sprayed steel coatings let aluminum blocks ditch heavy iron liners entirely, trading rebuildability for lower weight, tighter bore spacing, and better heat transfer.

Daily Debugging Puzzle

Python's lru_cache on Methods: The Memoizer That Leaks Instances

2026-05-20

This service processes uploaded images. Each ImageCache holds a 50 MB buffer, but it's created in a tight loop and goes out of scope immediately β€” so memory should stay flat. Production tells a different story: RSS climbs steadily until the pod OOMs around hour six.

from functools import lru_cache

class ImageCache:
    def __init__(self, source_path):
        self.source_path = source_path
        self.buffer = bytearray(50 * 1024 * 1024)  # 50 MB

    @lru_cache(maxsize=256)
    def thumbnail(self, size):
        return self._render(size)

    def _render(self, size):
        return bytes(self.buffer[:size])

def process_uploads(paths):
    for path in paths:
        cache = ImageCache(path)
        for size in (64, 128, 256):
            send(cache.thumbnail(size))
        # cache goes out of scope here. Right?

The Bug

The decorator @lru_cache is applied to the unbound function stored on the class β€” there is exactly one cache, shared by every instance, and it lives as long as the class does (effectively forever). When you call cache.thumbnail(64), Python passes the bound self as the first positional argument. The cache key becomes the tuple (self, 64), and the cache holds a strong reference to self for as long as that entry survives.

Two consequences compound the damage:

  • Every instance pins itself alive. Even though cache goes out of scope at the end of the loop iteration, the LRU dict still references it. The 50 MB buffer cannot be collected until that entry is evicted.
  • Default __hash__ is identity-based. Two ImageCache instances built from the same source_path produce distinct keys, so they don't share cache slots β€” they just consume them. With maxsize=256 and three sizes per instance, the cache pins roughly the last 85 instances: ~4 GB of buffers held hostage.

This is invisible in unit tests (you allocate one instance, it stays alive anyway), invisible to __del__ (it never fires), and invisible to gc.collect() (the references aren't cyclic β€” they're strong, held by a live dict on the class object). It shows up only as a slow leak in production, and only when the workload churns through enough distinct instances to matter.

The Fix

Move the cache onto the instance, so its lifetime matches the instance's lifetime:

from functools import lru_cache

class ImageCache:
    def __init__(self, source_path):
        self.source_path = source_path
        self.buffer = bytearray(50 * 1024 * 1024)
        # Per-instance cache: dies with self.
        self.thumbnail = lru_cache(maxsize=8)(self._thumbnail)

    def _thumbnail(self, size):
        return bytes(self.buffer[:size])

Now the closure over self._thumbnail dies with the instance β€” no class-level pinning. For zero-argument methods, functools.cached_property is cleaner still. If you genuinely need a class-wide cache, key it on something hashable-by-value (source_path) and never pass self in.

The general rule: any decorator that builds long-lived storage on the function object will outlive every instance that touches it. @lru_cache, @cache, custom memoizers β€” all the same trap.

Key Takeaway: @lru_cache on a method attaches the cache to the class, not the instance β€” every self it sees becomes a strong reference held for the program's lifetime, silently turning your memoizer into a leak.

Daily Digital Circuits

Power and Ground Bounce: How Hardware's Own Switching Corrupts Its Power Rails

2026-05-20

When a digital output switches, it doesn't pull current from some perfect, infinite voltage source. It pulls current through a real wire β€” package pin, bond wire, PCB trace β€” and that wire has inductance. Inductors resist sudden changes in current with a voltage: V = L Β· di/dt. The result is that the chip's internal "ground" momentarily rises above board ground, and its internal "VDD" momentarily sags below the supply. This is ground bounce (sometimes called simultaneous switching noise, SSN).

The mechanism: imagine 32 output drivers on a bus all switching from high to low at once. Each driver dumps charge from its load capacitance into the chip's ground network, which then has to push that current out through the ground bond wire to the board. If each driver sinks 20 mA and they all switch within 1 ns, that's 640 mA changing in 1 ns flowing through maybe 2 nH of bond wire inductance.

The calculation: V = L Β· di/dt = 2 nH Β· (0.64 A / 1 ns) = 1.28 V. The chip's internal ground just jumped 1.28 V above board ground. Any input that was a logic LOW (say 0.3 V relative to board) now looks like 0.3 - 1.28 = -0.98 V relative to chip ground β€” or, worse, a quiet output still being driven LOW might appear as a HIGH glitch to downstream logic. This is how "I didn't touch that pin" outputs spontaneously go wrong.

Real-world example: Early '90s SRAM chips with 8 wide outputs were notorious for ground-bounce-induced read failures when all 8 bits transitioned 0xFF→0x00. The fix was both physical and architectural: add more VSS pins (more parallel bond wires reduces effective L), stagger output switching by tens of picoseconds, and slew-rate-control the output drivers so di/dt is bounded.

Mitigation strategies:

  • Multiple power/ground pins β€” two parallel 2 nH wires give 1 nH effective inductance. Modern BGA packages dedicate 30–50% of pins to power/ground for this reason.
  • Decoupling capacitors placed within millimeters of the package supply the transient charge locally, so the bond wire only sees the average current.
  • Controlled-slew output drivers trade edge rate for quiet switching β€” useful when timing margin allows.
  • Output staggering β€” DDR memory controllers deliberately skew DQ transitions by ~50 ps to spread di/dt.

Rule of thumb: Budget ~1 nH per package pin and ~1 nH per cm of PCB trace. If your di/dt times that inductance exceeds ~10% of VDD, expect functional failures β€” not just noise on a scope, but bits flipping in latches.

See it in action: Check out Do NOT Build This... by camman18 to see this theory applied.
Key Takeaway: Every switching output dumps current through inductive package parasitics, and LΒ·di/dt across that inductance shifts the chip's internal ground reference enough to corrupt nearby logic β€” which is why power/ground pins, decoupling caps, and slew control aren't optional polish but core functional design.

Daily Electrical Circuits

Lock-In Amplifiers: Recovering Signals Buried in Noise

2026-05-20

A lock-in amplifier extracts a tiny coherent signal from noise that may be 100,000Γ— larger than the signal itself. The trick: you modulate your measurement at a known frequency, then use synchronous detection to reject everything that isn't at that exact frequency and phase. It's how scientists measure femtoamp photodiode currents under fluorescent lights, or detect 1-nV strain gauge changes on a noisy factory floor.

The core operation is multiplication followed by low-pass filtering. You take your noisy input signal and multiply it by a reference sine wave at frequency f_ref. Using the trig identity cos(A)Β·cos(B) = Β½[cos(Aβˆ’B) + cos(A+B)], signal components at f_ref get shifted down to DC, while everything else lands at a non-zero frequency. A low-pass filter (often very narrow, like 1 Hz) then strips away the high-frequency junk, leaving just the DC component proportional to your signal's amplitude.

The signal chain:

  • Modulator: Excite the sensor with a sine wave at f_ref (often 1–100 kHz, away from 1/f noise and 60 Hz harmonics)
  • Preamp: AC-couple and amplify; offset doesn't matter since DC gets rejected
  • Mixer: Analog multiplier (Gilbert cell) or switching demodulator (CMOS switch driven by a square-wave reference)
  • Low-pass filter: Sets the equivalent noise bandwidth (ENBW); a single-pole RC with Ο„ = 1 s gives ENBW β‰ˆ 0.25 Hz
  • Phase shifter: Aligns reference with signal β€” critical, since the output is AΒ·cos(Ο†)

Real example: Optical absorption spectroscopy. A laser shines through a sample onto a photodiode. The laser is chopped at 3.7 kHz (an oddball frequency to avoid power-line harmonics). The photodiode sees milliwatts of room light plus microwatts of modulated laser light. The lock-in references the chopper signal and pulls out just the 3.7 kHz component β€” yielding a clean DC voltage proportional to laser power, immune to room lighting drift.

Rule of thumb β€” SNR improvement: The noise reduction relative to a wideband measurement is √(BW_input / ENBW). If your input bandwidth is 100 kHz and you use a 1-second time constant (ENBW β‰ˆ 0.25 Hz), you gain √(100,000 / 0.25) = √400,000 β‰ˆ 632Γ— in voltage SNR, or about 56 dB. Double the time constant, gain another 3 dB.

Practical gotchas: Use a dual-phase (I/Q) detector to get magnitude √(IΒ² + QΒ²) without manually tuning phase. Avoid f_ref at sub-harmonics of 60 Hz. And remember: longer time constants improve SNR but slow your response β€” you can't measure faster than ~1/(5Ο„).

See it in action: Check out Boost your AFM with Zurich Instruments’ Lock-in Amplifiers by Zurich Instruments to see this theory applied.
Key Takeaway: Multiply your signal by a reference at the modulation frequency and low-pass filter the result β€” everything not coherent with the reference disappears, letting you measure signals buried far below the noise floor.

Daily Engineering Lesson

Post-Tensioned Concrete: Stressing Steel After the Concrete Cures

2026-05-20

Yesterday's lesson covered prestressed concrete in general terms. Post-tensioning is the variant where the steel is tensioned after the concrete has cured β€” which flips the construction sequence and unlocks geometries that pre-tensioning can't touch.

In pre-tensioning, strands are stretched between bulkheads, concrete is poured around them, and once cured, the strands are released β€” they try to contract and compress the concrete through bond friction. This requires a precasting yard with massive abutments. Pre-tensioned members are made in factories and trucked to site.

In post-tensioning, the concrete is poured first with hollow ducts embedded along carefully designed curved paths. After the concrete reaches strength (typically 75% of f'c, around 7 days), high-strength strands are threaded through the ducts and stretched with hydraulic jacks against the hardened concrete itself. The strands are locked off with wedge anchors at the ends, transferring compression into the member.

The ducts are then either grouted (bonded system) for corrosion protection and load sharing, or left greased and sheathed (unbonded system) for future inspection and re-stressing.

Why post-tension instead of pre-tension?

  • Cast-in-place feasibility β€” you can post-tension a 200-foot parking garage slab on site. You can't truck one in.
  • Curved tendon profiles β€” strands follow a parabolic drape that mirrors the moment diagram, putting compression exactly where tension would otherwise occur.
  • Long spans, thin slabs β€” typical PT flat slab is L/45 thickness vs. L/28 for conventional reinforced concrete. A 30-foot span needs only 8 inches.

Real-world example: Modern parking garages almost universally use post-tensioned slabs. A typical 60-ft Γ— 60-ft bay uses Β½-inch 270 ksi seven-wire strands stressed to about 33,000 lb each (75% of ultimate). One strand per ~12 inches of slab width gives roughly 250 psi average precompression β€” enough to keep the slab in net compression under live load and crack-free against de-icing salt intrusion.

Quick calculation: Required jacking force per strand:

P = 0.75 Γ— fpu Γ— Aps = 0.75 Γ— 270,000 psi Γ— 0.153 inΒ² β‰ˆ 31,000 lb

Account for losses β€” friction in the duct, anchor seating (~ΒΌ inch slip), elastic shortening, plus long-term creep and shrinkage. Total losses typically eat 20–25% of initial jacking force, so design effective stress around 0.6 Γ— fpu.

Failure modes to respect: anchor blowout (massive local force at the end zones requires spiral reinforcement), corrosion of unbonded tendons (water entry through cracked sheathing has caused parking-garage collapses), and never drilling into a PT slab without locating tendons β€” a severed strand releases tens of thousands of pounds explosively.

See it in action: Check out Post-tensioned slab procedure by SNP POST TENSION - ΰΈšΰΈ£ΰΈ΄ΰΈ©ΰΈ±ΰΈ— ΰΉ€ΰΈ­ΰΈͺΰΉ€ΰΈ­ΰΉ‡ΰΈ™ΰΈžΰΈ΅ ΰΉ‚ΰΈžΰΈͺΰΉ€ΰΈ—ΰΉ‡ΰΈ™ΰΈŠΰΈ±ΰΉˆΰΈ™ ΰΈˆΰΉΰΈ²ΰΈΰΈ±ΰΈ” to see this theory applied.
Key Takeaway: Post-tensioning stresses strands against hardened concrete through embedded curved ducts, enabling thin long-span cast-in-place slabs β€” but the locked-in energy makes anchor zones and locating tendons before drilling absolutely critical.

Forgotten Books

The 1806 Recipe for a Perfect Stallion: Conformation Advice That Still Holds Up

2026-05-20

Book: The New-England farriery, or, A compendium of farrier : in four parts, wherein most of the diseases to which horses, neat cattle, sheep and swine are incident, are treated, with medical and surgical observations thereon ... : intended for the use of private gentlemen and farmers by Paul Jewett (1806)

Read it: Internet Archive

Paul Jewett of Rowley, Massachusetts, was a working farrier β€” a horse-doctor and hoof-smith β€” who in 1806 did something quietly radical for his time: he threw out the European textbooks. In his introduction, printed by A. Stoddard in Hudson, New York, he explained that experience had given him "reasons to differ from most of the European theories, and confine my practice to observation only."

What follows in Part I is a short, almost throwaway passage on choosing breeding stallions. It is one of the earliest English-language statements of what we now call functional conformation:

"Such seed horses should be chosen as are large and well proportioned, straight limbed, moving in a right line, heedless of every thwarting object, of an even persevering temper, with short ears, hair and lively countenance."

Read that again slowly. In a single sentence, a 1806 New England farmer-veterinarian named the four traits that every modern horse-conformation judge, breed registrar, and sport-horse buyer still scores for:

  • "Straight limbed, moving in a right line" β€” what equine vets today call tracking true. A horse whose hooves swing in a straight plane (no paddling, winging, or interfering) develops fewer splints, suspensory injuries, and uneven hoof wear. Modern lameness exams begin with a trot-up on hard ground for exactly this reason.
  • "Well proportioned" β€” body proportions (shoulder angle, back length, hip-to-hock ratio) are the foundation of every breed standard from the Hanoverian Verband to the Jockey Club.
  • "Heedless of every thwarting object… even persevering temper" β€” selecting against spookiness and reactivity. There is now a growing body of behavioral-genetics research suggesting that startle response in horses is heritable, and breeders of police, military, and trail horses select on this trait explicitly.
  • "Lively countenance" β€” what judges today call presence or expression, an old but real proxy for general health and alertness.

What's striking is that Jewett offered this without the elaborate humoral theory European farriers of his era still leaned on. No talk of sanguine vs. phlegmatic temperaments, no astrological timing for breeding, no inherited Hippocratic categories. Just: pick the big, sound, calm one with a kind eye that travels straight.

This is the same checklist a modern pre-purchase exam runs through. A vet trots the horse on a hard surface (gait symmetry), palpates the legs (straight limbed), watches the horse react to a flapping tarp (heedless of thwarting objects), and notes the general bearing (lively countenance). Two hundred and twenty years later, the rubric has been instrumented with flexion tests, ultrasound, and genetic panels β€” but the headings on the form are Paul Jewett's.

The forgotten claim: A 1806 Massachusetts farrier, working from observation alone, distilled the criteria for selecting breeding stallions into a single sentence that still maps almost perfectly onto modern equine pre-purchase exams and conformation judging.

Forgotten Darkroom

When Photographers Tried to Paint With Light: The Forgotten Pictorialist Movement

2026-05-20

Book: Pictorial photography; its principles and practice by Anderson, Paul, 1880-1956 (1917)

Read it: Internet Archive

In 1917, Paul L. Anderson β€” lecturer at the Clarence H. White School of Photography β€” wrote a book for a specific kind of photographer that essentially no longer exists. In his foreword, he describes his audience:

"those workers who, without wishing to undertake a study of the abstruse scientific phases of the art, nevertheless have passed beyond the elementary stages and feel a desire for pictorial expression."

That middle tier β€” the serious-but-not-scientific amateur striving for pictorial expression β€” was the foundation of an entire forgotten art movement: Pictorialism. From roughly 1885 to the 1920s, Pictorialists deliberately rejected the camera's sharp, mechanical realism. They used soft-focus lenses, hand-coated platinum and gum bichromate papers, and brushed-in pigments to produce photographs that looked like charcoal drawings, etchings, or Whistler paintings. The goal was not to record the world but to manipulate it into something painterly and emotionally evocative.

Arthur Hammond, in Pictorial Composition in Photography (1920), opens with a defense of the whole project that modern photographers would do well to revisit:

"To tell a photographer how to compose his pictures is like telling a musician how to compose music, an author how to write a novel or an actor how to act a part. Such things can only grow out of the fulness and experience of life. Yet the musician must learn harmony and counterpoint, the novelist must know the rules of grammar and the proper use of words, the actor must study elocution..."

This was the Pictorialist creed: technique is the floor, not the ceiling. They believed photography deserved to sit in the same room as painting, and they were willing to physically intervene on the negative β€” scratching, brushing, multiple-printing β€” to earn that seat.

What killed the movement was, ironically, success. By the 1920s, Modernists like Edward Weston and Paul Strand argued that photography's honesty β€” its sharp, unmanipulated realism β€” was its true art. Pictorialism came to look fussy and pretentious. The whole vocabulary of soft-focus expressive printing was abandoned, and the Clarence H. White School where Anderson taught faded into obscurity.

But notice what came back: every Instagram filter that adds grain, fog, or vignettes; every "film simulation" mode in a Fujifilm camera; every TikTok creator using a Glimmerglass diffusion filter. The modern impulse to make digital images look less digital β€” softer, dreamier, more "painterly" β€” is the Pictorialist project revived under different names. We've simply outsourced to algorithms what Anderson's readers did with bromoil brushes and platinum salts.

  • Pictorialist prints from this era now sell at auction for tens of thousands of dollars, partly because the techniques (gum bichromate, oil pigment, bromoil transfer) are genuinely difficult to reproduce today.
  • The "abstruse scientific phases" Anderson dismissed became the basis of all modern photography. The intermediate craft he wrote for vanished entirely.
The forgotten claim: Photography was once considered incomplete without hand-manipulation β€” soft focus, brushed pigments, and physical intervention on the negative were the marks of a serious artist, not cheating.

Forgotten Patent

Edwin Armstrong's Frequency Modulation: The 1933 Patent That Invented Static-Free Radio β€” and the Backbone of Cellular Networks

2026-05-20

On December 26, 1933, Edwin Howard Armstrong filed four interlocking patents that would rewrite the physics of broadcasting. The most famous, US Patent 1,941,066 ("Radiosignaling"), described a radically different way of encoding sound onto a radio wave. Instead of varying the wave's amplitude β€” the technique used by every commercial broadcaster on Earth β€” Armstrong varied its frequency. The result was audio so clean that listeners thought the receiver was broken when the music stopped: there was no hiss, no crackle, no thunderstorm interference. Just silence, then a violin.

The orthodoxy Armstrong was overturning was monumental. In 1922, the mathematician John Carson had published a proof that frequency modulation was inherently worse than AM β€” it required more bandwidth and offered no benefit. The proof was correct, but it assumed a narrow frequency swing. Armstrong's insight was the opposite: deliberately use a wide swing (he proposed Β±75 kHz against the AM standard of a few kHz), and the noise-rejection properties of an FM detector improve dramatically. He had turned Carson's objection into the engineering parameter that made FM superior.

Armstrong demonstrated the system on November 5, 1935, at the Institute of Radio Engineers in New York. He played a glass of water being poured, then a paper being torn β€” sounds that AM radio simply could not reproduce because their high-frequency content was buried under static. The audience was reportedly stunned into silence.

Then came one of the saddest stories in invention. RCA's David Sarnoff, who had once been Armstrong's friend and patron, recognized FM as an existential threat to RCA's AM empire and its parallel television business (which Sarnoff wanted to use the FM-suitable VHF band). RCA stalled FM's rollout, lobbied the FCC to move FM's frequency allocation in 1945 (instantly bricking every existing FM receiver), and fought Armstrong's patents in court for over a decade. Armstrong, broke and exhausted, jumped from his 13th-floor New York apartment on January 31, 1954. His widow, Marion, spent the next 13 years winning every infringement suit, one by one.

The modern footprint of 1,941,066 is enormous and almost entirely invisible to consumers:

  • FM broadcast radio (88–108 MHz) is the obvious one β€” still the world's dominant high-fidelity terrestrial audio medium 90 years later.
  • The audio carrier of analog television (NTSC, PAL, SECAM) was FM β€” Armstrong's patent rode along with every TV set sold from 1941 to the digital cutover.
  • Cellular telephony from AMPS through early GSM used FM and its descendants (GMSK is a constrained FM); the wide-deviation noise rejection is what lets your phone work at the edge of a tower's range.
  • Two-way radio β€” police, aviation marker beacons, ham repeaters, family walkie-talkies β€” is almost universally FM.
  • FSK (frequency-shift keying), the digital cousin of FM, underlies Bluetooth Low Energy, LoRa, dial-up modems, caller ID, and the AIS transponders on every ship at sea.

The deepest irony: the principle Armstrong proved β€” that trading bandwidth for signal-to-noise ratio beats brute amplitude β€” became Shannon's channel capacity theorem 15 years later, in 1948. Armstrong had built a working physical proof of information theory before information theory existed. Every modern wireless protocol, from Wi-Fi 7's OFDM to 5G's massive MIMO, is descended from the same insight: you can always spend spectrum to buy clarity.

Key Takeaway: Armstrong's 1933 wide-deviation FM patent didn't just kill radio static β€” it was a physical demonstration of Shannon's bandwidth-for-noise tradeoff a decade before Shannon, and it still underlies nearly every wireless system in your pocket.

Daily GitHub Zero Stars

skier233/AI.Extensions

2026-05-20

Among today's batch of mostly student projects and auto-generated repos, skier233/AI.Extensions stands out as something with a clear purpose and an interesting niche. The description β€” "AI Extensions for Cove" β€” is terse, but it points to a deliberate plugin architecture rather than yet another standalone chatbot wrapper.

Cove appears to be the author's broader project ecosystem (skier233 maintains several Cove-related repositories on GitHub focused on media organization and tagging workflows). This Extensions repo carves out the AI-specific functionality as its own module β€” a pattern that's worth paying attention to even before you read the code:

  • Separation of concerns: Keeping AI integrations out of the main application means model providers, prompts, and inference logic can evolve independently of the host app.
  • Pluggability: An "extensions" naming convention usually implies a contract β€” multiple AI backends or capabilities can be swapped in without touching core code.
  • Hackability: Small, focused repos like this are far easier to fork, study, and adapt than monolithic AI apps with thousands of dependencies.

It's a zero-star repo pushed today, so this is genuinely early-stage. That's exactly when an extra set of eyes is most valuable to a solo maintainer β€” issues filed now shape the API before it ossifies.

Who would benefit:

  • Developers already using or curious about the Cove ecosystem.
  • Anyone designing their own plugin system for AI features and looking for small, real-world reference implementations.
  • Hobbyists who want to study how a single developer scopes an "AI module" without overengineering it.

Worth a star if extension architectures interest you β€” and worth a watch to see where it goes.

Why check it out: A fresh, focused AI extension module for the Cove project that offers a clean look at how one developer is structuring pluggable AI features from day one.

Daily Hardware Architecture

The Allocator and Free List: How CPUs Hand Out Resources to Incoming Instructions

2026-05-20

Every cycle, a modern CPU's frontend dumps a fistful of decoded Β΅ops on the backend's doorstep and says "find them homes." The allocator (sometimes called the rename/dispatch stage) is the bureaucrat that hands each Β΅op the resources it needs to enter the out-of-order engine: a physical register, a reorder buffer (ROB) entry, a reservation station slot, and possibly load queue or store queue entries. If any one resource is exhausted, the entire frontend stalls. No half-allocation, no partial dispatch β€” it's all-or-nothing per cycle.

The trickiest resource is the physical register. Modern x86 cores have ~280 physical integer registers backing 16 architectural ones. The allocator pulls free registers from a free list β€” typically a circular FIFO of register IDs that aren't currently mapped to any architectural register or in-flight instruction. When an instruction commits and its old physical register is no longer needed (because a newer write to the same architectural register has also committed), that physical register returns to the free list.

The free list itself is usually a small SRAM with head and tail pointers. Allocating N registers per cycle means reading N entries from the head; freeing N means writing N to the tail. This sounds trivial until you realize a 6-wide machine might allocate 6 and free 6 in the same cycle β€” that's 12 ports on a structure that needs to stay fast. Most designs split it into banks or use a bitmap (one bit per physical register) with priority encoders to find free entries, trading area for port count.

Concrete example: Intel's Golden Cove allocates up to 6 Β΅ops per cycle. It has separate free lists for integer (~280 entries), vector (~332 entries), and predicate registers. If you're running AVX-512-heavy code, you can exhaust the vector free list while the integer one sits half-empty β€” the frontend stalls anyway. This is why mixing scalar and vector work can sometimes throughput-balance better than pure vector code: you're consuming separate resource pools.

Rule of thumb: Maximum useful in-flight instructions β‰ˆ min(ROB size, physical register file size βˆ’ architectural registers). On Golden Cove, ROB is 512 but integer PRF is ~280, so for integer-heavy code you'll hit register pressure before ROB pressure. The PRF, not the ROB, is your effective window.

Resource exhaustion shows up in perf counters as RESOURCE_STALLS.RS, RESOURCE_STALLS.ROB, or vendor-equivalent events. If you see allocator stalls dominating, widening loop unrolling won't help β€” you need to shorten dependency chains so instructions retire and free their registers faster.

Key Takeaway: The allocator is an all-or-nothing gate at the OoO engine's entrance β€” and physical registers, not the ROB, are usually the resource that runs out first.

Hacker News Deep Cuts

The engine behind the 100 TB GitHub search engine

2026-05-20

This is exactly the kind of post that should be lighting up the HN front page and instead got buried at one point with zero comments. GitHub's code search is one of the most quietly impressive pieces of search infrastructure in production anywhere β€” it indexes over 100 terabytes of source code across tens of millions of repositories, supports regex queries, respects symbol semantics, and returns results fast enough to feel like grep on your laptop. That isn't something you build with Elasticsearch and a prayer.

The post almost certainly digs into Blackbird, GitHub's custom Rust-based search engine that replaced their earlier Elasticsearch-backed system. The interesting bits a technical reader would want to see covered:

  • Why off-the-shelf inverted indexes don't scale here. Code search has weird requirements β€” substring matching, symbol-aware ranking, case sensitivity, regex β€” that traditional text search engines handle poorly or expensively.
  • Sharding strategy at petabyte-adjacent scale. How do you partition indexes when a single popular repo gets queried orders of magnitude more than a long-tail one? How do you keep tail latency reasonable across thousands of shards?
  • Delta encoding and content-addressed storage. Git's content model (blobs deduplicated by hash) is a gift to a search indexer β€” the same file in 10,000 forks only needs to be indexed once. The engineering question is how aggressively you can lean on that without breaking incremental indexing.
  • Ingest pipeline economics. Indexing 100 TB once is a project; keeping it fresh as millions of pushes per day arrive is a continuous engineering problem.

The reason this matters beyond GitHub: code search is one of the few large-scale search workloads where the corpus has structure the search engine can exploit. Every team building developer tools β€” from AI coding assistants doing retrieval over codebases, to internal "Sourcegraph for our monorepo" tools β€” is solving a tiny fraction of this problem. GitHub publishes how they actually did it at scale, in detail, and almost nobody noticed.

Posts like this also age well. Architecture writeups from Google, Dropbox, and Facebook from a decade ago are still cited; this is in that same lineage.

Why it deserves more upvotes: A detailed architecture post on one of the world's most demanding production search systems is the canonical kind of content HN exists for, and it got one point.

HN Jobs Teardown

Coin Metrics: What Their Hiring Reveals

2026-05-20

Source: HN Who is Hiring

Posted by: coinmetrics

Of the ten postings, Coin Metrics (ID: 22680221) is the most revealing β€” not because it says a lot, but because of what it conspicuously doesn't say. A crypto data company hiring an Infrastructure Engineer and listing PostgreSQL, Docker, Ansible, nginx, Git, and "virtual and bare metal" is making a quiet but loud statement about how institutional crypto actually gets built.

The stack tells the story:

  • PostgreSQL with admin/replication/backup expertise β€” not Kafka, not a time-series DB, not a "web3-native" data lake. They're storing crypto asset data in boring, battle-tested relational infrastructure. The emphasis on replication and backup signals their customers (institutions) demand audit trails and durability guarantees, not eventual consistency.
  • Bare metal alongside virtual β€” In 2020, when most startups were AWS-only, advertising bare metal means either (a) they're running blockchain nodes where I/O and determinism matter, or (b) they're cost-sensitive at data volumes large enough that cloud egress hurts. Probably both.
  • Ansible, not Kubernetes/Terraform β€” Pragmatic, small-team config management. They're not chasing the CNCF hype cycle.

What this reveals about stage and direction: Coin Metrics is positioning as the Bloomberg of crypto, not a crypto startup. The phrase "leading provider of crypto asset data for institutions" plus this stack means they sell to hedge funds, banks, and regulators who require traditional-finance-grade reliability. They're not building a consumer app; they're building a data pipeline that has to be defensible in a compliance review.

Skills/trends highlighted: The 2020 crypto labor market split into two camps β€” Solidity/smart contract engineers chasing DeFi yield, and infra engineers running boring pipelines for boring institutions. This posting is firmly in the second camp, and that camp is where the durable revenue actually lives.

Green flags: Remote-first in early 2020 (pre-pandemic norm). Concrete, specific skills rather than buzzword soup. No "rockstar ninja" language. Honest about needing operational depth (replication, backup) rather than greenfield glamour.

Red flags: The posting is extremely terse β€” one sentence and a careers link. Either they're confident enough in their brand that they don't need to sell, or they're under-investing in recruiting copy. No salary range, no team size, no mention of on-call structure for someone who'll clearly carry a pager.

The signal: The most lucrative crypto companies in 2020 are the ones hiring Postgres DBAs, not Solidity wizards β€” institutional data infrastructure is where crypto quietly grew up.

Daily Low-Level Programming

The Loop Stream Detector: Why Tight Loops Skip the Front-End Entirely

2026-05-20

Modern x86 CPUs have a feature most engineers never hear about: the Loop Stream Detector (LSD). When the CPU notices it's executing the same small loop repeatedly, it stops fetching, decoding, and even reading from the micro-op cache. Instead, it locks the loop's micro-ops in a tiny buffer inside the Instruction Decode Queue (IDQ) and replays them directly into the back-end. The entire front-end goes idle.

On Intel Skylake-derived cores, the LSD can hold up to 64 micro-ops per thread (or 56 when hyperthreading is active). If your loop fits, you pay zero fetch energy and zero decode latency on every iteration after the first. The front-end can issue up to 6 Β΅ops/cycle from the LSD versus 4-5 from the Β΅op cache and 4 from the legacy decoders.

Concrete example. A hot SHA-256 inner loop hand-written in assembly:

  • Loop body: 48 Β΅ops, fits in LSD β†’ ~3.2 cycles/iteration on Skylake
  • Same loop padded to 72 Β΅ops (over the limit) β†’ ~4.1 cycles/iteration, ~28% slower
  • The padding instructions are never executed in a way that matters β€” they just pushed the loop out of the LSD

This is why crypto and codec libraries (OpenSSL, x264, zlib's CRC routines) carefully count Β΅ops in their hot loops. A nop in the wrong place can demolish throughput.

The gotchas:

  • Branches matter. The LSD requires the loop to have exactly one taken backward branch at the end. Internal forward branches are OK, but a mispredicted exit invalidates the stream.
  • Microcode-assisted instructions kill it. Anything that decodes to more than 4 Β΅ops (gather/scatter on older parts, some rep variants, certain divisions) falls back to the microcode sequencer and disables LSD.
  • It's been disabled before. Intel turned off the LSD in microcode on Skylake/Kaby Lake in 2017 to fix erratum SKL150 (an LSD bug could corrupt registers under specific AVX patterns). Many production machines run with it off and you'd never know β€” except your Β΅op-counted loop suddenly runs 20% slower after a BIOS update.

Rule of thumb: If your hottest loop is under ~60 Β΅ops and contains no microcoded instructions, you're getting LSD acceleration. Use perf stat -e idq.dsb_uops,idq.mite_uops,lsd.uops to confirm β€” if lsd.uops dominates, the front-end is asleep and you're CPU-bound on the back-end only.

Knowing this changes optimization priority: once a loop fits the LSD, further code size reduction yields nothing β€” focus on Β΅op port pressure and dependency chains instead.

See it in action: Check out How Small Could You Be Crushed? 😳 by Zack D. Films to see this theory applied.
Key Takeaway: Tight loops under ~64 Β΅ops execute from a tiny buffer that bypasses fetch and decode entirely β€” but a single oversized instruction or BIOS-disabled LSD can silently cost you 20-30% throughput.

Reddit Small Subs

Deep dive into the object creation flow in Windows - PART 1: Allocation and Pre-Initialization

2026-05-20

Subreddit: r/lowlevel

Discussion: View on Reddit (3 points, 0 comments)

This post kicks off a four-part series by u/_WinAsm dissecting one of the most fundamental β€” yet rarely explained β€” mechanisms in the Windows kernel: how the Object Manager creates kernel objects. Nearly every Windows primitive you've ever touched β€” files, processes, threads, mutexes, events, registry keys, sections β€” is a "kernel object" born through this exact code path. Yet most developers, even those writing drivers, treat ObCreateObject as an opaque black box.

Part 1 focuses on allocation and pre-initialization. The author walks through what actually happens between the moment a user-mode CreateFile or CreateMutex call enters the kernel and the moment the object body is handed off for type-specific initialization. Key topics covered across the series include:

  • Object header layout β€” the OBJECT_HEADER structure that sits before every kernel object body, carrying reference counts, type info, and optional sub-headers (name info, handle info, quota info, creator info).
  • Pool allocation β€” how the kernel computes the total size needed (header + optional sub-headers + body) and carves it out of paged or non-paged pool.
  • Access checks (Part 2) β€” how the security reference monitor validates the caller's token against the object's DACL before the handle is granted.
  • Name lookup and the object namespace (Part 3) β€” the directory tree at \??\, \Device\, \BaseNamedObjects\ and how named objects are inserted.
  • Handle tables (Part 4) β€” the per-process three-level table that maps HANDLEs (those small integers you pass around in user mode) to the actual kernel object pointers, including the encoded access mask bits.

Why this matters: understanding the Object Manager is the prerequisite for everything interesting in Windows internals β€” rootkit detection, EDR hooking, handle hijacking attacks, privilege escalation via handle leaks, and even ordinary driver debugging. When you see a tool like Process Hacker enumerate handles, or a malware sample duplicate a SYSTEM token handle, this is the machinery underneath.

The series leans heavily on disassembly and the public ntoskrnl symbols, which makes it more rigorous than the typical "Windows Internals" textbook summary. If you've read Russinovich's book and wanted the next layer down, this is it.

Why read this: A rare, code-level tour through the Object Manager β€” the hidden machinery behind every HANDLE in Windows.

RFC Deep Dive

RFC 5297: Synthetic Initialization Vector (SIV) Authenticated Encryption Using AES

2026-05-20

RFC: RFC 5297

Published: 2008

Authors: D. Harkins (Aruba Networks)

Most authenticated encryption modes have a foot-cannon footnote: "thou shalt not reuse a nonce." Reuse a GCM nonce twice with the same key and you don't just lose confidentiality of those two messages β€” you leak the authentication key, letting an attacker forge anything. In practice nonces get reused all the time: virtual machines fork, RNGs misbehave, counters reset on reboot, key-wrapping contexts have no obvious nonce at all. RFC 5297 specifies AES-SIV, a mode designed by Phil Rogaway and Tom Shrimpton (and standardized by Dan Harkins) that fails gracefully when this happens.

The core trick: the IV isn't random β€” it's derived deterministically from the plaintext and associated data. SIV runs in two passes:

  • S2V (String-to-Vector): a PRF built on CMAC that absorbs a vector of associated-data strings plus the plaintext and outputs a 128-bit value. This value is the authentication tag.
  • AES-CTR: that same tag is used as the counter-mode IV to encrypt the plaintext.

The ciphertext is just tag || ctr_output. To decrypt, you run CTR with the embedded tag, then recompute S2V over the recovered plaintext and check it matches. Because the IV is a function of the plaintext, repeating an encryption call with identical inputs yields identical ciphertexts β€” and the only thing an attacker learns from "nonce reuse" is whether two plaintexts were equal. No key leakage, no forgery oracle. Rogaway called this misuse-resistant AEAD, and it's now the gold standard for any context where nonces are awkward.

The associated-data vector is the second clever bit. Most AEAD modes take a single AD blob. SIV takes a list of AD strings, each independently authenticated. This means you can stuff in a nonce, a header, a context label, and a timestamp as separate fields and the construction handles them unambiguously β€” no "length extension" pitfalls, no manual canonicalization. If you do supply a nonce as one of the AD strings and it's unique, SIV is also a conventional nonce-based AEAD with standard security. If the nonce repeats or is absent, you degrade to deterministic encryption rather than catastrophe.

Where it actually shows up:

  • Key wrapping. When you encrypt a data key with a key-encryption key, there's no natural nonce. AES-SIV replaces the older RFC 3394 AES Key Wrap in many systems precisely because it adds associated-data binding and arbitrary-length payloads.
  • Cloud KMS envelopes. Several KMS implementations use SIV-family modes internally for deterministic, idempotent re-encryption.
  • 802.11 / 802.1AE follow-ons and MIKEY-SAKKE use SIV variants.
  • AES-GCM-SIV (RFC 8452, 2019) β€” Google's higher-performance successor β€” directly descends from this design, swapping CMAC for POLYVAL but keeping the synthetic-IV idea.

The cost: two passes. SIV is not online β€” you can't stream encrypt without buffering, because you must compute the tag before you can encrypt. That's the price of misuse resistance. For high-throughput TLS-style streaming, you still want GCM or ChaCha20-Poly1305 with disciplined nonces. For key wrapping, database field encryption, deterministic search tokens, or any "encrypt this small blob safely" use case, SIV is almost always the right answer.

The RFC itself is unusually readable β€” it presents S2V with a worked example using the doubling-in-GF(2¹²⁸) trick borrowed from CMAC, and the test vectors are reproducible by hand on a whiteboard if you're patient.

Why it matters: AES-SIV is the quietly correct choice whenever you need authenticated encryption but can't guarantee a fresh nonce β€” turning "nonce reuse" from a catastrophic key leak into a benign equality leak.

Stack Overflow Unanswered

Has frequency-band partitioning been explored as a fallback mechanism when AEC fails in full-duplex audio?

2026-05-20

Stack Overflow: View Question

Tags: audio, webrtc, signal-processing, aec, echo-cancellation

Score: 0 | Views: 43

The asker is probing a real pain point: when acoustic echo cancellation (AEC) breaks down β€” reverberant rooms, double-talk, abrupt acoustic changes β€” commercial stacks like WebRTC's AEC3, Zoom, and Meet fall back to residual echo suppression that effectively half-duplexes the call (volume ducking, near-end gating). Their proposal: instead of ducking the whole spectrum, partition it. Allocate disjoint frequency sub-bands to the near-end and far-end speakers in real time, so they literally can't acoustically collide in the loop.

Why it's interesting: AEC fundamentally relies on estimating a linear echo path. When that estimate diverges, the residual is unbounded. Frequency-domain duplexing sidesteps adaptive filtering by enforcing orthogonality in a different domain β€” borrowing an idea from FDMA radio. The clever bit is that speech is sparse in frequency: voiced segments concentrate energy in formants below ~3.5 kHz, with gaps. So you don't need to discard half the band β€” you allocate based on instantaneous spectral occupancy.

Why it's hard:

  • Intelligibility cost. Speech intelligibility (STI, PESQ) collapses if you remove arbitrary bands. The Articulation Index weights 1–4 kHz heavily. Any partition must preserve enough of each talker's formant structure that the remote listener still parses words.
  • Switching artifacts. Band reassignment during double-talk produces musical noise and "warbling" β€” the same artifact that plagues spectral-subtraction noise suppressors. You'd need overlap-add with smooth gain trajectories, not hard masks.
  • It doesn't kill echo, it constrains it. The far-end signal still couples acoustically into the mic in its assigned band. You'd still need cancellation or suppression β€” partitioning just simplifies the problem because the near-end speech is (by construction) absent from those bins, so suppression has no double-talk to confuse it.

Prior art to check: The closest published work is perceptually-weighted residual echo suppression (Valin et al., RNNoise lineage) and frequency-domain double-talk detection in AEC3. Sub-band AEC itself is standard (partitioned-block frequency-domain adaptive filter, PBFDAF). What the asker is describing is closer to cognitive-radio-style dynamic spectrum access applied to acoustic full-duplex β€” I'm not aware of it as a deployed AEC fallback, though academic "spectral duplexing" papers exist for hearing aids.

Direction: Prototype with WebRTC's APM. Tap the far-end render signal, compute its short-time spectrum, and on a double-talk detector trigger, apply a complementary mask to the near-end capture instead of a flat suppression gain. Compare PESQ/POLQA against AEC3's default suppressor under reverberant conditions (image-source simulator, RT60 = 0.6s).

Gotcha: If the far-end is also doing this, you've created a coupled control loop across the network with RTT-bounded stability. Allocation must be unilateral or negotiated out-of-band.

The challenge: Trading a hard signal-processing problem (linear echo estimation under nonlinearity) for an information-theoretic one (preserving intelligibility under a time-varying spectral mask) β€” a genuinely novel framing that deserves more than zero answers.

Daily Software Engineering

The Write-Behind Cache Pattern: Defer Writes Without Losing Them

2026-05-20

Write-through caches keep cache and database in lockstep β€” every write hits both before returning. Safe, but slow: your latency is gated by the slower of the two. Write-behind (also called write-back) flips this: write to the cache, acknowledge the client, and asynchronously flush to the database later. You trade durability guarantees for throughput.

The mechanics: when a write arrives, you update the cache entry and enqueue a "dirty" marker. A background worker drains the queue in batches, coalescing multiple writes to the same key into a single database update. The client sees cache latency (sub-millisecond) instead of database latency (5–50ms).

Real-world example: A view-counter on a video platform. Every play increments a counter. With write-through, 10,000 plays/sec means 10,000 database updates/sec β€” your database melts. With write-behind, the cache absorbs all 10,000 increments in memory, and a worker flushes the coalesced total (one UPDATE with the new count) every 5 seconds. You've turned 10,000 writes into 1 β€” a 10,000Γ— reduction.

The rule of thumb: if your write coalescing ratio (writes-per-key-per-flush-interval) is greater than 3, write-behind pays off. Below that, the bookkeeping overhead and durability risk aren't worth it. Counter-style and "last-write-wins" workloads coalesce beautifully; append-only logs do not.

The hard parts:

  • Data loss window. If the cache node dies before the flush, you lose every dirty write in its buffer. Mitigate with replication (Redis AOF, write-ahead log to disk) or accept it for non-critical data like analytics counters.
  • Read-your-writes consistency. A read from a different cache node may miss the dirty write. Pin reads to the same node, or route through a consistent hash.
  • Flush failures. The database is down when the worker tries to flush β€” now what? You need a retry queue with bounded size, or you'll OOM your cache. Drop the oldest dirty entries to a dead-letter queue once the buffer exceeds a threshold.
  • Ordering. Coalescing means losing intermediate states. Fine for counters; catastrophic for audit logs.

When to use it: high-volume writes where individual updates aren't independently valuable β€” counters, last-seen timestamps, session state, leaderboards. When to avoid it: financial transactions, anything regulated, anything where losing 5 seconds of writes would page someone at 3am. The pattern shifts the durability boundary; make sure you actually want it shifted.

See it in action: Check out System design: Write-around Cache by A small bug to see this theory applied.
Key Takeaway: Write-behind caching trades a small durability window for massive throughput by coalescing redundant writes β€” use it when individual writes are cheap to lose but expensive to perform.

Tool Nobody Knows

xidel: The CLI Scraper That Speaks XPath, XQuery, CSS, and JSONiq

2026-05-20

You need to pluck data out of an HTML page. The usual options: pipe curl through grep and pray the markup never shifts, fire up Python with BeautifulSoup, or wire up a Node toolchain. There's a fourth option that has been quietly sitting in Debian since 2012 β€” xidel. One Pascal-compiled binary, no runtime, and it understands HTML, XML, and JSON through the same expression engine.

The simplest form looks like wget with a brain:

# Grab every story link off Hacker News
xidel https://news.ycombinator.com -e '//span[@class="titleline"]/a/@href'

# Same thing with a CSS selector
xidel https://news.ycombinator.com -e 'css("span.titleline a")/@href'

The -e flag takes XPath, XQuery, JSONiq, or CSS. xidel auto-detects HTML vs. JSON and parses accordingly β€” no flipping between jq and pup.

The real power shows up when you need multiple fields at once. XQuery lets you build structured records inline:

xidel https://news.ycombinator.com -e '
  for $row in //tr[@class="athing"] return {
    "title": $row//span[@class="titleline"]/a,
    "url":   $row//span[@class="titleline"]/a/@href,
    "rank":  $row//span[@class="rank"]
  }
' --output-format=json-wrapped

One process, structured JSON output, no glue script. Now the killer feature β€” automatic link following:

# Front page β†’ every comment thread β†’ comment bodies, in one invocation
xidel https://news.ycombinator.com \
  -f '//span[@class="titleline"]/a/@href' \
  -e '//div[@class="comment"]//text()'

The -f flag means "follow these URLs and apply the next -e to each." Chain -f and -e arbitrarily β€” five levels deep, paginated archive crawls, login-then-scrape β€” all in one process. Cookies persist across the chain automatically.

It speaks JSON with the same engine:

# Every top-level dependency name from a package-lock.json
xidel package-lock.json -e '$json/packages/*/dependencies'

Need to log in first? It does forms and sessions:

xidel https://site.example/login \
  --post='user=alice&pass=secret' \
  --cookie-jar=cookies.txt \
  -f '//a[text()="Dashboard"]/@href' \
  -e '//table[@id="stats"]//tr'

Output formatters cover the cases you actually need. --output-format= takes adhoc, json-wrapped, xml, html, or bash. The bash mode is gold β€” xidel emits title="..." lines you can eval straight into your shell:

eval "$(xidel https://example.com/api/whoami \
  -e 'user:=//span[@id="username"]' \
  -e 'mail:=//a[@class="email"]' \
  --output-format=bash)"
echo "$user $mail"

Why this beats the alternatives: grep can't parse nested HTML. jq can't read HTML at all. BeautifulSoup needs a Python interpreter and fifty lines for what xidel does in one expression. pup handles CSS but not XPath, and has no link-following or session handling. xidel collapses fetcher, parser, session manager, and serializer into one tool β€” and the expression language is a real, standardized one you already half-know.

Key Takeaway: xidel replaces curl + parser + glue script with a single expression-based pipeline that walks HTML, JSON, cookies, and forms using the same XPath/XQuery/CSS syntax.

What If Engineering

What If We Powered Civilization with Kites in the Jet Stream?

2026-05-20

Wind power scales with the cube of velocity. A surface turbine sees ~10 m/s; the jet stream at 10 km altitude routinely rips at 50–100 m/s. That cube relationship is the whole story β€” and the reason engineers keep returning to the idea of tethered airborne wind energy systems (AWES).

The power density gap is brutal:

  • Surface wind, 10 m/s, ρ = 1.225 kg/mΒ³: P/A = ½ρvΒ³ β‰ˆ 0.6 kW/mΒ²
  • Jet stream, 50 m/s, ρ β‰ˆ 0.4 kg/mΒ³ at 10 km: P/A β‰ˆ 25 kW/mΒ²
  • Jet stream peak, 100 m/s: P/A β‰ˆ 200 kW/mΒ²

So a kite at altitude sees 40Γ— to 300Γ— the wind energy flux of a ground turbine. A modest 500 mΒ² wing at 25 kW/mΒ² intercepts 12.5 MW. Apply the Betz limit (59.3%) and realistic system efficiency (~50% for yo-yo generators), and you get ~3.7 MW per kite β€” comparable to today's biggest offshore turbines, but with no tower, no foundation, and no nacelle hanging 150 m in the air.

The tether is the engineering centerpiece. At 100 m/s, aerodynamic drag on a 10 mm Dyneema tether (10 km long, Cd β‰ˆ 1.0) is:

F_drag = Β½ Γ— 0.4 Γ— 100Β² Γ— 1.0 Γ— (0.01 Γ— 10000) = 200 kN

Dyneema's tensile strength is ~3 GPa. A 10 mm rope has ~78 mmΒ² cross-section β†’ ~235 kN capacity. Just enough. The tether mass for 10 km is only ~760 kg β€” trivial compared to the wing's lift budget.

Yo-yo mode is the elegant trick: the kite flies a crosswind figure-eight, the tether reels out under huge tension while driving a ground-based generator, then the kite depowers and reels back in. Power flows down a rope, not a copper wire. No 10-km-long superconductor required.

Scaling to civilization: Humanity uses ~20 TW continuous. At 3.7 MW per kite and 40% capacity factor (jet streams meander), you need:

20 Γ— 10ΒΉΒ² W Γ· (3.7 Γ— 10⁢ Γ— 0.4) β‰ˆ 13.5 million kites

That's a lot β€” but for comparison, we manufacture ~80 million cars per year. The kites themselves are cheap: ~500 mΒ² of carbon-fiber-reinforced fabric is maybe $50k in materials. The hard parts are the ground stations and grid integration.

The fatal complication is airspace. The jet stream lives at 8–12 km β€” exactly where commercial aircraft cruise. Each tether is a 10-km vertical guillotine. You'd need exclusion cylinders ~50 km wide, evacuating perhaps 5% of usable airspace globally. A single tether failure at 100 m/s releases a kinetic-energy bomb: a 2-tonne kite moving at jet-stream speed carries 10 GJ β€” equivalent to ~2 tonnes of TNT. So you site farms over oceans, deserts, and polar regions, then run HVDC lines to the load.

Iceland-to-UK HVDC already exists at 1200 km. A North-Atlantic AWES farm under the polar jet could plausibly deliver 500 GW to Europe β€” about its entire electricity demand β€” from a sea area the size of Ireland.

Key Takeaway: The cube law makes a 500 mΒ² kite at 50 m/s outperform a 100-meter wind turbine β€” the engineering problem isn't extracting the energy, it's surrendering the cruise-altitude sky to do it.

Wikipedia Rabbit Hole

Application of silicon-germanium thermoelectrics in space exploration

2026-05-20

Voyager 1 is currently more than 24 billion kilometers from Earth, still transmitting faint signals after nearly fifty years in the void. There are no solar panels out there β€” sunlight at that distance is a thousand times weaker than at Earth. So what's powering it? A lump of decaying plutonium-238 wrapped in silicon-germanium thermocouples, quietly converting heat into electricity with no moving parts whatsoever.

This is the radioisotope thermoelectric generator, or RTG, and it's one of the most beautifully boring pieces of engineering ever flown. A thermocouple, at its core, is just two dissimilar metals joined at a junction β€” heat one end, cool the other, and the temperature gradient pushes electrons across the junction, generating a voltage. This is the Seebeck effect, discovered in 1821 when Thomas Seebeck noticed a compass needle deflecting near a heated bismuth-copper loop. He thought he'd found thermomagnetism. He was wrong, but the effect bearing his name became the foundation of every thermocouple in your oven, your jet engine, and yes, our interstellar probes.

Why silicon-germanium specifically? Most thermocouples β€” the K-types and N-types found in industrial sensors β€” would melt or degrade at the temperatures inside an RTG, where the hot side runs around 1000Β°C. SiGe alloys keep their thermoelectric properties at these brutal temperatures and resist sublimation in vacuum. They're not particularly efficient (RTGs convert only about 6-7% of heat into electricity), but efficiency matters less than survival when your power source needs to outlive its operators.

The numbers are humbling:

  • Voyager 1 & 2 (1977): Launched with ~470 watts of electrical output. Still generating power in 2026, slowly fading as the plutonium decays (87.7-year half-life).
  • Cassini, Galileo, New Horizons, Curiosity, Perseverance: All powered by descendants of the same SiGe thermocouple technology.
  • No moving parts, no maintenance, no fuel to run out β€” just radioactive decay and solid-state physics.

Here's the connection that always gets me: the same physical principle that lets a backyard gas grill thermometer tell you it's 400Β°F is what's keeping humanity in contact with a spacecraft beyond the heliopause. Scale up, swap the materials, and the humble thermocouple becomes a 50-year power station.

There's a darker thread here too. Plutonium-238 isn't a weapons material β€” it's specifically not the bomb-grade Pu-239. It's a byproduct of weapons production, and the U.S. essentially stopped making it in 1988. NASA spent years rationing the remaining supply, and only restarted domestic production in 2015 at Oak Ridge. Every gram is precious. The Mars 2020 rover's RTG used some of the last Cold War-era plutonium.

Down the rabbit hole: The thermocouple in your meat thermometer and the power source for Voyager 1 work on the same 1821 physics discovery β€” only the materials change.

Daily YT Documentary

DOCUMENTARY: The National Science Week 2025 at Kololo Independence Grounds.

2026-05-20

DOCUMENTARY: The National Science Week 2025 at Kololo Independence Grounds.

Channel: Bukedi Times TV (771 subscribers)

Note: today's batch of candidates was unusually weak β€” most entries were AI-generated sci-fi shorts, film-festival promos, or hashtag-spam trailers. This is the least bad pick: an actual documentary, by an actual local broadcaster, about an actual educational event.

Uganda's National Science Week is held annually at Kololo Independence Grounds in Kampala and showcases the country's homegrown research, university spin-outs, and STI (Science, Technology & Innovation) projects funded through the President's office. This documentary captures the 2025 edition β€” exhibits ranging from agricultural innovations and locally-built medical devices to renewable-energy prototypes and student engineering projects.

What makes it worth a watch isn't slick production β€” it's the window into a science ecosystem most Western viewers never see. African-led R&D rarely gets coverage on the global YouTube algorithm, and small regional broadcasters like Bukedi Times TV are often the only ones documenting it. You'll see what problems Ugandan engineers are actually solving (low-cost diagnostics, post-harvest losses, water purification) and how a developing-economy government tries to showcase that work to its own public.

Treat it less as polished edutainment and more as primary-source field footage β€” useful if you're curious about how science communication works outside the usual UK/US channels.

Why watch: A rare on-the-ground look at Uganda's national STI showcase, documenting innovations and research that rarely surface on mainstream science YouTube.

Daily YT Electronics

Interfacing 433Mhz RF Module with STM32F and PC display BOUHOUN and KADI

2026-05-13

This is a student mini-project from a tiny channel (just 10 subscribers) that demonstrates a complete end-to-end wireless communication system built on the STM32F platform. Unlike the flood of 30-second Shorts clogging up the RF module space, this video actually walks through designing and implementing a working link: a 433 MHz transmitter paired with an STM32 microcontroller, with received data piped through to a PC display.

For anyone learning embedded development, this hits several useful intersections at once: bare-metal STM32 peripheral configuration, ASK/OOK-style RF module quirks (the cheap 433 MHz modules require careful handling of preambles, sync words, and timing because they have no built-in protocol stack), and serial communication out to a host. It's the kind of project that turns up in undergraduate electronics coursework, and seeing the actual hardware wired up and running is much more instructive than reading a datasheet.

Caveat: as a student project the production values are modest and the explanation may be brief, but the technical substance is real β€” and supporting a 10-subscriber channel doing actual engineering work is the whole point of curating from small creators.

Why watch: A genuine STM32 + 433 MHz RF integration project β€” substantive embedded engineering content from a channel that desperately needs the views.

Daily YT Engineering

Zoned Earth Dam Internal Drainage Design β€” PE Geotechnical Exam Prep | PEwise

2026-05-20

Zoned Earth Dam Internal Drainage Design β€” PE Geotechnical Exam Prep | PEwise

Channel: PEwise (15 subscribers)

Zoned earth dams are one of the most common β€” and most failure-prone β€” types of large embankment structures, and the placement of their internal drainage system is what separates a stable dam from one that quietly piping itself toward catastrophic breach. This video walks through a worked PE Geotechnical exam problem on exactly that topic, which means viewers get a structured, quantitative look at how drainage chimneys, blanket drains, and toe drains are positioned relative to the impervious core and shell zones.

What makes this video worth watching, even if you have no intention of sitting for the PE exam, is that exam-prep problems force the instructor to show the reasoning: where the phreatic line falls, how seepage gradients are controlled, and why drainage geometry matters more than drainage volume. You learn the underlying physics by following the constraints of a real design question rather than a hand-wave-y overview.

The channel is tiny (15 subscribers) and the production is likely modest, but the topic is genuinely technical and the framing β€” solving a specific licensure-level problem step by step β€” is the opposite of clickbait. Most other candidates in today's batch were Shorts, hashtag spam, or vague book promos; this one is the clear pick on substance.

Why watch: A worked exam-level problem that teaches the geometry and reasoning behind internal drainage in zoned earth dams β€” real engineering, not surface-level overview.

Daily YT Maker

New project new 3d print #shorts #3dprint #3dprinting #funny #cool #job #maker #makeup #happy #ideas

2026-05-20

New project new 3d print #shorts #3dprint #3dprinting #funny #cool #job #maker #makeup #happy #ideas

Channel: GENESIIDEA (635 subscribers)

Note: Only one candidate was provided, and it falls squarely into the categories flagged as low quality β€” it's a YouTube Short with a hashtag-spam title, no description, and no indication of educational content. Picking it because it's the only option, not because it meets the quality bar.

The title suggests this is a quick clip showing a new 3D printing project from GENESIIDEA, a very small channel with 635 subscribers. Without a description or any context beyond the hashtags, it's impossible to know whether the video demonstrates a specific technique, walks through a design process, or just shows a printer doing its thing with music over the top. Shorts in this format almost always fall into the latter category β€” visual eye-candy rather than instructional content.

If you're interested in seeing what hobbyists at the small-channel level are printing, it might be worth the 30 seconds to glance at it. But viewers looking to actually learn something about 3D printing β€” slicer settings, design considerations, material choices, post-processing β€” should look elsewhere. The hashtag-heavy title (#funny #makeup #happy mixed in with #3dprint) is a strong signal that engagement metrics are the priority, not teaching.

A better use of time would be searching for longer-form videos from channels like Teaching Tech, CNC Kitchen, or similar small-to-mid creators who explain the why behind their prints.

Why watch: Honestly, probably skip it β€” it's a hashtag-spam Short with no description and no clear educational value.

Daily YT Welding

We keep pushing forward on the welding cart build πŸ”§

2026-05-20

We keep pushing forward on the welding cart build πŸ”§

Channel: AMR Motorsports (144 subscribers)

Honest note up front: this batch was unusually thin β€” most candidates were hashtag-spam shorts or thinly-disguised ads for modular 3D welding tables. This AMR Motorsports entry is the clearest example of someone actually making something on camera.

The video continues an ongoing welding cart build, with this episode focused on cutting mounts for a MIG welder and plasma cutter using a cold-cut EVO saw. That's a practical fabrication problem worth watching: a welding cart isn't just a rolling shelf β€” the mounts have to hold heavy, top-sided equipment, route cables sensibly, and keep gas bottles secure without rattling loose. Watching someone lay out and cut those brackets shows the kind of decisions (material thickness, hole placement, weld access) that distinguish a usable cart from a wobbly hazard.

The EVO saw itself is also worth a look if you've only ever cut steel with an abrasive chop saw or angle grinder. Cold-cut metal saws produce clean, square, burr-light cuts with almost no sparks and reusable blades β€” a big quality-of-life upgrade for a home shop, and seeing one in actual use is more useful than any spec sheet.

At 144 subscribers, this is a small builder documenting a real project rather than producing polished tutorial content, so expect rough edges β€” but the fabrication itself is genuine.

Why watch: A real-world look at fabricating welder and plasma cutter mounts for a shop cart, with a cold-cut EVO saw doing the heavy lifting.

All newsletters