Daily Digest — 2026-06-10

26 newsletters today.

In this digest


Abandoned Futures

The Hawker Siddeley P.1154: The Supersonic Harrier That Britain Built on Paper, Funded for Five Years, and Cancelled Two Months Before First Flight

2026-06-10

In February 1965, the new Labour government cancelled the Hawker Siddeley P.1154 — a Mach 1.7 vectored-thrust VTOL strike fighter that was, by every metric that mattered, the aircraft the F-35B would eventually try to be. Forty-five years later. With a vastly more expensive engine. And without the elegance.

The P.1154 grew out of NATO's 1961 NBMR-3 specification, which demanded a supersonic VTOL strike fighter that could disperse to forest clearings and bombed-out runways. Hawker's chief designer Sir Sydney Camm and engine man Stanley Hooker at Bristol Siddeley took the same vectored-thrust trick that powered the subsonic P.1127 (later the Harrier) and scaled it brutally upward. The engine — the BS.100 — was a 33,000 lb-thrust vectored turbofan with plenum chamber burning: raw fuel injected into the cool front nozzles and ignited, boosting thrust roughly 50% for the supersonic dash. Four swiveling nozzles, no separate lift engines, no auxiliary fans, no clutches. Just one engine doing every job.

The NBMR-3 competition was won by the P.1154 in 1962. NATO promptly refused to standardize on it because France wanted its own Mirage III-V. Britain pressed on anyway, funding a joint RAF strike version and a Royal Navy fleet defense variant. Then the Navy walked away in 1964 over thrust margins on a hot day in the Indian Ocean and bought F-4 Phantoms instead. The RAF version survived another year. The first prototype was 80% complete at Kingston when Defence Secretary Denis Healey killed it on 2 February 1965, citing cost and the Phantom's availability. Britain bought F-4s and developed the subsonic Harrier as a consolation. The supersonic vectored-thrust fighter would not fly anywhere in the world until the F-35B in 2008.

Why modern technology makes it viable now:

  • Plenum chamber burning is no longer exotic. Modern FADEC, ceramic matrix composite combustor liners, and active clearance control solve the 1960s nightmares of thermal distortion and nozzle erosion that frightened Bristol engineers. Rolls-Royce has run vectored-thrust testbeds on the Pegasus successor lineage continuously since.
  • Carbon-fiber airframes eliminate the weight-growth spiral that ate the P.1154's margin. The original design was aluminum and titanium; a modern equivalent would be 30% lighter for the same structural job, restoring the vertical-takeoff bringback that doomed the Navy variant.
  • The F-35B proved the concept and the customer. Lockheed's LiftSystem uses a 27,000-lb shaft-driven fan plus a swiveling rear nozzle — a Rube Goldberg solution costing ~$135M per aircraft. A single-engine vectored design with PCB has fewer moving parts, no driveshaft, no clutch, no lift-fan doors. The thermal signature on deck is the only real disadvantage, and modern deck coatings already handle it.
  • Digital flight control ends the transition-regime instabilities that killed three test pilots in early Harrier development. The P.1154's mechanical reaction-control system was its hardest engineering problem; today it's a software task.

The P.1154 was not a fantasy. It had an engine on a test stand, an airframe on jigs, NATO competition wins, and signed contracts. Britain spent £21 million (roughly £500M today) developing it and threw the lot away for a Phantom buy that cost more per aircraft than the P.1154 would have. The aircraft we built instead — the Harrier — became a legend by being subsonic. Imagine what the supersonic one would have been.

Key Takeaway: Britain solved single-engine supersonic vectored-thrust VTOL on paper in 1962, killed it in 1965, and the world waited 43 years for a clumsier, costlier American version to do the same job.

ArXiv Paper Digest

Revisiting "Cooler is Better": ITD-Aware Per-CPU Thermal Optimization for Sustainable Data Center Operation

2026-06-10

Authors: Jason Crop, Hayden Moore, Sudeep Pasricha

ArXiv: 2606.11163v1

PDF: Download PDF

For decades, data center operators have lived by a simple rule: cooler chips are more efficient chips. Crank up the AC, blast cold air across the servers, and you'll save power because cooler transistors leak less current. This intuition shaped billions of dollars worth of cooling infrastructure. This paper says that rule is now wrong for modern low-voltage CPUs — and acting on the outdated assumption is quietly wasting energy at exactly the moment when AI workloads are pushing data centers toward grid-level power limits.

The villain here is a phenomenon called inverse temperature dependence (ITD). In older chips running at higher voltages, transistors got slower as they heated up, so cooling helped them run faster and use less power. But modern CPUs operate at very low supply voltages to save energy, and at those voltages the physics flips: transistors actually get slower when they're cold. To keep performance up, the chip has to raise its supply voltage when it's running cool. And since power scales roughly with the square of voltage, that voltage bump can wipe out the savings you got from reducing leakage.

The result is a non-monotonic curve for performance-per-watt. Instead of "colder = better forever," efficiency now peaks at some intermediate temperature — neither hot nor cold, but a sweet spot somewhere in the middle. Run too cold, and you waste power on overcooling plus a forced voltage hike. Run too hot, and leakage current dominates. The optimum sits in between, and crucially, it's different for every individual chip because of manufacturing variation.

The authors propose a per-CPU thermal optimization scheme that:

  • Characterizes each CPU's own ITD curve to find its personal efficiency sweet spot
  • Adjusts cooling targets at the individual server level, rather than blasting an entire room to a single temperature
  • Lets some chips run warmer than convention would allow, because warmer is genuinely cheaper for them

The practical upshot: data centers could meaningfully cut both compute power and cooling power simultaneously, without buying new hardware. They just need to stop chasing "as cold as possible" and start tuning each chip to its actual physics.

Why it matters: As AI workloads push data centers against grid power limits, this work shows that a decades-old cooling assumption is now leaving real efficiency on the table — and the fix is software and policy, not new silicon.

Daily Automotive Engines

Turbocharger Compressor Wheel Tip Clearance: The Tiny Gap That Costs Big Power

2026-06-10

The compressor wheel spins inside a precisely machined housing, and the gap between the wheel's blade tips and the housing wall — called tip clearance — is one of the most performance-sensitive dimensions in the entire turbo. Too tight, and the wheel will rub itself to destruction during thermal expansion or shaft float. Too loose, and compressed air leaks back over the blade tips from the high-pressure exducer side to the low-pressure inducer side, killing efficiency.

This back-leakage is called tip leakage flow, and it's a parasitic loss that scales badly. The pressure differential across each blade tip drives air through the gap as a swirling vortex, which then collides with the next blade's working flow, generating turbulence and heat. The energy used to compress that escaped air is simply wasted, showing up as higher compressor outlet temperatures for the same pressure ratio.

Rule of thumb: Every 1% increase in tip clearance as a percentage of blade height costs roughly 1.5% in compressor efficiency. On a typical 60mm wheel with 15mm blade height, going from 0.3mm clearance (2% of blade height) to 0.6mm clearance (4%) drops efficiency by about 3 points — say from 76% to 73%. That sounds small until you realize a 3-point efficiency drop at 25 psi means roughly 40°F higher charge temperature, which costs power and increases knock risk.

Real-world example: Garrett's GTX Gen II series uses a contoured shroud insert that follows the blade tip profile within roughly 0.25mm across the entire blade length, versus older designs that had 0.5-0.7mm clearance at the exducer. This single change accounts for a meaningful chunk of the 2-3 point efficiency gain over the previous generation.

Tip clearance grows over the turbo's life from several mechanisms:

  • Thermal cycling — the aluminum wheel and housing expand at different rates, and repeated heat cycles can permanently distort the housing
  • Shaft float — worn journal bearings let the wheel wobble axially and radially, requiring more design clearance to avoid contact
  • Compressor surge events — repeated reverse-flow impacts can erode the leading edge of blades
  • Debris ingestion — even a single grain of sand can score the housing wall and create localized high-clearance zones

Performance builders sometimes have housings abradable-coated with a soft epoxy or thermally sprayed material. The wheel cuts its own perfect clearance into this coating during break-in, achieving tighter running clearances than would be safe with hard-on-hard contact. This trick comes straight from aviation gas turbine practice.

