26 newsletters today.
Abandoned Futures
2026-05-14
In 1986, on a ramp at NASA Ames, sat one of the strangest aircraft ever built: the Sikorsky S-72 X-Wing. It looked like a helicopter with a four-bladed rotor on top — except the rotor blades were rigid, symmetrical, and unusually fat. The plan was audacious: take off as a helicopter, accelerate forward, and then stop the rotor in mid-flight, locking it into an X-shape that would function as a fixed wing. The aircraft would then cruise at speeds approaching 450 knots — roughly twice the speed limit of any conventional helicopter.
The program traced back to DARPA and NASA work in the 1970s under the Rotor Systems Research Aircraft (RSRA) program. The breakthrough trick was circulation control: the rigid blades had no moving flaps. Instead, compressed air was ducted through the blades and blown out of slots along the trailing edges. By modulating airflow electronically through valves spinning at rotor speed, the blades could generate lift on demand — even when stationary. Lockheed had explored similar concepts with the AH-56 Cheyenne in the late 1960s, but the X-Wing went further: the rotor itself was meant to become the wing.
By 1986, Sikorsky and NASA had built a full demonstrator. The S-72 airframe had been flying since 1976. The rotor hub was integrated, the pneumatic system was tested, and rollout occurred at NASA Ames in August 1986. First flight was scheduled for 1987.
Then it died. In 1988, DARPA pulled funding. The reasons were mundane and political:
The demonstrator never flew with the X-Wing rotor. It sits today, partially preserved, as a monument to a transition that never happened.
Why it deserves another look in 2026:
The hardest part of the X-Wing was never the aerodynamics — Boeing's wind tunnels confirmed it would work. It was the act of conversion: that terrifying moment when the rotor decelerates through resonance frequencies, transitioning from lift source to dead weight to fixed wing. Today's gust-load alleviation algorithms, developed for active flutter suppression on the Boeing 787, can handle exactly that kind of transient. We have the answer to the question that killed the program.
ArXiv Paper Digest
2026-05-14
When an AI coding agent fails on a real software project, the usual reaction is: "the model isn't smart enough yet." This paper pushes back on that assumption. The authors argue that a huge chunk of the reliability gap has nothing to do with the model — it lives in the harness, the often-invisible piece of plumbing that sits between the AI and the codebase.
Think of it this way: if a foundation model is the brain, the harness is everything else — the hands, eyes, and short-term memory. It decides what files the agent can see, what tools it can call (run tests? edit code? grep the repo?), how errors get reported back, how long conversations get compressed when they grow huge, and how the agent confirms its work actually fixed the bug. Two agents using the exact same model can perform wildly differently depending on the harness wrapped around them.
The authors propose treating harness design as its own engineering discipline rather than an afterthought. They sketch out what a good runtime substrate needs to do:
The key insight is the model–harness–environment system: capability isn't a property of the model alone, it's emergent from the whole stack. A weaker model with an excellent harness can outperform a stronger model with a clumsy one. This reframes a lot of recent benchmark debates — claims like "GPT-X solves 60% of SWE-bench issues" are really measurements of a specific model-plus-harness combination, not of the model itself.
Practically, this matters because the field has been pouring effort into making bigger and better models while the harness layer has been getting only ad-hoc attention. If the authors are right, there's substantial unclaimed performance just sitting in better runtime design — better context management, better tool ergonomics, smarter compaction, more honest verification loops. It also suggests that comparing agents fairly requires holding the harness constant, which today's benchmarks mostly don't.
Daily Automotive Engines
2026-05-14
Look inside a freshly machined cylinder bore and you'll see what looks like decorative scratches running diagonally in a precise X pattern. That's the crosshatch hone, and it's one of the most underappreciated features in engine building. Without it, your piston rings would never seal properly, and your engine would burn oil from day one.
The crosshatch serves two competing purposes: it must be rough enough to hold oil in microscopic valleys for lubrication, but smooth enough that the rings can wear in quickly without scuffing. The diagonal lines act like tiny oil reservoirs, ensuring the cylinder wall stays wet even at top dead center where piston speed is zero and hydrodynamic lubrication collapses.
The angle matters enormously. Most engine builders target a 22-32 degree included angle (measured between the two crossing lines, so 11-16 degrees from horizontal per stroke). Too shallow an angle (under 20°) traps too much oil and you get high oil consumption. Too steep (over 40°) and the rings can't scrape oil down — they hydroplane on a film that's too thick, and the rings polish the walls into a mirror finish that won't hold oil at all. That mirror finish is called glazing, and it's why a freshly rebuilt engine that idles for hours during break-in often burns oil forever.
Rule of thumb for hone angle: the angle is determined by the ratio of stroke speed to rotation speed of the hone. A target of 25° means the hone moves up and down at roughly the same speed it rotates circumferentially. Builders calculate it as: angle = 2 × arctan(stroke speed / rotational surface speed).
Real-world example: When GM had widespread oil consumption issues on the 5.3L LS engines (the AFM-equipped Gen IV trucks from 2007-2014), one contributing factor was the plateau honing process. Modern engines use a two-stage hone: a rough cut to establish the crosshatch, then a fine "plateau" pass that knocks down the peaks while leaving the oil-retaining valleys. If the plateau step is too aggressive, the valleys get shallow and the rings can't find oil. Too light, and the peaks tear up new rings during break-in.
Stone grit also matters: 220-grit for cast iron rings, 280-400 grit for moly-faced or chrome rings. Harder ring faces need smoother walls because they can't deform to match a rough surface — they'll just scuff and scratch instead of seating.
Daily Debugging Puzzle
Array.sort() Trap: The Median That Lies About Big Numbers2026-05-14
This function is supposed to compute the median of a list of numbers. It passed every test the junior engineer wrote — until production hit it with real telemetry data and dashboards started showing impossible latencies.
function findMedian(numbers) {
if (numbers.length === 0) return null;
const sorted = [...numbers].sort();
const mid = Math.floor(sorted.length / 2);
if (sorted.length % 2 === 0) {
return (sorted[mid - 1] + sorted[mid]) / 2;
}
return sorted[mid];
}
// Tests that "pass":
console.log(findMedian([3, 1, 4, 1, 5, 9, 2, 6])); // 3.5 ✓
console.log(findMedian([7, 2, 8, 5, 1])); // 5 ✓
// Production:
console.log(findMedian([50, 200, 75, 1000, 9])); // 75? No — returns 75 ✓
console.log(findMedian([50, 200, 75, 1000, 9, 3])); // returns 137.5, real median is 62.5
console.log(findMedian([2, 10, 100, 1000])); // returns 55, real median is 55 ✓ (lucky)
console.log(findMedian([2, 11, 100, 1000])); // returns 55.5, real median is 55.5 ✓ (lucky again!)
console.log(findMedian([8, 10, 100, 9])); // returns 54, real median is 9
JavaScript's Array.prototype.sort() — when called without a comparator — sorts elements as strings. It coerces every element with ToString and compares the resulting UTF-16 code unit sequences lexicographically.
So [8, 10, 100, 9].sort() does not give you [8, 9, 10, 100]. It gives you [10, 100, 8, 9], because "10" < "100" < "8" < "9". The median calculation then picks the average of the two middle slots — 100 and 8 — yielding 54 instead of the correct 9.
What makes this bug exquisitely cruel:
findMedian([3,1,4,1,5,9,2,6]), see 3.5, and ship.[10, 20, 30, 40] and [100, 200, 300, 400] both sort "correctly" because all elements have equal digit counts.NaN, not undefined — just a value that's wrong, often by a believable amount. Perfect for corrupting analytics silently.sort(): this is perfectly happy on a number[].The spec mandates this behavior — it's not a quirk of any one engine. It dates back to a time when JavaScript arrays were generic untyped sequences, and "sort everything as strings" was the only universally safe default.
Always pass an explicit numeric comparator:
function findMedian(numbers) {
if (numbers.length === 0) return null;
const sorted = [...numbers].sort((a, b) => a - b);
const mid = Math.floor(sorted.length / 2);
if (sorted.length % 2 === 0) {
return (sorted[mid - 1] + sorted[mid]) / 2;
}
return sorted[mid];
}
One subtle caveat: (a, b) => a - b itself can lie if a or b is large enough that the subtraction overflows past Number.MAX_SAFE_INTEGER, or if either is NaN. For untrusted input, prefer (a, b) => a < b ? -1 : a > b ? 1 : 0, which compares directly without arithmetic.
A useful lint rule: ban bare .sort() calls entirely. ESLint's sort-compare rule does exactly this, and it has saved more dashboards than anyone can count.
Array.sort() defaults to lexicographic string comparison — always pass a comparator when sorting numbers, or your tests will pass while production quietly invents wrong answers.
Daily Digital Circuits
2026-05-14
When PCIe, SATA, or 10GbE sends data at 10 Gb/s, there is no separate clock wire. The receiver has to recover the clock from the data edges themselves. This is the job of a SerDes (Serializer/Deserializer) with CDR (Clock and Data Recovery).
Why no clock line? At multi-gigabit rates, two parallel wires (clock and data) drift in phase due to slightly different trace lengths, dielectric variations, and temperature. By 5 Gb/s, the timing budget is ~200 ps total, and 1 mm of FR4 trace mismatch already burns ~6 ps. Send only one signal, and there's nothing to skew against.
The CDR loop: The receiver runs a local VCO near the expected bit rate. A phase detector — typically a Hogge or Alexander (bang-bang) detector — compares incoming data transitions against the local clock and outputs "early" or "late." A loop filter integrates these decisions and nudges the VCO. After a few thousand transitions, the recovered clock is locked to the data's edge density, with its sampling point parked in the center of the eye.
The catch — you need transitions. A long run of zeros or ones gives the CDR nothing to lock onto, and the VCO drifts. This is why 8b/10b or 64b/66b line coding sits in front of every SerDes: it guarantees a transition every few bits and keeps DC balance so AC-coupling capacitors don't charge up.
Concrete example — PCIe Gen 3 at 8 GT/s: A unit interval is 125 ps. The CDR must place its sample point within roughly ±30 ps of eye center to hit a 10⁻¹² BER. The phase detector typically updates every UI, the loop bandwidth is set to ~5–10 MHz (about 1/1000 of the bit rate), and 128b/130b encoding guarantees enough edge density for lock. On power-up, a training sequence (TS1/TS2 ordered sets) gives the CDR known patterns to lock against before real traffic starts.
Rule of thumb: CDR loop bandwidth should be roughly 1/1000 to 1/2000 of the bit rate. Too high and the loop tracks jitter it should reject; too low and it can't follow real frequency drift (typically ±300 ppm between transmitter and receiver crystals). For a 10 Gb/s link, that's 5–10 MHz — fast enough to track ppm wander, slow enough to average out random jitter.
The deserializer then uses the recovered clock to clock incoming bits into a shift register, and a word-aligner finds the comma symbol (K28.5 in 8b/10b) to figure out where bytes begin.
Daily Electrical Circuits
2026-05-14
A peak detector captures and holds the maximum voltage of an input signal, useful for envelope detection, audio metering, vibration analysis, and pulse measurement. The basic topology is a diode charging a capacitor: when the input rises above the capped voltage, the diode conducts and the cap follows; when the input drops, the diode reverse-biases and the cap holds its charge.
The naive passive version (diode + cap) has a fatal flaw: you lose one diode drop (~0.6 V for silicon, ~0.3 V for Schottky). For a 100 mV audio envelope, that's catastrophic. The fix is a precision peak detector: wrap an op-amp around the diode so feedback drives the output to whatever voltage cancels the drop. The op-amp output swings up by Vf, but the capacitor sees the true input peak.
Classic topology:
Real-world example: An audio VU meter on a guitar pedal. The guitar signal is rectified and peak-detected to drive an LED bargraph. Without precision detection, the bottom 600 mV of dynamic range is invisible — quiet picking wouldn't light a single LED. With an op-amp-based detector and a 10 µF hold cap plus a 100 kΩ bleed resistor, you get a ~1 second decay time that tracks loudness perceptually.
Key design calculation — decay time constant:
τ = Rbleed × Chold
Choose Chold small enough to track fast peaks but large enough to ignore noise. Rule of thumb: for a signal of frequency f, pick C such that the charge time through the diode/op-amp is < 1/(10f), and choose Rbleed for a decay τ of 3–10 cycles of the lowest frequency you want to track.
For 1 kHz audio envelope: C = 100 nF, Rbleed = 100 kΩ gives τ = 10 ms — fast enough to follow syllables, slow enough to ignore individual cycles.
Gotchas:
Daily Engineering Lesson
2026-05-14
Bare metal parts rarely leave the factory unfinished. Surface treatments fight corrosion, reduce wear, improve appearance, and change electrical or thermal behavior. Choosing the wrong one means parts that rust, seize, or peel within months.
Anodizing (aluminum) grows a controlled oxide layer electrochemically. The part becomes the anode in an acid bath; oxygen ions migrate into the aluminum surface, building Al₂O₃ that's harder than the base metal. Type II (sulfuric, 0.0001"–0.001" thick) is decorative and corrosion-resistant — what you see on MacBook cases. Type III (hardcoat, 0.002"+) is structural; used on pistons, gun parts, and aerospace housings. Critically, anodizing grows into the part by ~50% of layer thickness and builds out by ~50%, so tight-tolerance features need pre-machining undersize.
Electroplating deposits metal from solution onto a conductive substrate. Zinc plating (5–25 µm) is the cheap default for steel fasteners — sacrificial, corrodes preferentially to protect the base steel. Nickel plating gives a hard, bright finish but is cathodic to steel: a scratch through nickel accelerates rust underneath. Hard chrome (25–500 µm) is for wear surfaces like hydraulic cylinder rods. Electroless nickel deposits uniformly into blind holes and threads where line-of-sight plating fails.
Powder coating is electrostatically sprayed thermoset polymer, cured at 350–400°F. Thicker than paint (50–150 µm), tougher, and no solvents. Excellent for outdoor steel: patio furniture, electrical enclosures, fence posts. Limitations: doesn't tolerate sharp inside corners (powder pulls away from edges) and adds enough thickness to interfere with press fits and mating surfaces. Mask threads and bearing bores before coating.
Galvanizing is hot-dip zinc — parts dunked into molten zinc at 850°F. Coating is thick (50–100 µm) and metallurgically bonded, lasting 50+ years outdoors. The reason every highway guardrail and transmission tower uses it.
Rule of thumb — coating thickness and tolerances:
Real-world example: A custom aluminum enclosure with 6-32 tapped holes gets Type III hardcoat. The threads bind because anodize grew 0.002" per flank, eating the 0.0035" thread clearance. Fix: mask threads with silicone plugs before anodizing, or tap holes oversize and pre-account for growth.
Forgotten Darkroom
2026-05-14
Book: CIA Reading Room cia-rdp79b00873a000800020071-7: WORK STATUS REPORT by CIA Reading Room (1967)
Read it: Internet Archive
Buried in a sanitized 1967 progress report from a CIA contractor is a small chapter in the history of how spies looked at film. The project was prosaic-sounding: "to replace the glass platen on a Richards Model 940 viewer with an electrostatic hold-down platen and to evaluate the resulting instrument." A Richards viewer was a light table for examining reconnaissance film — the kind of equipment U-2 analysts used to count Soviet missiles. The "platen" is the flat surface that holds the film while you look at it. Glass works, but glass also traps Newton's rings, dust, and tiny bubbles of air.
The proposed solution was elegant: charge a panel with high voltage and let electrostatic attraction pin the film perfectly flat — no clips, no vacuum pump, no glare. The report frankly catalogs the problems:
The panel does not attract the film so that the film must be smoothed onto the panel by hand or with a special brush. Turning off the electrical power does not cause the holding force to release so that the film must be pulled off the platen. Blowing ionized air across the film will aid this somewhat.
Then the kicker — the side effect every American who has touched a balloon and a sweater knows:
The film, after removal, has a static charge which will attract dust. There are however, methods for discharging the film.
What strikes the modern reader is how close this is to a technology that did succeed, just in a different industry. The 1967 contractors were essentially building an electrostatic chuck — a device that uses Coulomb forces to immobilize a thin, flat object on a stage. Today, every semiconductor fab on earth uses electrostatic chucks to hold silicon wafers during photolithography and plasma etch. The same physics, the same complaints (residual charge, particle attraction, slow release), and even the same workarounds (ionized air blowers, "Johnsen-Rahbek" discharge schemes) appear in modern wafer-handling patents.
The CIA contractor was wrestling with the problem about a decade before the semiconductor industry seriously adopted the technique. Their conclusion — that the "major problems" were making initial contact and removing the film — is exactly the problem statement that drove fifty years of follow-on research. Bipolar chucks, Johnsen-Rahbek mode, and active de-chucking circuits all exist because someone, somewhere, kept staring at a piece of film glued to a charged plate and thinking "there has to be a better way."
There's also a quieter lesson in the document. Government R&D reports from this era read like engineering diaries: blunt, specific, willing to list disadvantages alongside the pitch. Modern readers are used to procurement language that buries failure modes. The 1967 contractor cheerfully writes that their own gadget magnetizes dust and refuses to let go — and then proposes ionized air to fix it. It is the voice of an engineer, not a salesman.
Forgotten Patent
2026-05-14
On July 27, 1874, an Oberlin College professor named Elisha Gray filed US Patent 166,096 for an "Electric Telegraph for Transmitting Musical Tones." Two years later, on the morning of February 14, 1876, Gray walked into the US Patent Office to file a caveat for something even bigger: a device for transmitting voice over wires. Alexander Graham Bell's lawyer had arrived just two hours earlier. Gray spent the rest of his life — and a Supreme Court case — fighting for the telephone he nearly invented. But the musical telegraph he did patent was arguably more astonishing.
What it actually did: Gray's device used self-vibrating steel reeds, each tuned to a specific musical pitch, connected to electromagnets. Pressing a key on a piano-style keyboard sent a pulsing current at that reed's frequency down a telegraph wire. At the receiving end, an identical reed resonated sympathetically and reproduced the tone through a simple loudspeaker — a wooden sounding box with an electromagnetic driver. Multiple notes could travel simultaneously on one wire, each on its own frequency. Gray demonstrated it publicly in 1874, playing "Home, Sweet Home" over telegraph lines between Highland Park, Illinois and New York City.
Three inventions hidden inside one patent:
The telephone footnote: Gray's 1874 patent already contained the receiver Bell would need. Gray simply didn't realize that if you sent a continuously varying current (instead of discrete musical tones) through the same apparatus, you'd transmit speech. Bell's notebook entry of March 8, 1876 — sketching a liquid transmitter remarkably similar to one Gray had described in his February caveat — remains one of the great unresolved scandals in patent history. The Supreme Court ruled for Bell 4-3 in 1888.
The modern echo: Gray spent 1876-1900 building the Western Electric Manufacturing Company (yes, that Western Electric) and refining the Telautograph. But it took until the 1930s for engineers to realize his musical telegraph had described the principle behind every modern shared-medium communication channel. When AT&T deployed frequency-division multiplexing on long-distance lines in 1918 to carry multiple voice calls on one wire, they were directly implementing Gray's 1874 patent — 44 years after he filed it.
His "musical curiosity" turned out to encode the math of broadband. He just thought he was building a piano you could play across a continent.
Daily GitHub Zero Stars
2026-05-14
Language: Scala
This is one of those quietly useful repositories that scratches a very specific itch in the data engineering world: making Apache Spark work with Scala 3. For years, the Spark ecosystem has been tethered to Scala 2.12 and 2.13, while the broader Scala community has been steadily migrating to Scala 3 with its improved type system, cleaner syntax, and modern tooling. Bridging that gap is non-trivial, and any working example is valuable.
Although the repo currently has no description and minimal documentation, the premise alone makes it interesting. Spark's tight coupling to Scala 2 has been a long-standing friction point — Databricks only began shipping Scala 2.13 builds relatively recently, and Scala 3 support requires careful handling of cross-compilation, the new given/using syntax replacing implicits, and compatibility shims for Spark's encoder machinery, which historically leaned heavily on Scala 2 macros.
Who might find this useful:
sbt or mill configurations that pin a Scala 3 toolchain while consuming Scala 2.13-published artifacts.The repo is clearly early-stage, but that's part of the appeal — there's room to shape it, and even a few worked examples of spark-sql queries in modern Scala syntax would be a genuine community resource. If the author keeps pushing, this could become a reference others bookmark.
Daily Hardware Architecture
2026-05-14
You'd think the store buffer makes writes free — fire and forget, let the CPU drain it to cache in the background. But there's a nasty case where the store buffer becomes a speed trap: when a load reads from an address that a recent store just wrote to, before that store has committed. This is the load-hit-store (LHS) penalty, and it's one of the most underappreciated performance cliffs in modern CPUs.
Here's the mechanism. When a load issues, the CPU checks the store queue for matching addresses. If it finds one, it can sometimes forward the stored value directly to the load, skipping cache entirely. This is store-to-load forwarding, and when it works, it's nearly free (1-2 cycles). But forwarding only works under strict conditions:
Violate these, and the CPU can't forward. Instead, it must wait for the store to drain to L1 cache, then re-execute the load. On Intel Skylake-era cores, this costs 10-20 cycles. On older PowerPC chips (notoriously the PS3's Cell), it could hit 40+ cycles. Game developers used to call this "the LHS stall" and hunt them down with profilers.
Real-world example: The classic offender is type-punning via memory:
Same address, same size, same alignment — forwarding works, you pay 2 cycles. Now change it: store a 64-bit double, then load the low 32 bits as an int. Partial overlap, forwarding fails, you eat ~15 cycles. This is why memcpy-based type punning sometimes outperforms union tricks: the compiler can sometimes prove the access is safe and avoid the narrowing pattern.
Rule of thumb: If you store N bytes and then load M bytes from the same region, you only get fast forwarding when M ≤ N and the load is fully inside the store's footprint. Reading wider than you wrote, or reading from a misaligned subset, is the trap.
Another pattern that bites: writing structure fields individually then reading the whole struct as a single wide load. The wide load can't be reconstructed from multiple narrow store-queue entries (most CPUs won't merge across entries for forwarding), so you stall waiting for all of them to drain.
You can spot LHS stalls in perf via ld_blocks.store_forward on Intel — if that counter is high relative to total loads, your code is tripping on its own stores.
Hacker News Deep Cuts
2026-05-14
Link: https://shadialtarsha.com/software/2026-05-13-i-think-kubernetes-networking-finally-clicked-for-me/
HN Discussion: 1 points, 0 comments
Kubernetes networking has a reputation for being one of the most confusing parts of the platform. Pods get IPs, services get virtual IPs, kube-proxy does something with iptables, and somehow CNI plugins glue it all together. Most tutorials drop you straight into kubectl apply and hope the abstractions click. They rarely do.
This post takes the opposite approach: it strips Kubernetes away entirely and rebuilds the networking story from Linux primitives upward. Based on the title and URL slug, the author appears to walk through the foundational pieces that Kubernetes itself depends on:
Once those pieces are concrete — something you can poke at with ip netns commands on a single Linux box — the Kubernetes abstractions stop feeling like magic. A pod is just a network namespace. A service IP is just an iptables DNAT rule. A CNI plugin is just a program that wires veth pairs into a bridge or overlay. The CKA exam material suddenly reads like documentation instead of incantation.
This bottom-up framing is genuinely valuable for a technical audience because it converts memorized facts into mental models. Engineers who learn Kubernetes networking this way can debug ClusterIP weirdness by running iptables -t nat -L, troubleshoot pod-to-pod failures by inspecting routing tables, and reason about why their CNI choice (Calico vs. Cilium vs. Flannel) actually matters — instead of cargo-culting YAML.
It's also the kind of post that ages well. Linux networking primitives have been stable for two decades. Kubernetes APIs churn, but the namespace/veth/iptables substrate underneath does not. Learn it once, and every container runtime — Docker, containerd, Podman, Kubernetes — becomes legible.
The post sat at 1 point with zero comments, likely because "Kubernetes networking" headlines are a dime a dozen on HN. This one earns the click by inverting the usual pedagogy.
HN Jobs Teardown
2026-05-14
Source: HN Who is Hiring
Posted by: humbleferret
Of the ten postings, LayerTwo (ID 22674236) is the most revealing — every word is a bet on a specific thesis about where crypto trading is going.
1. The stack: Rust, top to bottom. "We're big fans of Rust and have built everything from the ground up with it." In 2020, picking Rust for a backend trading engine is not a casual choice — it's a statement. They're optimizing for memory safety and deterministic low-latency performance simultaneously, which is exactly what you need when your matching engine sits between user funds and an irreversible settlement layer. They're not just hiring Rust engineers; they're hiring people willing to make a career bet on a still-niche language. Hiring junior Rust engineers (rare in 2020) suggests they expect to grow the team faster than the Rust talent pool, and would rather train than wait.
2. What the posting reveals about strategy. The product description is unusually precise. "Bitcoin derivatives trading engine that uses the Lightning Network to allow traders to instantly trade without exposing their funds to seizure, theft or long transfer times." Read that carefully:
This is BitMEX's product, restructured around non-custodial Lightning rails. It's a regulatory arbitrage and a technical thesis: that Lightning can carry serious derivatives volume.
3. Skills and trends. The posting highlights the 2020 inflection where Rust started crossing from systems programming hobbyists into production financial infrastructure. It also hints at the Lightning-as-application-layer trend — treating Lightning not as a payments network but as a settlement primitive for other financial products.
4. Flags.
Daily Low-Level Programming
2026-05-14
You wrote your code top-to-bottom. The CPU does not execute it that way. Modern out-of-order cores dispatch dozens of instructions in flight simultaneously, and memory operations — loads and stores — are tracked in a dedicated structure called the Load-Store Queue (LSQ). It's the referee that lets the CPU pretend memory operations happened in program order while actually executing them in whatever order is fastest.
The LSQ has two halves: the load queue (holds in-flight loads until they retire) and the store queue (holds stores until they commit to the cache). On Intel Golden Cove, the load queue is 192 entries; the store queue is 114. When you exceed these, the front-end stalls — you've hit a memory ordering bottleneck, not a cache bottleneck.
The LSQ's most important job is store-to-load forwarding. If you write to address X and read from X two instructions later, the CPU doesn't wait for the store to reach L1. It snoops the store queue, finds the pending store, and forwards the value directly to the load. This typically costs 4-5 cycles instead of the 12+ cycles for an L1 round-trip.
But forwarding has rules. If the load is partially overlapping with a pending store — say, you stored 8 bytes and now read 4 bytes from an unaligned offset within it — forwarding fails. The CPU must wait for the store to drain to L1, then re-issue the load. This is called a store-forwarding stall, and it costs 10-15 cycles.
Real-world example: A common pattern in serialization code:
buf[0]buf[4] as a 32-bit value (the upper half)On paper this looks fine. In practice, the load partially overlaps the store, forwarding fails, and you eat a 12-cycle penalty per record. Aligning the read to match the store's boundary — or doing the store as two separate 32-bit writes — eliminates the stall. perf stat -e ld_blocks.store_forward counts these directly.
Rule of thumb: A load can be forwarded from a store only if the load's address range is fully contained within the store's range AND the load's start address is aligned to the store's start. Anything else triggers a stall. When mixing widths (e.g., writing a struct field-by-field then reading the whole struct), expect forwarding failures.
The LSQ also enforces the memory model: on x86, loads can't be reordered past earlier loads, and stores can't be reordered past earlier stores — the LSQ tracks this. mfence works by draining the store queue before allowing further loads.
Reddit Small Subs
2026-05-14
Subreddit: r/lowlevel
Discussion: View on Reddit (67 points, 11 comments)
Most of us reach for a web framework, or at the very least a systems language like Go or Rust, when we need an HTTP server. This project — ymawky — throws all of that out the window and implements a working web server entirely in ARM64 assembly, targeting Apple Silicon Macs running macOS. No libc, no runtime, no helper libraries — just raw instructions talking directly to the Darwin kernel via syscalls.
What makes this educational rather than a stunt is the layering of concepts you're forced to confront when you strip away every abstraction:
socket, bind, listen, accept, and read/write as raw register-loaded syscalls, with sockaddr_in structures built by hand in memory with the correct endianness for the port.printf or string libraries, parsing the request line and assembling a response means writing your own byte-by-byte scanners and integer-to-ASCII routines.x0–x7, the syscall number in x16, svc #0x80 to trap — these conventions become muscle memory after a few hundred lines.Why is this interesting beyond the novelty? Because it demystifies what a "server" actually is. There's no magic: a socket is a file descriptor, an HTTP response is a sequence of bytes you wrote into a buffer, and the kernel is just a function you call with a particular instruction. Reading this code is one of the fastest ways to internalize that the towering software stacks we use every day all bottom out in a handful of syscalls and some careful pointer arithmetic.
It's also a useful counterpoint to the assumption that assembly is only for kernels, codecs, or cryptography. Networking code is a perfectly reasonable target — it's mostly moving bytes and making syscalls, both of which assembly does naturally. The performance is unlikely to beat a well-tuned C server, but the clarity of seeing exactly which instructions run per request is something no higher-level language gives you.
accept() and the bytes on the wire.
RFC Deep Dive
2026-05-14
RFC: RFC 3270
Published: 2002
Authors: F. Le Faucheur, L. Wu, B. Davie, S. Davari, P. Vaananen, R. Krishnan, P. Cheval, J. Heinanen
If you've ever bought an "MPLS circuit" from a telco, sent VoIP across a corporate WAN, or wondered why your packets seem to magically prioritize themselves between data centers, RFC 3270 is part of the reason. It's the document that taught MPLS how to honor the IP Differentiated Services (DiffServ) model — and it's a small masterpiece of pragmatic protocol design solving a problem that looks trivial until you try it.
The problem. DiffServ (RFC 2474/2475) marks IP packets with a 6-bit DSCP in the IPv4 ToS byte. Routers use that DSCP to pick a Per-Hop Behavior (PHB) — queue, drop precedence, scheduling weight. But MPLS routers don't look at the IP header. They forward on a 20-bit label and have only a 3-bit EXP field (since renamed "Traffic Class" in RFC 5462) to express QoS. Three bits, eight values — and DiffServ already defines more than eight PHBs in common use. How do you map a 6-bit world onto a 3-bit pipe without losing information that operators paid real money to preserve?
The two-LSP-flavor answer. RFC 3270 defines two ways to build a Label Switched Path, and they're conceptually elegant:
Tunneling models. The other half of the RFC, often more cited in operations, is how DSCP gets preserved across an MPLS cloud when packets are pushed, swapped, and popped. It defines three modes:
Why it still matters. Twenty-four years on, MPLS hasn't gone away — it's just hidden. Carrier Ethernet, mobile backhaul, MPLS-TP, and segment routing all inherit this DiffServ machinery. When your SD-WAN appliance honors DSCP across an underlay, or your hyperscaler's inter-region traffic gets prioritized treatment, the conceptual model of E-LSP vs L-LSP and Uniform vs Pipe is still the vocabulary engineers reach for. The penalty-of-mismarking debugging guide for any MPLS-backed VPN essentially is RFC 3270.
A small historical note. The EXP field was renamed to "Traffic Class" by RFC 5462 in 2009 precisely because of this RFC: once operators were using those bits for production QoS classification, calling them "experimental" was actively misleading vendors and customers. RFC 3270 didn't just standardize behavior; it forced an honest renaming of the header itself.
Stack Overflow Unanswered
2026-05-14
The asker is wrapping FFmpeg (and its static dependencies) into a single shared library exposing a C++ API for Deno's FFI. They want the FFmpeg internals statically linked into the .so, but some of those object files weren't compiled with -fPIC. They're asking when this can be made to "just work."
Why it's interesting: the question sits at the seam between three pieces of ELF/PE machinery that most developers happily ignore — position-independent code, text relocations, and the loader's address-space layout. The naïve answer ("you must use -fPIC") is wrong; the precise answer ("it depends on the architecture, relocation types, and whether the loader permits DT_TEXTREL") is what makes this worth writing up.
Sketch of an answer:
.so — the relocations that would need fixing at load time mostly don't exist. This is why people get away with it on Linux/amd64.R_386_32 or R_386_PC32 relocations against text. ld will accept these by setting the DT_TEXTREL flag, forcing the loader to make text pages writable at load time, apply fixups, then re-protect. It works, but it (a) defeats page sharing across processes, (b) is rejected outright by hardened loaders (SELinux allow_execmod, some musl builds, Android, iOS), and (c) breaks under W^X.adrp/adr, so non-PIC is usually fine within ±4 GiB.Practical guidance for the asker: if FFmpeg's build emits non-PIC .a files on x86-64 Linux, the resulting .so will probably load and run. Verify with readelf -d libfoo.so | grep TEXTREL — if that flag is absent, you're fine; if present, you've silently signed up for writable text pages and incompatibility with anything that disallows them (notably noexec mounts and some sandboxes Deno may eventually run inside).
Gotchas: LTO can hide the problem until link time. Cross-compiled distributions (Alpine/musl, NixOS hardened) sometimes refuse DT_TEXTREL at runtime even when GNU ld emitted it. And if Deno ever moves its FFI workers into a seccomp-restricted sandbox, an mprotect(PROT_WRITE) on text from the loader will be the failure mode.
DT_TEXTREL — and the honest answer is "on amd64, usually yes; everywhere else, plan for pain."
Daily Software Engineering
2026-05-14
Repositories handle individual aggregate persistence, but real business operations touch multiple aggregates. Charge a customer, decrement inventory, write an audit log — three writes that must succeed or fail together. Sprinkle db.commit() across your service layer and you'll eventually ship a bug where the charge succeeded but inventory didn't.
The Unit of Work (UoW) pattern fixes this by tracking all changes made during a business operation and flushing them in a single transaction at the boundary. Your domain code calls uow.orders.add(order) and uow.inventory.decrement(sku, 1), but nothing hits the database until uow.commit() — and if anything throws, uow.rollback() undoes everything.
Concrete example. An e-commerce checkout:
OrderService opens a transaction, writes the order, calls InventoryService which opens its own transaction, then calls PaymentService. Three separate transactions. A network blip after step 2 leaves you with a paid order and stale inventory.Session, Entity Framework's DbContext, and Hibernate's Session are all UoW implementations — you've probably been using them without naming them.Typical shape:
with UnitOfWork() as uow:
order = uow.orders.get(order_id)
order.add_line(sku, qty)
uow.inventory.reserve(sku, qty)
uow.commit() # one transaction, all-or-nothing
The __exit__ rolls back on exception. Repositories share the same session/connection injected by the UoW, so they all participate in the same transaction.
Rule of thumb: one UoW per business operation, scoped to a single request or message handler. If a single operation needs N aggregate writes, you need exactly one commit at the end — not N. If you find yourself wanting nested transactions or commits inside a loop, you're either batching wrong or your aggregate boundaries are off.
Watch out for:
Tool Nobody Knows
2026-05-14
You learned awk in 1989 and it's served you well for positional fields. But the world filled up with CSV headers, JSONL streams, and TSV exports from analysts who don't know what column 7 is — only what it's called. Miller (mlr, John Kerl, ~2015) is awk's spiritual successor for name-indexed records. It speaks CSV, TSV, JSON, JSON Lines, key-value pairs (DKVP), positional indexed (NIDX), and pretty-print — and converts between them in a single pipe.
Convert formats by changing flags:
# CSV in, JSON Lines out
mlr --icsv --ojson cat orders.csv
# JSONL in, pretty-printed table out
mlr --ijson --opprint cat events.jsonl
# Shortcut: --c2p is "csv to pprint", --j2c is "json to csv", etc.
mlr --c2p cat orders.csv
Filter and compute with a real expression language — variables reference fields by name, not $7:
# Filter rows, then add a computed column
mlr --csv filter '$status == "paid" && $amount > 100' \
then put '$tax = $amount * 0.0875' \
then cut -f order_id,amount,tax orders.csv
# Group-by aggregation (the part that makes you delete 40 lines of awk)
mlr --csv stats1 -a mean,stddev,p95 -f latency_ms -g endpoint requests.csv
The then verb chains operations into a streaming pipeline — one pass over the file, no temp tables. Verbs include sort, uniq, top, tac, head, tail, cat -n (numbering), nest (explode delimited fields), reshape (wide ↔ long), and joins:
# SQL-style join across two CSVs
mlr --csv join -j user_id -f users.csv then sort -f signup_date orders.csv
# Histogram of values in a column
mlr --csv histogram -f response_time --lo 0 --hi 1000 --nbins 20 logs.csv
# Frequency table — like sort | uniq -c, but it understands columns
mlr --csv count-distinct -f country,plan subscribers.csv
Where it leaves xsv behind: JSON. mlr happily flattens nested JSON into flat records and back. If your data pipeline crosses formats — say, ingesting JSONL from an API and emitting CSV for a BI tool — you no longer need jq piped into csvkit piped into awk:
# Tail a JSONL stream, project a few fields, emit CSV
tail -F app.jsonl | mlr --ijsonl --ocsv cut -f ts,user_id,event,latency_ms
# Heterogeneous records? Use --jflatsep to control nested key naming
mlr --ijsonl --opprint --jflatsep . cat nested.jsonl
The DSL has proper types, regex, string functions, and even tee for splitting output mid-pipeline:
# Route errors and successes to different files in one pass
mlr --csv put -q '
if ($status >= 500) { tee > "errors.csv", $* }
else { tee > "ok.csv", $* }
' access.csv
One more sleeper feature: line-oriented streaming. Miller doesn't slurp the file. You can pipe a 50GB JSONL log through mlr stats1 and watch RSS stay flat. That's the real upgrade over loading it into pandas just to compute a mean.
Install: apt install miller, brew install miller, or grab a static binary. Single executable, zero dependencies, written in Go since v6.
mlr — it's awk that understands headers, JSON, and group-by, all in one streaming binary.
What If Engineering
2026-05-14
Holland, Michigan already does this on a few downtown blocks using waste heat from a power plant. But what if every road in a snowy city used embedded electric heating cables — basically scaling up the same tech used in heated driveways? Let's run the numbers on Minneapolis.
The melting physics. To melt snow at a useful rate, you need to overcome three things: warming the snow to 0°C, supplying the latent heat of fusion (334 kJ/kg), and offsetting convective/radiative losses to a -10°C sky. Industry rule of thumb for snow-melting systems is roughly 300 W/m² at the pavement surface during a moderate snowfall (about 25 mm/hr). Heavy storms push that to 500 W/m².
Scaling to a city. Minneapolis has about 1,900 km of paved roads averaging 12 m wide — call it 23 million m² of pavement. At 300 W/m²:
23,000,000 m² × 300 W/m² = 6.9 GW
For reference, the entire state of Minnesota's average electrical demand is around 9 GW. Heating the roads alone during a snowstorm would nearly double statewide consumption. A 12-hour storm dumps 83 GWh of electrical energy into the pavement — about $8 million at $0.10/kWh, for one storm, in one city.
The cable itself. Mineral-insulated heating cable rated for embedment in concrete runs about 30 W/m at 240 V. To deliver 300 W/m², you space cables roughly 100 mm apart, giving 10 m of cable per m² — so Minneapolis needs 230,000 km of heating cable, enough to circle Earth nearly six times. At $15/m installed (and that's optimistic for trenching through existing asphalt), the capital cost is $3.5 billion before substations, transformers, or the grid upgrade.
The grid problem is worse than the bill. A 6.9 GW load that switches on suddenly when snow starts falling is a utility nightmare. You'd need dedicated 138 kV feeders into neighborhood substations sized for a load that runs maybe 200 hours per year — capacity factor under 3%. The transformers alone would cost more than the cables.
Materials fatigue. Asphalt expands ~12 × 10⁻⁶ per °C. Cycling pavement between -15°C and +5°C twenty times per winter induces strains of about 240 microstrain per cycle. Asphalt's fatigue limit is around 70 microstrain for long life — so you'd shred the road's service life from 20 years down to maybe 5. Concrete handles it better but cracks at the cable-pavement interface where thermal mismatch concentrates stress.
The clever alternative. Hydronic systems (warm glycol in PEX tubing) need only 60°C fluid and can use waste heat from data centers, sewers, or industrial processes. Iceland heats Reykjavík's sidewalks with geothermal return water that would otherwise be dumped. Stockholm's Sergels Torg uses district heating return at essentially zero marginal cost. The energy is already flowing — you just intercept it on its way to disposal.
The honest verdict. Electric road heating works beautifully for a bridge deck (where ice = lawsuits) or a hospital ramp. Citywide, you're proposing to burn the energy equivalent of a mid-sized nuclear plant to avoid plowing — when a $300,000 plow truck clears the same area in a few hours using 200 liters of diesel. The economics only flip when the heat is essentially free, which is why every successful large-scale system on Earth runs on waste heat, not resistance wire.
Wikipedia Rabbit Hole
2026-05-14
Wikipedia: Read the full article
In a nondescript brick building in south Minneapolis, there is a room so quiet that the longest anyone has reportedly endured it is around an hour. Step inside, close the foot-thick steel door, and the ambient noise drops to roughly −24.9 decibels — well below the threshold of human hearing, which bottoms out at 0 dB. The room is so absorbent that 99.99% of sound is swallowed by its fiberglass wedges before it can bounce back to your ears.
This is the anechoic chamber at Orfield Laboratories, founded in 1971 by Steven J. Orfield. For years it held the Guinness World Record as the quietest place on Earth (Microsoft's Building 87 chamber has since edged it out at −20.6 dB, measured on a different scale — there is some delightful audiophile beef about which is "really" quieter). But the more interesting question isn't how quiet, but what happens to a person inside it.
When you remove the constant background hiss of the world — HVAC, distant traffic, the imperceptible hum of fluorescent lights — your auditory system, starved for input, turns inward. Visitors report hearing:
Worse, the brain uses reflected sound to spatially orient itself. Without reverb, your sense of balance — which leans heavily on auditory cues — quietly falls apart. NASA has used the chamber to test how astronauts handle the disorienting silence of space, and Orfield famously requires visitors to sit in a chair because most people lose their balance and stumble within minutes.
If this rings a distant bell, you might be thinking of John Cage, who in 1951 visited a similar chamber at Harvard expecting pure silence. He heard two sounds — high and low — and was told they were his nervous system and his circulating blood. That visit directly inspired 4′33″, the famous "silent" composition built on the premise that absolute silence is impossible as long as you are alive to perceive it.
Orfield's chamber isn't just a curiosity, though. It's a working acoustics lab: it's where Harley-Davidson tunes the exact growl of its engines, where cereal companies measure the satisfying crunch of cornflakes, and where heart-valve manufacturers verify their implants are silent enough not to drive patients mad. The same architectural feature that unnerves visitors is what makes it commercially indispensable — perfect isolation from the world.
Daily YT Documentary
2026-05-14
Channel: How It Works (41 subscribers)
This short documentary spotlights Avicenna (Ibn Sina), the 11th-century Persian polymath whose Canon of Medicine served as the standard medical textbook in European universities for over 600 years — long after its author's death in 1037.
What makes this worth watching is the specific intellectual leap the video focuses on: Avicenna's theory that diseases could be transmitted by invisible agents in the air and water, and his insistence on quarantining patients with suspected contagious illness. He arrived at these conclusions roughly 800 years before Pasteur and Koch formalized germ theory, working only from careful clinical observation.
The video also touches on Avicenna's systematic approach to pharmacology — he laid out rules for testing the efficacy of drugs (single-variable trials, reproducibility across cases, observing the effect on humans rather than only animals) that map surprisingly cleanly onto modern clinical trial design.
From a tiny channel with just 41 subscribers, this is the kind of compressed, fact-dense history-of-science explainer that the algorithm rarely surfaces. It's a useful corrective to the common framing that scientific medicine began in 19th-century Europe — the foundations were laid much earlier, in Bukhara and Baghdad.
Daily YT Electronics
2026-05-14
Channel: Learn And Grow Community (3200 subscribers)
Switch bounce is one of those problems that quietly humbles every beginner working with physical inputs on an FPGA. You wire up a pushbutton, write what looks like correct logic, and then watch your counter jump by three or your LED toggle unpredictably. The mechanical contacts inside a button physically bounce for several milliseconds when pressed, and at FPGA clock speeds those bounces look like dozens of distinct presses.
This session is episode 58 in a structured VHDL/FPGA series, which is a good sign — the instructor has already laid the groundwork in earlier videos (likely covering the theory of debouncing and the counter-based detection logic) and is now applying that logic to fix a real, visible bug in an ongoing project. That "see the problem, then fix it" structure is far more instructive than a standalone tutorial because you watch the broken behavior, understand why it happens at the gate level, and then see the cleaned-up waveform after the fix.
Expect to learn the standard approach: sample the input with a counter that only registers a state change after the signal has been stable for some number of clock cycles (typically 10–20 ms worth). It's a foundational technique you'll reuse on every project involving real-world switches, encoders, or sensors.
Daily YT Engineering
2026-05-14
Channel: Quality during Design (62 subscribers)
Most engineering content focuses on the physical artifact — the bolt, the boiler, the bridge. This video tackles something harder to see but arguably more consequential: the gap between a marketing feature list and what engineering actually needs to build a reliable service.
The case study centers on a service product with a hard 24-hour delivery promise baked into the customer contract. That single constraint cascades through the entire design: it dictates redundancy requirements, failure recovery budgets, monitoring thresholds, staffing models, and the design margin engineers must build into every subsystem. A feature list says "24-hour turnaround." An engineering requirement says what happens when a node fails at hour 23, what the SLA penalty model implies about acceptable downtime, and how observability must be wired in from day one.
What makes this worth watching is that it's a real case study rather than a generic lecture on requirements engineering. The channel (Quality during Design) specializes in translating quality and reliability frameworks into concrete design decisions, and this episode shows the translation in motion — taking a product manager's deliverable and reshaping it into something an engineering team can actually act on without guessing.
Useful for engineers who routinely receive thin specs from product teams, and for PMs who wonder why "just add this feature" keeps blowing up estimates.
Daily YT Maker
2026-05-13
Channel: Tech Deal (32 subscribers)
Note: this batch was unusually thin — most candidates are promotional factory clips, hashtag-spammed shorts, or SVG file ads. This review is the least promotional option, though it's still product-focused rather than a deep skill tutorial.
The xTool S1 is one of the more interesting consumer-grade lasers on the market because it's a fully enclosed diode laser — a category that used to mean either an open-frame hobby machine (cheap but unsafe and messy) or a sealed CO2 (expensive and bulky). The S1 sits in between, and the 40W variant has enough power to cut through 8–10mm hardwood in a single pass, which used to require CO2.
For makers evaluating their first \"serious\" laser, the things worth paying attention to in a review like this are: autofocus behavior (the S1 uses a contact probe rather than a fixed Z-offset), curved-surface engraving via the bundled rotary, and how the enclosure handles fume extraction. These are the practical differences that determine whether you'll actually use the machine vs. fight it.
If you're shopping in this category, watch reviews from multiple small channels rather than the sponsored big ones — small reviewers tend to be more honest about the quirks (slicer software limitations, materials that scorch, alignment drift) that determine real-world usability.
Daily YT Welding
2026-05-14
Channel: IronLand (5 subscribers)
Honest disclosure: this week's batch is rough. Most candidates are hashtag-spam Shorts from lathe channels that recycle the same emoji-laden titles with no real instructional content. The Crazy Mech "8D ball" video is the kind of clickbaity machining compilation we typically skip, and the rest are barely-described filler.
That leaves IronLand's first metalwork project as the most worthwhile pick — and it's genuinely interesting precisely because it's a beginner's first attempt rather than a polished factory demo. The video documents cutting and bending 3mm aluminum sheet in a workshop setting, which is a thickness that sits right at the boundary of what hand tools can manage and where powered shears or a press brake start to matter.
For anyone considering their own first sheet metal project, watching someone work through the actual decisions — how to mark a clean cut line, how aluminum behaves under a brake versus folded by hand, how 3mm differs from the thinner stock most beginners start with — is more useful than another flawless montage. The channel has 5 subscribers, so this is the ground floor of a maker journey, and the kind of small-channel content this curation exists to surface.
Set expectations accordingly: this is a learning-in-public video, not a masterclass.
