Daily Digest — 2026-08-25

26 newsletters today.

In this digest


Abandoned Futures

Project HARP: Gerald Bull's Battleship-Gun Space Launcher That Fired a Payload to 179 Kilometers in 1966 and Got Cancelled Because Canada Didn't Want to Look Like It Was Helping in Vietnam

2026-08-25

In November 1966, a 180-kilogram dart named Martlet 2 shot out of a 16-inch naval gun barrel on the island of Barbados, punched through the atmosphere at Mach 10, and coasted to an altitude of 179 kilometers — 79 km above the Kármán line. It remains the highest altitude ever reached by a projectile fired from a gun. No rocket motor. No staging. Just chemistry, a very long tube, and a Canadian engineer named Gerald Bull who thought orbital access was fundamentally a ballistics problem, not a rocketry one.

Project HARP (High Altitude Research Project) started in 1961 as a partnership between McGill University and the U.S. Army's Ballistic Research Laboratory. The idea was elegantly cheap: surplus U.S. Navy 16-inch/50-caliber gun barrels — the kind that used to arm the Iowa-class battleships — were welded end-to-end into a 36-meter smoothbore tube, mounted at 85° elevation, and pointed at the sky. Instead of a shell, they fired a finned sub-caliber projectile called the Martlet, riding a discarding sabot. The gun consumed no propellant it hadn't already been built to burn. Each shot cost roughly $3,000 — against the $500,000 minimum for a sounding rocket in 1966 dollars.

Bull's team fired more than 200 rounds from Barbados, Yuma, and Highwater, Quebec. They measured upper-atmosphere winds, tested re-entry heating, and were within engineering distance of the Martlet 4, a rocket-assisted projectile designed to reach true orbital velocity by lighting a solid motor after gun-launch had already done the heavy lifting through the dense lower atmosphere — the part that eats 90% of a conventional rocket's energy budget.

Then it died. Not from technical failure. In 1967, the Canadian government withdrew funding. Ottawa was under mounting pressure to distance itself from U.S. military programs during Vietnam, and HARP's Army co-funding made it politically toxic. The U.S. Army lost interest the same year when its ballistic missile priorities shifted. The Barbados gun was abandoned on the beach where it still lies today, half-buried in sand and salt. Bull, embittered, took his expertise to Iraq to build the Project Babylon supergun for Saddam Hussein — and was assassinated on his Brussels doorstep in March 1990, most likely by Mossad.

Why it deserves a second look in 2026:

  • Modern electronics survive 10,000 G. The Army's Excalibur artillery round proved gun-launched guidance packages work fine. CubeSats can be ruggedized to take the launch load.
  • Light gas guns reach Mach 20+. Bull was limited to conventional powder. Hydrogen-driven two-stage guns — used routinely at NASA Ames since the 1990s — reach velocities that put circular orbit within one small motor burn.
  • The economics work. Green Launch (2021) and SpinLaunch (raised $150M+) are both chasing HARP's core insight: chemical rockets are a terrible way to spend the first 30 seconds of flight. Green Launch specifically uses a hydrogen impulse launcher descended directly from Bull's work.
  • The payload class is finally right. HARP made no sense when satellites weighed a ton. A modern 100 kg smallsat with electric propulsion is exactly what a Martlet 4 was sized for.

Bull was right about the physics. He was wrong about the diplomacy. Sixty years later, private companies are quietly rebuilding his gun — and pretending they invented it.

Key Takeaway: HARP shot a payload past the Kármán line for $3,000 a launch in 1966; modern electronics, light-gas gun tech, and smallsat form factors have finally caught up to what Gerald Bull's ballistics-first orbital access architecture actually needed.

ArXiv Paper Digest

mold: A Massively Parallel Linker

2026-08-25

Authors: Rui Ueyama

ArXiv: 2608.23228v1

PDF: Download PDF

Every time you compile a large C++ program, there's a step at the very end called linking. Think of it like this: the compiler translates each source file into a bag of puzzle pieces (object files), and the linker snaps them all together into one finished executable. It resolves the "hey, this function lives over there" references between files, lays out the final binary in memory, and produces the program you actually run.

The problem: linking has been painfully slow for decades. If you're a developer working on a huge codebase like Chromium or LLVM, you might change one line of code, hit compile, and then wait 30+ seconds while the linker chugs along using essentially one CPU core, while your other 15 cores sit idle. That wait is death for productivity — it breaks the tight "edit, compile, test" feedback loop that makes programming pleasant.

Enter mold, a new open-source linker by Rui Ueyama (who also wrote lld, the LLVM linker). The core insight is almost embarrassingly simple: link in parallel, everywhere possible. Existing linkers were built in an era when parallelism was an afterthought, so they use a serial pipeline with maybe one or two parallelized passes bolted on. Mold rethinks the whole pipeline with data parallelism as the first-class design principle.

What does that mean concretely?

  • Symbol resolution (figuring out which "printf" reference points to which "printf" definition across thousands of files) is done with lock-free concurrent hash tables.
  • Section layout — deciding where each chunk of code and data lives in the final binary — is split across cores.
  • Relocation processing (patching all the "call this address" instructions with real addresses) is parallelized per section.
  • Even writing the output file uses parallel memory-mapped I/O rather than serial writes.

The result: mold links large binaries several times faster than the previous state of the art (GNU gold and LLVM lld), often finishing in seconds what used to take half a minute. For a giant target like Chrome, that shaves real wall-clock time off every single developer iteration.

What makes this paper worth reading isn't a fancy algorithm — it's a case study in what happens when someone takes a piece of decades-old infrastructure and asks, "what would this look like if we designed it today?" Linking was widely assumed to be inherently serial in parts. Mold shows that assumption was mostly just inertia.

Why it matters: Faster linking directly compounds into faster developer feedback loops on every large C/C++ project in the world — a rare piece of infrastructure work whose impact is felt millions of times a day.

Daily Automotive Engines

Crankshaft Fillet Rolling: The Cold-Working Process That Doubles Fatigue Life

2026-08-25

The crankshaft's weakest points aren't the journals themselves — they're the fillet radii where the journal transitions into the crank cheek. That inside corner is a stress concentrator, and it's where fatigue cracks almost always start. A perfectly machined fillet on a forged crank will still fail at 60-70% of the load a rolled fillet can survive. This is why every high-output OEM crank — from Cummins diesels to Nissan's RB26 — gets fillet rolled as a final manufacturing step.

The process is beautifully simple. After heat treatment and machining, the crank is mounted in a fixture and a hardened roller (typically tungsten carbide, profiled to match the fillet radius) is pressed into the corner with 5,000-15,000 lbs of force while the crank rotates. The roller plastically deforms the surface layer maybe 0.010-0.020" deep, creating three effects that all fight fatigue:

  • Compressive residual stress — the surface is squeezed into a permanent state of compression. Fatigue cracks need tensile stress to propagate, so the crack has to overcome this compression before it can even start growing.
  • Work hardening — the cold plastic deformation increases surface hardness by 15-30%, raising the local yield strength.
  • Surface smoothing — machining marks that would act as crack initiation sites get literally squished flat.

Real-world example: Chrysler's 6.7L Cummins crankshaft is forged 4140 steel, but the difference between the 350 hp base tune and the 400 hp HO tune isn't just fuel — it's the fillet rolling process pressure. The HO cranks get rolled at higher force, producing deeper compressive layers. Cummins rates the same forging for 30% more torque based solely on the rolling parameters.

Rule of thumb: Fillet rolling typically increases crankshaft fatigue life by 2x to 3x compared to the same crank with only machined fillets. Nitrided cranks add another 20-40% on top of that. This is why a stock Duramax crank survives 1,500+ hp when the block and rods fail long before the crank does.

The catch: fillet rolling only works on the specific radius it was designed for. If you undercut the journal during a regrind — even by 0.010" — you cut through the compressed layer and expose fresh, unhardened material at the new fillet. This is why rolled-fillet cranks should never be reground unless the machine shop can re-roll them afterward, which almost none can.