See it in action: Check out Resolving issues with a too small gap between pads on your hydraulic disc brake! #bicyclerepair by Cycle Maintenance Academy to see this theory applied.
Key Takeaway: The fraction-of-a-millimeter gap between compressor wheel tips and housing is a brutal efficiency tradeoff — too tight causes destruction, too loose lets boost leak back over the blades and bleeds 1.5% efficiency per 1% of blade height.

Daily Debugging Puzzle

C's strncpy Trap: The "Safe" Function That Forgets the Null Terminator

2026-06-10

This function stores a player record from a network packet. The fixed-size field guarantees no overflow, right?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define USER_LEN 16

typedef struct {
    char username[USER_LEN];
    int  score;
} Player;

Player *make_player(const char *name, int score) {
    Player *p = malloc(sizeof(Player));
    strncpy(p->username, name, USER_LEN);  // "safe" copy
    p->score = score;
    return p;
}

void print_leaderboard(Player **players, int n) {
    for (int i = 0; i < n; i++) {
        printf("#%d: %s (%d)\n",
               i + 1, players[i]->username, players[i]->score);
    }
}

Tests pass: short names print fine, long names don't smash the stack. Ship it. Then production logs start spewing garbage usernames like "alexanderthegre\x2a\x00\x00\x00", and one customer's score appears glued onto their name.

The Bug

Everyone "knows" strncpy is the safe version of strcpy. Everyone is wrong. Read the spec carefully:

  • If strlen(src) < n: strncpy copies the string and pads the remaining bytes with zeros. (Wasteful, but harmless.)
  • If strlen(src) >= n: strncpy copies exactly n bytes and writes no null terminator at all.

So when name is "alexanderthegreat" (17 chars), the 16-byte username field is filled but contains no \0. The next printf("%s", ...) happily walks past the array, straight into the score field, then into whatever heap metadata or adjacent allocation follows. On a little-endian machine, a score of 42 (0x2A 00 00 00) gets printed as the suffix "*" plus three nulls — exactly the symptom above. With a non-trivial score, you get arbitrary memory leakage. With no nearby null, you get a crash or a security disclosure.

strncpy was never designed for C strings. It was designed in the 1970s for fixed-width, unterminated directory entries in early Unix filesystems. The null-padding behavior is for that use case, not yours. Using it as a "bounded strcpy" is a category error.

The Fix

Always force-terminate, or use a function designed for strings:

// Option 1: terminate explicitly
strncpy(p->username, name, USER_LEN - 1);
p->username[USER_LEN - 1] = '\0';

// Option 2: snprintf (truncates and always terminates)
snprintf(p->username, USER_LEN, "%s", name);

// Option 3: strlcpy if available (BSD, glibc 2.38+)
strlcpy(p->username, name, USER_LEN);

snprintf is portable, always null-terminates, and signals truncation through its return value (which is the length it would have written). strlcpy is cleaner but not universal. Either is correct; strncpy for a C string is not.

Related landmines worth knowing: strncat takes "max bytes to append", not buffer size — almost always misused. And strndup does null-terminate, despite the similar name. The strn* family is a museum of inconsistent decisions; check the man page every single time.

Key Takeaway: strncpy is not "safe strcpy" — when the source meets or exceeds the limit it leaves the destination unterminated, so use snprintf or strlcpy when you actually want a bounded C-string copy.

Daily Digital Circuits

Bloom Filters in Hardware: How Network Switches Check Set Membership in One Cycle

2026-06-10

A Bloom filter is a probabilistic data structure that answers "is X in this set?" with two possible answers: definitely not, or probably yes. In software it's clever; in hardware it's transformative, because it replaces a multi-cycle hash table lookup with a fixed-latency lookup that always completes in one clock — perfect for line-rate packet processing.

The structure is a bit array of m bits and k independent hash functions. To insert element X, you compute h₁(X), h₂(X), … hₖ(X), each producing an index into the array, and set those bits to 1. To query, you compute the same k hashes and AND the bits at those indices. If any bit is 0, X was never inserted — guaranteed. If all bits are 1, X is probably in the set, but other insertions may have collectively set those bits (a false positive).

Hardware loves this for three reasons. First, the k hash lookups are independent, so you instantiate k parallel SRAM read ports (or k banks of single-port SRAM) and read all k bits simultaneously in one cycle. Second, hash functions for Bloom filters can be cheap — a few XOR trees over the input bits, often built from CRC polynomials you already have. Third, no collision resolution logic is needed: there are no chains, no rehashing, no probe sequences. Just read, AND, done.

Real-world example: Cisco's high-end switches use Bloom filters in front of their MAC address tables. A packet arrives, the destination MAC hits the Bloom filter, and if the answer is "definitely not in our forwarding table," the switch immediately floods or drops without ever touching the expensive ternary CAM. The Bloom filter sits in a small on-chip SRAM and runs at full line rate (often >1 billion lookups/second). Only the ~1% of packets that pass the filter trigger the slower, power-hungry CAM lookup. Intel's DPDK and many DDoS-mitigation ASICs use the same trick to filter blocklisted IPs.

The sizing rule of thumb: for n inserted elements and target false positive rate p, you need m = -n·ln(p)/(ln 2)² bits and k = (m/n)·ln 2 hash functions. For n=10,000 entries and p=1%, that's ~96,000 bits (12 KB of SRAM) and k≈7 hashes. Halve p to 0.5%, and m only grows by ~15% — false positives drop exponentially per bit added.

The catch: you can't delete. Clearing bits would corrupt other entries that share them. Hardware fixes this with counting Bloom filters (replace each bit with a 4-bit saturating counter) at 4× the memory cost, or by maintaining two filters and swapping them periodically.

See it in action: Check out Oculus Quest 2 - Super Secret Setting by Valty to see this theory applied.
Key Takeaway: Bloom filters give hardware a one-cycle, fixed-latency "definitely not in set" answer that lets expensive CAM and TCAM lookups skip 99% of their work.

Daily Electrical Circuits

Reverse Polarity Protection: P-Channel MOSFETs vs Series Diodes

2026-06-10

Connect a battery backwards and you can fry an entire board in milliseconds. The classic fix is a series Schottky diode, but at any meaningful current it bleeds voltage and dissipates real heat. The modern fix is a P-channel MOSFET configured as an ideal diode. It conducts in the right direction with only a few milliohms of resistance and blocks reverse current cold.

The wiring is counterintuitive at first. You put the PMOS in the positive supply line with its source toward the load and drain toward the battery — backwards from how you'd instinctively draw it. The gate ties to ground (battery negative) through a resistor, typically 10 kΩ to 100 kΩ, with a Zener clamp (e.g., 12 V) from gate to source to protect Vgs.

Why this works: When the battery is connected correctly, the body diode conducts first, pulling the source up near V+. The gate sits at 0 V, so Vgs = −V+, which turns the PMOS fully on. Current then flows through the low-Rds(on) channel, bypassing the body diode. When the battery is reversed, V+ goes negative, Vgs goes positive, and the FET stays off. The body diode is also reverse-biased — nothing flows.

Concrete example: A 12 V, 3 A robotics board. A series Schottky (SS34, Vf ≈ 0.4 V) drops 0.4 × 3 = 1.2 W and loses you nearly a volt. A SUP75P03-07 PMOS with Rds(on) = 7 mΩ at Vgs = −10 V dissipates I²R = 9 × 0.007 = 63 mW. Twenty times more efficient and the load sees the full battery voltage.

Rule of thumb for FET selection:

  • Vds rating ≥ 2× your supply voltage (reverse connection puts full battery across the FET)
  • Vgs(th) well below your minimum operating voltage — a "logic level" PMOS turns on by ~2.5 V, but you want Vgs ≥ 4 V for low Rds(on)
  • Continuous Id ≥ 1.5× your max load current, with thermal headroom
  • Add the gate Zener if your supply could ever exceed ±20 V — Vgs is the most fragile parameter on a MOSFET

