24 newsletters today.
Abandoned Futures
2026-09-05
In 1989, Seymour Cray walked out of Cray Research — the company he had founded — to build a machine no one else believed could be built. The Cray-3 would abandon silicon entirely and use gallium arsenide (GaAs) logic chips, running at 500 MHz when the fastest silicon supercomputers of the era topped out around 250 MHz. Sixteen vector processors would fit inside a cabinet the size of a phone booth, cooled by fluorinert flowing through channels milled into the modules. Peak throughput: 16 GFLOPS. It was, on paper, five years ahead of anything else on Earth.
Cray had bet the company on GaAs for a reason. Silicon signals were already hitting propagation-delay walls; GaAs electrons move roughly 5–6× faster at low fields, and the substrate is semi-insulating, which drops parasitic capacitance. The problem was manufacturing. Cray's contractor, GigaBit Logic, had never produced GaAs gate arrays at the density (10,000+ gates per die) or yield the Cray-3 required. Dies came back with defect rates so high that engineers were hand-selecting the working ones. Modules that should have cost $2,000 were costing $20,000.
The packaging was the truly radical part. Each processor module was a stack of four printed circuit boards, 1 inch × 4 inch × 4 inch, containing 1,024 GaAs chips wired with 500,000 hand-inserted twisted-pair jumpers. Density was so extreme that a signal never traveled more than a few centimeters. Cray had, in essence, invented 3D chip stacking three decades before HBM memory made it commercial.
Then history happened. The Berlin Wall fell in November 1989. The Soviet Union dissolved in 1991. The three-letter agencies and weapons labs that bought vector supercomputers for nuclear simulation cut their budgets by 40%+ within two years. Meanwhile, massively parallel machines like the CM-5 and Intel Paragon — cheap silicon, thousands of processors — were eating the market from below. Cray Computer Corporation delivered exactly one Cray-3, to NCAR in Boulder, in May 1993. It ran until 1995. Cray Computer filed Chapter 11 in March 1995. Seymour Cray was killed in a car accident on I-25 on October 5, 1996, still working on the Cray-4 (a 1 GHz follow-on that had reached working prototypes).
Everything about the Cray-3 is now vindicated:
The one surviving Cray-3 module sits at the Computer History Museum in Mountain View. It contains more silent innovation per cubic centimeter than any object of its decade. What killed it wasn't the physics or the packaging. It was that the market for scientific supercomputers evaporated in 24 months and the yields on 1990s GaAs foundries never caught up. Modern MOCVD reactors routinely produce GaAs at yields Cray would have killed for. A Cray-3-style architecture with modern compound-semiconductor logic, HBM stacking, and immersion cooling is not a fantasy — it's roughly what a domain-specific AI accelerator wants to be.
ArXiv Paper Digest
2026-09-05
If you've been following AI coding agents at all, you've probably heard of SWE-bench — the benchmark where an AI is handed a real GitHub issue and has to produce a patch that fixes it. The scoring rule is simple: did the patch make the project's test suite go green? If yes, win. If no, loss. Progress on this benchmark has been the main way we measure whether coding agents are getting better.
The authors of SWE-Gate make a pointed observation: passing tests is not the same as being merge-worthy. When a real human submits a pull request to a real open-source project, the maintainer doesn't just run CI and click merge. They review it. They ask for renames. They complain about a missing docstring, a violated style rule, a change that touches more files than it should, a fix that solves the symptom but not the root cause, or an approach that clashes with how the rest of the codebase is written. These are review constraints, and current benchmarks completely ignore them.
SWE-Gate is a new benchmark built to test this. The authors mined real code-review conversations from actual open-source repositories and extracted the constraints reviewers imposed on patches — things like:
Then they evaluated leading coding agents not just on whether their patches pass tests, but on whether the patches comply with these reviewer-imposed constraints.
The results are the interesting part. Agents that look impressive on SWE-bench take a real hit here. A patch can pass every test and still violate half a dozen things a human reviewer would flag on sight. This gap suggests today's agents are optimizing for "the tests are green" rather than "this is code a teammate would actually accept" — and those are meaningfully different targets.
The insight worth taking away: we've been grading coding agents on a rubric that's too easy. Real software engineering isn't just producing behavior-correct code; it's producing code that fits the project's conventions, respects its architecture, doesn't sprawl, and reflects taste. As agents get deployed into real dev workflows, benchmarks that capture the review dimension — not just the CI dimension — are what will actually predict whether they're useful teammates.
Daily Automotive Engines
2026-09-05
Every spark plug threads into the head at a random rotational orientation — the ground strap (the L-shaped electrode arching over the center electrode) can end up pointing anywhere on the clock face. Indexing is the practice of adjusting each plug's rotation so the open side of the electrode gap faces a preferred direction, typically toward the intake valve or the combustion chamber's flame-propagation path.
Why does this matter? The ground strap physically shadows the spark kernel. When the arc jumps the gap, it forms a tiny flame kernel (~1mm diameter initially) that must grow into a full flame front. If the ground strap sits between the kernel and the fresh air-fuel mixture, it blocks flame expansion in that direction and acts as a small heat sink, quenching the early burn. Point the open side toward the intake valve (the freshest, most turbulent charge) and the kernel grows unobstructed into the richest mixture.
Real-world example: NASCAR Cup teams have indexed plugs since the 1970s. Dyno data on a 358 c.i. Cup engine typically shows 2-4 hp gain from proper indexing at 9,000+ RPM — small in absolute terms, but at that level teams fight for every tenth. Pro Stock drag teams claim similar gains. On a stock street engine at 3,000 RPM cruise, the effect is essentially unmeasurable because burn duration is long relative to the small kernel-shadowing effect.
How to index:
Rule of thumb: Point the open side of the gap toward the intake valve. On a modern pent-roof chamber with two intake valves, aim between them. On a hemi, point toward the intake side of the chamber.
One catch: tapered-seat plugs (most modern engines) can't be indexed with washers — they seal on a machined taper, not a crushable ring. You'd need to buy a set of plugs and hand-select ones that happen to land in the right orientation at final torque, which is why indexing has largely faded from street tuning as gasketed plugs disappeared.
Daily Debugging Puzzle
sync/atomic 64-Bit Alignment Trap: The Counter That Panics on 32-Bit ARM2026-09-05
This code tracks cache stats using atomic counters. It runs flawlessly for months in CI, staging, and on every developer's x86-64 laptop. Then the ops team deploys it to a fleet of 32-bit ARM edge devices — and it crashes on the first request.
package cache
import "sync/atomic"
type Stats struct {
lastLabel byte
hits int64
misses int64
}
func (s *Stats) Hit() { atomic.AddInt64(&s.hits, 1) }
func (s *Stats) Miss() { atomic.AddInt64(&s.misses, 1) }
func (s *Stats) Snapshot() (int64, int64) {
return atomic.LoadInt64(&s.hits), atomic.LoadInt64(&s.misses)
}
// Called from many goroutines
func Track(s *Stats, hit bool) {
if hit {
s.Hit()
} else {
s.Miss()
}
}
On 32-bit ARM (and 386, and 32-bit MIPS), the program panics:
panic: unaligned 64-bit atomic operation
The culprit is the single innocent byte at the top of the struct. Here's why:
Go's sync/atomic functions like AddInt64 require the target address to be 8-byte aligned. On 64-bit platforms, the compiler naturally aligns int64 fields to 8 bytes, so this is free. On 32-bit platforms, the compiler only guarantees 4-byte alignment for int64 fields — because the natural word size is 4.
With lastLabel byte sitting first, hits lands at offset 4 (after 3 bytes of padding), not 8. The atomic instruction traps on the misaligned load, and Go's runtime turns that trap into a panic.
The documented guarantee is narrow: "the first word in a variable or in an allocated struct, array, or slice can be relied upon to be 64-bit aligned." That's it. Anything after a smaller field is on its own.
Worst of all, this passes every test on your developer machine and every CI runner, because they're all 64-bit. It only manifests on the target hardware.
Either put int64 atomic fields first in the struct so they inherit the struct's leading alignment, or — better — use the wrapper types added in Go 1.19, which handle alignment internally and prevent accidental non-atomic reads:
type Stats struct {
hits atomic.Int64 // self-aligned, self-documenting
misses atomic.Int64
lastLabel byte
}
func (s *Stats) Hit() { s.hits.Add(1) }
func (s *Stats) Miss() { s.misses.Add(1) }
func (s *Stats) Snapshot() (int64, int64) {
return s.hits.Load(), s.misses.Load()
}
The atomic.Int64 type contains a hidden noCopy and an aligned internal field. You can no longer accidentally read s.hits without going through Load(), and the alignment is a property of the type itself — not the struct layout.
If you're stuck on an older Go version, order matters: put every atomically-accessed int64/uint64/float64 field at the top of the struct, before any smaller fields. Add a comment, because a future refactor that "cleans up field ordering by size" will silently re-introduce the crash.
sync/atomic on 64-bit values requires 8-byte alignment that the compiler doesn't guarantee for interior struct fields — use atomic.Int64, or place such fields first in the struct.
Daily Digital Circuits
2026-09-05
A binary-weighted DAC uses one unit for the LSB, two for bit-1, four for bit-2, and so on. It's compact, but it has a nasty problem at the mid-code transition: going from 0111...1 to 1000...0, every LSB unit turns off while the MSB unit turns on. If the MSB isn't exactly equal to the sum of all the LSBs (and after fab, it never is), the output jumps the wrong direction. That's a non-monotonic DAC — deadly for control loops that assume "code up ⇒ voltage up."
Thermometer coding fixes this. Instead of weighting units by powers of two, you use 2^N − 1 identical unit cells. Code 5 turns on 5 units; code 6 turns on those same 5 plus one more. Every code transition adds or removes exactly one unit — so monotonicity is guaranteed by construction, regardless of unit mismatch. You buy this with area: a 6-bit thermometer DAC needs 63 units instead of 6 weighted ones.
But thermometer coding alone doesn't help linearity — if unit #17 is 0.3% larger than average, then every code ≥ 17 inherits that error. Enter Dynamic Element Matching (DEM). Instead of always turning on units 1–5 for code 5, you rotate which units get used. A common scheme, data-weighted averaging (DWA), keeps a pointer: for code 5, use units 1–5; next sample, code 3, use units 6–8; next, code 4, use units 9–12; wrap around and continue. Over time, every unit is used equally often, so unit mismatch averages out and shows up as shaped noise at high frequencies instead of harmonic distortion in-band.
Concrete example: The ESS Sabre ES9038PRO audio DAC uses a 6-bit thermometer segment with DWA at the top of its architecture, driven by a delta-sigma modulator. Unit-current sources match to about 0.1% raw; DWA pushes the in-band mismatch noise down another 30–40 dB, letting the chip hit 132 dB SNR in the audio band without laser trimming.
Rule of thumb: Raw unit-cell mismatch improves as 1/√area. To halve mismatch, quadruple the unit-cell area. DEM turns that same mismatch into first-order noise-shaped error — every doubling of oversampling ratio gains ~9 dB in-band. So DEM is roughly worth 3–4 bits of effective resolution compared to a plain thermometer DAC at the same OSR, without growing a single transistor.
The tradeoff: DWA adds a rotating barrel shifter and pointer logic in front of the unit array, and the pointer's own switching activity can inject glitches. Higher-order DEM schemes (tree-structured, vector-feedback) shape noise more aggressively but cost more digital logic.
Daily Electrical Circuits
2026-09-05
The common-emitter (CE) amplifier is the workhorse voltage gain stage of discrete BJT design. Signal enters the base, exits (inverted and amplified) at the collector, and the emitter is the "common" terminal shared between input and output. It delivers the highest voltage gain of the three BJT topologies (CE, CB, CC) — often 100× or more — which is why it dominated audio preamps, IF strips, and countless op-amp input stages before ICs took over.
How it works: A small AC voltage at the base modulates the base-emitter junction, which exponentially controls collector current. That current flows through a collector resistor RC, developing a voltage swing that's the amplified (and inverted) copy of the input.
Core design equations (assuming voltage-divider bias and a bypassed emitter resistor):
Worked example — audio preamp: You want a gain of 50 from a 2N3904 running at IC = 1 mA on a 12 V rail. Then re = 26 Ω, so RC = 50 × 26 Ω = 1.3 kΩ (use 1.3 kΩ or 1.5 kΩ). Set the collector quiescent voltage at 6 V for maximum symmetric swing: VC = 12 − (1 mA)(1.3 kΩ) = 10.7 V — too high. Drop IC to 2 mA and recalculate: re = 13 Ω, RC = 650 Ω, VC = 12 − 1.3 = 10.7 V. Still high — pick RC = 3 kΩ and accept a gain closer to 230, or add a partially-bypassed emitter resistor to stabilize gain.
The bypass capacitor trap: The unbypassed version (emitter degeneration) gives Av ≈ −RC/RE — predictable, linear, temperature-stable, but low gain. Fully bypassing RE with a large capacitor restores the high gm-based gain but reintroduces temperature drift and BJT-to-BJT variation. Split the emitter resistor (small unbypassed RE1 in series with bypassed RE2) for the best of both worlds — modest, controlled gain with reasonable linearity.
Watch out for: Miller effect on Cbc multiplies collector-base capacitance by (1 + |Av|), crushing high-frequency response. That's exactly why cascode topologies exist.
Daily Engineering Lesson
2026-09-05
A retaining ring only does its job if it seats fully in its groove without permanent deformation. Installation is where most retaining ring failures are born — not from the load they eventually see, but from being over-spread, gouged, or twisted during assembly. The tool matters as much as the ring.
Internal vs. external, and why the plier tips point opposite ways:
Tip geometry matters: straight tips, 45°, and 90° bent tips exist to reach around obstructions. Force a straight-tip plier into a recessed groove and you'll cam the tip out of the lug hole under load — the ring launches, usually toward your face. Wear safety glasses; this is not optional.
The over-spread failure mode: every retaining ring has a maximum installation deflection, typically listed as a percentage of free diameter. Spring steel yields well before it breaks. If you spread an external ring more than needed to clear the shaft, you plastically deform it — it no longer springs back to its free diameter, no longer preloads against the groove wall, and can walk out under vibration.
Rule of thumb: maximum safe spread for a standard external Truarc-style ring is about free diameter + (shaft diameter − groove diameter) × 1.5. In practice: spread only enough to clear the shaft by 10–15%, no more. A 25 mm shaft with a 23.9 mm groove needs the ring opened just enough to pass 25 mm — spreading it to 30 mm ruins it.
Real-world example: automotive transmission input shafts use large external retaining rings to hold clutch packs. Techs who use worn or wrong-size pliers over-spread these rings during rebuild. The transmission passes initial testing, then months later the ring migrates out of its groove under vibration, the clutch pack shifts axially, and the transmission destroys itself. The failure gets blamed on the ring — it was actually the plier.
Practical selection: match plier tip diameter to the lug hole (loose tips cam out), match tip angle to access geometry, and use a ratcheting or locking plier for rings you have to hold open while positioning. For high-volume assembly, pneumatic ring installers eliminate the human variability entirely.
Forgotten Patent
2026-09-05
On January 24, 1957, a 29-year-old Cornell psychologist named Frank Rosenblatt filed a patent that reads today like a blueprint for GPT. Titled "Perceiving and Recognizing Automaton," it was granted almost a decade later as US Patent 3,287,649. The device it describes — the Perceptron — is the direct mechanical ancestor of every neural network powering modern AI.
Rosenblatt's insight was radical for its era. Instead of programming rules for pattern recognition, he built a machine that learned them. Inputs (photocells sensing a 20×20 image) fed into "association units." Each connection carried a numerical weight, implemented as a physical potentiometer whose knob was turned by a small electric motor. When the Perceptron guessed wrong, the motors nudged the weights until the guess got better. This is gradient adjustment by servo motor — literally the same idea as backpropagation, just in copper and steel.
The Mark I Perceptron, funded by the Office of Naval Research, was housed in a six-foot rack at Cornell Aeronautical Laboratory. It could learn to distinguish squares from circles, or the letter "E" from the letter "X," by adjusting roughly 500 weights over hundreds of trials. Rosenblatt described the mathematics with startling clarity in the patent:
The New York Times ran a breathless 1958 story predicting the Perceptron would soon "walk, talk, see, write, reproduce itself, and be conscious of its existence." Rosenblatt himself was more measured, but the hype triggered a backlash. In 1969, Marvin Minsky and Seymour Papert published Perceptrons, a book proving that a single-layer Perceptron could not learn the XOR function. Their critique was technically narrow — it did not apply to multi-layer networks Rosenblatt had already sketched — but the damage was done. Funding collapsed. Rosenblatt drowned in a boating accident in 1971 at age 43. The field entered what researchers now call the "first AI winter."
Everything from that patent came back. In 1986, Rumelhart, Hinton, and Williams published the backpropagation algorithm for training multi-layer perceptrons — Rosenblatt's own missing piece. In 2012, AlexNet showed that stacked perceptrons trained on GPUs could outperform every hand-coded computer vision system. Every large language model — including this one — is a tower of the exact units described in 3,287,649: weighted sums passed through nonlinear thresholds, with weights adjusted by an error signal. GPT-4 has roughly a trillion of them. Rosenblatt built his with 400.
The Mark I Perceptron still exists, in the Smithsonian's collection. If you stand next to it, you are looking at a machine that embodies the same mathematics as the neural networks now writing code, folding proteins, and generating video. The gap between it and a modern GPU cluster is not conceptual — it is scale, silicon, and 65 years of patience with an idea that its critics declared dead.
Daily GitHub Zero Stars
2026-09-05
Language: JavaScript
Link: https://github.com/ChristopherAndrewTopalian/CATopalian_NWJS_Screenshot
Among a sea of auto-generated repo slugs and unlabeled placeholders, this one stands out as something a human actually built and shipped. It's a NW.js desktop application written in JavaScript and Node.js whose sole purpose is to capture and save screenshots from the desktop environment.
NW.js (formerly node-webkit) is one of those wonderfully underappreciated frameworks — the older sibling to Electron that lets you build desktop apps using web technologies. While Electron soaked up most of the mindshare over the last decade, NW.js still has a small but devoted following, particularly among developers who prefer its simpler architecture where the DOM and Node.js contexts live in the same process.
What makes this repo interesting:
Who benefits from checking this out:
The zero stars almost certainly reflect discoverability, not quality. Small utility repos from prolific solo developers rarely trend, but they're often the most honest examples of "here's how the thing actually works."
Daily Hardware Architecture
2026-09-05
Traditionally, when a NIC or storage controller wrote data via DMA, it went to DRAM. The CPU then had to fetch it back into cache when software touched it — a full memory round trip on every packet. DDIO (Data Direct I/O), introduced on Xeon E5 in 2012, changes this: PCIe writes land directly in the L3 cache, and reads pull from L3 when possible. DRAM is bypassed on the hot path.
The mechanism is deceptively simple. The uncore's caching agent treats DMA traffic almost like a core-issued write. Inbound writes allocate cache lines in L3 (write-allocate). Inbound reads that hit L3 are served without touching DRAM. But there's a catch: DDIO uses only a limited portion of L3 — historically 2 ways out of 11 (~10–20% of L3). This prevents I/O from thrashing CPU workloads.
The "leaky bucket" problem: If your NIC RX ring exceeds the DDIO way allocation, incoming packets evict earlier packets from L3 before software processes them. Now the CPU takes an L3 miss to DRAM to read a packet the NIC just wrote — you've paid the DMA cost plus the miss cost. This shows up as sudden latency cliffs at ~15% line rate on 100 GbE workloads.
Real-world example: DPDK applications on Intel are tuned around DDIO. If you size RX descriptor rings and mbuf pools to fit within DDIO's L3 slice (say, 2 MB per port on a 20 MB L3), you get L3-hit latencies (~15 ns) on every packet. Oversize the rings and your p99 latency jumps from 20 µs to 200 µs — the classic "buffer bloat inside the CPU" pattern. Kernel bypass frameworks like Snabb and VPP publish DDIO sizing guides for exactly this reason.
Rule of thumb: For high-rate PCIe I/O, keep your working DMA footprint (all in-flight descriptors + payload buffers being processed) under ~10% of L3 per socket. Above that, you're guaranteed to evict live data before touching it. A 30 MB L3 → budget ~3 MB for DMA-hot data.
AMD shipped its equivalent (sometimes called "PCIe Cache Injection") on newer EPYC parts, though allocation policy differs. On both, DDIO can be disabled in BIOS — occasionally worth doing for workloads where PCIe traffic is bulk-throughput but cache-cold, so DRAM DMA leaves L3 alone for CPU code.
Hacker News Deep Cuts
2026-09-05
Link: https://mathstodon.xyz/@tao/117207849921390904
HN Discussion: 1 points, 0 comments
Terence Tao is arguably the most celebrated living mathematician, and the Navier-Stokes equations are one of the seven Millennium Prize Problems — a set of questions the Clay Mathematics Institute considers so foundational that solving any one earns you a million dollars and a permanent place in the history of the field. When Tao writes publicly about Navier-Stokes, technical readers should pay attention, because he has spent more than a decade circling this problem and has produced some of the most consequential partial results in the area.
The Navier-Stokes equations describe how fluids move — everything from the airflow over an aircraft wing to blood in your arteries to the swirl of cream in coffee. Engineers use them constantly, plugging them into simulations and trusting that they behave. But mathematically, we still don't know whether smooth initial conditions in three dimensions always yield smooth solutions for all time, or whether the equations can develop singularities — points where velocity or pressure blows up to infinity. This is the "global regularity" question, and it's genuinely open.
Tao's most famous contribution here is his 2014 paper showing that an averaged version of Navier-Stokes does blow up in finite time. This was a bombshell because it demonstrated that any proof of global regularity for the real equations must exploit some fine-grained structural feature that the averaged version lacks — ruling out entire families of proof strategies. In effect, Tao told the community: "here is a whole class of arguments that cannot work; stop trying them."
A Mastodon post from Tao on this topic is likely one of three things worth reading:
For a technical audience — especially anyone who works with fluid simulation, numerical PDEs, or turbulence modeling — understanding why Navier-Stokes remains open shapes how much you should trust simulations at extreme parameter regimes. And for anyone who enjoys watching a first-rate mind think in public, Tao's feed is one of the best resources on the internet.
HN Jobs Teardown
2026-09-05
Source: HN Who is Hiring
Posted by: luciayhuang
Of the ten postings in this thread, Osmind's is the most strategically revealing — a two-person founding team from Stanford (med school + business school) hiring their first two engineers to build software for FDA-approved psychedelic medicine. Almost every word of that sentence is doing work.
Stack signals (by omission): Notice what's absent — no mention of specific languages, frameworks, databases, or cloud providers. They're hiring a "Lead Engineer" for full-stack web and a separate "iOS Engineer." That's not laziness; that's a founding team who knows they don't yet know. The Lead Engineer will pick the stack. For an ambitious founder, that's the deal: equity + technical autonomy in exchange for building the entire foundation. Expect whoever takes this role to reach for boring, fast-shipping choices — likely Rails, Django, or Node with Postgres, plus native Swift for iOS given HIPAA/PHI constraints on cross-platform frameworks.
Company stage: Pre-product, pre-team, post-thesis. The scope described — booking platform, patient-facing app, provider tools, and a community — is at least three separate products. Two founders and two engineers cannot build all of that. This posting is really about hiring one person who can decide what not to build.
What it reveals about the industry:
Green flags: Founder credentials fit the problem (med school co-founder = FDA/clinical credibility; business school co-founder = fundraising/GTM). The mission is concrete and defensible. First engineers usually get meaningful equity.
Red flags: No stack, no funding disclosed, no team size beyond "two," no salary band, and no interview process outlined (which the very next commenter, jamespollack, specifically calls out as table stakes). Building a HIPAA-covered patient app with two founders and two engineers is a lot of compliance work per capita. The "community" component in a mental-health app is a moderation and liability minefield.
Daily Low-Level Programming
2026-09-05
When a guest VM does something the hypervisor must handle — an I/O port write, a CPUID, an EPT violation, an interrupt injection — the CPU performs a VM exit: it saves guest state into the VMCS (Virtual Machine Control Structure), loads host state, and jumps to the host's exit handler. This is the fundamental tax of hardware virtualization, and it's more expensive than almost any other CPU operation you'll encounter.
A VM exit on modern Intel silicon (Sapphire Rapids, Emerald Rapids) costs roughly 1,000–1,500 cycles just for the transition itself — before your handler runs a single instruction. That's ~400ns at 3.5 GHz. Compare that to a syscall (~50ns via SYSCALL) or a page fault (~200ns). The exit is expensive because the CPU must serialize the pipeline, flush speculative state, swap CR3 (with KPTI, twice), reload segment bases, and update the VPID-tagged TLB entries.
The nasty part is VMREAD/VMWRITE. The VMCS isn't a normal memory structure — it's a CPU-managed opaque blob, and reading a field (like the exit reason, the guest RIP, or the exit qualification) requires the VMREAD instruction, which costs ~40–60 cycles per field. A typical exit handler reads 5–10 VMCS fields, adding another 300–500 cycles before it even dispatches to the specific handler.
Concrete example: Consider a virtio-net guest doing packet I/O. Each packet notification writes to a "kick" MMIO register, causing an EPT violation exit. Measured on bare-metal KVM: ~1.8µs per exit round-trip. Now run that guest inside another KVM guest (nested virtualization). Every L2 exit traps to L1's hypervisor, which itself runs virtualized, so L1's VMREAD instructions each cause an L1→L0 exit. Result: nested exits cost 15–30µs — a 10–15x slowdown. This is why cloud providers charge more for nested virt and why AWS bare-metal instances exist.
The mitigation: Intel added VMCS shadowing, which lets L1 read/write a subset of VMCS fields without exiting to L0. AMD has an equivalent with its Virtual VMCB. Modern KVM also uses enlightened VMCS (a Hyper-V-style shadow copy in guest memory) to batch VMREADs.
Rule of thumb: Budget ~500ns per VM exit on bare-metal, ~5–10µs per nested exit. If your workload does more than ~200,000 exits/sec/vCPU, you're spending 10%+ of CPU on the exit tax alone — time to look at SR-IOV, vhost-user, or PCIe passthrough to eliminate the exits entirely.
You can measure this directly: perf kvm stat live shows exit counts and average handler duration per exit reason. Look for high counts of EPT_VIOLATION, IO_INSTRUCTION, or EXTERNAL_INTERRUPT — those are your optimization targets.
RFC Deep Dive
2026-09-05
If you've ever typed kinit, mounted an NFSv4 share with sec=krb5, connected to a Windows domain controller, or watched a browser silently authenticate to an intranet SharePoint site, you have almost certainly gone through GSS-API, the abstraction defined by RFC 2743. It is one of those interfaces that thousands of production systems depend on daily, yet almost no application developer thinks about directly.
The problem. By the mid-1990s the IETF had several strong authentication systems — Kerberos v5, SPKM (public-key), and later NTLM and SPNEGO — and every application protocol that wanted "real" authentication (Telnet, FTP, IMAP, LDAP, SSH, NFS, SMB, HTTP Negotiate) was inventing its own way to shove tokens back and forth. Worse, each application ended up hard-coded to a specific mechanism. What was needed was a mechanism-independent API: the application would obtain opaque byte-string "tokens," pass them over its own wire protocol, and hand them to a library that would figure out what they meant.
The core abstraction. GSS-API is built around three ideas:
GSS_GetMIC/GSS_VerifyMIC provide integrity, and GSS_Wrap/GSS_Unwrap provide confidentiality plus integrity.The context-establishment loop is the elegant bit. The initiator calls GSS_Init_sec_context, gets back an opaque blob, and sends it to the acceptor over whatever transport the application already uses. The acceptor feeds it into GSS_Accept_sec_context, which may produce another blob to send back. This ping-pong continues until both sides return GSS_S_COMPLETE. The application never parses a single byte of the token; the mechanism could be Kerberos AP-REQ, an SPNEGO negotiation, or something invented tomorrow.
Key design decisions. Linn made tokens explicitly framed with an ASN.1 OID identifying the mechanism, so a receiver can dispatch to the right library. Name types are pluggable (GSS_C_NT_HOSTBASED_SERVICE is the one you'll actually see: [email protected]). Channel bindings let the caller cryptographically tie the security context to the underlying transport — the mechanism used decades later to defeat authentication relay attacks (see RFC 5056). And critically, the API is synchronous, stateless, and language-agnostic; RFC 2744 defines the C bindings, but Java, Python, and every SASL implementation follow the same shape.
Why it still matters. SPNEGO (RFC 4178), the mechanism behind "HTTP Negotiate" and every Windows single-sign-on flow, is a GSS-API mechanism whose only job is to negotiate other GSS-API mechanisms. SASL's GSSAPI and GS2-* families (RFC 5801) are direct bridges. NFSv4's RPCSEC_GSS is GSS-API on the wire. When Microsoft added Kerberos to Active Directory, they wrapped it in GSS-API-compatible tokens so Unix clients could interoperate — a rare victory for standards over embrace-and-extend.
Backstory. John Linn wrote the original GSS-API (RFC 1508) in 1993 at Digital while trying to unify Kerberos and DEC's proprietary DASS. RFC 2743 is the "Update 1" that fixed a decade of implementation experience — clarifying error semantics, adding channel bindings, and cleaning up the name-comparison rules that MIT and Heimdal had quietly disagreed on for years.
Stack Overflow Unanswered
2026-09-05
The asker is trying to eliminate the classic dangling-else shift/reduce conflict in a small Bison grammar by using %nonassoc and %prec — not because they need a novel solution, but to understand precisely how Bison's precedence machinery works when it's applied to something that isn't an operator.
Why it's interesting. Precedence in Bison is almost always taught with binary operators: give + and * priorities, done. But precedence is really a lower-level mechanism — it's a tie-breaker attached to tokens and productions, consulted whenever the LALR(1) table has a shift/reduce conflict on a particular lookahead. Understanding what happens when you try to bend that mechanism to non-operator tokens (like ELSE) forces you to think about the conflict as a comparison between two things: the precedence of the rule about to be reduced and the precedence of the lookahead token.
The mechanics. When Bison sees IF PO PC statement · ELSE ..., it has a choice: reduce (turn the inner IF ... statement into a statement, associating ELSE with the outer if) or shift (attach ELSE to the inner if). Bison resolves this by comparing:
%prec.ELSE.Higher precedence wins; equal precedence uses associativity (%nonassoc → error, %left → reduce, %right → shift).
Sketch of a fix. The idiomatic recipe is:
%nonassoc THEN /* pseudo-token, never lexed */
%nonassoc ELSE
if-stmt : IF PO PC statement %prec THEN
| IF PO PC statement ELSE statement
;
Because ELSE has higher precedence than the fake THEN, and the short rule is tagged with THEN's precedence, Bison prefers to shift ELSE — attaching it to the innermost if, which matches C/Java semantics.
Gotchas. A few things trip people up:
%prec, the short rule's precedence defaults to PC (its rightmost terminal), which is probably undeclared and therefore has no precedence — so Bison silently falls back to its default "prefer shift" and emits a warning rather than resolving cleanly.%nonassoc makes equal-precedence conflicts a syntax error at parse time, not a grammar error at generation time — surprising if you expected it to just pick a side.bison -Wcounterexamples (or -v and read the .output file) — the state table shows exactly which precedences were compared.%prec looks like a knob you turn on operators, but it's really a rule-level annotation whose behavior only makes sense once you understand the shift-vs-reduce comparison it drives.
Daily Software Engineering
2026-09-05
Classic Paxos and Raft assume one log, one leader, and one consensus group. That works until your throughput ceiling hits the leader's CPU, NIC, or fsync latency. Horizontal Paxos is the architectural move to shard the replicated log itself: partition the keyspace, run an independent Paxos group per shard, and let each group have its own leader on a different machine.
The insight: consensus doesn't have to be a single ordered stream. If operations on key A never need to be ordered with operations on key B, they can live in different logs with different leaders. You've just multiplied your write throughput by the shard count — at the cost of losing global ordering.
How it works in practice:
Real-world example: Google's Spanner runs thousands of Paxos groups, one per tablet (a range of rows). A single Spanner deployment might have 10,000 independent Paxos groups electing leaders concurrently. CockroachDB uses the same idea with Raft — each 64MB range is its own Raft group. When you write to a row, only the 3–5 replicas of that range participate. Your neighbor's write to a different range doesn't share a single fsync queue with yours.
Rule of thumb: If a single Paxos leader can handle ~10K writes/sec (limited by fsync + replication round-trip), then N shards give you roughly N × 10K writes/sec — but only if your workload distributes evenly. A hot key (say, a global counter) still bottlenecks on one shard's leader. Aim for shards where the busiest shard handles under 70% of a single-leader's ceiling; that leaves headroom for rebalancing.
The trade-offs that bite:
Don't reach for horizontal Paxos until you've proven a single group is your bottleneck. The operational cost of thousands of consensus groups (monitoring, failover, split/merge logic) is significant.
Tool Nobody Knows
2026-09-05
You want to run something suspicious. Or a build script from a fresh clone. Or just a shell that can't read ~/.ssh. The mainstream answers all suck: Docker requires a daemon and root at install time, chroot needs root and can't hide the network, unshare(1) gives you namespaces but no bind mounts or seccomp. Firejail wants a profile file per program.
bubblewrap (bwrap) is the tool Alexander Larsson wrote for Flatpak. It's a setuid-safe launcher that assembles a fresh mount namespace, user namespace, PID namespace, seccomp filter, and process tree — in a single argv. No daemon. No config files. No root required (on any modern kernel with unprivileged user namespaces).
The simplest useful invocation — a shell that sees the host read-only but has a private /tmp and no network:
bwrap \
--ro-bind / / \
--dev /dev --proc /proc --tmpfs /tmp \
--unshare-all --share-net=false \
--die-with-parent \
bash
That's it. It starts in ~5 ms. rm -rf / inside it does nothing to the host because / is a read-only bind.
Where it earns its keep is composing narrower jails. Run an npm install that can see the project but nothing else in your home:
bwrap \
--ro-bind /usr /usr --ro-bind /etc /etc \
--symlink usr/bin /bin --symlink usr/lib /lib --symlink usr/lib64 /lib64 \
--proc /proc --dev /dev --tmpfs /tmp \
--bind "$PWD" /work --chdir /work \
--setenv HOME /work --setenv PATH /usr/bin \
--unshare-all --share-net \
--die-with-parent \
npm install
The install script cannot read ~/.ssh/id_ed25519, cannot see your gpg-agent socket, cannot write to ~/.bashrc. It can hit the network (because --share-net), and can only write to /work and /tmp.
Some flags that are hard to appreciate until you need them:
--dev-bind /dev/dri /dev/dri — pass through GPU nodes for a sandboxed browser without exposing the whole /dev.--overlay-src / --overlay /some/path — layer a tmpfs overlay so writes go to an ephemeral upper. Perfect for a "try this make install and throw it away" workflow.--seccomp 10 — read a seccomp BPF program from fd 10. Combine with libseccomp to actually forbid syscalls.--new-session — new controlling TTY, so a compromised child can't TIOCSTI-inject keystrokes into your outer shell (a real 2017-era escape).--info-fd 3 — bubblewrap writes JSON about the sandbox (child pid, namespace paths) to fd 3, so a supervisor can join later with nsenter.Compare with unshare: unshare gives you namespaces, but the moment you want a read-only /usr and a fresh /tmp you're writing a mount script that runs inside unshare --mount. Bubblewrap collapses that into declarative flags and — critically — does the pivot_root dance correctly, dropping capabilities in the right order so the child never inherits CAP_SYS_ADMIN in the initial namespace.
Compare with Docker: no image, no layer cache to prune, no daemon socket that's effectively root-equivalent, no iptables chains being rewritten behind your back. It's just a process.
Ships in Debian, Fedora, Arch, Alpine, Nix. Zero runtime dependencies beyond libc.
bwrap gives you namespaces, bind mounts, and seccomp declaratively in one argv — no daemon, no root, no config file.
What If Engineering
2026-09-05
Switzerland already does a crude version of this: since 2005, crews unroll white geotextile fleece over the Rhône Glacier each June, saving about 70% of the summer melt on the covered patches (~100,000 m²). But fleece just reflects sunlight — it does nothing to stop warm air from conducting heat into the ice. What if we upgraded to silica aerogel blanket, the same stuff that insulates Mars rovers?
The physics of a summer day on ice. A dirty alpine glacier at 2,500 m elevation absorbs roughly 250 W/m² net radiative flux in July (albedo ~0.3, incident ~800 W/m² peak, averaged). Plus convective heat from 15°C air. Call it 300 W/m² net melting power on bare ice.
Silica aerogel has thermal conductivity k ≈ 0.015 W/(m·K) — half that of still air, the lowest of any solid. A 10 mm blanket gives thermal resistance:
R = L/k = 0.010 / 0.015 = 0.67 m²·K/W
With a 20 K gradient (20°C air, 0°C ice), conductive flux drops to 30 W/m². Add a white reflective outer skin (albedo 0.9) and radiative gain falls to ~80 W/m² absorbed at the top surface, which then has to fight its way down through the aerogel. Net melting power at the ice: roughly 25 W/m² — a 12× reduction.
How much ice does that save? Over a 100-day melt season on 1 km² of glacier:
2.6×10¹⁵ J2.2×10¹⁴ J — a saving of 2.4×10¹⁵ JThe engineering nightmare. Aerogel blanket weighs about 150 kg/m³; a 10 mm sheet over 1 km² masses 1,500 tonnes. Delivered cost is around $30/m², so a full km² costs $30 million — not counting helicopter deployment across crevasses. Anchoring is the real killer: föhn winds on Alpine ridges routinely hit 150 km/h, generating dynamic pressures of ~1 kPa. A 100 m × 100 m panel with 5% uplift loading catches 50 kN of force — you need a truck's worth of ice screws per hectare, replaced every spring as the ice moves 30-100 m/year downslope.
The subtle problem: refrozen meltwater and albedo feedback. Aerogel is hydrophobic but not vapor-tight. Meltwater vapor migrating up through the blanket condenses in cold outer layers, then refreezes each night, gradually filling the pore structure. Within 2-3 seasons, thermal conductivity climbs from 0.015 to ~0.08 W/(m·K) — most of your R-value gone. The Swiss fleece experiments already show this compaction problem.
Scale check. The Aletsch Glacier is 78 km². Blanketing it: $2.3 billion in aerogel, 117,000 tonnes of material, and an annual redeployment crew of hundreds. For comparison, Switzerland's annual glacier mass loss is roughly 2 km³ of ice per year (~1.8 Gt) — you'd need to cover thousands of km² globally to make a dent. It's a stunning localized preservation tool for a specific ski resort or water-supply glacier tongue, and utterly hopeless as a climate strategy.
Wikipedia Rabbit Hole
2026-09-05
Wikipedia: Read the full article
Every time you've watched an over-the-air HDTV broadcast, streamed a UHF signal, or seen a particle physics experiment splash across the news, there's a decent chance the invisible photons carrying that energy were shaped by a device most engineers have never heard of: the inductive output tube, or IOT. Sometimes it goes by the delightfully bureaucratic nickname "klystrode" — a portmanteau that hints at its unusual parentage.
To understand why the IOT matters, you have to understand what it replaced. For most of the 20th century, if you wanted to blast a high-power microwave signal — say, to push a TV broadcast across a metropolitan area — you reached for a klystron. Klystrons are marvels: invented at Stanford in 1937 by the Varian brothers (the same lab that eventually spun out much of Silicon Valley's early instrument industry), they amplify microwaves by "bunching" a beam of electrons as it drifts through resonant cavities. They're powerful, precise, and everywhere — from radar to linear accelerators to the transmitters that beam commands to the Deep Space Network.
But klystrons have a dirty secret: they're wildly inefficient at anything less than full throttle. The electron beam runs constantly, whether you're modulating a signal or not, and unused energy becomes heat you have to actively dump. For a broadcast station running 24/7, that's an electricity bill measured in six figures.
Enter the IOT. It's essentially a hybrid of a klystron and a triode — the ancient three-electrode vacuum tube from the dawn of radio. Instead of a continuous beam that gets bunched downstream, the IOT uses a control grid right at the cathode to switch the electrons on and off in time with the input signal. The bunched beam then flies into a klystron-style output cavity, where it dumps its energy into the RF field. Because current only flows when the signal calls for it, efficiency jumps from around 40% for a klystron to 70% or higher.
Some other things that make the IOT quietly fascinating:
The deeper punchline is philosophical: we tend to think of vacuum tubes as a defeated technology, romantically obsolete like steam locomotives. But at the frequencies and power levels where solid-state amplifiers still can't compete — hundreds of kilowatts at gigahertz frequencies — the humble hot cathode still reigns. Every wireless revolution has, at its high-power edge, been built on glowing filaments in glass.
Daily YT Documentary
2026-09-05
Channel: Filmmaker Genius (2 subscribers)
For over a decade, Amazon Prime Video Direct was arguably the most democratic distribution channel in the film industry. Any independent filmmaker could upload a movie, bypass traditional gatekeepers, and reach roughly 200 million Prime subscribers — earning royalties based on hours streamed. For many micro-budget directors, it was the only viable path to an actual audience and a paycheck.
This video from a tiny channel (just 2 subscribers) breaks down Amazon's quiet decision to shut that program down, and what it means for the economics of independent film going forward. It's the kind of industry-shift story that rarely gets covered by mainstream film press because it affects the small players rather than the studios.
Expect a clear-eyed explanation of how PVD actually worked, why Amazon walked away from it, and what alternatives (Tubi, Filmhub, Vimeo OTT, direct-to-consumer) remain for filmmakers who don't have a distributor. If you're curious about the business plumbing behind streaming — not just what shows up on the front page, but how content gets there and who gets paid — this is a useful primer on a corner of the industry that just got significantly worse for creators.
Daily YT Electronics
2026-09-05
Channel: Muhammad Abdullah (777 subscribers)
Of the candidates here, this is the standout. Most of the list is either hashtag-spam Shorts or the "Shobinz Lab" series, which offers little more than a company welcome message in its descriptions. This tutorial, by contrast, is part of a numbered course (Tutorial 31), meaning it sits in a structured curriculum with clear prerequisites and continuity.
The topic — implementing a VGA controller on an FPGA — is a genuine rite of passage for digital design learners. Generating VGA signals requires the student to correctly handle horizontal and vertical sync timing, front and back porches, pixel clock generation, and an active display region, all driven from hardware description language rather than software. Getting a stable image on a monitor is deeply satisfying because it forces you to respect real-world timing constraints down to the microsecond.
This is Part 2, so it likely moves past theory into simulation, synthesis, and on-board testing — the actual "does it light up the screen?" moment. That practical bring-up phase, including debugging with a logic analyzer or scope when things inevitably don't work, is where FPGA skills are truly forged. For anyone learning Verilog/VHDL, watching someone walk through the implementation-and-test loop on real hardware is far more valuable than yet another combinational-logic primer.
Caveat: I couldn't preview the video itself, so the depth of explanation may vary — but the topic and course structure make it the strongest bet here.
Daily YT Engineering
2026-09-05
Channel: Ahmed Khalid (487 subscribers)
Tank drainage looks like a trivial problem until you actually try to size a valve or predict how long a batch process will take — and then you're suddenly staring down Torricelli's law, discharge coefficients, and the awkward fact that flow rate isn't constant because the head keeps dropping as the tank empties.
This video from Ahmed Khalid walks through the fluid mechanics of gravity-driven tank drainage: how the height of liquid above the outlet drives velocity (v = √(2gh)), why drain time scales with the square root of initial height rather than linearly, and how valve geometry and the discharge coefficient (Cd) modify the idealized picture. It's the kind of foundational chemical/mechanical engineering topic that shows up constantly in process design, stormwater management, and even hobbyist projects like homebrewing or aquaponics.
What makes it worth watching over a textbook derivation is the connection to practical variables engineers actually tune — outlet diameter, valve position, tank cross-section — and how each one shifts the drain-time curve. For a 487-subscriber channel, this is a genuine attempt at teaching applied fluid mechanics rather than an animation reel.
The rest of today's crop was mostly Shorts, hashtag spam, or generic "how a motor works" explainers. This one at least commits to a specific, quantitative problem.
Daily YT Maker
2026-09-05
Channel: bondursonik (774 subscribers)
Of the candidates in this batch, most are school promos, hashtag-heavy clips, or short showcase videos with little instructional content. This tutorial stands out as a genuine, complete walkthrough of a small fabrication project on a Cricut Maker 3.
The video promises a full step-by-step guide to producing custom photo magnets — a project that touches several practical skills worth learning if you own or are considering a cutting machine: preparing an image in Cricut Design Space, sizing and aligning artwork to a backing material, choosing the right blade and mat pressure for laminated photo stock, and finishing the piece with adhesive magnet sheet.
For newer Cricut owners, this kind of end-to-end project video is more useful than a feature demo. You see how the software choices (image trace, offset, print-then-cut registration) translate into the physical settings on the machine, and how small mistakes compound at the finishing stage. It's also a nice low-cost gift-making project — a good on-ramp for anyone trying to justify a Maker 3 for household craft use.
Caveat: this is a craft/consumer-fabrication video rather than deep engineering content, but for a small channel it's the most substantive tutorial in the list.
Daily YT Welding
2026-09-05
Channel: The Villagers (1470 subscribers)
Of today's crop, this is the pick that actually promises structured teaching rather than a quick clip of a bead being run. Most of the other candidates are short-form root pass demos with near-identical titles from the same channel, a Shorts clip, or footage-heavy channel promos. This one frames itself as a start-to-finish walkthrough, which is where TIG beginners actually get stuck.
TIG is unforgiving compared to MIG or stick because every variable is on you: tungsten prep, gas flow, amperage ramp, torch angle, filler feed cadence, and travel speed all interact. A masterclass format — assuming it delivers on the title — should cover machine setup (AC vs DC, balance and frequency for aluminum, pulse settings), consumable selection (cup size, gas lens, tungsten grind angle), and then translate those settings into what a good puddle actually looks like on the workpiece.
Caveat: the channel is small and the description is generic, so quality is unverified. But among today's options — mostly repetitive root-pass shorts and a hashtag-spam clip — a self-described soup-to-nuts tutorial is the most likely to teach something transferable. Worth a skim to see if the setup explanations are grounded in the "why" (heat input, arc length, shielding coverage) rather than just parroting knob positions.