Key Takeaway: Fillet rolling cold-works compressive stress into the crank's most vulnerable corner, doubling fatigue life — but a standard journal regrind destroys the benefit permanently.

Daily Debugging Puzzle

Python's re.match Prefix-Only Trap: The Hostname Validator That Waves Through Shell Injection

2026-08-25

This function is supposed to accept only safe hostnames — lowercase alphanumerics, dots, hyphens — before shelling out to ping. It rejects obvious garbage. It also cheerfully waves through rm -rf /.

import re
import subprocess

HOSTNAME_RE = r"[a-z0-9.-]+"

def ping(host: str) -> bool:
    if not re.match(HOSTNAME_RE, host):
        raise ValueError(f"invalid hostname: {host!r}")

    result = subprocess.run(
        f"ping -c 1 {host}",
        shell=True,
        capture_output=True,
        timeout=5,
    )
    return result.returncode == 0

# Rejected as expected:
ping("!!!")                                # ValueError

# Accepted, as expected:
ping("example.com")                        # True

# Accepted — and executes the trailing command:
ping("example.com; touch /tmp/pwned")      # True

The Bug

re.match only anchors at the start of the string. It does not require the pattern to consume the entire string. Once [a-z0-9.-]+ greedily matches the leading example.com, the match object is truthy and validation passes. The trailing ; touch /tmp/pwned is ignored by the regex — but not by the shell that runs a few lines later.

This is easy to miss because the rejected case ("!!!") also does the intuitive thing: no allowlisted character appears at the start, so re.match returns None. The validator looks like it works. Every unit test with a well-formed hostname passes. Every unit test with an obviously-malformed hostname fails. Nothing tests a well-formed hostname followed by garbage — which is exactly the shape an attacker will send.