Gotcha: If your load has bulk capacitance, the body diode will charge it before the FET turns on. That's usually fine, but during a brief reverse-then-forward connection bounce, the cap can momentarily reverse-bias the FET while charged. For mission-critical designs, add a TVS across the input.

See it in action: Check out How to protect circuits from reversed voltage polarity! by Afrotechmods to see this theory applied.
Key Takeaway: A P-channel MOSFET with its source toward the load and gate tied to ground gives you reverse polarity protection with a fraction of the voltage drop and heat of a series diode.

Daily Engineering Lesson

Centrifugal Casting: Spinning Molten Metal into Defect-Free Cylinders

2026-06-10

Centrifugal casting pours molten metal into a rotating mold and lets centripetal acceleration do what gravity can't: pack the metal against the mold wall, force impurities inward, and produce hollow cylindrical parts with no core. The mold spins at 300–3,000 RPM depending on diameter, generating 60–100 G's of effective gravity at the bore.

Why spin instead of pour? In a static mold, gas bubbles, slag, and oxides get trapped randomly throughout the casting. Under high G-load, density wins: dense iron flings outward against the mold, while lighter impurities (sulfides, dross, gas) migrate to the inner surface. That inner layer is later machined away, leaving a clean, dense bore. The outer surface has near-forging grain density with no shrinkage porosity.

Three flavors:

  • True centrifugal: horizontal axis, no core. Used for pipes, cylinder liners, gun barrels, bearing sleeves. Wall thickness is set by the volume of metal poured, not by tooling.
  • Semi-centrifugal: vertical axis with a central core. Used for symmetric parts like wheels, pulleys, flywheels — the spin densifies the rim where stress concentrates.
  • Centrifuging: multiple part cavities arranged radially around a central sprue. Spin forces metal outward into each cavity, filling intricate shapes (jewelry, dental crowns, turbine blades) that wouldn't fill under gravity alone.

Real-world example: ductile iron sewer and water pipe up to 60" diameter is almost exclusively centrifugally cast. A 36" pipe spins around 400 RPM in a water-cooled steel mold; the cast pipe is ejected in under two minutes and the mold immediately reused. The process produces 20-foot lengths with wall tolerance under 1/16" and a microstructure that handles 350 psi working pressure with no welds or seams.

Rule of thumb — the G-factor: centripetal acceleration at the bore should be 60–75 G's for sound iron castings, higher for thinner walls. Calculate as:

G = (RPM/30)² × r / g, where r is bore radius in meters, g = 9.81 m/s².

For a 0.3 m radius bore at 500 RPM: G = (16.67)² × 0.3 / 9.81 ≈ 8.5 — too low. Bump to 1,500 RPM: G ≈ 76. That's why small-diameter parts spin faster than big ones.

Limits: only axisymmetric shapes, only the outer profile is precise (inner bore needs machining), and unequal density alloys can segregate — high-tin bronze bearings sometimes show tin-rich inner zones that hurt fatigue life if not managed with cooling rate.

See it in action: Check out Pouring Molten Aluminum into the Mold #aluminium #machinery #metal #aluminum by Dmitriy the Chief to see this theory applied.
Key Takeaway: Centrifugal casting uses spin-induced G-loads to produce dense, defect-free hollow cylinders by flinging metal outward and forcing impurities inward where they can be machined away.

Forgotten Books

"Meat Is Not Needed": A 1918 Cookbook Quietly Endorses the Meatless Meal

2026-06-10

Book: Woman's Institute Library of Cookery, Vol. 2: Milk, Butter, and Cheese; Eggs; Vegetables by Woman's Institute of Domestic Arts and Sciences (1923)

Read it: Internet Archive

Tucked into the preface of a 1923 cookbook — a reprint of 1918 material — is a sentence so casually radical for its time that it's easy to miss. The Woman's Institute, a correspondence school in Scranton, Pennsylvania that taught domestic sciences to women by mail, included this aside in its second volume:

"A luncheon menu, in which a cheese dish is substituted for meat, is of interest in this connection, for it shows the housewife, early in her studies, not only how to combine dishes to produce a balanced meal, but also how to make up a menu in which meat is not needed."

"In which meat is not needed." Read that again. This was written when the average American ate beef as a moral duty, when "vegetarianism" was a fringe term associated with Seventh-day Adventists, John Harvey Kellogg's Battle Creek sanitarium, and assorted utopians. Yet here is a mainstream cookbook — sold to bourgeois housewives by the tens of thousands — teaching them that protein arithmetic could be solved without an animal on the plate.

The context matters. The original copyright is 1918, which means this lesson was written during the tail end of World War I, when Herbert Hoover's U.S. Food Administration was running propaganda campaigns urging Americans to observe "Meatless Mondays" and "Wheatless Wednesdays" so that grain and beef could be shipped to Europe. The Woman's Institute was riding that cultural wave — but doing something quieter and more durable than a wartime poster. They were teaching the underlying nutritional logic: that protein is protein, that a meal's balance is what counts, and that the cow is one delivery vehicle among several.

The science was sound, if a bit ahead of its formal articulation. The concept of "complete protein" wasn't named until Thomas Burr Osborne and Lafayette Mendel's amino-acid research crystallized in the 1910s-1920s. Dairy proteins (casein, whey) are indeed complete, containing all essential amino acids — a fact the Woman's Institute apparently grasped well enough to teach housewives to swap a cheese soufflé for a chop without nutritional guilt.

Compare this to the trajectory that followed:

  • 1944: The Vegan Society is founded in Britain, coining the word.
  • 1971: Frances Moore Lappé's Diet for a Small Planet popularizes the idea that you can build a balanced meal without meat — and is treated as a counterculture revelation.
  • 2003: Johns Hopkins revives "Meatless Monday" as a public health campaign, as if reinventing the idea.

The Woman's Institute had quietly mailed the concept to housewives' kitchens fifty-five years before Lappé, and they did it without ideology — no environmental sermon, no animal-welfare appeal, no health-food earnestness. Just the matter-of-fact observation that if you understood what was on the plate, you didn't need to put meat on it.

The forgotten claim: A mainstream 1918 American cookbook taught housewives that cheese could replace meat in a balanced meal — half a century before the idea was rediscovered as countercultural nutrition.

Forgotten Darkroom

The 1968 Byproducts That Quietly Became the Backbone of Solar Power

2026-06-10

Book: CIA Reading Room cia-rdp88-01314r000100660028-3: INTERNATIONAL NICKEL by CIA Reading Room (1968)

Read it: Internet Archive

Tucked into the masthead of a glossy 1968 corporate magazine — one obscure enough that the CIA archived a copy — is a single sentence that reads, today, like a prophecy hiding in plain sight:

"The International Nickel Company, Inc. is the U.S. affiliate of The International Nickel Company of Canada, Limited—producer of Inco Nickel, Copper, Cobalt, Iron Ore, Tellurium, Selenium, Sulphur, and Platinum, Palladium and other Precious Metals."

This was INTERNATIONAL NICKEL MAGAZINE 1968/4, a house organ published by Inco — then one of the largest mining conglomerates on Earth — featuring articles like Bruce Hutchison's "TRUDEAU!" and Robert L. Caleo's "RUN THE BLOCKADE." The cover, the editors proudly explain, was an "assemblago" by graphic designer Abe Gurvin: a collage of materials "representative of and indigenous to the situations represented."

The forgotten knowledge isn't in the articles. It's in that boilerplate list of metals.

In 1968, tellurium and selenium were industrial afterthoughts — recovered from the anode slimes left over when Inco refined copper and nickel at its Sudbury, Ontario operations. Selenium got used in xerography drums (the photocopier was its big customer) and red glass. Tellurium went into steel as a free-machining additive and into vulcanized rubber. Both were so minor that mining companies couldn't be bothered to produce them on purpose — you only got them by mining nickel and copper for something else.

Fast-forward sixty years. Cadmium telluride solar panels are now the second-most-deployed photovoltaic technology on the planet. First Solar, a single American company, consumes a sizable fraction of global tellurium supply. Selenium is the "Se" in CIGS solar cells (copper indium gallium selenide) and is essential to many semiconductors. Both metals are now considered strategic materials — the U.S. Department of Energy lists tellurium on its critical-minerals watchlist precisely because supply is so thin and so dependent on copper-refining byproduct streams.

