25 newsletters today.
Abandoned Futures
2026-06-07
In 1961, the U.S. Army awarded Lockheed a contract for a radical VTOL surveillance aircraft that didn't tilt rotors, didn't tilt wings, didn't deflect thrust, and didn't even use lift fans. The Lockheed XV-4 Hummingbird hovered using a principle that almost no aircraft since has tried at scale: jet ejector augmentation. And it worked — until it didn't.
The concept, championed by Lockheed-Georgia engineer John Wimpress, was elegant. Two Pratt & Whitney JT12A-3 turbojets, mounted on the fuselage sides, normally provided forward thrust like any conventional jet. For hover, valves redirected their exhaust into a network of 20 mixing nozzles buried inside the fuselage. These nozzles fired downward into ejector ducts running the length of the aircraft's belly. The high-velocity jet exhaust entrained ambient air at roughly a 3:1 ratio, theoretically multiplying thrust by ~1.4× — enough to lift the 7,200-lb aircraft using engines that produced only 3,300 lbf each.
Prototype XV-4A first hovered on 7 July 1962 at Dobbins AFB. Test pilot Jack Gordon transitioned from hover to forward flight on 20 November 1963 — a milestone. But the ejector system was marginal. Real-world augmentation came in closer to 1.2× than the predicted 1.4×, leaving almost no thrust margin. On 10 June 1964, the XV-4A crashed during transition testing, killing pilot John Reichert. The cause was traced to control problems during the handoff between hover and wing-borne flight.
The Army wasn't ready to give up. Lockheed rebuilt the second airframe as the XV-4B, abandoning the ejector concept entirely. It instead used six J85 engines — four dedicated lift engines mounted vertically in the fuselage, plus two cruise engines. It was a different aircraft pretending to be the same one. The XV-4B flew in 1968 and crashed on 14 March 1969. Pilot ejected safely. Program canceled.
Why it died: The ejector physics were right, but 1962 metallurgy and CFD couldn't optimize the mixing geometry. The internal ducting added weight and consumed fuselage volume that should have held fuel and sensors. The control system used analog hydromechanics with no authority to manage the violent thrust transients during transition. And the Army's competing VTOL programs (XV-5 Vertifan, X-22, XC-142) saturated the budget.
Why it's viable now: Ejector augmentation has quietly become a hot topic again. Aurora Flight Sciences' XV-24A LightningStrike (DARPA, 2016–2018) used 24 ducted fans driven by a turbogenerator — a different solution to the same problem. But the pure ejector concept benefits enormously from modern tools:
The Hummingbird's real legacy: it proved you could hover a fixed-wing fighter with no tilting parts, no exposed fans, and no jet blast scouring the runway. That's still a hugely valuable property — and we now have the manufacturing and control technology to actually make it work.
ArXiv Paper Digest
2026-06-07
Imagine you're a brilliant programmer who just got hired at a new company. On day one, you'd be useless — not because you can't code, but because you don't know this company's code: their internal libraries, naming conventions, which helper function to call for what, and the quirky way they handle dates. Code-writing AI models have the same problem. They know Python and JavaScript in general, but they don't know your repository.
Today, there are two clumsy fixes for this. The first is to dump huge chunks of your codebase into the prompt every time you ask the AI a question — called retrieval-augmented generation (RAG). This is slow and expensive because every extra token costs money and time. The second is to fine-tune a custom version of the model on each repository, often using a lightweight technique called LoRA (Low-Rank Adaptation), which trains small "adapter" patches instead of the whole model. But fine-tuning is expensive too, and the moment your codebase changes — which it does constantly — the adapter is out of date.
This paper introduces Code2LoRA, a clever workaround. Instead of training a custom adapter for each repository by hand, the authors train a hypernetwork — a neural network whose job is to generate other neural networks. You feed it a repository, and it spits out a custom LoRA adapter tailored to that codebase. No per-repo training run, no giant context window stuffed with code at inference time.
The key insight is splitting the problem in two:
This matters because real software is a moving target. Codebases get refactored, APIs shift, new modules appear weekly. Any approach that requires re-fine-tuning every time the code changes is doomed to fall behind. By making adapter generation cheap and automatic, Code2LoRA promises code-aware AI that stays current without the inference-time tax of cramming the repo into every prompt.
Daily Automotive Engines
2026-06-07
The CHRA (Center Housing Rotating Assembly) is the cartridge at the middle of every turbocharger — the bearing housing, shaft, thrust system, and seals that connect the hot turbine wheel to the cold compressor wheel. It's the part that wears out, the part you rebuild, and the part that determines whether your turbo lives 200,000 miles or grenades at 40,000.
The shaft itself is a marvel. It connects two wheels spinning between 100,000–280,000 RPM in opposite thermal environments: the turbine side glows cherry red at 950°C (1740°F), while the compressor side runs near ambient. The shaft must transmit torque, survive thermal gradients of 800°C along its length, and stay perfectly balanced — imbalance of even 0.05 grams at the wheel tip creates destructive vibration.
Key CHRA components:
Real-world example: The Garrett GT2860RS — a popular upgrade for Nissan SR20DET swaps — uses a CHRA that's interchangeable as a complete cartridge. When the seals leak (telltale blue smoke under boost or at idle), you don't replace the whole turbo. You unbolt the compressor housing and turbine housing, swap the $400 CHRA cartridge, and reassemble with your existing housings. Three hours of work versus a $1,500 new turbo.
Rule of thumb on shaft tip speed: Turbo speed (RPM) × wheel diameter (mm) × π ÷ 60,000 = tip speed in m/s. A 60mm compressor wheel at 180,000 RPM = 180,000 × 60 × π ÷ 60,000 = 565 m/s, roughly Mach 1.65. The wheel tips are literally supersonic. Material limits (cast aluminum compressor wheels typically max out around 540 m/s tip speed) are why bigger turbos can't just spin faster — you'd shed blades.
The oil feed line into the CHRA is also critical: it must enter the top of the bearing housing so gravity-feed lubrication continues for several seconds after shutdown. Mounting a turbo with the oil feed on the side or bottom guarantees bearing failure.
Daily Debugging Puzzle
&str Slicing Trap: The Truncation That Panics on Café2026-06-07
This helper truncates a string for display, appending an ellipsis if it was too long. It passes every test in the suite — until a user named Привет signs up.
fn ellipsis(s: &str, max_len: usize) -> String {
if s.len() <= max_len {
s.to_string()
} else {
format!("{}…", &s[..max_len])
}
}
fn main() {
println!("{}", ellipsis("Hello, world!", 8)); // "Hello, w…"
println!("{}", ellipsis("café society", 5)); // "café …"
println!("{}", ellipsis("Привет, мир!", 5)); // boom
}
The third call panics:
thread 'main' panicked at 'byte index 5 is not a char boundary;
it is inside 'е' (bytes 4..6) of `Привет, мир!`'
In Rust, &str is a slice of UTF-8 bytes, but its contents are Unicode. The operators s.len() and &s[..n] both work in bytes, not characters. ASCII fools you: every letter is one byte, so "Hello"[..3] is "Hel" and life is good.
The moment a multi-byte codepoint shows up, the abstraction leaks. In UTF-8:
'é' = 2 bytes (C3 A9)'П', 'р', 'и', 'в', 'е', 'т' = 2 bytes eachSo "Привет, мир!" is 21 bytes long, not 12. When you ask for &s[..5], Rust lands mid-codepoint — between the two bytes of 'е' — and refuses to hand you broken UTF-8. It panics rather than silently produce an invalid &str. That guarantee is good; getting bitten by it in production is not.
Worse, this bug is invisible in unit tests that only feed ASCII. It hides until a real user's name, a customer's address, or a translated UI string trips it — usually in front of an audience.
Walk back to the nearest valid char boundary before slicing:
fn ellipsis(s: &str, max_len: usize) -> String {
if s.len() <= max_len {
return s.to_string();
}
let mut end = max_len;
while !s.is_char_boundary(end) {
end -= 1;
}
format!("{}…", &s[..end])
}
Or, if you actually want a character count rather than a byte count (almost always what UI code wants), iterate codepoints:
fn ellipsis(s: &str, max_chars: usize) -> String {
let mut it = s.chars();
let head: String = it.by_ref().take(max_chars).collect();
if it.next().is_some() {
format!("{head}…")
} else {
head
}
}
One more layer of nuance: even chars() isn't the whole story. A user-perceived character — a grapheme cluster — can be several codepoints (e.g., "é" as 'e' + U+0301, or family emoji built from ZWJ sequences). Splitting between them won't panic, but it will render garbage. For correct human-facing truncation, reach for the unicode-segmentation crate and iterate graphemes(true).
The deeper lesson: &str looks like a string and indexes like an array, but it is neither. It's a window onto bytes that happen to be valid UTF-8, and Rust enforces that invariant at runtime with panics. Treat any indexing into &str the way you'd treat a raw pointer — fine when you've proven the offset is valid, dangerous when you've assumed it.
str.len() and &s[..n] count bytes, not characters — slice on a non-boundary inside a multi-byte codepoint and you panic, so use is_char_boundary, chars(), or grapheme iteration for any string a human will type.
Daily Digital Circuits
2026-06-07
When you have four CPU cores each with their own L1 cache, the same memory line can sit in multiple places at once. If core 0 writes to address X while core 1 still has the old value cached, core 1 will read stale data. The hardware fix is a coherence protocol, and the canonical one is MESI.
Every cache line carries two state bits encoding one of four states:
The protocol runs on a snoop bus (or a directory in larger systems). When a core wants to write a line in S, it broadcasts a Read-For-Ownership (RFO) on the bus. Every other cache snoops, finds matching lines, and transitions them to I. The writer then transitions S → M and writes locally. When a core wants to read a line in I, it broadcasts a read; if another cache has it in M, that cache supplies the data and downgrades M → S (sometimes writing back to RAM as well).
Real-world example: The infamous false sharing performance bug. Two threads update independent variables that happen to share a 64-byte cache line. Every write triggers an RFO, invalidating the other core's copy. The line ping-pongs between caches at bus speed instead of staying local. A loop that should run at L1 speed (~4 cycles per access) runs at coherence-miss speed (~100+ cycles). Padding the variables to separate cache lines can give a 20–50× speedup with zero algorithmic change.
Rule of thumb: A coherence miss costs roughly 3–10× a normal L1 miss because it requires bus arbitration, snoop response, and often a writeback. If your line is in M on another core, count on at least 80–150 cycles to get it; if it's in S across N cores, count on N invalidation acks before your write completes.
Modern x86 extends MESI to MESIF (Intel, adds Forward for designating one sharer to respond) or MOESI (AMD, adds Owned for dirty-shared lines that don't need immediate writeback). The basic invariant is identical: at most one writer, or any number of readers, never both.
Daily Electrical Circuits
2026-06-07
The flyback converter is the workhorse of low-to-medium power isolated supplies — phone chargers, set-top boxes, auxiliary rails inside server PSUs, and just about every wall-wart over 5 W made in the last two decades. It's essentially a buck-boost converter where the inductor has been split into a transformer to provide galvanic isolation and arbitrary voltage ratios.
Here's the magic: during the switch on-time, current ramps up in the primary winding, storing energy in the transformer's magnetizing inductance. The secondary diode is reverse-biased — no current flows to the output. When the switch turns off, the magnetic field collapses, voltage reverses across all windings, the secondary diode conducts, and the stored energy dumps into the output capacitor. The transformer is really a coupled inductor, not a true transformer — primary and secondary never conduct simultaneously.
The output voltage in continuous conduction mode (CCM):
Vout = Vin × (Ns/Np) × (D / (1 − D))
where D is duty cycle and Ns/Np is the turns ratio. Pick the turns ratio to set D somewhere around 0.4–0.5 at nominal Vin — this balances primary peak current against the voltage stress on the MOSFET.
Real-world example: A 12 V, 2 A (24 W) offline charger running from rectified 120 VAC (~170 V DC peak, 90 V minimum at brownout). Choose turns ratio Np/Ns = 8:1. At Vin = 90 V, D = (12 × 8)/(90 + 12 × 8) = 0.52. The reflected output voltage on the primary side is 12 × 8 = 96 V. The MOSFET sees Vin + Vreflected + leakage spike — roughly 170 + 96 + 80 V = 346 V, so a 600 V MOSFET is appropriate (always derate by 20–30%).
Three things kill flybacks in practice:
Rule of thumb: Below ~75 W, flyback is the cheapest isolated topology. Above ~150 W, switch to forward or LLC — flyback transformer copper losses and peak currents become brutal.
Daily Engineering Lesson
2026-06-07
Forging shapes metal by squeezing it between dies while it's hot and plastic. Unlike casting (which solidifies from liquid) or machining (which removes material), forging refines the internal grain structure by aligning the grain flow with the part's geometry. That grain flow is why forged parts dominate any application where fatigue matters more than cost.
The three main processes:
Why grain flow matters: Cast parts have random grain orientation with internal porosity. Machined parts cut across the rolled grain of bar stock, exposing end grain at critical surfaces. Forging preserves continuous grain that follows the part contour — like wood grain following the shape of a baseball bat. A forged crankshaft's grain wraps around the journals and throws, putting the strongest direction where the bending and torsional loads concentrate.
Real-world example: A typical automotive connecting rod is closed-die forged from 4140 or microalloyed steel, then heat-treated and machined only where it must interface with bearings and the crank. The forging process gives it ~20-30% higher fatigue strength than an equivalent cast or fully-machined part. This is why aircraft landing gear, military rifle bolts, and rail axles are forged — nobody wants to be the engineer who specified a casting where a forging was needed.
Rule of thumb — forging force: For closed-die forging, required press force ≈ k × σ_flow × A_projected, where σ_flow is the material's flow stress at forging temperature (typically 50-150 MPa for hot steel), A is the projected area in the die parting plane, and k is 3-10 depending on shape complexity. A 200 cm² connecting rod in steel needs roughly 600-2,000 tons of press capacity — which is why forge shops are loud, hot, and built on massive foundations.
Forgotten Books
2026-06-07
Book: Modern Seamanship by Knight, Austin Melvin, 1854-1927 (1918)
Read it: Internet Archive
In the preface to the first edition of Modern Seamanship, Rear Admiral Austin M. Knight of the United States Navy made an offhand prediction that captures one of the great technological transitions of the industrial age — and gets it both spectacularly right and quietly wrong.
Knight was writing about why the older seamanship classics by Luce, Nares, and Alston were becoming inadequate. The reason, he explained, was straightforward — they had been written for a world of sail, and the world had moved on. But the old books, he conceded, still had life in them:
"The admirable treatises of Luce, Nares, and Alston, originating in the days when seamanship was almost wholly concerned with the fitting and handling of vessels under sail, have preserved through later editions the general characteristics which they naturally assumed in the beginning. These treatises will never be out of date until the time, still far in the future, when sails shall have been entirely driven out by steam."
Knight was a serious naval thinker — President of the Naval War College, commander of the Asiatic Fleet, and author of the standard American text on seamanship for a generation of officers. When he wrote in 1917 that sail's complete eclipse was "still far in the future," he was hedging an obvious trend. The great merchant clippers were already gone. Steam had been winning since the 1860s. But ocean-going commercial sail wasn't finished yet — the last commercial sailing barques carried grain from Australia into the 1940s. Knight's "far in the future" turned out to be roughly thirty years.
What he got wrong is more interesting. He framed the transition as binary — sail versus steam — and assumed steam was the endpoint. He couldn't have known that within a generation, steam itself would be largely driven out, displaced by oil-fired diesel motors that made the great triple-expansion engines he was helping codify look as quaint as a clipper's royals. By the 1970s, the steamship was as obsolete as the windjammer.
And here's the twist Knight would have found astonishing — sail is coming back. Not for romance, but for fuel economy and emissions:
The IMO's tightening emissions rules have done what nostalgia never could — they've given the wind an economic argument again. Knight's "far in the future" complete victory of steam never quite arrived. Instead, fossil fuels won a hundred-year interregnum, and now the oldest power source is sneaking back onto cargo decks under a different name.
His old seamanship books, by his own logic, may not be fully out of date yet.
Forgotten Darkroom
2026-06-07
Book: The Testing of Materials and Manufactured Goods with X-Rays (Kontrol' Materialov i Izdeliy Rentgenovymi Luchami) by Professor A. K. Trapeznikov (1952, original Moscow edition 1951)
Read it: Internet Archive
Buried in a CIA translation of a 1951 Soviet textbook by physicist A. K. Trapeznikov — Doctor of Physio-Mathematical Sciences, published by the State Scientific and Technical Press for Machine-Building Literature in Moscow — is one of the cleanest statements ever made of an industrial idea that quietly reshaped the 20th century:
"Methods of testing materials and manufactured goods can be divided into two groups: tests which involve the destruction of samples of the materials or manufactured goods, and tests which do not require destruction of the objects... Tests which involve the destruction of the object cannot be carried out on all series-produced objects. The second group of tests, which leaves the materials or goods intact, can be used for checking the entire output."
Read that twice. Trapeznikov is articulating the philosophical leap behind non-destructive testing (NDT): if your inspection method doesn't break the thing, you no longer have to gamble on statistical sampling — you can check every single part that rolls off the line.
For most of industrial history, quality control was a numbers game. You'd grab one rivet in a hundred, pull it until it snapped, write down a number, and pray the other ninety-nine were the same. Tearing, breaking, shock, crushing, pressure, vibration — Trapeznikov lists them — all destroy the very evidence they generate. So you tested cousins of the part, not the part itself.
X-rays changed the calculus. A photon passes through a turbine blade and leaves both the blade and a record of its interior. The Soviets, racing to industrialize a war-ravaged economy with limited margin for material waste, saw the implication early: 100% inspection wasn't a luxury, it was a multiplier on every other manufacturing investment.
Was Trapeznikov ahead of his time? Yes and no. The principle was understood in the West too — Kodak had been making industrial X-ray film since the 1930s, and the wartime Manhattan Project lived on radiography. But codifying it as the defining axis of testing — destructive vs. non-destructive, sample vs. total — was unusually clean. It's the framing every modern quality engineer learns first.
The downstream effects are everywhere modern readers would recognize:
The CIA's interest in translating this book is telling. In 1952, American intelligence wanted to know how seriously Soviet industry was taking total inspection, because it was a leading indicator of how reliably Soviet missiles, tanks, and aircraft would actually work. Trapeznikov's calm two-paragraph framework was, in a real sense, strategic intelligence.
Forgotten Patent
2026-06-07
In 1960, a machinist's son from Akron, Ohio with no college degree opened a tiny lab called Energy Conversion Laboratories in a Detroit storefront. Six years later, he received US Patent 3,271,591 — "Symmetrical Current Controlling Device" — filed September 20, 1963, granted September 6, 1966. Its inventor: Stanford R. Ovshinsky, an autodidact who had taught himself solid-state physics at the public library.
The patent described something the semiconductor industry had no theoretical framework for. Ovshinsky took a thin film of amorphous chalcogenide glass — a disordered alloy of elements like tellurium, germanium, and antimony — and showed it could rapidly and reversibly switch between two states: a high-resistance amorphous phase and a low-resistance crystalline phase. Apply a short, strong electrical pulse and the glass melts and re-solidifies as a disordered insulator. Apply a longer, gentler pulse and atoms re-arrange into a conductive crystal. The state survives without power. Read it by measuring resistance.
This was heresy in 1966. The orthodoxy held that useful electronic switching required highly ordered single-crystal semiconductors like silicon. Bell Labs had spent a decade proving that ordered lattices were the path forward. Ovshinsky was claiming the opposite — that disorder could be functional. The press dubbed the phenomenon the "Ovshinsky effect." Physicists called him a crank. Scientific American ran a withering profile in 1968 questioning whether he understood his own results.
He did. In 1970, Nobel laureate Sir Nevill Mott began publishing the theoretical framework that explained Ovshinsky's amorphous semiconductors, and won his 1977 Nobel Prize in part for that work. Ovshinsky had been right; the field he named "Ovonics" was real.
The modern relevance is staggering. Every rewriteable CD-RW and DVD-RW disc uses the exact same principle — a laser pulse heats a chalcogenide layer to flip it between amorphous and crystalline phases. Ovonyx, the company Ovshinsky co-founded, licensed phase-change memory (PCM) to Intel, Samsung, Micron, and STMicroelectronics. In 2015, Intel and Micron announced 3D XPoint — marketed as Intel Optane — claiming it was a revolutionary new memory technology, 1,000× faster than NAND flash and bit-addressable like RAM. It was phase-change memory. It was Ovshinsky's 1963 idea, finally manufacturable at scale.
Phase-change memory is now considered a leading candidate for storage-class memory and neuromorphic computing. Its analog, multi-level resistance states make it ideal for in-memory matrix multiplication — IBM, Stanford, and others are building PCM crossbar arrays for AI inference, training neural networks directly in memory without shuttling weights to a CPU. The amorphous-to-crystalline transition is being repurposed as a synaptic weight.
Ovshinsky's other patents read like a survey of 21st-century clean tech. He invented the nickel-metal hydride (NiMH) battery (US Patent 4,623,597) that powered the Toyota Prius and every early hybrid. He pioneered continuous roll-to-roll manufacturing of thin-film amorphous silicon solar cells. He held over 400 patents when he died in 2012 at age 89, never having earned a bachelor's degree.
The deeper lesson of 3,271,591 is that the semiconductor industry's century-long obsession with crystalline order may have been a detour. The disordered glasses Ovshinsky discovered are now winning the race for non-volatile memory, AI accelerators, and reconfigurable computing. The librarian's autodidact saw it first.
Daily GitHub Zero Stars
2026-06-07
Language: JavaScript
This repo is the web client for an online version of Achtung, die Kurve! — the classic "snake-like" multiplayer game where each player controls a constantly-moving curve, trying to outlast opponents by avoiding their trails (and the occasional pixel-sized gap in their own). If you grew up playing it in a packed computer lab huddled around a single keyboard, the name alone is a hit of nostalgia.
What makes this repo interesting is that it's the client half of a presumably split client/server architecture, which is a refreshingly clean way to structure a real-time multiplayer game. JavaScript-based game clients often end up as one giant monolith of canvas rendering, input handling, and network code all entangled. Splitting the client into its own repo forces cleaner boundaries: the client handles rendering, input, and prediction, while the server owns authoritative game state.
For learners, this is a great repo to study because:
It would appeal to hobbyist game devs, JavaScript engineers curious about real-time architectures, and anyone nostalgic for the original Achtung. It's also a good jumping-off point for forking and building your own variant — different power-ups, map shapes, or even VR adaptations.
The repo has zero stars despite being a working game client, which is exactly the kind of overlooked gem worth a look.
Daily Hardware Architecture
2026-06-07
Out-of-order execution exists largely to hide memory latency. When a load misses to DRAM (~200-300 cycles), the CPU keeps executing past it, hoping to find another independent load to issue in parallel. The number of outstanding misses a core can sustain is its Memory-Level Parallelism, and it's almost always the real bottleneck — not ROB size, not issue width.
MLP is gated by the smallest of several hardware structures:
Here's the rule of thumb. By Little's Law: achievable bandwidth = outstanding misses × line size / latency. With 10 LFBs, 64-byte lines, and 80ns DRAM latency: 10 × 64 / 80ns = 8 GB/s per core. That's it. Doesn't matter that your DRAM channel does 25 GB/s — one core physically cannot pull more because it can't keep enough requests in flight.
Real-world example: pointer-chasing a linked list. Each load depends on the previous one, so MLP = 1. At 80ns per hop, you get 12.5M nodes/second — about 800 MB/s of effective bandwidth on a machine rated for 50 GB/s. This is why std::list traversal benchmarks look catastrophic and why game engines flatten everything into arrays. The fix isn't a bigger ROB; the ROB is already empty waiting on the load. The fix is independent misses — prefetch, software pipelining, or restructured data layout so the CPU sees multiple chase chains at once.
This is also why doubling ROB size from 224 to 512 entries (Sunny Cove → Golden Cove) yields surprisingly modest gains on memory-bound workloads. The window is bigger, but the LFBs are the same. You're parking more instructions behind the same 10-12 outstanding misses. The branch predictor lets you see further; MLP determines whether seeing further does anything.
The architectural lesson: when profiling a memory-bound loop, measure outstanding L1 misses via perf counters (l1d_pend_miss.pending on Intel). If it's pinned at 10, your ROB doesn't matter, your IPC doesn't matter, your clock speed barely matters. You've hit the MLP wall, and only restructuring the access pattern moves it.
Hacker News Deep Cuts
2026-06-07
Link: https://blog.boreddev.nl/posts/boredos/
HN Discussion: 2 points, 0 comments
In an era where most "Show HN" posts are LLM wrappers built in a weekend, here's someone who spent three years writing an operating system from scratch — and apparently enjoyed every minute of it. That alone makes this worth a click.
Hobby OS development is one of the most under-appreciated pursuits in computing. It forces you to confront the parts of the stack that frameworks and managed runtimes deliberately hide: memory management without a heap allocator handed to you, interrupt handlers you wrote yourself, a scheduler with no Linux to fall back on, drivers talking directly to hardware registers. The OSDev wiki is famously dense, the toolchain is brittle, and "Hello, World" takes weeks instead of seconds. Most people who start such projects abandon them after the bootloader stage.
Three-year retrospectives from this corner of the hobbyist world tend to be unusually substantive. Based on the title and tone ("loving every minute"), the post likely covers things a technical audience genuinely wants to read about:
This kind of long-haul personal project is increasingly rare to see written up honestly. The author isn't selling anything, isn't pivoting to a startup, isn't claiming their toy kernel will replace anything. They just built a thing, slowly, because it was interesting. That's the spirit HN was originally built around.
If you've ever stared at a bootloader tutorial and wondered whether sticking with it for years pays off — this is exactly the post you want to read. And if you're a working engineer who's drifted into 10 layers of abstraction above the metal, it's a useful reminder of what's actually under your node_modules folder.
HN Jobs Teardown
2026-06-07
Source: HN Who is Hiring
Posted by: jaaron
This posting is a fascinating time capsule. The phrase "For the duration of the health crisis" and "until it's safe and reasonable to relocate to Los Angeles" dates this to the earliest weeks of the COVID-19 pandemic — March 2020. What makes it revealing is how a VC-funded gaming startup reflexively defended its onsite-first model even as the ground shifted beneath it.
Stage and posture: Singularity 6 is a16z-backed and broadcasting financial stability ("stable, with money in the bank") — language that only appears when founders sense candidates are nervous. The hiring breadth — Software Engineers, Artists, Designers in a single requisition — signals a studio still assembling its core team, not scaling a shipped product. This is pre-launch game development, where you need every discipline simultaneously to build a vertical slice.
What's conspicuously absent: No tech stack. No engine mentioned (Unreal? Unity? Custom?). No backend specifics for what they call "online games" — which is the hardest part of MMO-adjacent development. This omission tells you the posting is targeting generalist game-industry veterans who'll evaluate the studio on pedigree (a16z, LA westside, "deep" online games) rather than tech choices. Compare this to Brex or Airtable in the same thread, which lead with stack details to filter for technical fit.
Green flags:
Red flags:
Skills signal: The combined art/design/eng requisition tells experienced game devs that this is a small enough team where cross-discipline collaboration is unavoidable. Engineers will sit next to artists. That's attractive to senior craftspeople and terrifying to specialists who want narrow scope.
Daily Low-Level Programming
2026-06-07
CPUID is the x86 instruction that lets software interrogate the CPU about itself: vendor, family, supported features, cache topology, hypervisor presence. Every libc, every JIT, every cryptography library calls it at startup. It's also one of the slowest "simple" instructions you can execute.
The mechanics. You load a leaf number into EAX (and optionally a subleaf into ECX), execute CPUID, and the CPU writes results into EAX/EBX/ECX/EDX. Leaf 0 returns the maximum supported leaf and the vendor string ("GenuineIntel" or "AuthenticAMD") packed across EBX/EDX/ECX. Leaf 1 gives family/model/stepping plus the famous EDX feature bits (SSE2, MMX, etc.). Leaf 7 (with subleaves) reports AVX-512 variants, BMI, SHA extensions. Leaf 0x80000008 reports physical address bits — critical for kernel page-table setup.
Why it's slow. CPUID is a serializing instruction: it drains the entire pipeline, retires every in-flight instruction, and prevents any speculation past it before completing. On modern Intel/AMD, it costs 200–600 cycles, comparable to a cache miss to DRAM. That's why RDTSCP exists — to avoid the CPUID/RDTSC pair people used to write for serialized timing.
Real-world example. When glibc's dynamic loader picks which memcpy implementation to use (the IFUNC mechanism), it calls CPUID at process startup, checks for AVX2 or AVX-512, then patches the PLT to point at the chosen variant. After that one call, every memcpy dispatches with zero overhead. OpenSSL does the same for AES-NI, SHA-NI, and VAES. If you've ever wondered why a statically linked binary works on every x86-64 box despite using AVX-512 — this is why: runtime dispatch via CPUID.
The hypervisor twist. CPUID always causes a VM exit under virtualization (it's unconditionally trapped). KVM/VMware intercept it to lie about feature support — pinning a VM to "Haswell" features even on a Skylake host so live migration works. This means inside a VM, CPUID can cost 3,000+ cycles. Cache the results.
Rule of thumb. Call CPUID exactly once per feature, at startup, and cache every bit you'll ever check into a global. If your hot path branches on cpuid_has_avx2() and that function re-executes CPUID, you've turned a 1-cycle branch into a 500-cycle pipeline drain.
The cpuid Linux userspace tool (cpuid -1) dumps every leaf — handy when debugging why your AVX-512 code path isn't getting picked on a new CPU.
RFC Deep Dive
2026-06-07
By the late 1990s, the IETF noticed an alarming pattern: every new application protocol was being layered on top of HTTP. SOAP, WebDAV, XML-RPC, IPP (Internet Printing Protocol), and countless proprietary RPC schemes all chose HTTP as their substrate. The justification was nearly always the same — "port 80 is open through firewalls." RFC 3205, a BCP (Best Current Practice), is Keith Moore's measured but pointed warning about what that habit actually costs.
The problem it diagnoses. Moore enumerates the seductive reasons engineers reach for HTTP: existing libraries, familiar semantics, free authentication via HTTP Basic/Digest, free TLS via HTTPS, and — the big one — firewall traversal. He then patiently dismantles each:
The criteria Moore proposes. If you must use HTTP as a substrate, RFC 3205 lays out conditions: register a distinct URL scheme or media type, use a port other than 80, respect HTTP's caching and idempotency model (or document why you don't), and don't assume intermediaries will cooperate. The document essentially says: use HTTP because its semantics fit, not because its port is open.
Why it's prescient. Read in 2026, RFC 3205 reads like a forecast of every architectural debate of the last twenty years. The rise of REST briefly vindicated HTTP-as-substrate by embracing its semantics rather than fighting them. Then gRPC, GraphQL, WebSockets, and HTTP/2 server push pulled the other way, treating HTTP as a transport tunnel again. Every time someone discovers their POST /rpc endpoint is being retried by a CDN, or their long-polling connection is killed by a corporate proxy, they are re-learning Moore's lesson.
The firewall point especially aged well. Moore's prediction that firewalls would eventually do deep inspection on port 80 came true: modern next-gen firewalls, TLS-intercepting middleboxes, and zero-trust gateways all do exactly the application-layer policing Moore warned could not be evaded forever. The "tunnel through 443" reflex still exists, but it now provokes its own counter-arms-race.
The backstory. Keith Moore was a long-time IETF participant (co-author of MIME extensions, author of much of the email internationalization work) and a notable curmudgeon about layering violations. RFC 3205 came out of repeated IESG frustration at reviewing protocol drafts whose only justification for HTTP was firewall avoidance. It's short — about ten pages — and unusually opinionated for an IETF document. It does not forbid the practice; it just insists you think before reaching for it.
Daily Software Engineering
2026-06-07
CAP theorem says a distributed data store can only guarantee two of three properties: Consistency (every read sees the latest write), Availability (every request gets a non-error response), and Partition tolerance (the system keeps working when network links drop messages). The catch most engineers miss: partitions will happen. Cables get cut, switches die, cloud zones isolate. So the real choice is between CP and AP — never CA.
When a partition occurs, your system has two options:
Real-world example: You're building a shopping cart. A user in us-east adds an item; the partition splits us-east from us-west right as replication kicks in. CP choice (etcd-style): the write fails, the user sees "try again." AP choice (DynamoDB-style): the write succeeds locally, replicates after the partition heals, and if the user added items from both sides, you merge the carts (Amazon famously chose "add" semantics for shopping carts — you'd rather over-include than lose a sale). Now compare to a bank ledger: never AP. A double-spend is worse than an error message.
Rule of thumb: If the cost of stale or conflicting data exceeds the cost of an error, pick CP. If the cost of an error exceeds the cost of reconciliation, pick AP. Money, inventory counts, and unique-constraint enforcement → CP. Likes, view counts, session data, shopping carts → AP.
Two common misunderstandings to avoid:
PACELC extends CAP usefully: during a Partition, choose A or C; Else, during normal operation, choose between Latency and Consistency. Most "AP" systems are really PA/EL — they trade consistency for latency even when no partition exists, because synchronous replication is slow.
Tool Nobody Knows
2026-06-07
Before Ansible, before Salt, before anyone reached for a 200MB Python install to run uptime on a few boxes, sysadmins at Lawrence Livermore wrote pdsh. It's a small C program from the late '90s that still ships in Debian, Ubuntu, EPEL, and Homebrew, and it remains the fastest way to fan a command out to a herd of hosts. No inventory YAML. No facts gathering. No agent. Just SSH, in parallel, with grown-up output handling.
The killer feature is the hostlist syntax, which collapses runs of nodes into one expression. If you've ever typed a for h in loop, this will hurt:
pdsh -w node[01-32] uptime
pdsh -w node[01-04,06,10-20].dc1,gw[1-2].dc2 'systemctl is-active nginx'
pdsh -w ^/etc/cluster/web-tier 'nginx -t' # ^file reads a hostfile
pdsh -x node07 -w node[01-32] 'reboot' # exclude with -x
Output from each node is prefixed with the hostname, which is fine for ten hosts and unreadable for two hundred. That's where its little sibling dshbak earns its keep. With -c it coalesces identical output, grouping hosts that produced the same lines:
$ pdsh -w node[01-32] uname -r | dshbak -c
----------------
node[01-30,32]
----------------
5.15.0-91-generic
----------------
node31
----------------
5.15.0-50-generic
That report — "31 nodes agree, one is a snowflake" — is exactly the question you usually want answered, and it falls out of the pipeline for free. Try getting that out of ansible -m shell without writing a custom callback.
Companions in the package handle file movement: pdcp pushes, rpdcp gathers:
pdcp -w node[01-10] /etc/resolv.conf /etc/resolv.conf
rpdcp -w node[01-10] /var/log/dmesg /tmp/dmesg-gather/
# rpdcp drops files into /tmp/dmesg-gather/<hostname>/dmesg
The transport is pluggable via rcmd modules: -R ssh (default on modern installs), -R rsh, -R krb4, -R mrsh, -R exec (for testing with a local shell). You can set PDSH_RCMD_TYPE=ssh in your shell rc and forget about it. There's also -f for fanout (how many concurrent connections; default 32 — bump it for big clusters), and -u for a per-command timeout so one hung node doesn't wedge the whole run.
The genuinely Unix-wizard trick is using the WCOLL environment variable. Point it at a file of hostnames and every pdsh invocation in that shell uses it by default:
export WCOLL=~/clusters/web-tier
pdsh 'tail -n1 /var/log/nginx/error.log' | dshbak -c
pdsh 'date -u' | dshbak -c # quick clock-skew check across the fleet
Why use this instead of Ansible? Three reasons. First, latency: pdsh is a tiny binary; on a warm SSH ControlMaster it answers in milliseconds, not the second-plus Ansible spends importing modules and gathering facts. Second, composability: it's a pipe-friendly Unix tool, so the output flows into dshbak, awk, sort | uniq -c, or whatever else you've got. Third, zero remote requirements: no Python on the target, no agent, nothing to install. If ssh user@host command works, pdsh works.
It's not a replacement for configuration management. It's the tool you reach for when you need to look at two hundred machines right now and decide what to do next.
What If Engineering
2026-06-07
Pumped hydro storage holds 95% of the world's grid energy storage, but it needs mountains and reservoirs. What if we flipped it upside down — putting the empty reservoir at the bottom of the ocean and letting the entire ocean be the "upper" reservoir? Fraunhofer's StEnSea project has actually tested this. Let's see what the physics says about scaling it up.
The concept: Sink a hollow concrete sphere to the seafloor. To store energy, pump it dry against the surrounding water pressure. To release energy, open a valve, let seawater rush back in through a turbine. The deeper you go, the more energy per cubic meter.
The pressure-energy relationship: At depth d, hydrostatic pressure is P = ρgh. For seawater (ρ ≈ 1025 kg/m³) at 700 m depth:
P = 1025 × 9.81 × 700 = 7.04 MPa (~70 atmospheres)
Energy stored when fully emptying a sphere of volume V:
E = P × V = ρghV
A single sphere: Take a 30-meter-diameter sphere (V ≈ 14,137 m³) at 700 m depth:
E = 1025 × 9.81 × 700 × 14,137 ≈ 9.95 × 10¹⁰ J ≈ 27.6 MWh
Accounting for round-trip efficiency of ~75-80% (similar to conventional pumped hydro), you'd recover about 21 MWh per cycle. That's roughly enough to power 700 US homes for a day from a single sphere.
The wall thickness problem: At 7 MPa external pressure, a thin-walled sphere would implode. For a concrete sphere where compressive strength σ ≈ 40 MPa, the required wall thickness is approximately t ≈ Pr/(2σ). For r = 15 m:
t ≈ (7 × 10⁶ × 15) / (2 × 40 × 10⁶) ≈ 1.3 m minimum
Plus a healthy safety factor (call it 3×) for fatigue from thousands of pressure cycles, plus buckling resistance — call it 3 meters thick. That's 8,250 m³ of concrete per sphere, weighing ~20,000 tonnes. The cavity-to-shell volume ratio drops, but you still get useful storage density.
Scaling to a continent: The US grid would need around 1 TWh of storage to ride out a calm windless evening on a fully renewable grid. That's:
1 × 10¹² Wh / 21 × 10⁶ Wh per sphere ≈ 48,000 spheres
At ~$10M per installed sphere (Fraunhofer estimates), that's $480 billion — comparable in scale to building out lithium battery storage, but the spheres last 50-60 years versus 15 for batteries.
The geography is surprisingly good: The 500-800 m depth band exists within 50 km of shore along most continental shelves — Japan, California, the Mediterranean, Norway, Brazil. You'd need roughly 200 km² of seafloor footprint for the full US fleet, less than the area of Lake Tahoe.
The hidden gotcha: Marine fouling and corrosion. Mussels, barnacles, and biofilms could clog turbine intakes within months. The concrete itself survives fine in seawater (Roman concrete in Pozzuoli has lasted 2,000 years thanks to seawater-driven mineral growth), but the steel turbine housings, valves, and electrical penetrations need cathodic protection and probably need to be retrievable for service every 5-10 years — turning maintenance into a deep-sea salvage operation.
Wikipedia Rabbit Hole
2026-06-07
Wikipedia: Read the full article
You know Philips as the company that made your electric toothbrush, your hi-fi speakers, or maybe the lightbulb in your hallway lamp. What you probably don't know is that for several decades in the 20th century, Philips was the world's foremost expert on a 19th-century Scottish minister's heat engine — and very nearly cornered the global market on a technology that NASA still uses today.
The story starts in the 1930s. Philips was selling radios into rural and colonial markets where mains electricity didn't exist. Their customers needed a way to power those radios, and the obvious answer — a small generator — was a problem. Internal combustion engines of that era were loud, smoky, and finicky, exactly the wrong companion for a delicate vacuum-tube receiver. Philips' engineers went looking for something quieter and more reliable, and they landed on an obscure invention from 1816: the Stirling engine, patented by Reverend Robert Stirling as a safer alternative to the boiler explosions that were routinely killing people in early steam plants.
By the time Philips picked it up, the Stirling engine had been dormant for nearly a century. Internal combustion had eaten its lunch. As Wikipedia puts it, "virtually no serious development work had been carried out on the Stirling engine for many years." Philips asserted the role themselves — and turned a hobbyist curiosity into a serious industrial program.
What's fascinating about Stirling engines is why they're so quiet. Unlike a gasoline engine, there are no explosions inside — the working gas (often helium or hydrogen in modern designs) is sealed in a closed loop and simply heated and cooled from the outside. That makes them:
Philips built thousands of generators, then pivoted hard. By the 1950s they were exploring Stirling engines for submarines (silent running!), buses, cars, and — in reverse — as cryocoolers, because running a Stirling engine backward turns it into an incredibly effective refrigerator. That last application is the one that stuck. Philips' Stirling cryocooler designs eventually became standard equipment for cooling infrared sensors, liquefying gases, and chilling MRI superconducting magnets.
The road engine never quite worked out. The thermal mass meant Stirlings warmed up too slowly to be practical for cars, and the sealed high-pressure helium had a nasty habit of leaking past piston seals. Philips eventually licensed the technology to Ford and General Motors and walked away from automotive applications.
But here's the kicker: every NASA deep-space probe that flies too far from the sun for solar panels — think New Horizons, the Mars rovers' successors, missions to the outer planets — uses a power source derived from the engineering Philips developed selling radios to farmers. Plutonium decay provides the heat. A Stirling engine descendant turns it into electricity. A Scottish minister, a Dutch lightbulb company, and Pluto: the same machine.
Daily YT Documentary
2026-06-07
Channel: Echoes of USA (53 subscribers)
In June 1969, the US Army Corps of Engineers did something almost nobody thought possible: they shut off the American side of Niagara Falls. For roughly five months, the thunder of one of the world's most famous waterfalls went silent while engineers walked on the bare riverbed of the Niagara River.
The reason was practical. Decades of erosion had piled up massive talus boulders at the base of the American Falls, and geologists feared the entire cliff face was at risk of collapse. To study it, crews built a temporary cofferdam across the river — a 600-foot earthen barrier that diverted the entire flow over to the Horseshoe Falls on the Canadian side.
The video walks through how the diversion worked, what investigators found on the exposed rock face (including two bodies and millions of coins), and why engineers ultimately decided not to remove the rockfall. It's a great case study in how civil engineers approach a problem most people never even think about: managing the slow geologic decay of a natural landmark.
Caveat: the title leans clickbait and the channel is tiny, but the underlying story is genuinely well-documented history and the engineering details are accurate.
Daily YT Electronics
2026-06-07
Channel: الالكترونيك الرقمية (6330 subscribers)
This video tackles a specific, often-overlooked manufacturing defect in KiCad PCB layouts: when the solder mask opening on the bottom layer bridges pads belonging to different nets. It's the kind of problem that doesn't trigger a DRC error in default configurations but can absolutely cause solder bridges and shorts on the assembled board — a nasty surprise to discover after fabrication.
Unlike the many beginner-tier "schematic to gerber" tutorials in today's batch (which all cover the same well-trodden ground), this one targets an intermediate problem that working PCB designers actually run into. The fix involves understanding the relationship between pad clearance, solder mask expansion, and the mask aperture geometry — concepts that aren't intuitive until someone walks you through them visually.
The step-by-step framing suggests the creator demonstrates both the diagnosis (how to spot the issue in the 3D viewer or gerber output) and the remediation (adjusting mask clearance per-pad or via design rules). For anyone moving beyond hobby boards into designs with fine-pitch components or QFN packages, this is exactly the kind of subtle gotcha that separates clean fabrication runs from costly re-spins.
Daily YT Engineering
2026-06-07
Channel: Academic Engineering (143 subscribers)
Heat exchangers are one of those pieces of equipment that quietly do enormous work — every power plant condenser, every HVAC chiller, every refinery process loop relies on them — and yet the design math behind them is rarely taught well outside a dedicated thermal engineering course. This lecture from Academic Engineering tackles the two dominant analysis methods head-on: LMTD (Log Mean Temperature Difference) and NTU (Number of Transfer Units), and explains when to reach for each.
The video walks through the three canonical flow configurations — parallel, counter, and cross flow — and shows how the temperature profile along the exchanger changes the effective driving force for heat transfer. Counterflow's advantage isn't just academic; it directly determines how much surface area (and capital cost) you need for a given duty. The four case studies are where this becomes concrete: instead of staying abstract, the lecture grounds each method in a real sizing or rating problem, which is the difference between knowing a formula and being able to use it.
For mechanical or chemical engineering students preparing for exams, or working engineers who learned one method on the job and want to fill in the other, this is a solid, focused treatment. The channel is small (143 subscribers) but the scope here is appropriately deep — not a shorts-style flyby.
Daily YT Maker
2026-06-07
Channel: Allen Miller Fabrication (95 subscribers)
Note: this was the only candidate in today's batch, and it shows clear signs of being a low-quality pick — the title is hashtag-heavy ("#dayinthelife #fabricationshop #familybusiness"), the description is empty, and the "POV you own a fabrication shop with your spouse" framing suggests a YouTube Short rather than an in-depth tutorial.
That said, there's a sliver of potential here. Allen Miller Fabrication is a genuinely small channel (95 subscribers), and small family-run fab shops are often where the most honest glimpses of the trade live — no sponsorships, no studio lighting, just someone showing what their workday actually looks like. If you're curious about what it takes to run a two-person metal fabrication business — juggling welding, customer work, quoting, and shop management with a spouse as your partner — even a short POV clip can offer a useful peek behind the curtain.
Don't go in expecting a tutorial on TIG technique or a teardown of a press brake. Go in expecting atmosphere: the rhythm of a small shop, the kind of work that comes through the door, and the dynamic of running it as a couple. For aspiring shop owners, that texture has its own value.
Daily YT Welding
2026-06-07
Channel: U.K.C welding life (232 subscribers)
Honest caveat up front: this batch was heavy on hashtag-spam Shorts and compilation reels, so the pickings were slim. That said, this tutorial from a tiny 232-subscriber channel is the one candidate that promises a genuine, sequential walkthrough of a real fabrication skill — multi-pass pipe welding with stick (SMAW).
Pipe welding is one of the harder coded skills in the trade because the joint orientation changes continuously around the circumference, and each pass has a distinct job. The root pass establishes full penetration and a clean inside profile (critical for pressure piping where slag inclusions or lack of fusion can fail inspection). The hot pass burns out trapped slag and ties the root cleanly to the bevel walls. Subsequent fill and cap passes build the joint to size while managing heat input, undercut, and bead profile.
The video is narrated in Hindi, which is a plus if you work in or alongside South Asian fab shops where this is the dominant instructional language — and the visual sequence of bevel prep, electrode angle, and bead progression translates regardless of language. Small channels like this often show the unglamorous reality (grinding between passes, restarts, slag chipping) that polished YouTube creators edit out.
Worth a watch if you want to see the full progression rather than a 30-second money shot of a finished weld.