Newcomers assume re.match is "match the whole string" (it's not — that's re.fullmatch, added in 3.4) or that + is inherently anchored at both ends (it's not — quantifiers only bind where the engine is currently reading). The name doesn't help: in most other languages, "match" means the entire input.

Two correct fixes:

# Option 1: fullmatch requires the pattern to consume the whole string.
if not re.fullmatch(HOSTNAME_RE, host):
    raise ValueError(...)

# Option 2: anchor explicitly. \A and \Z beat ^/$ because
# ^/$ can match around embedded newlines in multiline mode.
if not re.match(r"\A[a-z0-9.-]+\Z", host):
    raise ValueError(...)

A subtler note on option 2: don't reach for ^...$. In multiline mode $ matches before a \n, so "example.com\n; rm -rf /" can still slip past. \A and \Z are true string anchors and don't care about mode flags.

Better still: don't build shell commands by string interpolation at all. Passing a list bypasses the shell entirely, so even if your validator has a hole, there's nothing to inject into:

subprocess.run(["ping", "-c", "1", host], capture_output=True, timeout=5)

Defense in depth. The regex is your allowlist; the argv list is your seatbelt. When one fails, the other keeps you alive.

Key Takeaway: re.match only anchors at the start of the string, so any validator built on it accepts arbitrary trailing garbage — use re.fullmatch (or \A...\Z) and never interpolate user input into a shell string.

Daily Digital Circuits

Skid Buffers: How Hardware Handles Backpressure Without Killing Your Clock Frequency

2026-08-25

You've built a pipeline with valid/ready handshakes (AXI-Stream style). Producer asserts valid, consumer asserts ready, transfer happens on cycles where both are high. Simple, right? Then you route it through five pipeline stages and timing collapses. The culprit is almost always ready.

In a naive design, ready flows combinationally backward through every stage. Stage 5's ready feeds stage 4's ready feeds stage 3's ready... all in one clock cycle. Meanwhile valid and data flow forward through registers. So the return path becomes one giant combinational chain — an AND-tree of "everyone downstream is ready" — and your critical path is 20 gates of stall logic instead of your actual datapath.

A skid buffer breaks this. It's a tiny 2-entry FIFO inserted between stages that registers the ready signal going upstream. But here's the subtle part: if you just register ready, you get a one-cycle window where the upstream still thinks you're ready and sends one more word. That word has nowhere to go — hence the name "skid": the buffer catches the word that skidded in after you said stop.

Why two entries, not one:

  • Slot A: the primary data register (the one you're presenting downstream)
  • Slot B: the "skid slot" that catches the word already in flight when you deasserted ready

When both slots fill, ready-upstream deasserts. When downstream finally accepts a word, slot B drains into slot A, freeing slot B, and ready-upstream reasserts.

Real-world example: Every AXI-Stream register slice in ARM's AMBA library is a skid buffer. Xilinx calls them "AXI Register Slices" and offers three flavors: forward (register valid/data only), reverse (register ready only), and full (both — this is a true skid buffer). RISC-V vector engines use them at cache-boundary crossings. NoC routers use one per input port so backpressure from one output doesn't stall the entire mesh in one cycle.

The cost/benefit rule of thumb: A skid buffer adds 1 cycle of latency and roughly 2×data_width flip-flops plus ~10 gates of control logic. In exchange, you break a combinational path that might have been 15+ gates of AND-tree spanning thousands of microns of wire. On a 1 GHz design (1 ns period), that's often the difference between meeting timing and missing by 300 ps.

Common mistake: Using a 1-entry "half-buffer" and thinking it's a skid buffer. It's not — it can register ready OR valid/data, but not both. You'll either lose throughput (bubble every other cycle) or fail to break the timing path. If you need both directions registered, you need two entries. There is no cheaper solution — this is a proven lower bound.

Key Takeaway: A skid buffer is a 2-entry FIFO that registers both valid/data forward and ready backward, trading one cycle of latency to break the combinational stall path that would otherwise limit your clock frequency.

Daily Electrical Circuits

Automatic Gain Control (AGC): Keeping Signal Levels Constant Across Wildly Varying Inputs

2026-08-25

An Automatic Gain Control loop adjusts an amplifier's gain in real time so the output amplitude stays roughly constant even when the input swings across 40+ dB. It's the reason a distant AM station and a local blowtorch both come out of your radio at similar volume, and why your webcam's microphone doesn't clip when someone shouts.

An AGC has four pieces stitched into a feedback loop:

  • Variable-gain element — a VCA, JFET operating in its triode region, MOSFET, PIN diode attenuator, or a multiplying DAC. Gain is controlled by a voltage or current.
  • Envelope detector — a precision rectifier feeding an RC network that extracts the output signal's amplitude.
  • Error amplifier — compares detected level against a reference (the desired output amplitude).
  • Loop filter — sets attack and release time constants. This determines how fast gain responds to level changes.

The critical design tension is the attack/release ratio. Fast attack catches sudden loud transients before they clip; slow release avoids "pumping" — the audible gain riding up between words or musical notes. A typical audio AGC uses attack ≈ 1–10 ms and release ≈ 100 ms – 2 s. Asymmetric time constants require separate charge and discharge paths on the detector cap (small series resistor for charging through a diode, large resistor to ground for discharge).

Real-world example: A shortwave receiver AGC. The IF stage uses a dual-gate MOSFET (like the BF998). Gate 2 receives a DC voltage from the AGC line — 0 V gives maximum gain (~30 dB), 4 V collapses gain to near zero. A diode envelope detector at the demodulator output charges a 4.7 µF cap through 1 kΩ (attack ≈ 5 ms) and discharges through 220 kΩ (release ≈ 1 s). An op-amp compares the DC envelope to a 2 V reference and drives the gate. Result: a 60 dB range of signal strengths produces less than 6 dB of audio output variation.

Rule of thumb for loop bandwidth: the loop's crossover frequency must sit well below the lowest signal frequency of interest, or the AGC will try to flatten the signal itself. For 300 Hz–3 kHz voice audio, keep loop bandwidth under ~30 Hz — about 10× below the lowest audio component.

Watch out for hang AGC designs in SSB radios: after a strong signal ends, a comparator holds the gain suppressed for 200–500 ms before releasing, preventing static crashes between words. And in RF, always place AGC control early in the chain (front-end and IF) to prevent later stages from saturating on strong signals before the loop can respond.

Key Takeaway: AGC is a slow feedback loop wrapped around a variable-gain element — the attack and release time constants, not raw gain, determine whether it sounds transparent or pumps audibly.

Daily Engineering Lesson

Rotary Encoders vs. Potentiometers for Panel Controls: Why Detents, Endless Rotation, and Digital Debouncing Changed the Front Panel

2026-08-25

Every knob on a piece of equipment falls into one of two families: potentiometers (analog, absolute position, physical stops) or rotary encoders (digital, relative motion, endless rotation). Choosing the wrong one bakes limitations into the product that no firmware update can fix.

Potentiometers are three-terminal variable resistors. Turn the shaft, the wiper moves along a resistive track, and the output is a voltage proportional to angle. They're absolute: the knob position always corresponds to the same value. That's why analog mixing consoles still use them — you can look at a fader bank and read the mix at a glance. Cost is pennies, wiring is trivial (VCC, GND, wiper into an ADC), and no code is required to interpret them beyond a single analogRead().

The downsides are physical. Pots have a mechanical rotation limit (typically 270°), wear out from the wiper scraping the track (10K–100K cycles for panel pots, more for conductive plastic), and drift with temperature and humidity. Worst of all, if firmware changes the "value" without moving the knob — say, loading a preset — the knob position now lies. This is the classic synthesizer problem: the knob says 3 o'clock but the filter cutoff is somewhere else entirely.

Rotary encoders solve this by reporting change, not position. A quadrature encoder outputs two square waves (A and B) 90° out of phase; firmware counts edges and determines direction from which channel leads. They rotate endlessly, have tactile detents (often 20 or 24 per revolution), and typically include a pushbutton on the shaft. The value in software is decoupled from the knob, so presets, menu navigation, and multi-function assignments all work naturally.

The catch is debouncing. Mechanical encoder contacts bounce for 1–5 ms per transition, and naive interrupt handlers will count phantom steps. A common rule of thumb: sample A and B at 1 kHz, only register a step when both signals are stable for at least 2 samples, and use a state-machine decoder (the "Ben Buxton" algorithm is the canonical reference). Optical and magnetic encoders skip this entirely but cost 5–20× more.

Quick selection rule: If the knob controls one dedicated parameter that a user should read at a glance (volume on a stereo, gain on a guitar amp), use a pot. If the knob navigates menus, adjusts values shown on a display, or needs to work with presets and remote control, use an encoder. For a 24-detent encoder, one full turn = 24 counts; scale in firmware to match the parameter range (e.g., 0–127 MIDI = ~5 turns).

See it in action: Check out How to Use a Rotary Encoder with Arduino by HuHamster to see this theory applied.
Key Takeaway: Pots give you absolute position for free but lie the moment firmware touches the value; encoders give you endless rotation and preset compatibility but demand proper debouncing.

Forgotten Books

The Cape Cook Who Codified Slow Cooking Before Food Science Existed

2026-08-25

Book: Hilda's "Where is it?" of recipes : containing, amongst other practical and tried recipes, many old Cape, Indian, and Malay dishes and preserves by Hildagonda J. Duckitt (1892)

Read it: Internet Archive

Buried in the introduction of a Victorian-era Cape Colony cookbook is a piece of culinary wisdom that modern kitchens have spent the last two decades rediscovering — packaged as "Instant Pot slow mode" and "reverse-sear technique." Hildagonda Duckitt, writing from Wynberg near Cape Town in 1892, was blunt about what separated a competent kitchen from a mediocre one:

Simmering (to bring as near as possible to boiling without letting it boil) is one of the great difficulties. Cooks will not remember how much depends on slow cooking. Hashes, Curries, "Bredees," etc., etc., must simmer, fry the onion with the meat, a light brown ("smoor," as Cape cooks say).

Duckitt was a South African home cook who assembled recipes from "relations and friends, and from practical housewives" across the Cape, drawing especially on the Malay cooks whose techniques had blended Dutch, Indonesian, and Indian traditions over two centuries at the Cape of Good Hope. Her book — running to a fourth printing by 1892 — was one of the first to preserve Cape Malay cuisine in writing.

What is striking is how precisely she names two things that Western food science would not formally describe for another 70+ years:

  • The sub-boil zone. Her definition of simmering as "to bring as near as possible to boiling without letting it boil" is essentially the 82–96°C window that Harold McGee would later identify as the sweet spot for collagen breakdown without protein toughening. She calls it a "great difficulty" — which it is, without a thermometer.
  • The Maillard step. "Fry the onion with the meat, a light brown" — the technique of browning aromatics and proteins before the long simmer. The Maillard reaction wasn't described until 1912, and its role in flavor development wasn't well understood until the 1950s. Duckitt just says: do this, always, or your bredee will be flat.

The word smoor (Afrikaans/Dutch for "smother" or "braise") survives today in South African cooking — smoorsnoek, smoorvis — and is a direct linguistic cousin of the German schmoren. It describes exactly what any modern recipe means by "brown, deglaze, cover, and cook low."

What is forgotten is not the technique — every serious cook still does this. What is forgotten is that Duckitt was recording it as declining common knowledge in 1892. She complained that "few Colonial cooks of the present day understand the art of cooking" and that the lady of the house had to know these things "so that she can direct them." A century before Instant Pots and sous vide circulators, she was already lamenting that home cooks had lost the patience for slow cooking and needed a book to remind them.

Every "trust the process, don't rush the sear" TikTok is Hildagonda's ghost, still trying to teach us to smoor.

The forgotten claim: Cape Malay home cooks in the 1800s had already codified the brown-then-simmer technique — including the specific sub-boil temperature window — that Western food science would not formally explain until the mid-20th century.

Forgotten Darkroom

When J. Edgar Hoover Published a Manual on Soviet Spy Tradecraft

2026-08-25

Book: CIA Reading Room cia-rdp65-00756r000400090001-8: SOVIET INTELLIGENCE COMMUNICATIONS by CIA Reading Room (1952)

Read it: Internet Archive

In September 1952, the Federal Bureau of Investigation — under the direction of J. Edgar Hoover himself — produced a document with a startlingly candid opening line:

"An ideal counterintelligence operation is the penetration of an adversary's communications between the service headquarters and the operating networks."

What followed was essentially a working field guide to Soviet spycraft, with a table of contents that reads like the syllabus for an espionage academy: Diplomatic Couriers, Secret Section Facilities Abroad, Operation of the Secret Cipher Section, Cipher Pads and Code Books, Microphotography, Clandestine Communications in the United States, Sorge Networks, Radio Operations in Sweden (1939-42), Automatic Transmitters, Microdots, Secret Inks and Open Code.

The forgotten (or half-remembered) technique that jumps off the page is the microdot — a full page of text or a photograph reduced to a speck the size of a typewritten period, then glued over an actual period in an innocuous letter. The FBI apparently thought this technique important enough to warrant its own chapter alongside cipher pads and secret inks.

Microdots weren't a Cold War invention. The technique was pioneered by Parisian photographer René Dagron during the 1870 Siege of Paris, when messages were flown out by carrier pigeon on microfilmed pellicles. By WWII, German Abwehr agents had perfected the "Mikrat" — a photographic reduction so extreme that FBI Director Hoover himself, in a 1946 Reader's Digest article, called it "the enemy's masterpiece of espionage." The Soviets, this 1952 document confirms, inherited and industrialized the craft.

What's striking is how practical the document is. This isn't abstract policy — it's an operational teardown. The FBI catalogs how the Soviet "Secret Cipher Section" is staffed, how diplomatic couriers move material, and how one-time pads work in the field. It even carves out a whole section on the Sorge network — Richard Sorge, the Soviet spy in Tokyo who correctly warned Stalin about Operation Barbarossa (and was ignored).

The modern echo is unmistakable. Everything in this 1952 pamphlet has a 2026 equivalent:

  • Microdots → steganography hiding data in JPEG least-significant bits
  • Cipher pads → end-to-end encrypted messaging with ephemeral keys
  • Automatic transmitters → burst-mode satellite uplinks and covert cellular beacons
  • Secret inks → invisible metadata channels in seemingly benign network traffic
  • Dead drops → cryptocurrency wallet addresses posted to public forums

The 2010 arrest of the Russian "Illegals Program" agents in the U.S. revealed that the SVR was still using steganography — hiding messages inside images posted on public websites — plus custom short-wave radios and old-school brush passes. The techniques catalogued by Hoover's FBI in 1952 didn't disappear. They just moved online.

What's genuinely lost is the public nature of this knowledge. The FBI printed and distributed a booklet describing exactly how the adversary operated. Today, equivalent tradecraft manuals live behind SCIF walls and TS/SCI classifications, and the public reads about the techniques only after they fail — years later, in an indictment.

The forgotten claim: The FBI in 1952 publicly published an operational catalog of Soviet spy tradecraft — microdots, cipher pads, secret inks, automatic transmitters — techniques that never went away but simply migrated onto the internet.

Forgotten Patent

Metcalfe & Boggs's "Multipoint Data Communication System with Collision Detection": The 1975 Xerox PARC Patent That Invented Ethernet — and Wrote the Rules Every Wi-Fi Packet Still Obeys

2026-08-25

On March 31, 1975, four Xerox PARC researchers — Robert M. Metcalfe, David R. Boggs, Charles P. Thacker, and Butler W. Lampson — filed US Patent 4,063,220. The title was clinical: "Multipoint data communication system with collision detection." The invention was not. In eleven claims, it defined how computers should share a single wire without a traffic cop — and every packet you send, wired or wireless, still follows those rules.

The problem was simple and vicious. If you connect 100 computers to one cable, and any of them can talk whenever it wants, they will inevitably talk at the same time and garble each other. The old telephone solution was a central switch. The old radio solution was assigning each station a frequency. Both required expensive coordination.

Metcalfe had spent 1972 studying ALOHAnet, Norman Abramson's radio network in Hawaii that let terminals on outer islands transmit whenever they liked to a receiver on Oahu — collisions and all. If two packets clashed, both sides waited a random interval and retried. Simple. Wasteful. It topped out around 18% channel utilization.

The patent's insight, developed with Boggs at PARC, was to add two moves:

  • Carrier sense: before transmitting, listen. If someone is already talking, wait.
  • Collision detection: while transmitting, keep listening. If your signal is corrupted, both parties stop immediately, wait a randomized interval (binary exponential backoff), and retry.

The whole protocol — CSMA/CD — needed no central controller, no scheduling, no addresses assigned by a master. Nodes were peers. Add or remove a computer by physically tapping the coaxial cable. The network figured itself out.

Boggs and Metcalfe prototyped it on the Xerox Alto at 2.94 Mbps, wiring PARC's offices together. They named it "Ethernet" after the discredited 19th-century "luminiferous ether" that was supposed to carry light waves — the joke being that their coax cable was the ether that carried bits. By 1980, DEC, Intel, and Xerox published the "DIX" standard; in 1983 it became IEEE 802.3.

The direct legacy is obvious: every RJ-45 jack, every switched Gigabit Ethernet port in every data center rack, every 10G/100G/400G backbone. Modern switched Ethernet has largely engineered collisions out of existence, but the frame format, MAC addresses, and preamble timing are Metcalfe and Boggs's design.

The surprising legacy is Wi-Fi. IEEE 802.11 could not literally copy CSMA/CD, because a radio can't reliably hear its own signal while transmitting (the outgoing signal drowns out any collision). So Wi-Fi uses CSMA/CA — collision avoidance: listen, wait a random contention window, then transmit, and expect an ACK. Same philosophy: distributed, peer-based, randomized backoff, no central conductor. Every 802.11 frame you send negotiates airtime the way 1975 PARC nodes negotiated coax.

You'll also find its DNA in Bluetooth adaptive frequency hopping, LoRaWAN's ALOHA-style uplinks, and even the retry-and-backoff logic in TCP congestion control. Metcalfe went on to found 3Com and coined Metcalfe's Law — a network's value grows with the square of its users — a claim you can only make if your network protocol is trivially cheap to join, which is exactly what patent 4,063,220 guaranteed.

The patent expired in 1994, right as the internet went commercial. The timing was accidental. The consequence was that nobody had to license the protocol to sell a network card, and Ethernet ate the world.

Key Takeaway: The 1975 Ethernet patent didn't just invent a cable standard — it invented the peer-based, listen-then-talk, back-off-randomly protocol that still governs how every Wi-Fi packet, Bluetooth handshake, and cellular sidelink shares the air.

Daily GitHub Zero Stars

pgrooves/home-church

2026-08-25

Language: JavaScript

Link: https://github.com/pgrooves/home-church

The name home-church immediately signals a specific, underserved niche: small faith communities that gather in living rooms rather than sanctuaries. Most church-management software is built for large congregations with paid staff, formal membership rolls, and weekly bulletins. A home church has none of that infrastructure — just a handful of families who need lightweight tools to coordinate meetings, share prayer requests, and rotate hosting duties.

Even without a README, the JavaScript stack and the deliberately personal name suggest a purpose-built web app rather than a fork of enterprise software. That framing matters: home-church movements have grown quietly in the past decade, and the tooling gap is real. Google Docs and group texts work, but they don't scale gracefully past a couple of families.

Who might find this useful:

  • Small group leaders looking for a simple, self-hostable alternative to Planning Center or Breeze
  • House church networks that need to coordinate across multiple gatherings without heavyweight infrastructure
  • Developers exploring how to build community software that respects the intimate, low-ceremony nature of small groups
  • Anyone curious about niche community tooling — the design constraints here (privacy-first, minimal admin overhead, family-friendly UX) are genuinely interesting

Zero-star repos like this often reflect a maintainer scratching a very personal itch. That's exactly the kind of project worth watching: the code will be shaped by real weekly use, not hypothetical enterprise requirements. If the author opens up contributions, there's room here for a genuinely helpful tool that respects the difference between a home church and a megachurch.

Worth a peek if you care about community-scale software — the kind built for tens of people, not tens of thousands.

Why check it out: A rare purpose-built tool for small faith communities that mainstream church software has ignored for years.

Daily Hardware Architecture

Intel CDP (Code and Data Prioritization): How CPUs Let You Partition L3 Between Instructions and Data

2026-08-25

CDP is an extension of Intel's Cache Allocation Technology (CAT) that splits the L3 partitioning knob in two: instead of one bitmask per class of service (CLOS) controlling all L3 fills, you get separate bitmasks for code fetches and data fetches. Same silicon, finer control.

Why bother? Because instructions and data have wildly different access patterns and reuse profiles. A JIT compiler streaming megabytes of newly-emitted code through L3 can evict the hot data working set of every other process on the socket. A giant memcpy can flush the instruction footprint of your latency-sensitive service. Regular CAT treats both fills the same — CDP lets you say "this workload can splash code across 8 ways but only touch 2 ways for data."

The mechanism. When CDP is enabled (via IA32_L3_QOS_CFG MSR bit 0), each CLOS entry doubles: CLOS 0 becomes CLOS 0 code + CLOS 0 data, so a 16-CLOS system halves to 8 usable CLOSes. The L3 controller checks whether the incoming fill is an instruction fetch or a data load, then applies the corresponding bitmask to pick which ways are eligible. Hits are unaffected — CDP only constrains where new lines can land, not what you can read.

Real-world example. Consider a database server co-located with a log processor on a 20-way L3. The database has a hot 4MB index it re-reads constantly (data) and a compact hot path (code). The log processor streams GBs of raw log data (data) but its code is tiny. Naive CAT gives each 10 ways; the log processor's data stream still thrashes the database's index. With CDP:

  • Database CLOS: code=ways 0-3, data=ways 4-15 (12 ways for the index)
  • Logger CLOS: code=ways 0-3 (shared, tiny), data=ways 16-19 (4 ways only — enough to stream but not thrash)

Result: the logger's data fills are confined to a 4-way "streaming lane" while the database keeps its index resident.

Rule of thumb. Enable CDP when your workload mix has an asymmetric code-vs-data footprint: JIT-heavy runtimes (code churn), streaming ETL jobs (data churn), or interpreters (small code, huge data). If code and data behave similarly, CDP just halves your CLOS count for no benefit — stick with plain CAT.

The catch. CDP is a socket-wide toggle; you can't enable it per-core. Flipping it invalidates existing CLOS configurations, so it's a boot-time decision in practice. And it doesn't help if the pressure is inside L1/L2 — CDP only steers L3 allocation.

See it in action: Check out Acer ssd in not visible - Intel VMD Intel 11 and 12 gen not visible by Quick Solutions to see this theory applied.
Key Takeaway: CDP splits each L3 partition into separate code and data bitmasks, letting you contain streaming instruction or data floods that would otherwise evict a co-tenant's hot working set.

Hacker News Deep Cuts

A New Framework for How the Brain Compresses Our Noisy World

2026-08-25

Quanta Magazine consistently publishes some of the best science journalism on the web, and this piece sits squarely in the sweet spot where neuroscience meets information theory — a topic that should be catnip for the HN crowd but somehow slipped by with a single upvote and zero comments.

The framing here is the interesting part. For decades, the dominant story about perception has been some flavor of predictive coding: the brain constantly generates predictions about incoming sensory data and only bothers to process the prediction errors. It's elegant, it maps neatly onto Bayesian inference, and it's been the reigning paradigm in computational neuroscience for a long time. But it has always had loose ends — particularly around how the brain decides which features of a noisy signal are worth preserving and which can be discarded.

The article appears to describe a newer framework rooted in lossy compression — essentially treating the brain as a rate-distortion system that trades fidelity for efficiency in principled, task-dependent ways. If you've ever tuned a JPEG quantization table or thought about why VAEs work, you already have the intuition. The brain isn't trying to reconstruct the world perfectly; it's trying to preserve the bits that matter for the organism's goals and throw away the rest.

Why this matters to a technical audience:

  • ML/neuroscience convergence. Rate-distortion theory, information bottlenecks, and sparse coding are all active areas in deep learning. Any principled account of biological compression is likely to feed back into representation learning research.
  • It reframes attention. Attention mechanisms in transformers are essentially learned compression schemes. Understanding how biological systems solve the same problem — with vastly less energy — is worth thinking about.
  • It's a genuine paradigm shift, not a press release. Quanta doesn't chase hype; if they're covering this, it means real theoretical work has landed.

The 1-point score is almost certainly a timing accident — Quanta articles routinely hit the front page when they're posted at the right moment. This one deserves eyes.

Why it deserves more upvotes: A serious Quanta piece on a new theoretical framework connecting neuroscience to lossy compression — exactly the ML-adjacent basic-science crossover HN usually devours.

HN Jobs Teardown

Follow Up Boss: What Their Hiring Reveals

2026-08-25

Source: HN Who is Hiring

Posted by: agentile

Of the ten postings, Follow Up Boss is the most revealing because it discloses what almost no one else does: a specific salary band ($150K–$162K), a specific business model (bootstrapped, profitable since 2011), and a specific scale metric (a billion emails processed per month). Everything else in the thread is generic pitch copy. This one is a strategy document in disguise.

1. The stack (by omission). Notice what's not mentioned: no React, no Go, no Kubernetes, no "modern data platform." A senior full-stack role at a real-estate CRM processing a billion emails/month almost certainly means a mature LAMP/PHP or Rails monolith with heavy queue infrastructure (Sidekiq, Resque, or SQS) and an aggressive email deliverability layer. The interesting choice is refusing to advertise the stack — they're filtering for engineers who care about the problem (email volume, deliverability, CRM data modeling) rather than resume-driven developers chasing the current hot framework.

2. Stage and direction. Nine years old, bootstrapped, profitable, remote-first, and hiring one senior engineer at a tight $12K salary band. This is a company that knows exactly what it needs and can't afford (or won't tolerate) a mis-hire. The Facebook reviews link instead of a Trustpilot or G2 badge suggests a scrappy, customer-obsessed culture rather than an enterprise-sales motion. They're not scaling headcount — they're patching a specific gap.

3. Skills and trends highlighted.

  • Deliverability engineering — a billion emails/month means SPF/DKIM/DMARC, IP warming, bounce processing, and ISP relationships are core competencies, not afterthoughts.
  • Vertical SaaS survival — real-estate CRM is a crowded space (BoomTown, kvCORE, Chime). Nine years of profitability without VC is the flex.
  • Remote-first before COVID normalized it — "mostly US-based team" written in March 2020 is a company that already had the muscle.

4. Flags.

  • Green: Salary posted upfront. Bootstrapped + profitable = no down-round risk. Narrow band signals they respect the market rate rather than lowballing.
  • Green: "Solve challenging technical problems" backed by a concrete scale number rather than hand-waving.
  • Yellow: $150–162K is fair for 2020 remote-senior work but modest for anyone with true email-infrastructure expertise — they may struggle to land the deliverability specialist they actually need.
  • Yellow: Single-role hire at a nine-year-old company can mean either "surgical addition" or "we lost someone critical."
The signal: Vertical SaaS companies that survived a decade without VC compete on transparency and problem-depth, not perks or prestige — and in 2020 that was still a differentiator.

Daily Low-Level Programming

The Machine Check Architecture (MCA) and MC Banks: How the CPU Escalates a DRAM Bit Flip Into a Log Entry Before It Silently Corrupts Your Data

2026-08-25

Every modern x86 CPU has a set of Machine Check banks — architectural MSRs (IA32_MCi_STATUS, IA32_MCi_ADDR, IA32_MCi_MISC, IA32_MCi_CTL) exposed per hardware unit: L1D, L2, L3, memory controller, QPI/UPI link, IOMMU, etc. A modern Xeon has 20–32 banks. When a hardware unit detects an error — an ECC-corrected bit flip in DRAM, a parity error on a cache line, a bus timeout, a TLB miscompare — it writes a structured record into its bank's STATUS register.

Two escalation paths exist:

  • Corrected Machine Check Interrupt (CMCI): hardware corrected the error (ECC single-bit flip fixed). Raises a threshold-based LAPIC interrupt. The kernel logs it and moves on. This is what feeds edac-util, mcelog, and rasdaemon.
  • Machine Check Exception (#MC, vector 18): uncorrectable. The CPU raises an NMI-like exception on the core that touched the bad data. The MCG_STATUS.RIPV bit tells you whether the saved RIP is meaningful (recoverable) or whether the core is basically wedged (PCC = Processor Context Corrupt → panic).

The magic bit is MCi_STATUS.AR (Action Required). If AR=1 and MCi_STATUS.S (Signalled) is set, Linux enters do_machine_check(), decodes the bank, and if it's a memory error with a valid physical address in MCi_ADDR, calls memory_failure() to unmap the offending page and SIGBUS the process that touched it — instead of panicking the box.

Real-world example. Google's 2009 DRAM study across their fleet found roughly 25,000–75,000 correctable errors per Gbit per year, with ~8% of DIMMs experiencing an error in a given year. Meta and Google both published follow-ups showing that a DIMM that logged one CE is dramatically more likely to log an uncorrectable one within 30 days. This is why hyperscalers scrape /sys/devices/system/edac/mc/mc*/ce_count hourly and preemptively drain nodes above threshold. The CE rate is the leading indicator; the UCE is the outage.

Rule of thumb. For an 8-bit SECDED ECC word protecting 64 bits of data, the probability of an undetected error (two bit flips in the same word between scrubs) is roughly C(72,2) × p² where p is per-bit flip probability. At consumer FIT rates (~1000 FIT/Mbit) and a 24-hour scrub interval, that's ~10⁻¹⁵ per word-day — which sounds tiny until you multiply by 10¹² words in a 1 TB server. Enable patrol scrub in BIOS; it walks DRAM in the background and turns latent CEs into logged-and-corrected CEs before two flips collide.

Read your banks with rdmsr 0x401 (MC0_STATUS) through 0x401 + 4×N, or just ras-mc-ctl --summary.

Key Takeaway: The MC banks turn silent hardware corruption into a structured, addressable event — a rising corrected-error count on one DIMM is the earliest and cheapest signal you'll ever get that a server is about to eat your data.

RFC Deep Dive

RFC 1073: Telnet Window Size Option

2026-08-25

RFC: RFC 1073

Published: 1988

Authors: David Waitzman

Every time you drag the corner of your terminal window and watch vim instantly reflow, you are relying on a mechanism first specified in October 1988 in a four-page RFC by David Waitzman. It is called NAWS — Negotiate About Window Size — and it is one of the quietest, most-used pieces of protocol machinery on your machine.

The problem. The original Telnet protocol assumed a Network Virtual Terminal that was, essentially, a teletype: an infinitely long roll of paper 80 characters wide. Once glass TTYs and windowed workstations arrived, this stopped working. Programs like vi, emacs, more, and curses-based full-screen apps needed to know two numbers — rows and columns — before they could paint the screen. On a local terminal, an ioctl(TIOCGWINSZ) answered that question. Across a Telnet session, there was no answer at all. Servers defaulted to 24×80 and pretended.

The design. Waitzman slotted a new option into Telnet's existing negotiation framework. Both sides exchange the standard IAC WILL NAWS / IAC DO NAWS handshake (option code 31). Once agreed, the client immediately sends a subnegotiation containing four bytes: width (16 bits, big-endian) and height (16 bits, big-endian), wrapped in IAC SB NAWS … IAC SE. Any subsequent resize triggers another subnegotiation. That is the whole protocol.

Two design choices are worth calling out. First, the width and height are 16 bits — extravagant in 1988, but it means the protocol has never needed a revision for HiDPI or ultra-wide displays. Second, because the reserved byte 0xFF (IAC) can appear inside a legitimate dimension (e.g. a 255-column window), Waitzman explicitly requires it to be doubled inside the payload — the same escape convention Telnet uses everywhere else. It is a tiny detail that a lot of hand-rolled implementations still get wrong.

Why it still matters. Telnet is effectively dead as a remote-shell protocol, but NAWS is not. When SSH was designed, the connection protocol (later RFC 4254) copied the pattern almost verbatim: a pty-req request carries the initial dimensions, and a window-change channel request carries updates — the same four 32-bit values (upgraded from 16 bits), sent on every SIGWINCH. That chain runs through everything modern: tmux resizing its panes, docker exec -it, kubectl exec, VS Code's remote terminal, GitHub Codespaces, Mosh. All of them are, at some layer, propagating a NAWS-shaped message.

A footnote of history. David Waitzman is better known for a different RFC he wrote three years later: RFC 1149, A Standard for the Transmission of IP Datagrams on Avian Carriers — the famous April Fools' spec for IP over homing pigeons. It is a nice reminder that the same engineer who wrote the joke about carrier pigeons also wrote one of the most invisibly-load-bearing extensions in the Unix world. Look at your terminal's title bar the next time you resize it: those four bytes crossing the wire are RFC 1073, still doing its job 38 years later.

Why it matters: NAWS is the reason every SSH session, container shell, and terminal multiplexer knows how big your window is — a 1988 Telnet extension that quietly became universal infrastructure.

Stack Overflow Unanswered

How to run ACMD41 successfully to initialize SDIO?

2026-08-25

Stack Overflow: View Question

Tags: c, embedded, stm32f4discovery, stm32cubeide

Score: 2 | Views: 59

The asker is bringing up the SDIO peripheral on an STM32F407 to write raw sectors to a microSD card in 4-bit mode. They're stuck on the standard SD initialization handshake — specifically ACMD41 (SD_SEND_OP_COND), which is the command that negotiates voltage and polls the card until it exits the busy state.

Why this is trickier than it looks: The SD physical-layer spec requires a very specific dance before ACMD41 will succeed, and any misstep silently produces a card that ignores you or returns a CRC error:

  • CMD0 (GO_IDLE_STATE) at ≤400 kHz clock — the card must be in identification mode.
  • CMD8 (SEND_IF_COND) with pattern 0x1AA — mandatory for SDHC/SDXC cards. If you skip it, the card assumes you're a legacy host and will refuse HCS=1.
  • ACMD41 is really two commands: CMD55 (APP_CMD) immediately followed by CMD41. You must send CMD55 before every ACMD41 retry, not just once.
  • The argument to CMD41 must set the HCS bit (bit 30) if CMD8 succeeded, and include the correct VDD window (typically 0x00FF8000).

Direction toward a solution: Without the code, the most likely culprits on STM32F4 SDIO are:

  • Response type mismatch. ACMD41 returns R3, which has no CRC. If SDIO_CMD is configured for a short response with CRC check enabled, the hardware sets CCRCFAIL — you must ignore that flag for R3 and read SDIO_RESP1 anyway.
  • Polling loop. Bit 31 of the OCR is the "power-up busy" flag. It starts at 0 and flips to 1 when the card is ready. Loop CMD55+ACMD41 until bit 31 is set, with a ~1 second timeout.
  • Clock and pull-ups. Init must happen at ≤400 kHz. Bump to 25 MHz only after CMD3. Also verify external pull-ups on DAT0..DAT3 and CMD — the STM32F4 Discovery boards don't provide these on breakout headers.
  • CMD55 RCA argument. Before the card has an RCA (during init), CMD55's argument must be 0x00000000. After identification, it must be RCA << 16.

Gotchas: A common trap is enabling the SDIO clock output (CLKEN) only when sending a command — the card needs 74+ clocks of idle activity before CMD0. Also, some microSD cards are unusually picky about VDD window bits; if you send 0x40000000 alone (just HCS), older cards return an invalid response.

The challenge: SDIO init failures usually aren't about ACMD41 itself — they're about a subtle violation of the handshake sequence, response-type flags, or clock/pull-up conditions that the peripheral reports only as a generic timeout.

Daily Software Engineering

The Controller with Level-Triggered Reconciliation Pattern: Why Kubernetes Ignores Events and Reads State Instead

2026-08-25

Most systems you've built are edge-triggered: something happens, you react to that specific event. A message arrives, you process it. A button is clicked, you handle the click. Miss the event, miss the work.

Level-triggered flips this. The controller doesn't care what changed or how many times — it periodically reads the current desired state and current actual state, then reconciles the difference. Events are just hints to reconcile sooner; they're never load-bearing.

This is why Kubernetes controllers feel weirdly robust. If a Pod gets deleted, the ReplicaSet controller doesn't process a "pod deleted" event and decrement a counter. It reads "desired: 3 replicas, actual: 2 replicas" and creates one. If it misses ten deletion events in a row because it was down, it doesn't matter — the next reconciliation reads the same truth and does the same work.

Concrete example: imagine a controller that syncs GitHub team membership to your internal SSO. The edge-triggered version subscribes to webhooks: "user added," "user removed." If GitHub drops a webhook (they do — check their status page), your SSO drifts silently. The level-triggered version periodically lists all GitHub team members, lists all SSO members, and computes the diff. Webhooks still fire the reconciliation immediately, but they only accelerate work — they don't cause it. Miss every webhook for a week and the next tick still converges.

The tradeoff is latency vs. correctness. Edge-triggered can react in milliseconds but drifts on any dropped event. Level-triggered has a floor equal to your reconciliation period but is self-healing. Combining them — events as hints, periodic resync as the safety net — gives you both.

Rule of thumb: if you're building anything that maintains state across a network boundary, ask "what happens if I miss an event?" If the answer is "the system drifts and stays drifted," you need level-triggered semantics. Set your resync period to max_acceptable_drift / 2. If users can tolerate 10 minutes of staleness, resync every 5.

Watch out for: "list everything every 30 seconds" doesn't scale. Real controllers use informers with local caches populated by watch streams, then reconcile from the cache. The cache is level-triggered (full resync on reconnect); the reconciliation logic reads from it. You get event-speed reactions with periodic-scan correctness.

See it in action: Check out Kubernetes Architecture Explained End to End: From API Request to Running Pods by CipherVibe to see this theory applied.
Key Takeaway: Edge-triggered controllers react to events and drift when events are lost; level-triggered controllers read current state and converge regardless of what they missed.

Tool Nobody Knows

spiped: The Symmetric-Key Encrypted Pipe Daemon That Replaces ssh -L When You Don't Actually Want SSH

2026-08-25

Colin Percival (of tarsnap and scrypt fame) wrote spiped in 2011 for tarsnap's own infrastructure. It creates authenticated, encrypted TCP pipes between two IP:port pairs using a preshared 32-byte key. No SSH daemon. No user accounts. No TLS certs to rotate. Just a keyfile on both ends.

Install: apt install spiped — it's been in Debian since 2013 and nobody uses it.

The setup

Generate a key once and copy it (mode 600) to both hosts:

dd if=/dev/urandom of=pg.key bs=32 count=1

Server side — accept encrypted traffic on 8022, forward plaintext to local Postgres:

spiped -d -s '[0.0.0.0]:8022' \
       -t '[127.0.0.1]:5432' \
       -k /etc/spiped/pg.key

Client side — accept plaintext on 15432, encrypt, ship to the server:

spiped -e -s '[127.0.0.1]:15432' \
       -t 'db.example.com:8022' \
       -k /etc/spiped/pg.key

Now psql -h 127.0.0.1 -p 15432 talks to remote Postgres over an authenticated, encrypted pipe with perfect forward secrecy. No SSH tunnel. No stunnel. No HAProxy.

Why not just ssh -L?

ssh -L is a jack-of-all-trades tunnel: it requires sshd running on the far end, a user account, keys or passwords for that user, and an SSH session that stays up (which is why autossh exists). Every one of those is a moving part. spiped needs one file and a daemon that starts at boot.

The wire protocol is deliberately narrow: HMAC-SHA-256 authenticates the handshake, then per-connection ephemeral Diffie-Hellman produces AES-CTR + HMAC-SHA-256 session keys. A compromised keyfile today does not decrypt yesterday's captured traffic.

The tricks that actually pay off

Exposing an unauthenticated service. Redis, memcached, and old-school Postgres have laughable or no wire security. Bind them to 127.0.0.1 and let spiped be the internet-facing listener. Port scanners just see a socket that accepts and drops — no version banner, no error message, no distinguishing feature.

Machine-to-machine trust without users. In replication or monitoring flows you want host A to talk to host B, not user shaun@A to log into B. spiped models that directly: the trust lives between the hosts, not between a person and a host. No authorized_keys to audit.

Timing-safe handshake. Both sides run the full protocol before either learns whether the peer has the right key. Nmap sees the same behavior whether you know the secret or not.

Slow-loris resistant. -o <seconds> bounds the handshake; incomplete connections get axed. -n <count> caps concurrent connections. Real production knobs.

systemd-friendly. Foreground mode with -F, a real pidfile with -p, and a clean exit on SIGTERM. Drop it into a unit file and forget it exists.

Key rotation without downtime. Start a second spiped on a new port with the new key, migrate clients, kill the old daemon. No CA to reissue, no cert chain to rebuild.

Weight: about 3,000 lines of C, one dependency (OpenSSL for AES/SHA primitives), no config file format to memorize. It has been running unchanged in tarsnap's production since before Docker existed.

Key Takeaway: When two hosts you control need an authenticated encrypted TCP pipe, spiped replaces the SSH tunnel, the stunnel config, and the cert rotation cron with one 32-byte keyfile and a daemon that just runs.

What If Engineering

What If We Built a Skyscraper-Sized Gravitational Lens Out of Water — A Kilometer-Wide Pool That Focused Sunlight to Boil a Reservoir?

2026-08-25

Forget mirrors. A pool of water shaped like a plano-convex lens will refract sunlight just fine — n = 1.33, no silver coating required. If we could machine a kilometer-wide "water lens" and hold its shape, could it replace a concentrated solar power plant?

The lensmaker's equation, blown up. For a plano-convex lens with one flat side, focal length is f = R / (n − 1), where R is the curved surface's radius of curvature. For water, that's f ≈ 3R. If we want a focal length of 500 m (a reasonable tower height for the receiver), we need R ≈ 165 m. A 1 km diameter lens with that curvature has a sagitta (center thickness above the edges) of s ≈ D²/(8R) ≈ 758 m. That's absurd — the "lens" would be taller than the Burj Khalifa.

So we cheat: use a Fresnel-style water lens. Concentric annular troughs, each shaped like a slice of the ideal curve, tiled across a 1 km disk. Each ring is maybe 2 m thick. Now the whole lens fits in a shallow basin — think a segmented aquaculture pond with precision-molded transparent membranes on top.

Power budget. Solar irradiance is ~1000 W/m². A 1 km disk intercepts π × (500)² × 1000 ≈ 785 MW of sunlight. Water absorbs light non-trivially in the near-IR — the absorption coefficient averaged across the solar spectrum through 2 m of water is roughly 30–40%. Call the transmission efficiency 60%, and Fresnel losses at the air/water interface another 4%. Useful throughput: ~450 MW at the focus. That's Ivanpah-scale, with no mirrors.

The focal spot is enormous. Chromatic aberration is brutal — water's refractive index varies from 1.344 (blue) to 1.331 (red), a 1% spread. Focal length varies by the same fraction: Δf ≈ 5 m. Combined with the finite angular size of the sun (0.53°), the focal spot at 500 m is roughly 500 × tan(0.27°) ≈ 2.4 m radius from solar divergence alone, and several meters from chromatic smear. Peak flux: 450 MW / (π × 3²) ≈ 16 MW/m². That's ~16,000 suns — enough to vaporize steel, easily enough to superheat a molten salt loop.

Now the deal-breakers.

  • Wind. A membrane holding 2 m of water in a curved shape flexes catastrophically at 10 m/s wind. You'd need the whole thing indoored under an ETFE cushion — doubling the losses.
  • Sun tracking. Refractive lenses don't gimbal. You'd need the receiver tower on rails, tracing a 500 m arc across the ground as the sun moves. Or — better — accept a fixed north-tilt and only run at solar noon ±2 hours.
  • Thermal blooming. The lens itself warms unevenly, changing n and defocusing the beam. Circulating the water helps but costs pumping energy — ~5 MW to turn over the pool hourly.
  • Algae. A warm, sunlit, kilometer-wide pond becomes a swamp in weeks. Requires continuous UV sterilization and filtration, or an inert fluid overlay.

The verdict. A heliostat field of the same footprint delivers ~500 MW with 92% mirror efficiency, tracks trivially, and doesn't grow algae. The water lens is engineering poetry — but PS10 wins on every axis except aesthetics.

Key Takeaway: Water is a perfectly good lens material until you try to make one bigger than a swimming pool — then chromatic aberration, wind loading, and biology conspire to make mirrors look like geniuses.

Wikipedia Rabbit Hole

Anderton Boat Lift

2026-08-25

In 1875, in a quiet corner of Cheshire, England, engineers solved a problem that had vexed canal builders for a century: how do you move a fully-loaded canal boat vertically by 50 feet without locks, without pumps, and without wasting a single drop of water? Their answer was so elegant it borders on magic — two enormous water-filled tanks that lift each other.

The Anderton Boat Lift connects the Trent and Mersey Canal to the River Weaver, which sits 50 feet below. Before the lift, cargo had to be laboriously transferred between vessels via chutes. The engineer Edwin Clark realized that if he built two water-filled caissons (essentially giant bathtubs, each holding 250 tons of water and a boat) and connected them via hydraulic rams beneath the ground, the descending caisson could push the ascending one upward.

Here's the clever bit: because the caissons displace their own weight in water regardless of what floats in them, a caisson with a barge weighs the same as a caisson without one. Archimedes gets the credit. This means the lift is naturally balanced — you only need a tiny bit of extra water on the descending side (about six inches deep) to overcome friction and drive the whole system. No steam engine required for the lift itself; just gravity and hydraulic pressure between the two rams.

It worked beautifully — until it didn't. Canal water is nasty stuff. By 1908, corrosion in the hydraulic rams was so severe that the lift was rebuilt with a completely different system: counterweights and electric motors, with each caisson operating independently. That version ran until 1983, when corrosion again forced closure. Then, in 2002, restorers did something delightfully retro — they reverted to Clark's original 1875 hydraulic design, only this time using modern oil-filled rams instead of water-filled ones, sidestepping the corrosion problem entirely.

The Anderton is now considered the world's first successful boat lift and inspired similar machines across Europe, most spectacularly the Strépy-Thieu boat lift in Belgium, which raises 8,000-ton vessels through 240 feet — nearly five times the Anderton's rise. The Falkirk Wheel in Scotland uses the same balancing principle but rotates like a Ferris wheel instead of moving vertically.

What makes the Anderton special isn't just that it works. It's that the same physics Clark exploited in 1875 still governs the newest boat lifts being built today. Chinese engineers used counterweighted variants at the Three Gorges Dam ship lift (2016), which handles vessels weighing 3,000 tons through a rise of 370 feet — the largest in the world. The underlying insight hasn't changed: if you can balance two masses against each other, gravity does most of the work for free.

Down the rabbit hole: A Victorian engineer figured out how to lift 250-ton canal boats using nothing but water pushing back against itself — and modern engineers still copy the trick.

Daily YT Documentary

CASE FILE #640: The Murder of Emma Caldwell | 19 Years Until Justice

2026-08-25

CASE FILE #640: The Murder of Emma Caldwell | 19 Years Until Justice

Channel: Real Deal Crime Stories (152 subscribers)

On 4 April 2005, 27-year-old Emma Caldwell was last seen on CCTV walking through Glasgow's south side. Her body was discovered five weeks later in remote woodland near Biggar, roughly 40 miles from where she vanished. What followed was one of the most troubling and prolonged investigations in modern Scottish criminal history — a case that took nineteen years to reach a conviction.

This documentary is worth watching because it goes beyond the crime itself to examine the systemic failures that delayed justice for so long. Early in the investigation, Police Scotland pursued four Turkish men for years, a line of inquiry that ultimately collapsed. Meanwhile, the actual suspect — Iain Packer — had been interviewed and dismissed early on despite mounting evidence and testimony from other women he had assaulted. The case became a landmark examination of how investigative tunnel vision, mishandled witness accounts, and institutional resistance can bury the truth in plain sight.

For viewers interested in criminal justice, forensic timelines, and the mechanics of cold-case review, this is a substantive breakdown rather than sensationalized true crime. It illustrates how a 2015 BBC investigation, journalist Sam Poling's dogged reporting, and eventually a public inquiry forced the case back open — leading to Packer's 2024 conviction on 33 charges, including Caldwell's murder.

Why watch: A carefully documented look at how investigative failures — not lack of evidence — kept a killer free for nearly two decades.

Daily YT Electronics

ESP32 Blue Jammer an opensource RF ESP32 project WiFi jammer #wifijammer

2026-08-25

ESP32 Blue Jammer an opensource RF ESP32 project WiFi jammer #wifijammer

Channel: Electronics Curiosities (7610 subscribers)

Of today's crop, this is the only video that engages with a substantive engineering topic — the rest are beginner breadboard demos, hashtag-spam shorts, or vague build teasers. The ESP32-BlueJammer is an open-source project that exploits the ESP32's built-in 2.4 GHz radio to flood Bluetooth and BLE channels with deauthentication-style noise, and it's a genuinely interesting piece of RF hardware to understand from a defensive perspective.

Watching a walkthrough like this is useful even if you never intend to build one: it demonstrates how cheap and small a purpose-built RF disruptor has become, which matters if you're designing IoT products, running a wireless network, or auditing physical security. The video should cover the hardware (a bare ESP32 module, antenna, small battery), the firmware's approach to sweeping channels, and the practical range and limitations of a $5 microcontroller pretending to be an SDR.

Legal caveat worth stating up front: operating an RF jammer is illegal in most jurisdictions (US, UK, EU, etc.) outside of licensed lab environments. The value here is in understanding the attack surface — how BLE keyboards, fitness trackers, and smart locks fail when their radio environment is hostile — not in actually deploying one.

Why watch: A concrete look at how a $5 ESP32 can disrupt 2.4 GHz wireless, useful for anyone designing or defending BLE/WiFi devices.

Daily YT Engineering

Does an Open Refrigerator Cool a Room?

2026-08-25

Does an Open Refrigerator Cool a Room?

Channel: The Physics of Everything (1010 subscribers)

This video takes a deceptively simple household question — "if I leave the fridge door open, will my kitchen get cooler?" — and uses it as a doorway into the second law of thermodynamics. The initial rush of cold air feels like a win, but that intuition falls apart once you account for the whole system.

A refrigerator is a heat pump: it moves thermal energy from the cold interior to the warm coils on the back, and the compressor doing that work dumps additional heat into the room as a byproduct. Net energy in a closed kitchen: strictly positive. The room actually gets warmer, not cooler.

What makes this worth watching is that it's a concrete, visual way to internalize why perpetual motion and "free cooling" schemes fail. The same reasoning explains why data centers need chillers outside the building, why your gaming PC heats your bedroom in the summer, and why an air conditioner has to vent its hot side outdoors to actually work. Once the mental model clicks, a lot of engineering constraints stop feeling arbitrary.

At just over 1000 subscribers, the channel is small enough that the explanation feels crafted rather than algorithm-chasing, and the framing around an everyday object makes an abstract law tangible.

Why watch: A everyday thought experiment that makes the second law of thermodynamics and the concept of heat pumps click intuitively.

Daily YT Maker

Prepping for Next Level Maker Conference: Trading Pins Done Right

2026-08-25

Prepping for Next Level Maker Conference: Trading Pins Done Right

Channel: My Simple Builds (507 subscribers)

Trading pins are a beloved tradition at maker conferences — small handmade tokens that get swapped between attendees as a form of physical business card and community glue. This video follows a small-channel maker prepping their first batch for Next Level Maker Conference, and rather than jumping straight to the cutter, they walk through the design decisions before committing material.

Expect coverage of file setup, material selection, sizing considerations, and the small-run production workflow that separates a pin someone actually wants to keep from one that ends up in a drawer. For anyone who does laser cutting, CNC, or 3D printing for small merch runs — swag for a booth, gifts for a meetup, prototypes for a Kickstarter — the process transfers directly.

What makes this worth the click over a generic "how I made a pin" video is the context: it's a real deadline, a real event, and a maker thinking out loud about tradeoffs they haven't optimized away yet. That's often more instructive than a polished tutorial from someone who's done it a hundred times, because you see the actual decision points instead of a rehearsed result.

Why watch: A practical look at small-run maker merch design, with the planning stage that most tutorials skip over.

Daily YT Welding

Plasma Cutter Precision Cut on Steel Angle Iron | Fast Metal Cutting Technique

2026-08-25

Plasma Cutter Precision Cut on Steel Angle Iron | Fast Metal Cutting Technique

Channel: STEELROCK WORKSHOP (2860 subscribers)

Note: this week's crop leaned heavily toward Shorts, hashtag spam, and background-music cutting footage. This is the strongest of a weak lineup — a hand-held plasma demo rather than a deep tutorial.

STEELROCK Workshop focuses on a task that trips up a lot of hobbyists moving from grinder-and-cutoff-wheel to plasma: clean, square cuts on structural angle iron. Angle stock is deceptively hard to cut well by hand — the two legs sit at 90°, so the torch has to transition around a corner without dwelling and blowing out the kerf, and any tilt telegraphs straight into your weld fit-up downstream.

The value in a video like this is watching torch angle, standoff distance, and travel speed on a real workpiece rather than on flat plate. Pay attention to how the operator indexes the cut line, whether they use a straightedge or freehand, and how they handle the corner transition. Dross on the underside is the tell — a clean bottom edge means amperage, speed, and air pressure are all in the right window.

For anyone fabricating gates, frames, brackets, or trailer components, angle iron is the daily driver material. Getting comfortable cutting it fast and square with a plasma torch saves an enormous amount of grinding time compared to abrasive wheels, and produces edges that need minimal prep before welding.

Why watch: A practical look at hand-held plasma technique on angle iron — a common structural shape where torch control matters more than on flat plate.

All newsletters