Inco, listing these metals casually alongside iron ore, had no idea it was sitting on the feedstock for a clean-energy revolution. The company eventually merged into Vale in 2006. Meanwhile, the question of where tellurium comes from has become a geopolitical concern serious enough to drive Department of Defense stockpiling studies.

There's a deeper lesson here. The CIA was watching International Nickel because of cobalt and nickel — Cold War alloy metals for jet engines and armor. Nobody in 1968 was tracking tellurium. The strategic metal of 2026 was, in 1968, literal sludge skimmed off the bottom of a copper refining tank.

If you want to know what the critical material of 2086 will be, the answer is probably already listed somewhere — buried in a boilerplate paragraph, beneath the magazine's cover story.

The forgotten claim: The tellurium and selenium that power today's solar panels and semiconductors were once industrial byproducts so minor that mining companies casually listed them at the tail end of their product catalogs.

Forgotten Patent

Granville Woods's "Induction Telegraph System": The 1887 Patent That Let Moving Trains Talk to the World — and Foreshadowed Cellular Handoff

2026-06-10

In the 1880s, American railroads had a deadly problem: once a train left the station, it vanished. Dispatchers had no way to warn engineers about a stopped train ahead, a washed-out bridge, or another locomotive approaching on the same track. Telegraph wires ran alongside the rails, but the trains themselves were electronically silent — a hurtling, blind mass of iron.

Granville T. Woods, a self-taught Black inventor from Columbus, Ohio, fixed this with one of the most audacious patents of the 19th century. On November 29, 1887, the U.S. Patent Office granted him US 373,915, the "Induction Telegraph System" — a way for moving trains to send and receive messages without ever touching a wire.

The trick was electromagnetic induction. Woods strung a long telegraph conductor along the rail bed and mounted a flat coil on the underside of the train car. Current pulsed through the trackside wire created a magnetic field; the train's coil — riding inches above it — picked the field up by induction and converted it back into a telegraph signal. The system worked in reverse, too: a key tapped inside the moving car could induce a signal back into the trackside wire, where standard Morse equipment at any station along the line would receive it.

No brushes. No third rail. No physical contact. Just two coils coupling through air at thirty miles an hour.

Woods was not unknown — he held nearly 60 patents and had already beaten Thomas Edison in two interference proceedings over priority. Edison even tried to hire him; Woods declined and stayed independent. But the Induction Telegraph was his masterpiece. Within a few years, railroads on both sides of the Atlantic were licensing variations of it, and the basic concept — wireless messaging to and from a vehicle in motion — would not be matched commercially for another forty years.

The modern echo is uncanny. What Woods built is, structurally, the ancestor of three different 21st-century technologies:

  • Cellular handoff. Woods's trackside wire was divided into segments, each connected to its own station. As the train rolled from one segment to the next, it seamlessly began coupling with the new section's coil — the same principle modern cell towers use to hand a moving phone from one base station to another without dropping the call. He patented the geometry of cellular coverage 86 years before Martin Cooper's first mobile call.
  • GSM-R and ETCS. Today's European Rail Traffic Management System uses dedicated radio channels to do exactly what Woods's system did — continuous train-to-dispatcher signaling to prevent collisions. The frequencies have changed; the architectural problem has not.
  • Inductive wireless power and RFID. The trackside-coil / vehicle-coil pairing is the same coupling now used by wireless EV chargers (think Qi pads scaled up to 200 kW) and by passive RFID readers at toll booths and warehouse doors.

Could it be built better now? It already has been — South Korea's OLEV (Online Electric Vehicle) buses inductively charge from coils buried in the roadway as they drive, a direct mechanical descendant of US 373,915. The only thing Woods lacked was the semiconductor to demodulate kilohertz signals cleanly. Give him a $0.20 microcontroller and he would have built LTE.

Key Takeaway: Granville Woods's 1887 Induction Telegraph solved the moving-vehicle-communication problem with sectionalized trackside coils and onboard pickup — the same architecture that, a century later, became cellular handoff, modern train signaling, and inductive wireless power.

Daily GitHub Zero Stars

gitrcr/terraform-azure

2026-06-10

This repo is a ready-to-deploy Terraform scaffold for Azure lab environments, designed to spin up three environments (typically dev/staging/prod) across two geographic sites. If you've ever needed to mock up a realistic multi-region Azure topology for testing, training, or a proof-of-concept — and groaned at the thought of writing all the boilerplate yourself — this is the kind of starter kit that saves an afternoon.

What makes it interesting:

  • Opinionated lab structure. Most public Terraform-Azure examples are either single-resource snippets or sprawling enterprise modules. A focused "3 environments × 2 sites" template hits a sweet spot for learners and consultants who need a realistic-but-bounded sandbox.
  • HCL all the way down. Pure Terraform with no Bicep, ARM, or Pulumi mixing — useful for people who want to study idiomatic Azure provider usage without context-switching.
  • "Deploy fast" framing. The author is clearly optimizing for time-to-running-lab, which suggests sensible defaults and minimal variable juggling. Good template material to fork and customize.

Who might find this useful:

  • Cloud engineers studying for AZ-104 or AZ-305 who need hands-on multi-region scenarios without paying for a course lab.
  • Consultants and trainers who repeatedly spin up demo environments and want a reusable baseline.
  • Terraform learners looking at a real (if small) project to understand workspace patterns, provider configuration, and how to structure environment separation.
  • Folks building DR/failover demos — the two-site setup naturally lends itself to geo-redundancy experiments.

The catch: with no README detail surfaced and zero stars, you'll want to read the HCL before terraform apply to understand exactly what gets provisioned and what it'll cost. Lab templates can quietly include expensive resources (App Gateways, AKS clusters) that bite if left running.

Why check it out: A compact, opinionated Terraform template that gets you from zero to a multi-environment, multi-site Azure lab in minutes — perfect for studying, demos, or as a fork-and-customize starting point.

Daily Hardware Architecture

The Store Buffer's Coalescing Logic: How CPUs Merge Multiple Stores to the Same Cache Line Before They Hit Memory

2026-06-10

You write a struct field by field. Eight separate stores, eight separate cache line writes? Not even close. The store buffer's coalescing logic watches for stores that target the same cache line and merges them into a single write before they leave the core. The cache hierarchy never sees your eight stores — it sees one.

Here's the mechanism. Each store buffer entry holds an address, a value, and a byte mask telling which bytes within the cache line are valid. When a new store retires, the buffer checks if a pending entry already covers the same line. If yes and the entry hasn't drained yet, the new bytes get ORed into the existing entry's mask and the value gets merged. The original entry stays; no new slot is allocated.

This matters in three places:

  • Write-combining (WC) memory — used for framebuffers, GPU command rings, NVMe submission queues. WC memory requires coalescing to perform well. A 64-byte AVX-512 store that hits a WC buffer entry can merge with the next store and issue as a single PCIe transaction instead of two.
  • Normal write-back (WB) memory — coalescing reduces L1 write port pressure. Intel's store buffer can merge adjacent stores even on cacheable memory, which is why a tight loop doing arr[i] = a; arr[i+1] = b; doesn't double your L1 write traffic.
  • Memory ordering fencessfence and mfence flush the buffer, which means they end the coalescing window. A fence in the middle of your struct initialization can turn one cache line write into eight.

Concrete example: Initializing a 64-byte ring buffer descriptor with 8 individual mov [rdi+offset], reg instructions. Without coalescing: 8 store buffer entries → 8 L1 writes (or 8 PCIe transactions on WC memory). With coalescing: 1 entry → 1 write. On a Xeon with 56-entry store buffer and a slow PCIe path, this is the difference between 2M descriptors/sec and 250K.

Rule of thumb: Stores within ~12 cycles of each other to the same 64-byte line will almost always coalesce. Beyond ~50 cycles, the entry has likely drained. Cluster your stores to the same line together, and never put a fence in the middle.

