26 newsletters today.
Abandoned Futures
2026-09-11
On February 4, 1986, Ronald Reagan stood in front of Congress during the State of the Union and pointed at a piece of hardware that didn't exist yet: "a new Orient Express that could, by the end of the next decade, take off from Dulles Airport, accelerate up to 25 times the speed of sound, attaining low earth orbit or flying to Tokyo within two hours." That was the X-30 National Aero-Space Plane. It was cancelled eight years later without ever cutting metal on a full vehicle.
The X-30 wasn't a paper airplane. It was a joint DARPA/NASA/USAF/Navy program with a $1.7 billion investment through 1994 and a contractor team that read like a hostile takeover of the American aerospace industry: McDonnell Douglas, Rockwell, and General Dynamics on the airframe; Pratt & Whitney and Rocketdyne on the propulsion. The concept: a single-stage-to-orbit horizontal-takeoff spaceplane using airbreathing supersonic combustion ramjets (scramjets) from roughly Mach 4 to Mach 15, transitioning to rocket mode for the final push to orbital velocity.
The engineering was breathtakingly specific:
What actually killed it. By 1992 three walls converged. First, the scramjet combustor was running 400โ600ยฐF hotter than any available alloy could sustain for the required duration; the beryllium and titanium aluminide procurement schedule slipped past the vehicle assembly date. Second, cost estimates for a full flight-test vehicle had ballooned from the 1986 estimate of ~$3.3 billion to a General Accounting Office estimate of $15 billion. Third โ and decisively โ the Cold War ended. The Soviet Tu-2000 and the German Sรคnger II spaceplane programs, which had provided the strategic panic, both collapsed. The program was formally terminated in 1994 and rolled into the smaller Hyper-X research effort.
Why it deserves a second look in 2026. Every one of the three walls has crumbled:
The NASP's central bet โ that airbreathing propulsion could beat rockets to orbit if you could survive the heat โ was correct. The engineers were 20 years early on materials and 30 years early on turnaround economics. Every dollar spent on X-30 is now buried inside every scramjet weapon flying today; the only piece missing is the political will to build the actual airplane.
ArXiv Paper Digest
2026-09-11
Counterfactual Regret Minimization (CFR) is the algorithm behind the poker AIs that famously beat top human pros. It works by walking through a giant tree of possible game states โ sometimes billions of them โ and repeatedly nudging a strategy toward "less regret" at every decision point. It's one of the most important algorithms in imperfect-information game theory.
Here's the awkward part: despite living in the era of GPU-everything, CFR has stubbornly run faster on CPUs than on GPUs. That's a strange outlier. Deep learning, physics sims, graphics โ all of them love GPUs. So why not CFR?
The authors identify the culprit: overhead, not math. A CFR iteration is millions of tiny operations โ gather this, scatter that, add these โ all touching different parts of the game tree in specific orders. On a GPU, each of these little operations finishes in microseconds. But launching a GPU operation from Python or a generic framework also takes microseconds. When your work is that granular, you spend more time telling the GPU what to do than actually doing it. The GPU sits idle while the CPU catches up.
Their fix has two parts:
The payoff is right in the title: 80x faster than prior GPU implementations, and finally faster than the tuned CPU code that had been winning all along.
The broader lesson is worth chewing on. GPUs aren't magically fast โ they're fast at bulk work. Any workload with lots of small, dependent steps runs into the same wall CFR did. Compiling the workload into a static plan and replaying it as one unit is becoming a standard trick, and this paper is a nice demonstration of it rescuing an algorithm the GPU world had basically given up on.
Daily Automotive Engines
2026-09-11
Every Prius, Camry Hybrid, and Mazda SkyActiv-G engine runs a trick that would have baffled engineers a century ago: they hold the intake valve open past bottom dead center on the compression stroke. This is the Atkinson cycle (naturally aspirated) or Miller cycle (forced induction), and it's the reason a 2.5L Camry hybrid gets 50 mpg without giving up much power.
The original 1882 Atkinson engine used a complex linkage to physically shorten the compression stroke while lengthening the power stroke. Modern engines fake it with valve timing. The intake valve stays open 60โ80ยฐ of crank rotation after BDC. As the piston starts rising, it pushes some of the fresh charge back out into the intake manifold. Only when the valve finally closes does real compression begin.
The key insight: static compression ratio (measured geometrically) and effective compression ratio (measured from when the intake valve actually closes) diverge dramatically.
A Toyota Prius 2ZR-FXE runs a static compression of 13.0:1 โ pump gas would knock instantly in a conventional engine. But because the intake valve closes ~70ยฐ after BDC, effective compression drops to roughly 9:1. Detonation-free on 87 octane, yet the expansion ratio during the power stroke is still 13:1 โ extracting more work from the same combustion event.
Rule of thumb: effective CR โ static CR ร cosยฒ(intake-valve-close-angle-past-BDC รท 2). For 70ยฐ ABDC: cosยฒ(35ยฐ) โ 0.67, so 13.0 ร 0.67 โ 8.7:1 effective. That matches measured cylinder pressure data.
The downside: pumping air back out the intake reduces cylinder fill, so peak torque and specific output drop. A Miller-cycle 2.5L makes maybe 175 hp naturally aspirated where an Otto-cycle version would make 200+. That's why the trick lives in hybrids (electric motor fills the torque hole) and turbocharged engines like the VW 1.5 TSI Evo (boost restores charge density while retaining the expansion-ratio advantage).
Mazda's SkyActiv-G takes it further: 14:1 static compression with delayed IVC and a 4-2-1 exhaust that eliminates residual gases. The result is diesel-like thermal efficiency (~40%) burning regular gasoline โ no hybrid required.
Daily Debugging Puzzle
asyncio.create_task Weak Reference Trap: The Fire-and-Forget Job That the Garbage Collector Cancels Mid-Flight2026-09-11
This handler processes an API request and emits a latency metric on the side. The metric call is deliberately fire-and-forget โ the caller shouldn't wait on a network round-trip to StatsD just to return a response. It passes code review, ships, and works fine in tests. In production, roughly one metric in twenty silently disappears โ never sent, never logged, never raised.
import asyncio, logging, random
async def send_metric(name: str, value: float) -> None:
await asyncio.sleep(0.05) # network call to metrics backend
if random.random() < 0.01:
raise RuntimeError("metrics backend down")
logging.info("sent %s=%s", name, value)
async def handle(req):
await asyncio.sleep(0.01)
return {"ms": 12.3}
async def process_request(req):
result = await handle(req)
# Fire-and-forget: don't block the response on metrics.
asyncio.create_task(send_metric("request.latency", result["ms"]))
return result
async def main():
await asyncio.gather(*(process_request({}) for _ in range(1000)))
asyncio.run(main())
The event loop keeps only a weak reference to tasks created by asyncio.create_task. The only strong reference in this code is the return value of create_task(...) โ and it's discarded on the next line. As soon as the garbage collector runs (which it will, under load, at unpredictable moments), any pending task with no other strong owner becomes eligible for collection. Python destroys the task mid-await, prints a terse Task was destroyed but it is pending! warning to stderr if you're lucky enough to have logging wired to it, and moves on.
Even worse: exceptions raised inside a garbage-collected task are simply dropped. That RuntimeError("metrics backend down") above never surfaces anywhere. Your dashboards report 100% success while metrics silently vanish. In staging you can't reproduce it because the GC threshold isn't hit; the bug shows up only under real traffic and long-lived processes.
This is documented โ but easy to miss โ in the CPython source and the asyncio docs: "Save a reference to the result of this function, to avoid a task disappearing mid-execution." The event loop's task registry uses a WeakSet so that completed tasks can be collected promptly; the price is that uncompleted tasks can also be collected if you don't hold them.
Hold a strong reference until the task finishes. The canonical pattern is a module-level set plus a done-callback that removes the task after completion:
_background_tasks: set[asyncio.Task] = set()
async def process_request(req):
result = await handle(req)
task = asyncio.create_task(send_metric("request.latency", result["ms"]))
_background_tasks.add(task)
task.add_done_callback(_background_tasks.discard)
return result
Now every in-flight task has a strong referent (the set), the GC leaves it alone, and the done_callback tidies up so the set doesn't grow unbounded. As a bonus, add_done_callback gives you a natural hook to log exceptions (task.exception()) that would otherwise vanish into the void.
For structured concurrency in Python 3.11+, prefer asyncio.TaskGroup, which owns its child tasks and propagates their exceptions deterministically โ no weak-reference footgun.
asyncio.create_task hands you the only strong reference to the new task โ drop it and the garbage collector may quietly cancel your work along with any exceptions it raised.
Daily Digital Circuits
2026-09-11
When a sigma-delta ADC spits out a 100 MHz stream of 1-bit samples and you need a 1 MHz stream of 16-bit samples, you have a problem: filtering at 100 MHz with a conventional FIR would need dozens of parallel multipliers. Eugene Hogenauer solved this in 1981 with the Cascaded Integrator-Comb (CIC) filter โ a decimation/interpolation structure that uses only adders, subtractors, and delays. No multipliers, no coefficients to store, no ROM.
The topology is beautifully symmetric. For decimation by factor R:
y[n] = y[n-1] + x[n] โ one adder and one register.y[n] = x[n] - x[n-M] โ one subtractor and M registers.Interpolation is the mirror image: combs first at the low rate, then zero-stuffing, then integrators at the high rate.
The magic trick that makes this work: The integrator at high rate has infinite DC gain and will overflow. But because 2's complement arithmetic wraps around modulo 2^B, and because the comb stage subtracts a delayed copy at the low rate, the wraparound cancels out exactly โ provided the register width B accommodates the maximum signal swing. The bit-growth formula:
B_out = ceil(Nยทlogโ(RยทM)) + B_in
For a 5-stage CIC decimating by R=64 with differential delay M=1 and 1-bit input: B_out = ceil(5ยทlogโ(64)) + 1 = 31 bits. Yes, 31-bit integrator registers to filter a 1-bit signal. Hardware people don't care โ flip-flops are cheap.
Real-world example: Every cellular baseband chip contains CIC filters in its digital down-converter. A 4G/LTE receiver samples the antenna at ~245 MHz, then a CIC decimates by 32 or 64 down to something the channel-select FIR can handle at ~8 MHz. Without CIC, you'd need a 200-tap FIR running at 245 MHz โ hundreds of multipliers burning watts. With CIC, you have ~10 adders running at 245 MHz and the multiplier-heavy FIR runs at 8 MHz.
The tradeoff: CIC frequency response is (sin(ฯfRM)/sin(ฯf))^N โ a sinc^N shape with significant passband droop near the edge. You almost always follow a CIC with a small compensation FIR that boosts the high-frequency corner back flat.
Daily Electrical Circuits
2026-09-11
A textbook Miller integrator (op-amp, input resistor R, feedback capacitor C) has a nasty real-world problem: it always drifts. Op-amp input bias current and input offset voltage both act like tiny DC signals at the summing junction, and the integrator dutifully integrates them. Even a "good" JFET-input op-amp with 10 pA bias current will ramp the output of a 1 nF integrator at 10 mV per second. Leave it running for a minute and you're railed.
The fix is a reset switch across the integration capacitor. When closed, it forces VC = 0 (or whatever offset the summing junction wants), zeroing the integrator state. When opened, integration resumes from a known starting point. This is fundamental to dual-slope ADCs, charge-balancing electrometers, sample-and-hold front-ends, and analog compute blocks.
Switch technology matters enormously:
Real-world example: In a dual-slope integrating DMM, the integrator runs up during a fixed integration time Tint from the input, then ramps down against a reference. Between measurements, the reset switch must fully discharge C before the next cycle โ residual charge shows up as an offset in the next reading. High-end 6ยฝ-digit meters typically use two switches (reset plus a second one during the auto-zero phase) to null out both the integrator offset and the comparator offset.
Charge injection rule of thumb: If your CMOS switch spec sheet lists Qinj = 4 pC and your integrator capacitor is C = 10 nF, the reset-opening step is ฮV = 4 pC / 10 nF = 0.4 mV. For a 10 V full-scale integrator that's 40 ppm error โ fine for 12-bit work, catastrophic for 20-bit. Two mitigations: use a larger C (trade drift for injection), or use a dummy switch โ a second, unused switch driven with the complementary clock, whose channel charge cancels the reset switch's injection to first order.
Also watch the switch's OFF leakage. A 1 nA leak into a 1 nF cap drifts 1 V/s โ your reset switch can become the very drift source you were trying to fix.
Daily Engineering Lesson
2026-09-11
Bolted joints loosen from transverse vibration, not axial pull. When a joint cycles sideways, the friction that holds the threads engaged momentarily drops to zero and the bolt backs off a few degrees per cycle. Split washers, star washers, and even nyloc nuts help less than most engineers assume. Thread-locking adhesives โ anaerobic methacrylate resins โ solve the problem chemically by filling the thread gaps with a polymer that cures in the absence of air and in contact with metal ions.
Henkel's Loctite line is the reference. The color codes are worth memorizing because they tell you the strength and, more importantly, the removability:
Real-world example: The set screws that clamp encoder hubs to servo motor shafts. A single M4 cup-point set screw at 2 Nยทm preload will walk out in weeks on a machine that reverses direction constantly. A drop of blue 242 on the threads holds it indefinitely and still allows removal for reindexing.
Rule of thumb โ application: use one drop per 6 mm of thread engagement, applied to the bolt threads at the point of nut engagement, not the tip. Assemble within a few minutes; anaerobics cure fully in 24 hours at room temperature but reach handling strength in 10โ20 minutes on active metals (steel, brass). On inactive metals (stainless, aluminum, plated fasteners) cure time doubles or triples โ use a primer (7471 or 7649) or bump up to a grade specifically formulated for inactive surfaces.
Two failure modes to avoid: applying threadlocker to oily or greasy threads (cure inhibited โ clean with brake cleaner first), and using red where blue was called for (torch-wielding technician six months later will curse your name).
Forgotten Darkroom
2026-09-11
Book: One hundred photographic formulรฆ : the indispensable companion to the laboratory; containing most useful formulae used in photography and its branches : collected from the most reliable sources, and conveniently arranged for ready reference [1892] by Rogers, W. Ingles (1892)
Read it: Internet Archive
Buried in the preface of a sixpenny Victorian pamphlet is one of the most vivid snapshots of pre-digital knowledge management ever committed to print. W. Ingles Rogers, author of Photographic Gems and clearly a man of strong opinions about tidiness, spent the summer of 1891 touring British photographic studios. What he found appalled him:
"In some cases the walls of the 'dark-rooms' were literally covered with clippings from books and journals, whereby the said books and journals were, of course, deprived of their completeness and utility; and not only that, but through the dampness of the walls and the action of the chemicals, the figures were well-nigh obliterated, and required a very keen eye to distinguish them. In the others, bottles themselves were plastered with labels bearing in almost undecipherable characters the necessary instructions for the preparation of their contents; while in many instances no formulรฆ at all were observable, the manipulators trusting solely to their memory."
This is a lost world made suddenly legible. In 1892, if you were a working photographer, chemistry was a daily craft. You mixed your own pyrogallol developer, your own hypo fixing bath, your own collodion. There was no Kodak "you press the button, we do the rest" (that slogan had only appeared in 1888, and had not yet conquered the trade). Every studio was a small chemistry lab, and every practitioner was his own reference librarian.
Rogers' complaint is essentially the complaint of every knowledge worker since: where do you put the information you need to have at hand, but can't afford to lose? His Victorian photographers had answered it in three ways that will feel eerily familiar:
Rogers' solution โ a cheap, portable, indexed reference book โ was the 1892 equivalent of Stack Overflow. He even names his motivation in commercial terms: "if, during his next round of visits, the compiler finds a copy of it in every studio, he will be amply repaid." He wanted market penetration.
What's genuinely lost here isn't a recipe (though the book contains a hundred of them). It's the recognition that working knowledge has always been fragile, and that every generation reinvents the same three bad solutions before someone writes the manual. The dark-room wall covered in chemical-stained clippings is the direct ancestor of your team's Slack channel full of pinned messages nobody can find.
Forgotten Patent
2026-09-11
In February 1870, New Yorkers paid 25 cents to descend into a gaslit, frescoed waiting room under Broadway, board a cylindrical car, and be blown one block through a nine-foot iron tube by a 100-horsepower steam fan. The whole thing had been dug in secret. The man behind it was Alfred Ely Beach, editor and co-owner of Scientific American, and the physics was already in his patent portfolio.
Beach's foundational filing is US Patent 49,227, granted June 25, 1865, for a "Pneumatic Dispatch" system โ a sealed tube in which carriers were pushed by pressurized air and pulled by partial vacuum on the far end. He initially pitched it for mail and small parcels (a use that would soon spread to Paris, London, and later every hospital and drive-through bank on Earth). But Beach's real ambition was passenger transit. In 1867, at the American Institute Fair, he built a wooden demonstration tube and cycled ten passengers at a time through it. In 1869 he began digging under Manhattan, using another of his patents โ US Patent 91,071 (1869), an improved tunneling shield โ the ancestor of every modern tunnel boring machine from the Chunnel to the Second Avenue Subway.
The Beach Pneumatic Transit opened February 26, 1870, running one block from Warren Street to Murray Street. A giant Roots blower called the "Western Tornado" pushed the car out; reversing the fan sucked it back. Over three years it carried about 400,000 passengers, essentially as a paid demonstration. Beach wanted to extend it to Central Park. Boss Tweed's Tammany machine โ which had a financial stake in surface streetcars โ repeatedly blocked the enabling legislation. By the time Beach finally got approval in 1873, the Panic of 1873 killed his funding. The tunnel was sealed and forgotten until 1912, when workers boring the BMT Broadway line broke through and found the car still sitting on its tracks.
What Beach actually invented, in modern terms:
The gap between Beach and Hyperloop is engineering, not concept. Beach couldn't hold a partial vacuum over long distances (leaky iron segments, no linear induction motors, no maglev to eliminate wheel friction). He compensated with a short tube and positive pressure. Modern proposals invert the geometry โ very long tubes, very low pressure, magnetic levitation โ but the governing question is identical: how do you move a passenger capsule through a sealed tube faster than a train can move through open air?
Beach answered it, at 6 mph, under Broadway, 155 years ago โ with a patent, a giant fan, and enough political cover to dig a tunnel Tammany Hall didn't know about.
Daily GitHub Zero Stars
2026-09-11
Language: C#
There's a special kind of software that only exists because someone got fed up. customClock is exactly that โ a C# project born from the developer's own admission that they "had a headache of not being able to do some stuff that I want with the default windows clock." No grand vision statement, no roadmap, no marketing copy. Just a person who looked at the taskbar clock in Windows and decided they could do better.
The default Windows clock is famously stingy with customization. You can toggle seconds (a feature that took years to return), and... that's about it. Want a different font? Custom date format? A secondary timezone visible at a glance? Color coding for work hours versus off-hours? A countdown to your next meeting rendered right where the system clock lives? Microsoft says no. Projects like this one say maybe.
What makes this repo worth a peek:
Who benefits? Windows power users tired of the default taskbar experience, C# devs curious how to build lightweight desktop utilities, and anyone who's ever muttered "why can't I just change this one thing" at their OS. It's also a nice reference for building the kind of tiny, single-purpose tool that used to fill shareware CDs in the 90s โ the software equivalent of a well-organized junk drawer.
Daily Hardware Architecture
2026-09-11
Store-to-load forwarding is the fast path where a load reads its value directly from an older, still-buffered store instead of waiting for that store to reach L1. It's one of the most important tricks in a modern CPU โ dependent loads that follow stores are everywhere (spills, stack traffic, pointer updates). But there's a specific case where forwarding always fails: when the load crosses a cache line boundary.
The reason is structural. The store buffer is organized around cache lines โ each entry holds bytes belonging to one 64-byte line, tagged with a physical line address and a byte-mask of which bytes are valid. The forwarding CAM (content-addressable memory) matches loads against store buffer entries using that single line address. A load that straddles two lines has two line addresses. It would need to simultaneously match two different store buffer entries, merge their bytes, and combine that with data possibly still in L1 for the untouched portion. No mainstream CPU builds that hardware.
Instead, the split load is broken into two aligned halves internally. Each half tries to forward independently โ but the forwarding path typically requires the entire load range to be covered by a single store. If either half touches a line where an older store exists, the load must wait for that store to drain to L1, then re-issue as a normal cache access. This is often called a split-load forwarding stall, and it costs roughly 10โ20 cycles on Intel Skylake-class cores, versus 4โ5 cycles for a successful forward.
Concrete example: A memcpy loop copies 8-byte words but the source pointer is misaligned by 4 bytes relative to a 64-byte line. Each load straddles two lines. If the destination of a previous iteration's store happens to alias one of those lines (common in tight in-place transforms), forwarding fails on every iteration. You'll see MEM_INST_RETIRED.SPLIT_LOADS climb, and IPC can drop by 30โ50% versus the aligned version โ even though every access hits L1.
Rule of thumb: A load can forward from a store only if load_start โฅ store_start, load_end โค store_end, and both live on the same 64-byte line. Cross a line boundary and you've bought a full store-buffer drain. Align hot loads to their natural size, and if you must do unaligned access, ensure no recent store touches either half of the split.
Hacker News Deep Cuts
2026-09-11
Link: https://mg-crea.com/blog/the-blast-radius/
HN Discussion: 1 points, 0 comments
"Blast radius" is one of those operational concepts that everyone nods along to and almost nobody actually designs for. It's the answer to a simple question: when this thing fails โ or when this credential leaks, or when this agent goes rogue โ what else goes down with it? The term comes from SRE culture, but it's having a second life in the era of AI agents, IaC pipelines, and org-wide service accounts that quietly hold god-mode across half your infrastructure.
Based on the title and the personal-blog format, this post likely walks through blast radius as a design lens: how to shrink it, how to measure it, and where engineers reliably underestimate it. Expect concrete territory like:
kubectl delete anything in prod at 3am because MFA-gated break-glass was "too annoying."Why it matters for a technical audience right now: the industry is enthusiastically handing production keys to autonomous agents while still using the same coarse-grained IAM patterns that made the 2010s a parade of "one leaked AWS key deleted the company" postmortems. Every new MCP server, every new agent-with-tools integration, is a blast-radius decision โ and most teams are making it implicitly by copying an example config.
The really useful version of this post is the one that gives you vocabulary to push back in design review: "what's the blast radius of this service account?" is a question that reframes an argument about convenience into an argument about consequences. That's a rare gift in an industry that mostly measures "did it ship."
Zero comments and one point is criminally low for something that touches SRE, security, and agent design simultaneously โ three audiences that would all benefit from reading the same essay.
HN Jobs Teardown
2026-09-11
Source: HN Who is Hiring
Posted by: svec
Of the ten postings, iRobot's is the most revealing precisely because of what it doesn't say. A publicly-traded consumer robotics company with a household-name product (Roomba) shows up on HN not with a slick recruiting pitch, but with a hiring manager (svec) personally posting: "I'm hiring an experienced embedded software engineer for my team... I've also got a 0-2 year experience embedded software role that doesn't have a job description yet." That's a signal.
Stack & strategy: No stack is named. That's characteristic of embedded work โ the answer is "C, C++, RTOS, whatever the silicon dictates" โ but it's also telling that iRobot isn't trying to seduce web engineers with buzzwords. They want people who already know they want to write firmware for vacuums that navigate living rooms. The role is Bedford, MA ONSITE, no remote hedge, which for embedded work makes sense: you need hands on hardware, oscilloscopes, and prototypes on the bench.
What it reveals about the company:
Green flags: Direct line to the hiring manager, a real team with real hardware, a mission ("helpful home robots") that isn't ad-tech. Bedford is a legitimate robotics cluster (MIT, Boston Dynamics alumni network).
Red flags: Onsite-only in a Boston suburb narrows the candidate pool sharply. The "no JD yet" junior role is either refreshingly honest or a sign of an org that hasn't figured out what it needs. And the terseness โ three sentences, two Workday links โ suggests HN is a fishing expedition, not a serious channel.
Daily Low-Level Programming
2026-09-11
When the kernel unmaps a page, changes its permissions, or moves it to a different physical frame, the TLB entries caching the old translation become stale. Reloading CR3 flushes the entire TLB โ thousands of entries, all of which have to be re-walked from scratch on the next access. INVLPG is the surgical tool: it invalidates the TLB entry for exactly one virtual page, on the local core, and leaves everything else intact.
The encoding is 0F 01 /7, and the operand is unusual: it's a memory operand, but the CPU doesn't actually read that memory. It uses the address of the operand as the virtual page to invalidate. So INVLPG [rdi] invalidates the TLB entry for the page containing whatever RDI points to. Ring 0 only โ a #GP if you try it from user space.
Three things INVLPG does not do:
INVPCID (added in Haswell).The global-page exception. Pages marked with the G bit (kernel text, vDSO, etc.) survive a MOV-to-CR3 flush precisely so common kernel mappings stay hot across context switches. But INVLPG does flush a global page's entry โ that's the whole point of having a surgical instruction. If the kernel remaps its own text, INVLPG is the only way to make that stick without disabling CR4.PGE.
Real-world example. In Linux, flush_tlb_page() calls __flush_tlb_one_user(), which on x86-64 emits a single INVLPG. If the mapping is shared across CPUs, flush_tlb_mm_range() broadcasts an IPI carrying the address, and each remote core runs INVLPG in the IPI handler. This is why munmap() on a large mapping with many threads scales badly: the shootdown cost is N cores ร page count ร IPI latency.
Rule of thumb. INVLPG costs ~100โ200 cycles locally. A full TLB flush via CR3 costs ~300โ500 cycles plus the refill storm afterward (each subsequent miss is a ~1000-cycle page walk). Breakeven is roughly 4 pages โ below that, use INVLPG per page; above that, the kernel switches to a full flush. Linux hardcodes this crossover in tlb_single_page_flush_ceiling (default 33 on x86-64, tuned for the shootdown IPI amortization).
Reddit Small Subs
2026-09-11
Subreddit: r/retrobattlestations
Discussion: View on Reddit (506 points, 61 comments)
This post showcases a working Colani-designed 486 PC, one of the most polarizing industrial-design experiments ever inflicted on the beige-box era of computing. The machine sports a Trident 512KB video card, 8MB of RAM, a 486DX2 running at 66MHz, and a still-functional Quantum ProDrive 210A hard disk โ though, as the owner notes, the Dallas RTC battery has died (a nearly universal ailment for machines of this vintage).
What makes this interesting isn't just the hardware โ it's the designer. Luigi Colani was a German industrial designer famous for his radical biodynamic approach: sweeping curves, organic forms, and an outright rejection of the rectangular slab aesthetic that dominated 1990s PCs. Colani designed trucks, cameras, pianos, and yes, a small run of PCs in the early '90s โ machines so visually unusual they look more like props from a sci-fi film than office equipment.
Readers can take away several things:
The 500+ upvotes and 61 comments reflect just how divisive Colani's work still is โ even 30+ years later, people either see genius or absurdity. Scroll the comments and you'll find both camps arguing passionately, plus knowledgeable folks debating which Colani PC variant this actually is (there were several OEMs licensing his designs).
RFC Deep Dive
2026-09-11
For nearly two decades, BGP-4 had a dirty secret written right into its specification: if a router received a malformed UPDATE message on a session, the only sanctioned response was to tear the entire session down. RFC 4271 called this "notification and close." One bad attribute on one prefix, and every route that peer had ever advertised โ potentially hundreds of thousands of them โ vanished, triggering a global reconvergence storm. RFC 7606 is the pragmatic, painfully-overdue fix.
The problem in practice. BGP sessions carry a firehose of UPDATE messages, each containing path attributes (AS_PATH, NEXT_HOP, MED, communities, and dozens of others). Attributes are TLV-encoded. A buggy vendor implementation, a corrupted optional transitive attribute passed hop-by-hop across ASes, or a novel attribute type nobody's parser handled correctly โ any of these could produce a syntactically invalid UPDATE. The 4271 rule said: kill the session. This produced real outages. The most famous class involves optional transitive attributes: AS X originates something odd, it traverses AS Y (who doesn't understand it but passes it through per the "transitive" rule), and lands at AS Z whose parser chokes. AS Z resets its session with AS Y. Y's session flaps take down thousands of prefixes.
The graduated response. RFC 7606 introduces a hierarchy of error-handling actions, from least to most disruptive:
Per-attribute rules. The RFC then does the tedious, essential work of walking through every path attribute defined at the time and specifying exactly which action applies to which error. ORIGIN with an undefined value? Treat-as-withdraw. AS_PATH malformed? Session reset (you literally cannot loop-detect without it). MULTI_EXIT_DISC with wrong length? Treat-as-withdraw. Unknown optional transitive with the partial bit set incorrectly? Discard the attribute. This table is the operational heart of the document.
Why it matters today. Every major BGP implementation โ Cisco IOS-XR, Juniper Junos, Arista EOS, Nokia SR OS, BIRD, FRR โ has implemented 7606. It is arguably the single most important reliability improvement to the internet's routing plane since graceful restart. When you read a post-mortem where "a malformed BGP attribute from a peer" causes a partial outage instead of a full session teardown cascading across the DFZ, that's 7606 doing its job silently. Before 7606, incidents like the 2010 "Cisco/RIPE experiment" that accidentally propagated a novel attribute type caused widespread session resets across the internet; 7606-compliant routers would have quietly discarded the attribute and moved on.
A design lesson. The original "fail closed at session scope" was arguably correct 1990s thinking: if you can't trust one message, you can't trust the peer. But at internet scale, session resets are the outage. RFC 7606 accepts a subtler truth โ the blast radius of your error handler matters as much as its strictness. Fail as small as you can while still failing safely.
Stack Overflow Unanswered
2026-09-11
Stack Overflow: View Question
Tags: caching, verilog, cpu-architecture, system-verilog, best-practices
Score: 0 | Views: 150
The asker is designing a direct-mapped, write-back, write-allocate L1 cache for a custom RISC-V core. The cache line is 128 bits (4 words), main memory uses a synchronous interface with a one-cycle mem_ready handshake, and the specific question is whether the write-hit path should be handled combinationally (tag compare and data write happen in the same cycle the CPU asserts the request) or sequentially (latched into a state machine that takes at least one extra cycle).
Why this is genuinely hard: it's not a Verilog-syntax question โ it's a microarchitecture trade-off that shapes the entire pipeline. The combinational option looks attractive because a write-hit should logically be "free": tag matches, mux the word into the line, done. But collapsing tag compare, way select, byte-enable generation, and SRAM write-enable into one cycle piles logic onto the critical path. On any real FPGA (block RAMs are synchronous-write only) or ASIC (SRAM macros clock the write port), you physically cannot commit the write in the same cycle you finished comparing tags โ the tag RAM output isn't valid until the clock edge, and the data RAM needs its address and write-enable stable before the next edge.
A cleaner framing: separate the decision (hit/miss) from the commit (SRAM update). A typical layout:
This gives single-cycle throughput for hits (one write commits per cycle in steady state) while respecting the fact that SRAMs are edge-triggered. The FSM only really needs states for miss handling: IDLE, ALLOCATE (issue memory read, wait for mem_ready), WRITEBACK (if evicting a dirty line), and back to IDLE. Write-hits should not visit the FSM at all โ they're a fast path.
Gotchas:
sb/sh to a 128-bit line requires read-modify-write of the word within the line โ trivial with byte write-enables on the SRAM, painful without them.mem_ready: the spec says data is valid "for one cycle" โ you must capture it into a register on that cycle or lose it.Daily Software Engineering
2026-09-11
You've already got weighted rendezvous hashing sharding across heterogeneous hardware, and bounded loads preventing any one node from getting crushed. But there's a third problem lurking: node capacity isn't static. A node's effective capacity drops when it's GC-thrashing, when its disk fills up, when a noisy neighbor steals CPU. Static weights lie the moment reality diverges from your capacity planning spreadsheet.
Adaptive rebalancing closes the loop: nodes report their observed load and health back to the placement layer, which adjusts effective weights in near-real-time. The hash function still produces deterministic placement, but the weights feeding into it shift based on live signals.
The mechanism: each node emits a "capacity utilization" metric every N seconds (CPU, memory pressure, request latency p99, queue depth). The placement service computes an effective weight: effective_weight = base_weight ร health_factor, where health_factor shrinks as utilization climbs above a target (say, 70%). Rendezvous hash scores are recomputed with the new weights. Keys that now score higher on a different node migrate โ but only if the score delta exceeds a hysteresis threshold, or you'll thrash.
Real-world example: Discord's message storage cluster runs Cassandra-style consistent hashing, but nodes occasionally hit compaction storms that spike latency 10x. A static-weight scheme keeps hammering the sick node. With adaptive rebalancing, the placement layer sees p99 latency climb past threshold, drops that node's effective weight by 40%, and new writes flow to healthy peers. When compaction finishes and latency recovers, weight climbs back. The sick node isn't evicted โ just temporarily de-prioritized.
The rule of thumb: use a hysteresis band of at least 15% on weight changes to prevent flapping. If a node's effective weight is 0.8, don't rebalance again until it drops below 0.68 or climbs above 0.92. And cap weight adjustments per interval (e.g., ยฑ10% per minute) so a single bad metric spike doesn't trigger a mass migration.
What breaks it:
When to skip it: if your workload is uniform and your nodes are homogeneous, static weights work fine. Adaptive rebalancing pays off when workload skew or hardware heterogeneity means "capacity" is a moving target.
Tool Nobody Knows
2026-09-11
Every so often you need to hand someone a patch between two binary files โ a 40 GB game update, a firmware image, an ISO, a database snapshot โ and you don't have rsync at both ends. diff is useless. bsdiff loves the answer but wants 8ร your file size in RAM and refuses to stream. Git's binary diffs live inside packfiles, not on disk.
The right tool has been sitting in your distro since Y2K: xdelta3, Josh MacDonald's implementation of VCDIFF (RFC 3284). It produces portable patch files, streams, handles files bigger than RAM, and is on the shortlist of tools ROM hackers, indie game studios, and update-server operators actually use in production.
# make a patch between two versions
xdelta3 -e -s v1.iso v2.iso v1_to_v2.vcdiff
# reconstruct v2 from v1 + patch
xdelta3 -d -s v1.iso v1_to_v2.vcdiff v2.reconstructed.iso
sha256sum v2.iso v2.reconstructed.iso # identical
That's it. The -s flag names the source. Encoding is a single pass; decoding is fast because the format is optimized for the reader, not the writer.
The default source window is 64 MB. Feed xdelta3 a 4 GB source with the defaults and your patch will be almost as big as the target โ it's only comparing against tiny slices at a time. Blow the window up to at least the size of the source:
xdelta3 -e -9 \
-B $(stat -c %s v1.iso) \
-W 16777216 \
-s v1.iso v2.iso v1_to_v2.vcdiff
-B is the source window (RAM budget for the reference), -W is the target buffer, -9 asks for maximum effort. On a real 3.5 GB game update I benchmarked, the defaults gave a 2.9 GB patch; -B 4G -9 gave 41 MB.
# patch a tarball on the fly
tar -c newtree/ | xdelta3 -e -c -s old.tar > delta.vcdiff
# apply, still streaming
xdelta3 -d -c -s old.tar delta.vcdiff | tar -x
Combined with mbuffer or pv, you can pipe deltas across an ssh link without ever materializing intermediates. This is how you ship a database dump diff without doubling your disk usage.
xdelta3 -e -9 -S djw -s old.bin new.bin patch # djw = built-in Huffman
xdelta3 -e -9 -S lzma -s old.bin new.bin patch # if built with LZMA
VCDIFF already deduplicates repeated regions; secondary compression squeezes the residual literals. On text-heavy binaries (SQL dumps, structured logs) LZMA shaves another 40โ60%.
xdelta3 is the boring, portable, streamable, one-file answer. It has been shipping game patches since Half-Life 2 was new, and it will outlive most of the JavaScript runtime you're trying to save bytes on.
xdelta3 -e -9 -B $(stat -c %s src) -s src dst patch; just remember the default source window is 64 MB and quietly ruins every large-file benchmark you run without -B.
What If Engineering
2026-09-11
Fish extract oxygen from water using gills โ sheets of tissue only microns thick, folded to give a tuna roughly 1 mยฒ of exchange surface per kilogram of body mass. A submerged city could scale up the trick: a tower packed with hollow-fiber membranes, pumping seawater past them and delivering breathable air to residents 300 meters down. No surface umbilical, no compressed-air cache, no plants. Just the ocean, filtered.
The oxygen budget. A resting adult metabolizes ~550 L of Oโ per day (STP). Seawater at 20 ยฐC holds about 5.5 mL of dissolved Oโ per liter โ roughly 1/30th what an equal volume of air carries. So per person, at a generous fish-like extraction efficiency of 80%:
(550,000 mL/day) / (5.5 mL/L ร 0.8) โ 125,000 L seawater/day
That's 1.45 L/s per person. For a modest undersea city of 10,000, you need 14.5 mยณ/s flowing through the gill โ roughly the discharge of the Thames at low water โ pumped continuously, forever.
Membrane area. State-of-the-art medical ECMO oxygenators use hollow-fiber polymethylpentene bundles with Oโ flux around 0.03 mLยทcmโปยฒยทsโปยน under favorable gradients. Total transfer needed:
10,000 people ร 6.4 mL Oโ/s = 64,000 mL/s โ ~2.1 ร 10โถ cmยฒ = 210 mยฒ (ideal)
But boundary-layer resistance on the seawater side dominates. Real designs need 10โ20ร overhead, plus biofouling margins. Call it ~50,000 mยฒ of active membrane โ comparable to a football field's worth of fiber, easily housed in a 200 m tower packed with cartridges 3 m tall by 1 m wide.
Pumping power. Pushing 14.5 mยณ/s through fine-fiber cartridges at, say, 50 kPa pressure drop:
P = Q ร ฮP = 14.5 ร 50,000 = 725 kW
Add prefiltration, backflushing, and COโ stripping (the return leg has to expel exhaled carbon dioxide back into seawater โ easier, since COโ is 30ร more soluble than Oโ), and total parasitic load lands near 2 MW. Manageable with an SMR or a hard tether to shore.
The nitrogen problem. Gills only harvest Oโ. Humans breathe air that's 78% Nโ as a diluent โ pure Oโ atmospheres are flammable death traps (see: Apollo 1). You'd need a closed-loop nitrogen reservoir, topped up occasionally from electrolyzed dissolved Nโ or delivered by supply capsule. Losses through airlocks are the real drain.
The killer: biofouling. A submerged membrane at 15 ยฐC is a five-star hotel for barnacles, tunicates, and biofilm. Desalination plants replace RO membranes every 3โ5 years despite chlorination. An artificial gill can't chlorinate โ chlorine ruins the fibers and poisons the residents. Options: UV pretreatment (kilowatts more), copper-ion-loaded fiber coatings, or periodic thermal shock cycles. Expect membrane life measured in months, not years.
Vertical logistics. Build the gill as a slender 200 m tower rising through the habitat's core, with radial intakes at multiple depths (deeper water is colder โ more dissolved Oโ: ~9 mL/L at 4 ยฐC, a 60% bonus). Waste-water plumes discharge laterally to avoid recirculation. The whole apparatus masses ~5,000 tonnes โ a fraction of a real skyscraper.
Feasible? Physically, yes. Economically, only if the alternative โ a snorkel to the surface โ is unavailable.
Wikipedia Rabbit Hole
2026-09-11
Wikipedia: Read the full article
Imagine a computer where a single "bit flip" isn't a cosmic ray glitch โ it's a literal glass bulb exploding in a shower of hot filament. Welcome to the world of first-generation computing, where machines like ENIAC housed 17,468 vacuum tubes, drew 150 kilowatts of power, and famously dimmed the lights across Philadelphia every time they booted up.
The list of vacuum-tube computers reads like a lost civilization's monuments. There's the Colossus (1943), secretly built by the British to break the Lorenz cipher and hidden for decades after WWII โ so classified that its designers watched other people get credit for inventing the electronic computer while they legally couldn't say a word. There's the Soviet Strela, the Australian CSIRAC (still intact and the oldest surviving digital computer), and the delightfully-named MANIAC I at Los Alamos, which ran the first computerized chess game.
What makes these machines fascinating isn't just their scale โ it's how they forced engineers to think about failure. With thousands of tubes each having a limited lifespan, mean time between failures was measured in hours. ENIAC's engineers discovered that leaving the machine on constantly actually extended tube life dramatically, because the thermal shock of heating and cooling was what killed them. They also learned to run the tubes at lower-than-rated voltage to squeeze out more service life โ an early lesson in what we'd now call "reliability engineering."
Consider the environmental footprint:
The tube era also birthed the vocabulary we still use. The term "bug" was popularized when Grace Hopper's team taped an actual moth into the logbook of the Harvard Mark II. And "debugging" originally meant literally hunting down which of the thousands of tubes had failed โ technicians would walk the aisles listening for the faint tinkle of a dying filament.
Here's what connects to today: the reason your laptop CPU has billions of transistors instead of tubes isn't just miniaturization โ it's that Bell Labs' 1947 invention of the transistor solved the exact reliability crisis that first-generation computers had made unbearable. Every server farm you've ever pinged is a direct descendant of engineers who got tired of replacing glass bulbs at 3 AM.
And yet โ vacuum tubes never quite died. They're still used in high-power radio transmitters, medical imaging, and the world's most sensitive audiophile amplifiers. The traveling-wave tube in your GPS satellite is a vacuum tube. The cathode-ray tube in older oscilloscopes is a vacuum tube. Even the magnetron heating your leftovers is a vacuum tube.
Daily YT Documentary
2026-09-11
Channel: The Deadly Ordinary (6 subscribers)
Most of today's crop is short-form spam, hashtag bait, or ID/People Magazine re-uploads from mid-sized aggregator channels. This one stands out because the channel explicitly commits to a discipline that's rare in true-crime YouTube: closed cases only, every claim cited. That framing matters for the Jeffrey MacDonald case in particular.
The 1970 murders of MacDonald's pregnant wife and two young daughters at Fort Bragg is one of the most forensically contested cases in American legal history. The Green Beret doctor blamed a Manson-style intruder attack; investigators found the physical evidence โ blood-type patterns across four family members, fiber transfer, the geometry of the crime scene โ pointed inward. The case took nine years to reach trial, spawned Joe McGinniss's book Fatal Vision, and is still cited in law schools as a case study in crime-scene reconstruction and evidentiary chain-of-custody.
A sourced walkthrough from a small channel (6 subs, so genuinely under the radar) is a chance to see the forensic reasoning laid out cleanly, without the reenactment-heavy padding cable documentaries lean on. If the citations hold up, this is a solid primer on how physical evidence dismantles a competing narrative.
Daily YT Electronics
2026-09-11
Channel: The seL4 Microkernel (1520 subscribers)
This is a conference talk from Kansas State's John Hatcliff on the Collins Aerospace INSPECTA project, part of DARPA's PROVERS program. It's a serious look at how formally-verified systems get built for real aerospace applications โ not a toy demo.
The talk centers on HAMR (High-Assurance Modeling and Rapid engineering framework), which generates code targeting the seL4 microkernel โ one of the few operating systems in the world with a full mathematical proof of functional correctness. The "agentic" angle is what makes this timely: Hatcliff discusses how AI agents can be integrated into a rigorous systems-engineering workflow without compromising the formal guarantees that make seL4 valuable in the first place.
For anyone interested in embedded systems, safety-critical software, or formal methods, this hits a sweet spot the hobbyist YouTube ecosystem rarely covers: model-based development, architecture description languages (AADL), and the practical engineering of systems where "it usually works" is not acceptable. The rest of today's candidates were largely beginner Arduino/ESP32 sensor projects โ this is the only one offering genuine depth.
Expect a technical, slide-heavy academic presentation rather than entertainment. Best watched by developers curious about how the aerospace and defense worlds are grappling with AI-assisted development of provably correct software.
Daily YT Engineering
2026-09-11
Channel: RAN (1200 subscribers)
Most of today's candidates are hashtag-spam shorts from "Alpha Engineering" โ ALL CAPS titles, generic descriptions, and zero real teaching. This lecture from Dr. R. Ananda Natarajan (Professor of Electronics and Instrumentation) is the clear standout: a proper classroom-style tutorial on PID controllers and compensators, one of the foundational topics in control systems engineering.
The video walks through each controller variant individually โ P (proportional), PI, PD, and full PID โ and then moves into compensator design, which is where most introductory treatments stop short. If you've ever tuned a temperature loop, a motor speed controller, or a drone stabilizer and wondered why adding integral action kills steady-state error but hurts phase margin, or why derivative action amplifies noise, this is the kind of first-principles treatment that actually answers those questions.
Dr. Natarajan's channel is oriented toward GATE exam prep, which means the pedagogy is unusually rigorous โ expect transfer functions, root locus reasoning, and Bode-plot design methodology rather than hand-wavy analogies. At 1,200 subscribers it's a genuine hidden gem for anyone doing embedded control, robotics, or process automation work.
Daily YT Maker
2026-09-11
Channel: Edis Alic - Laserpreneur (3050 subscribers)
This is Day 36 of a self-imposed "100 Laser Products in 100 Days" challenge, and that framing is what makes it worth watching. Rather than a one-off tutorial, you're getting a snapshot of someone actively grinding through product iteration in public โ learning what sells, what doesn't, and how to turn a laser cutter into an actual small business.
The specific project โ a matching set of Halloween-themed laser-cut coasters โ is a great case study in seasonal product design. Coasters are a well-worn maker staple, but pairing them into sets and tying them to a holiday drop is a smart move that shifts the perceived value (and price point) well beyond the sum of the materials. For anyone with a diode or COโ laser sitting mostly idle, this is a low-material-cost, high-margin idea you can execute in an afternoon and list before October.
Beyond the build itself, the real education here is the mindset: pick a theme, batch-produce, price for gift-giving rather than single-item use. The daily-challenge format also keeps the video short and focused, which is refreshing compared to bloated "make money with your laser" content.
Daily YT Welding
2026-09-11
Channel: Saldatura Mig Mag (1590 subscribers)
Note: this batch is unusually weak โ most candidates are hashtag-spam shorts or clickbait from zero-subscriber channels that appear to be AI-generated content farms ("WELD METHOD," "HOCKEY WELD," "WELD SYNDICATE" all posted within minutes of each other with near-identical descriptions). This Italian-language pick is the clear standout.
The channel Saldatura Mig Mag focuses specifically on MIG/MAG (filo continuo) welding, and this video walks beginners through the fundamentals of running a continuous wire feed. Unlike the generic "beginner tips" videos flooding the rest of the list, this one is topic-specific: it targets the wire-feed process, which has its own quirks around voltage/wire-speed balance, contact tip distance, gas coverage, and travel angle that don't apply to stick or TIG.
If you're comfortable with Italian (or willing to run auto-translated captions), the value is in seeing a smaller channel walk through one process properly rather than the shallow "MIG vs TIG vs Stick" comparisons that dominate beginner content. The channel has a real audience (1,590 subs) and a focused topic, which are both good signals against the AI-slop channels also in this batch.
