26 newsletters today.
Abandoned Futures
2026-05-26
On December 10, 1963, Secretary of Defense Robert McNamara walked into a press briefing and canceled the most advanced aerospace project in the world. The Boeing X-20 Dyna-Soar — short for "Dynamic Soarer" — had consumed $660 million (roughly $6.7 billion in 2026 dollars), employed over 7,000 engineers across 11 prime contractors, and was within 18 months of its first piloted flight. A full-scale mockup existed. Six pilots had been selected, including a young Neil Armstrong. Boeing's Seattle plant had begun cutting metal on the flight vehicle. And then it was simply gone.
What it was: The X-20 was a single-pilot, delta-winged spaceplane designed to be launched atop a Titan III booster, perform military missions in low Earth orbit — reconnaissance, satellite inspection, even bombardment — and then glide back to a conventional runway landing at speeds up to Mach 18. Unlike the ballistic Mercury capsules splashing into the ocean, Dyna-Soar would land on skids at Edwards Air Force Base like an airplane. The program had been running since 1957, evolving out of Walter Dornberger's wartime Silbervogel antipodal bomber concept.
The engineering was genuinely radical for 1963:
Why it died: McNamara's cancellation rationale was that Dyna-Soar lacked a defined mission — was it a bomber? A reconnaissance platform? A satellite interceptor? The Air Force kept changing the answer. Money was redirected to the Manned Orbiting Laboratory (MOL), which was itself canceled in 1969 without ever flying a crew. The real killer was bureaucratic: McNamara's systems-analysis Pentagon demanded mission-justified cost accounting, and a do-everything spaceplane couldn't survive that scrutiny. Meanwhile NASA's Apollo program was vacuuming up the political oxygen.
Why 2026 should resurrect the architecture: Every problem that killed the Shuttle — fragile tiles, multi-month turnaround, no abort modes during ascent — Dyna-Soar had already solved with 1963 metallurgy. Now consider what we have:
The Sierra Space Dream Chaser, flying cargo to the ISS in 2024, is essentially a fat Dyna-Soar with composite skin — vindication, 61 years late. The Air Force's own X-37B has flown seven classified missions performing exactly the orbital-inspection role Dyna-Soar was designed for. We rebuilt the concept piecemeal, badly, after throwing away the original.
Daily Automotive Engines
2026-05-26
The pickup tube is the unsung hero hanging off the bottom of your oil pump — a simple piece of bent steel tubing with a screen on the end, submerged in the oil pan. It's the straw your engine drinks through, and if it ever loses its grip on the oil, your bearings start eating themselves within seconds.
The geometry that matters: The pickup sits roughly 1/4" to 3/8" off the pan floor. Too close and it restricts flow (the pump fights to pull oil through a narrow gap); too far and it sucks air during low oil levels or hard cornering. The screen mesh is typically 40-60 microns — coarse enough to flow freely but fine enough to catch chunks before they wreck the pump gears.
How starvation happens:
Real-world example: The C5/C6 Corvette LS engines are famous for spinning rod bearings on track days. The factory pan is shallow (for ground clearance) and the pickup gets uncovered in sustained high-g corners. The fix is a deeper Accusump-fed pan, a trap-door baffled pan (like the Improved Racing kit), or — better — a dry sump conversion. GM eventually addressed this with the Z06 dry sump system from the factory.
Rule of thumb — pickup-to-pump matching: The pickup tube ID should be at least as large as the pump inlet, and ideally 10-15% larger to avoid cavitation. A 5/8" pump inlet wants a 3/4" pickup tube. Cavitation at the pickup creates vapor bubbles that collapse inside the pump, eroding the gear faces and causing pressure fluctuations that show up as needle-bouncing on your gauge.
Installation gotcha: Always tack-weld or use a support brace on the pickup tube. The factory press-fit into the pump body relies on a friction joint that can vibrate loose. A pickup that drops 1/2" in the pan during a 7000 RPM pull will uncover itself and end your engine before you can lift off the throttle.
Daily Debugging Puzzle
Object.keys Integer Key Trap: The Insertion Order That Isn't2026-05-26
This function tracks the order in which API endpoints first appear in a request log. It returns the list of unique endpoint names in first-seen order, which the downstream scheduler uses to round-robin between them fairly.
// Returns unique endpoints in the order they were first seen.
function endpointOrder(requests) {
const counts = {};
for (const endpoint of requests) {
counts[endpoint] = (counts[endpoint] || 0) + 1;
}
return Object.keys(counts);
}
const log = [
'api/users',
'api/posts',
'404', // numeric error-code "endpoint" used by a legacy probe
'503',
'api/login',
'api/users',
];
console.log(endpointOrder(log));
// Expected: ['api/users', 'api/posts', '404', '503', 'api/login']
// Actual: ['404', '503', 'api/users', 'api/posts', 'api/login']
The function looks airtight. Modern JavaScript engines have preserved object property insertion order since ES2015, so iterating Object.keys should just give back what you put in, right?
JavaScript's "insertion-order" guarantee for plain objects has a sharp asterisk that bites surprisingly often. The actual OrdinaryOwnPropertyKeys algorithm orders keys in three buckets:
ToString(ToUint32(key)) (i.e., look like canonical non-negative 32-bit integers) — appear first, in ascending numeric order.So when you set counts['404'], the engine notices '404' is an integer-index key and silently slots it ahead of any string key, sorted against other integer-index keys. '404' < '503' numerically, so they land in that order — even though '503' was inserted later, and both came after the api/* keys.
This bites anywhere user-controlled strings can resemble integers: HTTP status codes used as map keys, ZIP codes, product SKUs that happen to be all digits, year strings, language tag fragments. Your tests pass with alphanumeric fixtures and break in production the day someone logs in with username "42".
Worse, JSON.stringify uses the same key order, so serialized output silently reorders too — breaking any consumer that signs or hashes a canonical JSON form.
The fix is to stop using plain objects as ordered maps. Map preserves true insertion order for all key types, including numeric strings, and doesn't conflate property keys with array indices:
function endpointOrder(requests) {
const counts = new Map();
for (const endpoint of requests) {
counts.set(endpoint, (counts.get(endpoint) || 0) + 1);
}
return [...counts.keys()];
}
If you must keep an object, maintain insertion order separately (e.g., a parallel array of keys), or prefix numeric keys with a non-digit sentinel ('k:404') so the engine doesn't classify them as integer-indexed.
Note that the bucket boundary is the canonical 32-bit unsigned integer form. '01', '4.0', '-1', and '4294967296' are not integer-indexed and stay in insertion order. '0', '42', and '4294967294' are. This irregularity makes the bug feel random when you first encounter it: the same code reorders some numeric strings and not others.
Map whenever your keys might be numeric strings and order matters.
Daily Digital Circuits
2026-05-26
Standard CMOS gates use complementary pairs: a PMOS network pulls the output to VDD, an NMOS network pulls it to GND. Every input drives a gate terminal, never a source or drain. Pass transistor logic (PTL) breaks that rule. The input signal itself flows through the transistor channel to the output, with another signal controlling the gate. The transistor acts as a switch, not an amplifier.
The classic example is a 2:1 multiplexer. In CMOS, you'd need an inverter plus AOI gates — roughly 10 transistors. In PTL, you need exactly two NMOS transistors: one passes A when select is high, the other passes B when select is low. Four transistors with the complementary pass-gate (CPL) variant. That's a 2-3x area win.
But there's a brutal catch. An NMOS transistor passes a strong 0 but a weak 1. When you try to pass VDD=1.0V through an NMOS, the output only reaches VDD − Vt ≈ 0.6V because the transistor turns itself off as the source voltage approaches the gate voltage. Your "logic 1" is degraded. PMOS has the opposite problem — strong 1, weak 0.
This is why real designs use transmission gates: an NMOS and PMOS in parallel, controlled by complementary signals. Now both polarities pass cleanly. Cost: you need both the control signal and its inverse, plus 4 transistors instead of 2. Still beats full CMOS for muxes and XOR gates.
XOR is where PTL really shines. Full CMOS XOR needs 12 transistors (or 8 with shared inverters). A pass-transistor XOR with transmission gates does it in 6. Multipliers and adders — which are XOR-heavy — get noticeably smaller. ARM's early low-power cores used pass-transistor adders extensively.
Rule of thumb: threshold drop is roughly Vt ≈ 0.3-0.5V in modern processes. At VDD=1.0V, a single NMOS pass transistor delivers ~0.5-0.7V — barely above the next stage's switching threshold. After 2-3 cascaded pass transistors, you've lost so much signal that you must insert a CMOS buffer to restore levels. This is why PTL chains are kept short and always terminated by a static CMOS gate.
The other gotcha: PTL outputs aren't actively driven when all pass transistors are off. The output node floats, holding its last value on parasitic capacitance — for nanoseconds, before leakage corrupts it. Always ensure at least one pass path is enabled, or add a keeper.
Daily Electrical Circuits
2026-05-26
A complementary emitter-follower (Class-B push-pull) output stage uses an NPN transistor to source current on positive swings and a PNP to sink current on negative swings. The problem: each BJT needs ~0.6 V of VBE before it turns on. Near the zero-crossing, both transistors are off simultaneously, creating a dead zone of roughly ±0.6 V where the output sticks at zero. The audible result is harsh, buzzy crossover distortion — especially obnoxious at low listening levels where the signal spends most of its time near zero.
The fix is Class-AB biasing: hold both transistors just barely conducting at idle, so when the signal crosses zero, one device is already taking over from the other. The classic technique places two diode drops between the NPN and PNP bases — typically two forward-biased diodes or, better, a VBE multiplier (a transistor with a resistor divider between collector and base, giving an adjustable, thermally-tracking bias of n·VBE).
Why the VBE multiplier matters: output transistors heat up under load, and VBE drops about 2 mV/°C. If your bias source doesn't track that drop, quiescent current rises with temperature, the transistors heat further, and you get thermal runaway — a dead amplifier with melted solder. Mounting the bias-multiplier transistor on the same heatsink as the output devices forces its VBE to fall in lockstep, holding idle current stable.
Real-world example: A 20 W into 8 Ω hi-fi amplifier output stage. Peak output current is √(2·20/8) ≈ 2.2 A. You'd choose TIP41C/TIP42C complementary BJTs, set quiescent current around 20–50 mA (enough to keep both devices in conduction through the crossover region, low enough that idle dissipation is reasonable), and add 0.22 Ω emitter degeneration resistors in series with each output transistor. Those small resistors add local negative feedback that further stabilizes bias against temperature and forces current sharing if you parallel devices.
Rule of thumb for quiescent current: set IQ so the voltage across each emitter resistor is roughly 10–25 mV. For 0.22 Ω resistors, that's 45–115 mA — the sweet spot where crossover artifacts disappear without wasting power. Adjust the VBE multiplier's trim pot while measuring this voltage with the input shorted.
Wrap the whole output stage inside a global op-amp feedback loop and residual crossover distortion drops by another 40+ dB, but the feedback can't fix what the bias gets badly wrong — start with a properly biased stage, then let feedback polish it.
Daily Engineering Lesson
2026-05-26
When you switch off current flowing through any real-world load, the parasitic inductance in the wiring and the load itself fights back. The collapsing magnetic field generates a voltage spike (V = L·di/dt) that can punch through transistor junctions, weld relay contacts, or excite high-frequency ringing that radiates EMI across the entire enclosure. A snubber is a small network — usually a resistor and capacitor — placed across the switch or load to absorb that energy and damp the oscillation.
Snubbers solve a different problem than flyback diodes. A flyback diode only works for DC inductive loads and clamps voltage in one direction. Snubbers work on AC circuits, across relay contacts being arced apart, and across TRIACs and SCRs where you need to limit dV/dt (the rate of voltage change) to prevent false triggering.
The three common topologies:
Sizing rule of thumb for an RC snubber across relay contacts:
Example: A 24 VDC relay switching a 2 A solenoid. C ≥ 2²/10 = 0.4 µF (use 0.47 µF), R ≈ 24/(10·2) = 1.2 Ω (use 1 Ω or 2.2 Ω). The cap must be rated for at least 2× the supply voltage; for AC mains snubbers, use an X2-rated film capacitor — never electrolytic.
A real-world gotcha: putting an RC snubber across a TRIAC controlling a motor or transformer is mandatory, not optional. The inductive load's current lags voltage, so at the natural commutation point there's still significant dV/dt — without a snubber, the TRIAC re-triggers spuriously and never turns off. Standard values are 100 Ω and 0.1 µF for typical 120/240 VAC loads.
If you hear a relay buzz or see contact pitting after a few hundred cycles, you need a snubber.
Forgotten Books
2026-05-26
Book: American Fruit Grower 1919-05: Vol 39 Iss 5 by Unknown (1919)
Read it: Internet Archive
In a May 1919 issue of American Fruit Grower — a trade magazine read by orchardists and farmers across rural America — United States Tires ran a full-page advertisement built around an analogy that would baffle most modern readers, but which perfectly captured a country teetering between two ages of transportation:
"You Wouldn't Have Your Best Horse Poorly Shod! Unsuitable tires will cripple an automobile as surely as poorly fitted shoes will lame a horse. Your car must be properly shod to give its best and most economical work. Give it tires you know are exactly suited to its use—tires that are perfectly adapted to the roads you travel."
The ad goes on to promise "five separate types for passenger cars and both pneumatic and solid for trucks" — yes, solid rubber truck tires were still on sale in 1919, decades after pneumatic tires were invented.
The forgotten knowledge here isn't a recipe or remedy — it's a vanished mental model. In 1919, the American farmer didn't think of a car as a machine; he thought of it as a vehicle, in the older sense — something to be matched to roads the way a draft horse is matched to a plowed field versus a gravel lane. You picked tires the way you'd pick horseshoes: for the terrain, the load, and the duration of the journey. A "best horse poorly shod" was a real, painful, expensive problem any reader would have lived through.
What's striking is how right the analogy was, biomechanically. A horse's hoof is a fingernail under load; the wrong shoe causes lameness through bruising, splaying, or uneven wear. A car tire is, similarly, the only contact patch between a multi-ton machine and the ground. The 1939 Firestone ad in the same magazine archive — twenty years later — is still selling the same idea with more science: "Triple-Braced and Continuous" traction bars, tread "Guaranteed Not to Loosen," "21% Flatter Tread provides greater shoulder traction." The horse metaphor is gone, but the underlying claim — that ground contact geometry determines economy — is identical.
What modern drivers have forgotten:
The next time your EV's adaptive cruise control politely warns about reduced traction, remember: a fruit grower in 1919 was already being told, in the language of horseshoes, that the contact patch was everything.
Forgotten Darkroom
2026-05-26
Book: Remarks by General C. P. Cabell, USAF Deputy Director of Central Intelligence to the Tarrant County Medical Society, Fort Worth, Texas, 20 December 1960 by CIA Reading Room (1960)
Read it: Internet Archive
In December 1960, with Sputnik recently in orbit, Castro freshly in Havana, and the West gripped by a creeping fatalism about Soviet inevitability, the Deputy Director of the CIA gave a speech to a room of Texas doctors. General Charles P. Cabell — the man who would be fired by Kennedy four months later over the Bay of Pigs — opened not with a threat assessment, but with a folksy parable about a farmer seeing his first locomotive:
"They studied it as it was standing in the station and the Mrs. turned to her husband and said, 'Pa, what do you think?' Pa said, 'It'll never run, it'll never run.' Well, the train pulled out, and, as it disappeared around a bend the Mrs. turned again and said to Pa, 'Now what do you think?' Pa shook his head, and answered, 'It'll never stop, it'll never stop!'"
Cabell was diagnosing a national mood swing. He continued:
"For years many people in this country were of the opinion that the Soviet Union could never become a going concern... More recently, however, there is a growing body of opinion abroad and in this country which is willing to grant practically unlimited capabilities and potentialities to the Soviet Union and its Communist allies. This view is also the Communist view. Moscow tells us in millions of words daily that Communism represents the wave of the future."
This is the forgotten claim: that in 1960, when Khrushchev was banging shoes at the UN and Western intellectuals were writing earnest books about convergence theory, a senior US intelligence officer was publicly arguing that the "inevitability of Communism" was itself a Soviet psyop — a manufactured perception, not an analytical conclusion. He explicitly identified elite Western pessimism as a Soviet propaganda asset.
Was he ahead of his time? Profoundly. Consider what the consensus actually was:
Cabell, in a speech to a medical society in Fort Worth, told the truth nobody in academic economics or the punditry would admit for another thirty years: that the appearance of unstoppable momentum was being sold, and that sensible people were buying it.
His train metaphor has a modern echo. Substitute "Communism" with whatever current technology, ideology, or market trend is currently being declared inevitable — AI doom, crypto, China's rise, American decline — and Cabell's framework still cuts. The same person who once said "it'll never run" tends, with no intervening update, to say "it'll never stop." The error isn't the direction of the prediction; it's the willingness to extrapolate any momentum to infinity. Trains, in fact, run and then stop.
Forgotten Patent
2026-05-26
On January 15, 1968, a 46-year-old engineer at defense contractor Sanders Associates filed a patent that would seed an entire industry — yet he did it in secret, on his own time, using a TV set, a few transistors, and a hand-drawn schematic he'd sketched on a bus-station notepad two years earlier. Ralph H. Baer's US Patent 3,728,480, "Television Gaming and Training Apparatus," described how to make a standard household television set display moving spots controlled by a player — the first video game console.
Baer, a German-Jewish refugee who'd fled the Nazis in 1938 and later served in U.S. Army Intelligence, had a flash of insight in August 1966 while waiting for a colleague outside the Port Authority Bus Terminal in New York. He scribbled a four-page memo titled "Conceptual, Game Display" describing how a TV — at the time, a one-way receiver of broadcast signals — could be hijacked to display interactive content generated by an external box. Sanders, his employer, made radar systems and missile-tracking computers. None of them had any interest in toys. Baer built it anyway, in a back room, with two engineers he convinced to help.
The patent describes the machinery with charming specificity. A small box generates two or three controllable spots on the screen — one for each player, plus a "machine-controlled" spot for a ball. Player controls are simple potentiometers (knobs) and switches. The signal is injected into the TV's antenna port as a faked RF signal, fooling the set into displaying the box's output as if it were a broadcast. Overlays — colored plastic sheets taped to the screen — provided backgrounds: a tennis court, a hockey rink, a maze. The patent's claims are remarkably broad, covering essentially any apparatus that generates player-controllable images on a standard TV.
Sanders licensed the patent to Magnavox in 1971. The resulting product, the Magnavox Odyssey, shipped in 1972 — the first home video game console. It sold 350,000 units. More importantly, a young engineer named Nolan Bushnell saw a demo at a Magnavox dealership in May 1972, then went home and had his company Atari build "Pong" — a single-game arcade machine that ripped off Odyssey's tennis game. Magnavox sued. They won. They kept winning: Sanders and Magnavox collected over $100 million in royalties from Atari, Nintendo, Coleco, Mattel, Activision, and Sega across two decades of litigation, with Baer's patent serving as the foundational prior art for the entire industry.
What makes the patent surprising isn't just that it predates Pong — it's how complete the conceptual stack is. Baer's filing describes:
The modern industry — Sony, Microsoft, Nintendo, Steam, the entire $200B+ gaming sector — descends directly from this filing. Every console manufacturer either licensed Baer's patent or paid damages for not licensing it. The "Brown Box" prototype Baer built in 1967 now sits in the Smithsonian. Baer received the National Medal of Technology in 2006 and kept inventing until his death in 2014 at age 92, holding more than 150 patents — including, almost incidentally, the electronic memory game Simon.
Daily GitHub Zero Stars
2026-05-26
Language: Unknown
This is a delightful little find for anyone working with Claude Code and markdown-heavy workflows. annotate-skill is a self-contained Claude Code skill that generates a Tufte-styled HTML review surface for marking up markdown documents with inline suggestions, comments, and deletions.
If you've spent any time editing prose, technical documentation, or AI-generated drafts, you know that markdown's plain-text nature makes collaborative review awkward. GitHub PRs work for code, but reviewing a long-form document — adding margin notes, suggesting deletions, leaving questions — is genuinely painful. This skill solves that by rendering a beautiful, Edward Tufte–inspired side-margin annotation surface right in HTML.
What makes it interesting:
Who would find this useful:
It's a small, opinionated tool that does one thing well — exactly the kind of thing that tends to get buried under flashier repos. Worth a star and a try.
Daily Hardware Architecture
2026-05-26
We covered memory renaming earlier — the trick where CPUs spot push rax / pop rax pairs and forward the value through a register instead of bouncing it through L1. It's beautiful when it works. But it fails constantly, and understanding why tells you a lot about the limits of speculation.
The renamer maintains a small stack tracking structure — usually 16-32 entries — that maps recent stack store addresses to physical register tags. When a load comes through and its address matches, the CPU bypasses the cache entirely, treating the load as a register-to-register move. Apple's M-series and Intel since Ice Lake both do this. Reported speedup on call-heavy code: 5-15%.
The failure modes:
RSP is computed dynamically (e.g., sub rsp, rax with a runtime value), the renamer can't statically match the offset. It gives up and falls back to the load/store queue.memcpy with a stack destination), the dependence predictor forces a real memory operation.setjmp/longjmp, and exception unwinding invalidate the tracking table. The structure is per-context and gets flushed.Concrete example: A recursive Fibonacci on Apple M2 — measured with MEM_LOAD_RETIRED.L1_HIT counters. Shallow recursion (depth < 16): ~85% of stack loads renamed away, never touching L1. Depth 32: drops to ~60%. Depth 64: under 30%. The table is roughly 24 entries on M2; once you blow past that, every spill is a real cache access.
Rule of thumb: Memory renaming covers leaf and shallow functions well. Once your call stack exceeds ~20 frames of active spilling, assume the renamer has tapped out and L1 latency (4-5 cycles) is back in the critical path. This is one reason aggressive inlining still matters even on CPUs with "free" stack traffic — fewer frames means more of your spills stay in the rename table.
The hardware can only track what fits in a small CAM. Software still has to be considerate.
Hacker News Deep Cuts
2026-05-26
Link: https://heavythoughtcloud.com/blog/a-model-upgrade-is-a-release-not-a-setting
HN Discussion: 1 points, 0 comments
There's a quiet category of bug that has plagued teams shipping LLM-powered features since 2023: someone bumps the model name in a config file from claude-sonnet-4-5 to claude-sonnet-4-6, the diff is one line, the PR gets a thumbs-up, and a week later customer support is fielding tickets about output formats that no longer parse, tool calls that fire in a different order, or refusals on prompts that used to work fine. This post argues that the framing is wrong from the start — a model swap isn't a config tweak, it's a dependency upgrade with the blast radius of swapping out a database engine.
The piece likely walks through why teams keep making this mistake:
What makes this worth reading for a technical audience isn't the diagnosis — most senior engineers have been bitten by this — it's the implied prescription. If a model upgrade is a release, then it needs release infrastructure: pinned versions in production, a staging cohort, an eval suite that runs on the new model before any traffic shifts, a rollback plan, and a changelog of behavioral deltas you actually observed rather than what the vendor advertised. That's a meaningful operational shift from "let's just point at the latest" — and it has staffing and tooling implications most companies haven't budgeted for.
The broader point cuts against an industry instinct to treat foundation models as commodity utilities. They aren't. They're tightly coupled to your prompt-engineering, your tool schemas, your output parsers, and your users' learned expectations. Treating that coupling casually is how you ship outages.
Worth a read for anyone running LLM features in production — especially if your deployment story still involves an environment variable and a prayer.
HN Jobs Teardown
2026-05-26
Source: HN Who is Hiring
Posted by: firloop
Of the ten postings, byte (ID 22666673) is the most revealing because the stack choices tell you exactly what kind of scaling pain they're bracing for — and the company history tells you why.
The stack is a tell. byte runs Go on Google Spanner on GCP, with native Swift/Kotlin clients. Spanner is not a default choice — it's an expensive, globally-distributed, strongly-consistent SQL database. You pick Spanner when you expect write volume that will outgrow a single Postgres primary and you refuse to give up transactional semantics. Combined with Go (chosen for concurrency and operational simplicity, not developer velocity), this is a backend built by people who have already lived through a viral consumer-app scaling event.
The context makes it obvious. The posting explicitly says "some of the same people that brought you Vine." Vine famously died in part because Twitter couldn't figure out the economics and product loop. The byte team is rebuilding the same product category with the infrastructure choices of people who got burned by under-provisioning the first time. They are not going to be caught flat-footed by a growth spike.
What the posting highlights about 2020 trends:
Swift and Kotlin. For a video-creation app, the team has decided platform-native performance and camera/codec access matter more than shared codebases.Green flags: Specific stack named, clear product thesis, remote option offered (unusual for a consumer-app startup in 2020), team with relevant prior experience.
Red flags: "Fundraised enough to get us to our next goal" is hedge-language — they haven't hit product-market fit yet, and consumer social is a brutal category where Spanner bills can outpace revenue indefinitely. The post is also thin on compensation, team size, and what "next goal" actually means.
Daily Low-Level Programming
2026-05-26
The original APIC was designed when "many cores" meant 4. Its destination field is 8 bits, which caps the system at 256 logical CPUs — and in practice, far fewer once you reserve broadcast and cluster encodings. By the time AMD shipped 128-core EPYCs and Intel shipped 60-core Xeons with hyperthreading, the legacy xAPIC was an interrupt-routing time bomb.
x2APIC is the fix. Three things change:
wrmsr to register 0x800–0x8FF, which is roughly 3x faster than the MMIO path because there's no cache line ping-pong on the APIC page.Why cluster mode matters: In flat physical mode, sending an IPI to "all cores except me" on a 128-core box means 127 individual ICR writes. Each write stalls until the previous IPI is accepted. In x2APIC cluster mode, you send one IPI per cluster (typically 8 clusters of 16 cores), so the same broadcast becomes 8 writes — a 16x reduction in IPI emission latency. This is why Linux's flush_tlb_others() got dramatically faster around kernel 3.x when x2APIC cluster mode landed.
Real example: A TLB shootdown on a 64-core machine. In legacy xAPIC, the initiating CPU writes ICR 63 times, waiting ~100ns per send for delivery acknowledgment — about 6.3µs just emitting IPIs, before any target even handles the flush. In x2APIC cluster mode with 4 clusters of 16, it's 4 writes, ~400ns. The flush itself still takes microseconds, but the emission phase nearly disappears from the profile.
Rule of thumb: If you see cpu_flags: ... x2apic ... in /proc/cpuinfo and dmesg | grep x2apic shows "x2apic enabled," your IPI broadcasts are O(clusters), not O(CPUs). On a 96+ core machine without x2APIC (rare, but possible via BIOS misconfiguration), TLB-heavy workloads can lose 5–10% throughput purely to IPI serialization.
Gotcha: x2APIC requires interrupt remapping (the IOMMU's IR unit) to be enabled, because the 32-bit ID doesn't fit in legacy MSI message formats. Disabling VT-d in BIOS silently drops you back to xAPIC and caps you at 255 CPUs — which is why some servers refuse to boot all cores until IOMMU is on.
Reddit Small Subs
2026-05-26
Subreddit: r/fasteners
Discussion: View on Reddit (3 points, 32 comments)
This post is a small masterclass in fastener design constraints. The poster has a deceptively specific need: they want to limit travel inside a threaded blind hole without a visible jam nut spoiling the aesthetic. Their ideal part is essentially an "anti-nut" — a tube with internal hex drive running all the way through, external threads on the outside, and a length shorter than any commodity set screw. With 32 comments, the thread becomes a tour of why such a simple-sounding part is surprisingly hard to source.
Several useful concepts come out in the discussion:
What makes this post quietly educational is that it forces you to think about why the standard catalog looks the way it does. Fastener dimensions aren't arbitrary — they're the outcome of drive geometry, thread engagement minimums, and manufacturing economics. When your application falls outside those constraints, you usually need either a creative substitution (insert, standoff, custom-cut threaded rod) or a custom part.
It's also a nice example of the value of niche subreddits: a question this specific would drown on r/DIY, but r/Fasteners delivers thoughtful, experienced answers.
RFC Deep Dive
2026-05-26
Every time you stream a movie, load a website, or push a git commit, your packets probably traverse a network where multiple equal-cost paths exist between source and destination. How does a router decide which path each packet takes? RFC 2992 documents the algorithm — hash-threshold ECMP — that quietly powers load distribution across the modern internet's backbone and inside every hyperscale datacenter.
The problem. When a routing protocol (OSPF, IS-IS, BGP) computes shortest paths and finds N next-hops with identical cost, the router has a choice to make for every packet. Naïve approaches all have issues:
The hash-threshold idea. Hopps' algorithm hashes the flow's five-tuple into a large key space (say, 2^16), then divides that space into N contiguous regions, one per next-hop. A flow is assigned to whichever region contains its hash. When the number of next-hops changes from N to N+1, the regions are re-partitioned — but each flow either stays in its current region or moves to one adjacent region. Roughly 1/(N+1) of flows shift, instead of all of them. This is the same insight behind consistent hashing, applied to packet forwarding.
Why this matters today. ECMP is everywhere:
The dark corners. RFC 2992 also analyzes what goes wrong. Hash polarization is the big one: if every router in a path uses the same hash function on the same fields, flows that collided on router A also collide on router B, causing some paths to saturate while others sit idle. Modern silicon mitigates this by seeding each router's hash differently, or by including the TTL or a per-device salt. Another gotcha: flowlet approaches (briefly switching paths during a TCP idle gap) extend Hopps' work, used in Microsoft's CONGA and in Cisco's dynamic load balancing.
The backstory. Christian Hopps wrote this as an Informational RFC while at NextHop Technologies, a small routing-software shop. It's only about 8 pages — really a worked example with probability math, not a protocol spec. But it became the reference cited by every router vendor, every datacenter paper, and every IETF draft that touches multipath. A rare case of a short, mathy RFC quietly setting the operational standard for an entire industry.
Next time you run ip route show and see multiple nexthop lines, you're looking at hash-threshold ECMP in action.
Stack Overflow Unanswered
2026-05-26
Stack Overflow: View Question
Tags: rust, embedded, cortex-m, pi, raspberry-pi-pico
Score: 1 | Views: 239
The asker is trying to build a "blinky" style program in Rust for the original Raspberry Pi Pico (RP2040, Cortex-M0+). Their Cargo configuration looks textbook-correct: thumbv6m-none-eabi target, the linker flags that preserve the .boot2 section, and a runner that pipes the ELF through elf2uf2-rs so the resulting UF2 can be dropped onto the bootloader mass-storage device. Yet every build ends with elf2uf2-rs bailing out with "Unrecognized ABI".
What makes this one interesting is that the error message is misleading. elf2uf2-rs doesn't actually care about C ABI variants — it looks at the ELF's e_flags and the program headers and validates that the binary's load addresses fall inside the Pico's expected flash/SRAM regions. The "Unrecognized ABI" branch fires when the tool can't reconcile what it sees with the layout it knows for the RP2040. The common root causes are:
memory.x: if FLASH ORIGIN isn't 0x10000000 with the boot2 stub at offset 0, or RAM isn't 0x20000000, the load segments end up outside the known windows.rp2040-boot2: without the second-stage bootloader in .boot2, the first 256 bytes of flash are empty, so the entry-point heuristic fails.thumbv6m-none-eabi is correct for RP2040, but if the asker actually has a Pico 2, they need thumbv8m.main-none-eabihf and a newer elf2uf2-rs (or better, picotool). The error message looks identical.cortex-m-rt without a board-support crate like rp-pico or rp2040-hal often leaves memory.x undefined, and Cargo silently falls back to a default that doesn't match.The direction I'd point them: first run arm-none-eabi-readelf -l target/thumbv6m-none-eabi/debug/<binary> and verify that LOAD segments start at 0x10000000 and that a .boot2 section exists and is non-empty. If .boot2 is empty, they're missing the #[link_section = ".boot2"] static from rp2040-boot2. If the load address is wrong, their memory.x is wrong or absent.
Gotcha worth flagging: elf2uf2-rs has been functionally superseded by picotool for newer setups, and the RP2040 vs RP2350 distinction trips up almost everyone buying a Pico in 2026 — the SKUs look nearly identical on the shelf.
Daily Software Engineering
2026-05-26
In an eventually consistent system with replicas, writes don't always land everywhere at the same time. A node might miss a write because it was offline, slow, or the network dropped a packet. Read repair says: when a client reads data and notices replicas disagree, fix the stale ones right then, as a side effect of the read.
The flow is straightforward. A coordinator queries multiple replicas (often a quorum). It compares responses using version numbers, timestamps, or vector clocks. If they disagree, the coordinator returns the freshest value to the client and writes that value back to the stale replicas. The slow replicas catch up without anyone running a separate repair job.
Concrete example: Cassandra. Suppose you write user profile user:42 with replication factor 3. Node A and B accept the write, but Node C is briefly unreachable. Later a client reads user:42 with consistency level QUORUM. The coordinator hits all three replicas. A and B return version 7; C returns version 6. The coordinator returns version 7 to the client, then asynchronously writes version 7 to C. Next read, all three agree. Cassandra also offers blocking read repair (synchronous) for stronger guarantees at the cost of latency.
Two flavors worth knowing:
The tradeoff: read repair is cheap because it piggybacks on traffic you're already serving. But it only fixes data that gets read. Cold data — rows nobody touches for months — stays inconsistent until something else (anti-entropy, Merkle tree sync, scheduled repair) catches it. That's why production Cassandra clusters run nodetool repair on a schedule: read repair handles the hot path, scheduled repair handles the rest.
Rule of thumb: if your read repair chance is 10% (Cassandra's default for non-quorum reads), and a row is read 100 times a day, expected time to repair is ~10 reads = a few minutes. For a row read once a week, expect days of inconsistency. Tune the chance up for hot data, or rely on quorum reads which always trigger repair on mismatch.
Read repair pairs naturally with hinted handoff (handles short outages) and anti-entropy repair (handles long-term drift). None of them alone is sufficient — together they form the convergence story for eventual consistency.
Tool Nobody Knows
2026-05-26
Everyone reaches for dd if=/dev/zero of=test bs=1M count=1024 to measure disk speed, then squints at the number and pretends it means something. It doesn't. dd measures sequential bulk throughput with whatever caching the kernel feels like doing that afternoon. It tells you nothing about the thing that actually makes your database feel slow: latency.
ioping is the missing tool. Written by Konstantin Khlebnikov, it does for storage what ping does for networks — fires individual I/O requests at a path or device and reports per-request latency. Install it from your distro (apt install ioping, brew install ioping, pacman -S ioping).
The default invocation is exactly what you'd hope:
$ ioping /var/lib/postgresql
4 KiB <<< /var/lib/postgresql (ext4 /dev/nvme0n1p2): request=1 time=89.2 us
4 KiB <<< /var/lib/postgresql (ext4 /dev/nvme0n1p2): request=2 time=72.4 us
4 KiB <<< /var/lib/postgresql (ext4 /dev/nvme0n1p2): request=3 time=104 us (slow)
^C
--- /var/lib/postgresql (ext4 /dev/nvme0n1p2) ioping statistics ---
3 requests completed in 265.9 us, 12 KiB read, 11.3 k iops, 44.1 MiB/s
generated 3 requests in 2.45 s, 12 KiB, 1 iops, 4.89 KiB/s
min/avg/max/mdev = 72.4 us / 88.6 us / 104 us / 12.9 us
Real random-read latency. No buffering games — by default it uses O_DIRECT and varies offsets so the page cache can't cheat.
The flags that matter:
-c 20 — fixed count, then exit. Good for scripting.-S 4G — work-set size. Defaults to 1 MiB, which entirely fits in cache. Bump it past your RAM if you want honest numbers.-s 64k — request size. Pair with realistic values for your workload (Postgres is 8K, most filesystems prefer 4K, video editors hit 1M+).-L — sequential, not random. Pair with -s 1M for honest bulk-throughput numbers that still beat dd.-W — write test. Be careful; it writes to a temp file in the target directory.-D — direct I/O (default on Linux, but explicit on macOS where you need it).-A — async I/O. Reveals how much your storage benefits from queue depth.The trick most people miss: compare cached vs. uncached on the same device.
$ ioping -c 10 -C /data # -C uses page cache, shows RAM speed
$ ioping -c 10 /data # default O_DIRECT, shows real disk
When the first reports 2 µs and the second reports 8 ms, you've just diagnosed why your "fast" NVMe-backed service is bottlenecked: someone's working set blew past the cache.
Latency distribution, not just averages:
$ ioping -c 1000 -p 100 -P 1000 /var/lib/mysql
# -p 100 prints a summary every 100 requests
# -P 1000 reports requests-per-second instead of intervals
The mdev (mean deviation) field is the one that actually predicts user complaints. A drive averaging 200 µs with mdev 800 µs has p99 latencies that will ruin somebody's afternoon — and dd would have shown you a cheerful "450 MB/s" and called it a day.
Run it against /dev/sda directly (with care, read-only) to bypass the filesystem entirely. Run it against an NFS mount to find out which of your network or your server is the bottleneck. Run it in a tight loop during a backup window to watch latency degrade in real time. It's the tool you should have been reaching for the entire time.
dd measures throughput under ideal conditions; ioping measures the latency distribution that actually determines whether your storage feels fast — and tells you when the page cache is lying to you.
What If Engineering
2026-05-26
Mercury receives ~9,100 W/m² of solar flux — roughly 6.7× what Earth's surface gets at noon on the equator. A solar panel that yields 200 W on your roof would deliver about 1,340 W there. Tempting. Let's see what breaks.
The thermal problem dominates everything. Mercury's dayside surface hits 700 K (427 °C). Silicon photovoltaics lose roughly 0.4%/°C above 25 °C; extrapolating naively, a Si panel at 700 K would have negative efficiency — it'd be a heater. Real answer: silicon's bandgap collapses thermally and the p-n junction stops rectifying around 200 °C. You need wide-bandgap cells: GaInP/GaAs/Ge multijunctions with active cooling, or thermophotovoltaics tuned for the spectrum.
So we cheat: build at the poles. Mercury's axial tilt is only 2°, so polar crater rims see near-continuous sunlight at grazing incidence (~250 K ambient — manageable) while crater floors stay in permanent shadow at 100 K. Perfect radiator sink right next door.
Back-of-envelope: a 1 GW polar array.
For comparison, the ISS took 42 launches to assemble 420 tonnes. You'd need roughly 16× that, but to Mercury — a Δv budget of ~13 km/s from LEO using gravity assists, versus 4 km/s to the Moon. Mercury is harder to reach than Pluto because you're falling into the Sun's gravity well and need to brake hard. The MESSENGER probe took 6.5 years and used six planetary flybys to shed velocity.
Now the real question: how do you get the power home?
Wires won't work — 77 million km of superconductor isn't happening. The two options:
The honest use case isn't powering Earth. It's powering Mercury itself — running a robotic mining operation refining the planet's iron-nickel crust (Mercury is 70% metal by mass) and slinging refined material out via electromagnetic mass driver. Mercury's escape velocity is 4.25 km/s, low enough that a 100 km railgun pulling 9 g could launch payloads on Hohmann transfers to Earth or the asteroid belt.
The structural curveball: Mercury has no atmosphere, but its day is 176 Earth days long, and the surface undergoes 600 K thermal cycling. Aluminum truss with α=23 μm/m/K expanding across 600 K means 1.4% length change — a 100 m beam shifts 1.4 m every Mercury day. You'd need invar (α=1.2) or compliant joints, not rigid welds. Anything bolted will fatigue-crack within years.
Wikipedia Rabbit Hole
2026-05-26
Wikipedia: Read the full article
Imagine buying a portable radio in 1925. You bring it home, plug in... nothing. Instead, you haul out a small arsenal of three separate batteries, each with its own voltage, its own purpose, and its own alphabetical letter. Welcome to the strange, expensive, leaky world of the vacuum tube battery — an era when listening to the news literally cost you a dollar a day.
Every vacuum tube needed three different power supplies simultaneously, and engineers labeled them with disarming simplicity:
The economics were brutal. A typical 1920s family spent more on batteries per year than on the radio itself. The A battery alone could cost the equivalent of $15 a week in today's money, and rural households without electricity had no alternative. This is why "battery eliminators" — bulky transformers that converted household AC into all three required voltages — became one of the hottest consumer products of the late 1920s, and why the development of AC-powered tubes around 1927 essentially killed an entire industry overnight.
If you've ever wondered why old radio chassis have that distinctive smell, it's partly the residue of leaked B-battery electrolyte that ate through cabinet wood for decades. And here's where it connects to something you probably know: the iconic 9-volt rectangular battery in your smoke detector? It's a direct vestige of B-battery design — six 1.5V cells stacked exactly the way Eveready stacked 60 of them to make 90V transistor radios in 1956 needed only a tiny version, and the form factor never died.
Even more delightfully obscure: portable tube radios in the 1940s used hearing-aid-style "AB packs" that combined both batteries into a single sealed unit, but the filaments were so power-hungry that a "portable" radio would die after about 20 hours of listening. Compare that to a modern smartphone playing streaming audio for days on a battery a fraction the size — a roughly 10,000-fold improvement in energy efficiency per minute of audio.
Daily YT Documentary
2026-05-26
Channel: Mare Nostrum (7150 subscribers)
The Mini-Transat is one of sailing's most extreme challenges: a solo transatlantic race aboard a tiny 6.5-meter (21-foot) sailboat, with no GPS-based weather routing, no outside assistance, and no autopilot luxuries. Skippers cross roughly 4,000 nautical miles from France to the Caribbean alone, often in boats smaller than many living rooms.
This French-language documentary explores the human stories behind the race — the storms, the capsizes, the equipment failures, and the moments of triumph. It covers the unique "Mini 6.50" class of yacht, which has served as a proving ground for many of the world's top offshore sailors (including future Vendée Globe competitors). The format intentionally restricts technology and budgets, which makes it a fascinating study in seamanship, naval architecture trade-offs, and sheer mental endurance.
Expect coverage of navigation techniques without modern routing tools, the engineering choices that make these tiny boats survivable in Atlantic weather, and first-person accounts of what it actually feels like to sleep in 20-minute increments while being thrown around in a fiberglass shell for three weeks. If you're interested in offshore sailing, small-boat design, or extreme human endurance, this is a substantive watch — not a highlight reel.
Note: documentary is in French; auto-translated subtitles recommended for non-French speakers.
Daily YT Electronics
2026-05-26
Channel: JoJo (0 subscribers)
Senior design projects from university ECE programs tend to be the sweet spot for hobbyist viewers: they're more ambitious than weekend Arduino builds, but the students are still learning out loud, so they explain the why behind their design choices instead of glossing over them. This one from George Mason University tackles a genuinely tricky problem — coordinating multiple robots to play piano together.
What makes this interesting from an engineering standpoint is the layered set of challenges. You need precise mechanical actuation to strike keys at the right velocity and timing, you need synchronization across multiple independent robots (which usually means some kind of master clock or shared timing protocol), and you need a way to translate MIDI or sheet music into motion commands. Any one of those is a respectable project; doing all three together forces compromises that are educational to watch.
Compared to the rest of today's candidates — which lean heavily on the standard "ESP32 + sensor + buzzer" student project template — this one stands out for scope and originality. Expect to see servo or solenoid actuators, microcontroller-to-microcontroller communication, and the inevitable mechanical alignment issues that come with hitting physical piano keys reliably.
Daily YT Engineering
2026-05-26
Channel: AEROSIFT PRAVAHA (14 subscribers)
This pick comes from a tiny channel (14 subscribers) that's quietly publishing some of the more counterintuitive structural-engineering content on YouTube. The premise is exactly the kind of thing that trips up students and even working engineers: if you sized aircraft frames and stringers purely for strength, you'd end up with the wrong answer. The actual driver is stability — specifically, the buckling behavior of thin skin panels under compressive and shear loads.
The same channel's companion video ("Fuselage skin panels can buckle") confirms the angle: modern semi-monocoque fuselages are deliberately designed to let skin panels buckle in service, with frames and stringers spaced to control the post-buckled load path rather than prevent buckling outright. That's a genuinely non-obvious design philosophy borrowed from Wagner's tension-field theory, and it's why you'll see characteristic diagonal wrinkling on aircraft skins under load.
If the video delivers on the title, it should walk through why panel aspect ratio, Euler column behavior of stringers between frames, and skin effective-width calculations dominate the spacing decision — not ultimate tensile strength. This is exactly the kind of "the textbook answer is wrong" insight that's worth a few minutes, especially from a creator clearly teaching from a structures background rather than chasing views.
Daily YT Maker
2026-05-26
Channel: Victory boy here (207 subscribers)
Most of today's batch is hashtag-spammed Shorts and quick clickbait clips — this is the one full-length build video with a real process to follow. The creator walks through fabricating a pair of Nightwing gauntlets from scratch, which is a surprisingly rich exercise in pattern-making, foam fabrication, and finishing — the same core skills that underpin most prop and armor work.
Cosplay builds like this are an accessible entry point into fabrication because the materials are cheap (EVA foam, contact cement, craft paint) but the techniques transfer directly to more serious work: drafting flat patterns from a 3D form, scoring and heat-forming foam to get curved shells, layering for depth, and sealing/painting to fake metal. Watching someone solve the fit problem — making something that wraps a forearm cleanly and articulates at the wrist — is genuinely useful even if you have no interest in superheroes.
At 207 subscribers this is a tiny channel, so expect rough edits rather than polished tutorial production, but the build itself is the substance. Worth a watch if you've been curious about getting into foamsmithing or want to see how a hobbyist tackles a symmetric pair of wearable props without a 3D printer.
Daily YT Welding
2026-05-26
Channel: Desert Dog Studios (519 subscribers)
Note: today's batch is unusually thin — most candidates are hashtag-spammed Shorts, AI-generated "molten silver dragon sword" clickbait, or background-music factory footage with no instructional content. This is the least-bad pick, and genuinely the only one that looks like a real smith working a real project.
The medieval war pick (or horseman's pick) is an interesting subject because its design is driven entirely by a specific engineering problem: by the 14th century, plate armor had become good enough that swords and maces struggled to defeat it. The war pick concentrates the entire force of a swing onto a small hardened point, generating the pressure needed to punch through or deeply dent steel plate. The opposite side is typically a hammer face for blunt-force trauma against mail or helms.
Forging one is a useful study in asymmetric tool geometry: the smith has to draw out a long, tapered spike on one side of an eye (the hole for the handle) while keeping a squared hammer poll on the other, all without distorting the eye itself. Punching and drifting the eye, then forging the two ends in balance, is a classic test of a smith's control.
At 519 subscribers and made on viewer request, this looks like an honest workshop video rather than a content-farm reel.