The non-obvious failure mode: stores that partially overlap a pending entry can prevent coalescing entirely on some microarchitectures — the buffer punts to ordering rules and allocates a new entry. Always write whole-byte-aligned values when possible.

Key Takeaway: The store buffer secretly merges back-to-back stores to the same cache line into a single write — cluster your stores tightly and keep fences out of the middle to keep coalescing alive.

Hacker News Deep Cuts

An autopsy of Claude Code's deep research

2026-06-10

Most writing about agentic coding tools falls into two camps: breathless demos that skip the failure modes, or dismissive takes that never engage with what actually works. An "autopsy" framing promises the third thing — a careful post-mortem of how Claude Code performs when pushed into deep research territory, written by people at Steel (a browser-infrastructure-for-agents company who have skin in the game on agent reliability).

Based on the title and source, the piece almost certainly digs into:

  • Where the agent loop breaks down on multi-hour research tasks — context window exhaustion, tool-call drift, the moment when the agent stops verifying claims and starts confabulating sources.
  • The gap between "coding agent" and "research agent". Claude Code is optimized for filesystem + shell + edit loops. Asking it to do deep web research stresses different muscles: source triangulation, citation hygiene, knowing when to stop searching. The autopsy framing suggests the author found specific failure modes worth naming.
  • Browser tooling and sandboxing — Steel's whole product is giving agents a real browser, so expect concrete observations about what headless fetching misses vs. a full browser session, and how Claude Code's default web tools compare.
  • Token economics and planning horizon. Deep research burns tokens fast. There's likely a discussion of how much compute it took, and whether the output justified the spend.

Why this matters for a technical audience: every team currently evaluating "should we build on top of Claude Code or roll our own agent harness?" is making this decision with vibes, not data. A detailed write-up of where a popular agent harness actually breaks on a non-trivial task is exactly the kind of artifact that helps people choose. It also lands at a moment when "deep research" has become a marketing term across every frontier lab's product line — independent evaluations are scarce and valuable.

The post-mortem genre is underrated in this space. We get plenty of launch posts and benchmark charts, but very little patient analysis of why a long-horizon run went sideways. Those are the writeups that change how practitioners build.

Why it deserves more upvotes: Honest failure analyses of agent harnesses on long-horizon tasks are rare and disproportionately useful to anyone building on top of Claude Code.

HN Jobs Teardown

Opsani: What Their Hiring Reveals

2026-06-10

Source: HN Who is Hiring

Posted by: asmyers1793

Opsani is the most strategically revealing posting in this batch because the company itself is a bet on a very specific thesis: that cloud infrastructure tuning is too complex for humans to do well, and ML can do it better. Everything in the posting follows from that thesis.

The stack tells the story. They pair Angular + TypeScript on the frontend with a Python backend running Keras and TensorFlow. That's not a generic "we use ML" stack — Keras over a Python service layer is the classic 2018–2020 production ML pattern, predating the PyTorch dominance that came later. The Angular choice is also telling: it suggests an enterprise sales motion (Angular skews toward teams selling to IT buyers, not consumer-facing startups, which by this point had largely moved to React).

Stage signals. Series A from Redpoint and Costanoa is a strong signal — Costanoa specifically targets enterprise infra and applied ML. "All Roles" combined with "All remote for now" (the posting is from the COVID-era March 2020 thread) means they're scaling broadly but reactively shifting work-from-home policy. Companies that say "all remote for now" rather than "remote-first" are typically office-default cultures that haven't yet decided what comes after.

What's interesting about the pitch. The product is meta: it's DevOps for DevOps. They sell "continuous cloud optimization" — basically autoscaling and config tuning driven by reinforcement learning. This is a hard problem because:

  • The feedback loop requires actually touching customer production environments, which is a massive trust ask for a Series A.
  • The savings have to clearly exceed the SaaS fee, which makes pricing transparency unavoidable.
  • It competes with cloud providers' own native optimization tools (AWS Compute Optimizer launched late 2019).

Green flags: Specific stack disclosure (no buzzword soup), named investors, mention of Agile/DevOps discipline rather than vague "fast-paced" language, and explicit care about "high-quality codebase" — that phrasing usually comes from engineering-led founding teams.

Red flags: The posting is truncated mid-sentence ("All this is in D…") which suggests rushed submission. "All Roles" is also concerning at Series A — it implies either explosive growth or a gap-filling scramble. And the ML stack here is doing a lot of marketing work; Keras/TF for an optimization problem is plausible but not obviously the right tool versus, say, Bayesian optimization libraries.

The signal: Series A "AI-for-infrastructure" companies in 2020 were betting that enterprises would let ML touch production — a trust gradient that has taken the entire decade to actually negotiate.

Daily Low-Level Programming

Self-Modifying Code and the SMC Detection Pipeline: Why Writing to Your Own Instructions Costs Thousands of Cycles

2026-06-10

The x86 architecture guarantees that if you write a byte to memory and then execute that byte as an instruction, the CPU sees the new value. This sounds trivial. It is not. The CPU has already fetched, decoded, and possibly speculatively executed instructions hundreds of bytes ahead of the program counter — and any of those bytes might be the ones you just wrote.

To preserve the architectural illusion, every store address is checked against the addresses of in-flight instructions. The mechanism is called self-modifying code (SMC) detection, and it lives in the front-end. When a store retires (or sometimes when it dispatches) the physical address is compared against the addresses of instructions currently in the pipeline, the µop cache, and the L1 instruction cache lines being tracked for execution.

If a collision is detected, the CPU performs a machine clear: flush the pipeline, invalidate the µop cache (or at least the affected entries), and refetch from the new program counter. On Intel cores this costs roughly 1000–3000 cycles per event. It happens regardless of whether the modified instruction was going to execute.

Concrete example: A JIT compiler emits machine code into a buffer, then jumps to it. The naive pattern — emit, jump, emit more, jump — triggers SMC clears on every emit. V8 and HotSpot mitigate this by emitting code into a fresh page that is not in the I-cache, then issuing the necessary cross-modifying sequence (store, serializing instruction like CPUID or a far jump on older CPUs, execute). On modern x86 the serializing barrier isn't required for the writing thread, but another thread executing the modified code needs a serializing instruction after the writer's store becomes visible — see Intel SDM Vol. 3, section 8.1.3.

A subtler trap: code prefetch. The hardware prefetcher reads the next cache line of instructions speculatively. If your data write hits a line the I-prefetcher already pulled, you eat the clear even though no instruction from that line ever executed. This is why hot data structures placed near hot code — common in template-heavy C++ binaries — sometimes show mysterious SMC events in perf stat -e machine_clears.smc.

Rule of thumb: Keep writable data on pages at least 4 KB away from any code that runs in the same hyperthread, and prefer to write JIT output into a separate mmap region with PROT_READ|PROT_WRITE, then mprotect to PROT_READ|PROT_EXEC. The mprotect implicitly serializes via TLB shootdown, side-stepping the SMC machinery entirely.

Check your binaries: perf stat -e machine_clears.smc ./yourprogram. Anything above a few hundred per second on a non-JIT workload means code and data share cache lines somewhere.

Key Takeaway: The CPU enforces SMC semantics by snooping every store against the instruction pipeline — colocating writable data with code triggers thousand-cycle machine clears even when nothing was actually modified.

RFC Deep Dive

RFC 8028: First-Hop Router Selection by Hosts in a Multi-Prefix Network

2026-06-10

RFC: RFC 8028

Published: 2016

Authors: F. Baker, B. Carpenter

IPv6 was designed with a serene assumption that turned out to be wrong: a host has one address per interface, and that address routes wherever it needs to go. In the real world — especially with residential multihoming, enterprise dual-WAN, and IPv6 PA (provider-aggregatable) addressing — a single interface routinely holds two or more addresses from different prefixes, each delegated by a different upstream. RFC 8028 is the small but load-bearing patch that makes this scenario actually work.

The failure mode. Imagine a laptop on Wi-Fi with two routers on the link: Router A advertises prefix 2001:db8:a::/64, Router B advertises 2001:db8:b::/64. The host autoconfigures one address from each. Both routers announce themselves as defaults. The host picks a source address using RFC 6724 (Default Address Selection) — say 2001:db8:a::1234 — and then, independently, picks a next-hop router. If it picks Router B, the packet leaves with a source address that belongs to A's network. Router B's upstream ISP applies BCP 38 ingress filtering and drops it. Black hole. The user sees "the internet works sometimes."

The fix. RFC 8028 updates Neighbor Discovery (RFC 4861) with one rule: when a host has multiple default routers and multiple source addresses, it MUST prefer a router that advertised the prefix of the chosen source address. If no such router exists, fall back to normal default router selection. The host learns which router announced which prefix from the Router Advertisement itself — the PIO (Prefix Information Option) is now a binding between router identity and source prefix, not just a hint about what to autoconfigure.

Design decisions worth noting.

  • The rule is source-address driven, not destination-driven. The application or the kernel picks the source first; routing follows. This is the inverse of how most engineers think about routing, but it's the only way the layering works without bouncing the address choice up to the application.
  • RAs gained an implicit semantic: "these prefixes are reachable via me, and packets sourced from them should come back through me." RFC 8028 doesn't change the wire format — it changes how a conforming host interprets it.
  • It explicitly does not solve destination-based routing, PvD (Provisioning Domains), or policy routing. RFC 7556 and later RFC 8801 (PvD) tackle that bigger picture. RFC 8028 is the minimum viable correctness fix.

Why this matters in 2026. Multihomed IPv6 is no longer exotic. A typical home with fiber + LTE failover, an enterprise with two ISPs and SLAAC on the user VLAN, a datacenter ToR with two upstreams — all of them hit this problem the moment a host gets addresses from both upstreams. Without RFC 8028, the symptoms are intermittent and look like packet loss, not a routing bug, which makes them maddening to debug. With it, Linux (since around kernel 4.x via net.ipv6.conf.*.accept_ra_rt_info_* and related knobs), modern Windows, and macOS quietly do the right thing.

Historical note. Fred Baker (Cisco fellow, IETF chair 1996–2001) and Brian Carpenter (IAB chair, longtime IPv6 architect) wrote this near the end of a multi-year IETF effort to retrofit IPv6 for the messy realities the original designers had hand-waved away. It's a recurring theme in the v6 saga: an elegant model meets BCP 38, NAT-free multihoming, and PA addressing, and someone has to write the RFC that says "actually, the host has to be smarter."

Why it matters: Without RFC 8028, IPv6 hosts on multi-prefix links silently black-hole half their traffic to BCP 38 filters; with it, source-address selection and next-hop selection finally agree.

Stack Overflow Unanswered

Demand paged shared memory between kernel space and user space

2026-06-10

Stack Overflow: View Question

Tags: c, linux, linux-kernel, shared-memory, demand-paging

Score: 0 | Views: 85

The asker has a working Netlink-based log pipeline from a kernel module to a userspace consumer, but wants to experiment with something faster — specifically, demand-paged shared memory where the kernel writes log records into pages that userspace maps directly. The goal is zero-copy delivery: no copy_to_user, no socket buffer round-trip, just a ring buffer in memory both sides can see.

Why is this interesting? "Shared memory between kernel and userspace" sounds simple but has several sharp edges that AI assistants tend to gloss over:

  • Allocation lifetime. Pages exposed to userspace must remain valid for the lifetime of the mapping. If the module is unloaded while userspace still holds the mapping, you get a use-after-free that crashes the kernel. You need a struct vm_operations_struct with proper open/close refcounting, or pin the module via try_module_get.
  • Demand paging vs. pre-allocation. True demand paging means installing a .fault handler in vm_operations_struct. The handler allocates a page on first access (via alloc_page or vmalloc_to_page if backed by vmalloc) and returns it. This is what remap_pfn_range avoids by mapping everything up front.
  • Synchronization without syscalls. The whole point of shared memory is avoiding the context switch, but you still need wakeup when the ring goes from empty to non-empty. io_uring-style: keep producer/consumer indices in the shared region with smp_store_release/smp_load_acquire, and fall back to an eventfd or poll() on the chardev only when the consumer needs to sleep.

A sketch:

  1. Create a misc/char device. Implement .mmap on its file_operations.
  2. In .mmap, set vma->vm_ops to your ops struct with a .fault handler. Set VM_DONTEXPAND | VM_DONTDUMP. Do not call remap_pfn_range — let faults drive allocation.
  3. The .fault handler computes which slot in the ring is being touched, allocates a page (cached, kernel-owned), stuffs it into vmf->page, and returns 0. Track allocated pages in a per-mapping array so .close can free them.
  4. Module writes log records by indexing into the kernel-side page array and bumping a producer index with release semantics. Userspace polls the index with acquire semantics.
  5. For wakeup: poll_wait on the chardev, kernel calls wake_up_interruptible when crossing the empty->non-empty edge.

Gotchas: cache coherency is usually fine on x86 (write-back, snooped) but on ARM you may need flush_dcache_page. Don't use vmalloc pages with remap_pfn_range — it'll silently work in subtle ways. And remember: faster than Netlink is not free — you're trading syscall cost for memory-barrier discipline, which is much harder to debug.

The challenge: Zero-copy kernel↔user logging looks like a small mmap exercise but actually demands careful page-lifetime management, a proper fault handler, and a lockless ring protocol — all while the kernel module can be unloaded out from under userspace.

Daily Software Engineering

The Monotonic Reads Consistency Pattern: Never Show Users an Older Version Than They've Already Seen

2026-06-10

You've built read-your-writes consistency, so users see their own updates. Job done? Not quite. There's a sibling problem: a user refreshes the page and sees older data than they saw a second ago. The post they just watched appear has vanished. The comment count went from 47 back to 45. Nothing was deleted — they just hit a replica that's lagging behind.

Monotonic reads guarantees that once a user has seen a value at version V, no subsequent read returns a version older than V. Time moves forward for that user, even if the system as a whole is eventually consistent.

Why this happens: Most read-heavy systems fan reads across replicas for throughput. Replica A might be 200ms behind the leader; replica B might be 50ms behind. Two consecutive requests from the same user can land on different replicas, and if A is staler than B, the user time-travels backward.

Real-world example: A user posts a comment on a news article. Read-your-writes routes them to the leader, so they see comment #48 immediately. They navigate away, come back 5 seconds later, and the request hits replica A (lagging). Now they see comment #46 as the latest — their own comment vanished, plus two others they'd already seen. They post it again. Now there are duplicates. Multiply by a million users and you have a support nightmare.

How to implement it:

  • Sticky replica routing: Hash the user's session ID to a specific replica. They always read from the same node, so they never see it regress. Simple, but uneven load if some users are way more active.
  • Version tokens: Each read returns the replica's current log position (LSN, timestamp, vector clock). Client sends it back on the next request. The router picks a replica whose position is ≥ that token, or waits briefly until one catches up.
  • Causal tokens in cookies: Store the high-water-mark in a short-lived cookie. Easy in browsers, painful for mobile apps with intermittent connectivity.

Rule of thumb: If your replication lag p99 is L milliseconds and you're using sticky routing, expect ~1/N of users to hit a freshly-failed replica per failover, where N is your replica count. Plan a fallback: on the new replica, block reads until its position ≥ the user's last-seen token, with a timeout of 2×L before degrading to "best effort."

What this isn't: Monotonic reads doesn't promise freshness — you might be 10 seconds behind reality forever. It only promises you won't go backward. Pair it with read-your-writes for a coherent per-user view, even on an eventually consistent backend.

Key Takeaway: Monotonic reads makes time move forward for each user by ensuring successive reads never return an older version than one already seen — critical when fanning reads across lagging replicas.

Tool Nobody Knows

ddrescue: Pulling Data Off a Dying Disk Without Killing It Faster

2026-06-10

Every greybeard has been here: a drive is failing, SMART is screaming, and someone wants the data. You reach for dd, hit the first bad sector, and watch the kernel retry for ten minutes while the head bangs itself to death. Then the command dies and you've got nothing — no image, no idea which blocks made it, no way to resume.

GNU ddrescue (not the unrelated dd_rescue, which is a different tool from a different author) was written by Antonio Diaz Diaz in 2004 for exactly this problem. It is the right tool, and almost nobody in your office knows it exists until they need it.

The trick is the mapfile (older docs call it a logfile). ddrescue records exactly which sectors are good, bad, untried, or non-trimmed, persists that map after every block, and uses it to resume. So you do a fast first pass grabbing all the easy data, then come back for the failing sectors after the good data is already safe on another disk.

# Pass 1: skip aggressively past errors, no retries.
# Get the easy 95% before the drive dies completely.
ddrescue -f -n -b4096 /dev/sdb /mnt/safe/image.img /mnt/safe/sdb.map

# Pass 2: now retry the holes the map says are bad.
# Reverse direction often helps when the head is stuck.
ddrescue -f -d -r3 -R /dev/sdb /mnt/safe/image.img /mnt/safe/sdb.map

Flags worth knowing:

  • -n / --no-scrape: skip the slow read-every-byte-of-a-bad-block phase on the first pass.
  • -d: open with O_DIRECT so you bypass the kernel page cache (no fake-good reads from RAM).
  • -r3: retry bad areas three times before giving up.
  • -R: reverse direction. Spinning drives sometimes read backwards better.
  • -b4096: physical sector size. Matters for 4K-native drives.
  • -i / -s: input position and size. Carve out just one partition.
  • --domain-mapfile: limit work to a previous run's good or bad areas.

Resuming is automatic — point at the same mapfile and ddrescue picks up where it stopped. You can yank the drive, refrigerate it overnight (yes, really, this is a documented technique for stiction-prone heads), and continue tomorrow. The mapfile is plain text:

$ head -5 sdb.map
# Mapfile. Created by GNU ddrescue version 1.27
# current_pos  current_status  current_pass
0x1A3F4000     ?               2
#      pos        size  status
0x00000000  0x1A3F4000  +
0x1A3F4000  0x00001000  *

Status codes: + finished, ? untried, * non-trimmed, / non-scraped, - bad. You can hand-edit it to force a retry of a region, or feed it to ddrescueview for a graphical heatmap of the drive.

One more trick: rescuing from an already-partial image works. If your colleague started with naive dd conv=noerror,sync and produced a partial file full of zero-filled holes, ddrescue can read the original drive and only fill the gaps:

ddrescue --generate-mode /dev/sdb partial.img generated.map
ddrescue -d -r3 /dev/sdb partial.img generated.map

The mainstream alternative — dd conv=noerror,sync — retries forever on bad sectors, has no resume, no map, and silently substitutes zeroes. It's the wrong tool. ddrescue treats the failing drive as a resource to harvest carefully, not a punching bag.

Key Takeaway: When a disk is dying, dd wastes its remaining life thrashing on bad sectors; ddrescue's mapfile lets you grab the good data fast, then negotiate with the bad sectors afterward — with full resume, reverse reads, and a plain-text record of exactly what survived.

What If Engineering

What If We Built a Kilometer-Wide Sunshade in Geostationary Orbit to Cool a Single City?

2026-06-10

Phoenix in July. 47°C at noon. What if we parked a sunshade in geostationary orbit and dimmed the city by 10%? Not the whole planet — just one stubborn dot in the Sonoran Desert.

The geometry problem (and why GEO is the only option). Geostationary orbit sits at 35,786 km altitude. From there, an object appears fixed over one point on Earth's surface — essential, because Phoenix doesn't move and we want continuous shade. Lower orbits race across the sky in minutes; only GEO holds station.

Phoenix metro covers roughly 1,340 km² — call it a 41 km diameter circle. To cast a useful penumbra over that footprint from 35,786 km away, we need to account for the Sun's angular diameter (0.53°, or 9.3 milliradians). The Sun's disk, projected from GEO distance, has a "fuzz radius" of:

r_fuzz = 35,786 km × tan(0.265°) ≈ 165 km

That's the catch. Any shade smaller than ~330 km across casts only a partial penumbra — no full umbra ever touches Earth. A 1-km shade dims Phoenix by a vanishingly small fraction. Let's compute it honestly.

Back-of-envelope dimming. A disk of area A_shade blocks sunlight reaching a ground patch in proportion to its fraction of the Sun's apparent disk. The Sun's apparent area at GEO distance:

A_sun_apparent = π × (165 km)² ≈ 85,500 km²

A 1-km diameter shade has area 0.785 km². Dimming fraction:

0.785 / 85,500 ≈ 0.0009%

Phoenix receives ~1,000 W/m² at noon. Our kilometer-wide shade blocks 9 mW/m². A single sheet of printer paper held overhead does more.

Scaling up to actually matter. To dim Phoenix by 10% (a meaningful 5°C drop in peak heat), we need to block 10% of the solar disk as seen from the city. That requires a shade area of 8,550 km² — roughly 104 km in diameter. Now we're building a structure larger than Rhode Island, floating in GEO.

Mass budget. Use mylar-like film at 5 g/m² (the JWST sunshield is ~25 g/m², but solar sails have hit 3 g/m²). Mass:

8.55 × 10⁹ m² × 5 g/m² = 42,750 tonnes

SpaceX Starship promises ~100 tonnes to GEO. That's 428 launches, ignoring the tugs needed to actually deploy and tension a film the size of Connecticut. At an optimistic $50M/launch, lift alone runs $21 billion — before structure, attitude control, or station-keeping against solar radiation pressure.

The cruel torque. Solar radiation pressure at 1 AU is ~9 μN/m². On 8.55 × 10⁹ m², that's 77 kN of constant thrust pushing the shade away from the Sun. Any off-axis tilt creates torque that will spin the structure unless continuously corrected. The shade is, structurally, a colossal solar sail trying to escape.

And it misses half the time. GEO satellites drift north and south of the equator seasonally, and the Sun-Earth-shade geometry shifts with Earth's axial tilt. Without active repositioning of ~10° of inclination twice a year, the shadow wanders off Phoenix entirely in spring and fall. You need ion thrusters firing constantly.

Meanwhile, painting every Phoenix roof white achieves the same albedo effect for the price of a single launch.

Key Takeaway: The Sun's angular diameter sets a hard floor — any orbital sunshade smaller than ~330 km across casts no true shadow, only a whisper of dimming, making city-scale space parasols a geometry problem before they're an engineering one.

Wikipedia Rabbit Hole

Alexander M. Nicolson

2026-06-10

Every quartz watch on every wrist, every microcontroller heartbeat, every GPS satellite's timekeeping signal — they all descend from a single experiment performed in 1917 by a Scottish-born engineer at Western Electric who was working with, of all things, a piece of crystallized cream of tartar.

Alexander McLean Nicolson built the world's first crystal oscillator using Rochelle salt — potassium sodium tartrate — a piezoelectric crystal that had been discovered way back in 1655 by an apothecary in La Rochelle, France, originally as a laxative. Pierre and Jacques Curie had demonstrated its piezoelectric properties in 1880 (yes, that Pierre Curie, before Marie), but it took Nicolson to realize that if you could make a crystal vibrate by applying voltage, you could use that mechanical resonance to regulate an electronic circuit at an extraordinarily precise frequency.

This is the magic that powers nearly all modern electronics: a tiny sliver of crystal acts as a mechanical tuning fork that's so stable, so resistant to drift, that an oscillator built around it will tick at the same frequency for years. The crystal in your wristwatch vibrates 32,768 times per second — a power of two chosen specifically so a chain of binary dividers can produce a clean one-second pulse.

What's wild is the historical race. Nicolson filed his patent in 1918. Walter Cady at Wesleyan independently built a quartz oscillator in 1921 and is often given credit for the modern version (Rochelle salt is too fragile and moisture-sensitive for serious use). The two ended up in a protracted patent dispute that Nicolson largely won — Bell Labs sued Cady, and the courts upheld Nicolson's priority. Yet Cady's name appears in most textbooks today, partly because quartz proved to be the practical winner.

Nicolson didn't stop at oscillators. He also:

  • Invented an early loudspeaker using the same Rochelle salt piezoelectric effect
  • Patented a single-sideband radio transmission technique that AT&T used for transatlantic telephony
  • Developed early work on television scanning systems
  • Held over 200 patents by the time of his death in 1950

And yet outside of obscure engineering history papers, almost nobody knows his name. There's no Nicolson Building at MIT. No "Nicolson frequency" unit. Western Electric absorbed his contributions into Bell Labs' broader legacy, and the popular story of quartz timekeeping skips straight to Seiko's 1969 Astron wristwatch — which used a crystal oscillator that was, in a direct lineage, Nicolson's invention refined across 52 years.

Here's the kicker: the GPS satellites overhead right now contain atomic clocks, but they also contain crystal oscillators that discipline them. The entire $100+ billion global positioning industry rests on a piezoelectric trick first demonstrated with a French laxative ingredient by a man you've never heard of.

Down the rabbit hole: The most important electrical engineer of the 20th century you've never heard of — and the laxative crystal that built the modern world.

Daily YT Documentary

When Tambora Erupted, Civilization Nearly Collapsed #history #documentary #disaster

2026-06-10

When Tambora Erupted, Civilization Nearly Collapsed #history #documentary #disaster

Channel: History by Nature (21 subscribers)

In April 1815, Mount Tambora on the Indonesian island of Sumbawa produced the most powerful volcanic eruption in recorded human history — a VEI-7 event that ejected roughly 150 cubic kilometers of material and launched sulfate aerosols high into the stratosphere. This video walks through what happened next: a planet-wide veil of particles that reflected sunlight, dropping global temperatures by about a degree Celsius and triggering what came to be called the "Year Without a Summer" in 1816.

The downstream effects are what make Tambora such a compelling case study in how a single geological event can ripple through human civilization. Frost killed crops in New England in June and July. Europe saw catastrophic harvest failures, food riots, and a typhus epidemic. Monsoon disruption in Asia is linked to a cholera pandemic that eventually reached Europe. Even cultural history bent around it — Mary Shelley wrote Frankenstein during that gloomy, rain-soaked Swiss summer, and the strange skies inspired Turner's vivid sunset paintings.

The channel is tiny (21 subscribers) and the title leans dramatic, but the underlying topic is well-documented earth science and climate history. If you've never connected the dots between a single volcano and the global crop failures, famines, and disease outbreaks that followed, this is a solid primer on volcanic forcing of climate.

Why watch: A clear introduction to how one 1815 eruption triggered a chain of climate, agricultural, and public-health disasters that reshaped a year of human history.

Daily YT Electronics

Arcade-style video game on FPGA

2026-06-10

Arcade-style video game on FPGA

Channel: V. Hunter Adams (7850 subscribers)

This is a final project demo from Cornell's ECE 5760 (Advanced Microcontroller Design), a course that consistently produces some of the most impressive student FPGA work on YouTube. Student Qishun Zhang shows off a fully playable arcade-style game built from the ground up on an FPGA — meaning the sprite engine, collision detection, sound synthesis, and VGA display driver are all implemented in hardware, not running on a CPU.

What makes ECE 5760 demos worth your time is the depth: these aren't Arduino sketches. Building a video game on an FPGA forces you to think carefully about parallel hardware design — pixel pipelines that must hit timing every clock cycle, framebuffer memory architecture, audio DACs, and synchronizing player input with the display refresh. The accompanying project webpage (linked in the description) typically includes full Verilog/SystemVerilog source, block diagrams, and a written report explaining the design choices.

Even if you only watch the demo and skim the project page, you'll see what a serious capstone-level FPGA project looks like end-to-end. It's a great reference point if you're learning HDL and wondering what kind of system you could realistically build once you're past blinky-LED tutorials. Hunter Adams' channel as a whole is a goldmine for FPGA and DSP enthusiasts, and this video is a good entry point into the broader course archive.

Why watch: A polished Cornell ECE 5760 capstone showing what a full FPGA-based arcade game looks like when sprite engine, audio, and VGA are all built in hardware.

Daily YT Engineering

Soil Mechanics Basic Lecture-1 | Civil Engineering Basics for Diploma & Degree Students

2026-06-10

Soil Mechanics Basic Lecture-1 | Civil Engineering Basics for Diploma & Degree Students

Channel: TutoRYZ (28 subscribers)

This is the opening installment of a structured lecture series on soil mechanics, the branch of geotechnical engineering that governs how foundations, retaining walls, embankments, and slopes actually behave under load. The pickings in today's batch were thin — most candidates were hashtag-spammed Shorts or exam-prep clickbait — but this one earns its slot by being a real lecture aimed at diploma and degree students who need the fundamentals from first principles.

Expect coverage of the building blocks: the three-phase system of soil (solids, water, air), basic index properties like void ratio, porosity, water content, and unit weight, and the phase relationships that tie them together. These are the equations every geotechnical calculation eventually leans on — bearing capacity, settlement, seepage, slope stability — so getting them properly grounded matters more than the topic's reputation for being dry suggests.

At 28 subscribers, the channel is genuinely tiny, which usually means rough production but also means the instructor is teaching because they want to, not for the algorithm. For a viewer who's encountered soil mechanics through scattered MCQ videos and wants a sequential walkthrough instead, this and its follow-up Lecture-2 (also posted in this batch) offer a coherent starting point.

Why watch: A from-scratch lecture on soil's three-phase system and index properties — the foundation every geotechnical calculation depends on.

Daily YT Maker

Home Tarrace shed 40x30 Fabrication shed Work. Simple Roofing Shed Work. #viral #trending #YouTube

2026-06-10

Home Tarrace shed 40x30 Fabrication shed Work. Simple Roofing Shed Work. #viral #trending #YouTube

Channel: Grill & Furniture (4140 subscribers)

This video documents the fabrication and installation of a 40x30 foot terrace roofing shed using a portal frame structure — a classic, efficient design widely used for industrial buildings, warehouses, and agricultural sheds. The description hints at the underlying engineering: a series of rigid frames braced longitudinally but unbraced transversely, which is exactly how real portal frames distribute load through rigid knee joints rather than relying on cross-bracing.

For viewers interested in metal fabrication, welding, and structural engineering, this kind of build is a great teacher. You get to see how raw steel sections become rigid frames, how columns are anchored, how rafters are joined at the apex and eaves, and how purlins tie the whole structure together to support the roof sheeting. Watching the sequencing — foundation prep, column erection, rafter lifting, bracing, and final roofing — gives a practical sense of how a small fabrication crew tackles a mid-size job without heavy crane infrastructure.

Caveat: the title leans on hashtag spam (#viral #trending), which usually signals lower-effort content. However, the description shows the creator actually understands what they're building, which is a good sign that the footage has real instructional value rather than just being a music montage.

Why watch: A real-world look at portal frame shed construction — useful for anyone curious about how small fabrication shops turn steel sections into a working roof structure.

Daily YT Welding

Welding Fixture Tables Are Too EXPENSIVE... So I Built My Own!

2026-06-04

Welding Fixture Tables Are Too EXPENSIVE... So I Built My Own!

Channel: D'Lyte Motorsports (381 subscribers)

Commercial fixture tables from brands like Siegmund or CertiFlat can run anywhere from $2,000 to $8,000+ for a decently sized top, which puts them out of reach for most hobbyists and small shops. This build tackles that problem head-on by walking through a from-scratch construction of a steel grid-top fixture table with a mag-drilled hole pattern and a rolling frame.

What makes this worth watching over the dozens of similar "I built a welding table" videos is the focus on the hole pattern accuracy — the part that actually makes a fixture table useful. Getting holes square, parallel, and on a consistent grid is what lets you reuse clamps, stops, and squares across the surface. Using a mag drill rather than a drill press or CNC is a realistic approach for a home shop, and watching how the maker jigs and indexes the work to keep holes aligned is the kind of practical metalworking knowledge that transfers to plenty of other projects.

The rolling frame portion also covers the often-overlooked structural question: a fixture table needs to be rigid enough that clamping forces don't twist the top, which means triangulated bracing and locking casters, not just a welded box on wheels. Expect a real shop-build pace rather than a montage.

Why watch: A realistic, mag-drill-based approach to building an accurate fixture table without the four-figure price tag of commercial options.

All newsletters