27 newsletters today.
Abandoned Futures
2026-05-24
In 1955, a soldier at Fort Eustis stepped onto a circular platform roughly four feet across, throttled up two counter-rotating propellers spinning inside a ducted shroud beneath his boots, and lifted into the air. He steered by leaning. No stick, no rudder pedals, no cyclic β just kinesthetic control, the same way you ride a Segway 50 years before Dean Kamen built one. This was the Hiller VZ-1 Pawnee, and the U.S. Army Office of Naval Research paid for five of them.
The aircraft exploited a principle Charles Zimmerman had patented in 1951: kinesthetic stability via ducted fans below the pilot's center of gravity. By placing the lift source below the operator, the platform was inherently self-righting β like a pendulum. Shift your weight forward, the thrust vector tilted, and you accelerated forward. Two contra-rotating two-bladed propellers (later three-bladed) driven by Nelson H-59 engines (40 hp each) produced enough thrust to lift a 170-pound soldier plus the 370-pound platform. Top speed: about 16 mph. Endurance: roughly 30 minutes.
It worked. Test pilot Philip Johnston logged dozens of flights. The Army envisioned squads of infantry hopping over minefields, rivers, and tree lines β a one-man helicopter requiring "no more training than a motorcycle," per Hiller's brochure. The follow-on VZ-1E added a larger duct and three engines.
So why did it die? Three reasons, all of them now obsolete:
Now look at 2026. Every single failure mode has been demolished by parallel industries:
The use case the Army originally wanted β squad-level individual mobility over rough terrain β has never gone away. It's why exoskeletons keep getting DARPA contracts. The Pawnee's kinesthetic interface, with modern fly-by-wire augmentation, would be genuinely intuitive: a hoverboard the military actually paid to develop, with a working airframe in the Smithsonian gathering dust since 1963.
JetPack Aviation and Gravity Industries have shown the market exists. Both use jet turbines strapped to a human β terrifying, loud, and limited. The Pawnee's ducted-fan-below-pilot architecture is safer (shrouded blades), quieter, and easier to learn. It was the right answer in 1955. It's still the right answer.
ArXiv Paper Digest
2026-05-24
Imagine you ask a contractor to fix a leaky faucet. They fix it β but they also rearrange your kitchen cabinets, repaint the bathroom, and replace the light fixtures in the hallway. Sure, some of that might be improvements, but now you can't easily tell whether the original leak is actually fixed, and your house looks different in ways you never asked for. This paper is about the software-engineering version of that problem.
The researchers studied coding agents β AI systems that take a bug report or feature request and try to fix the codebase automatically. They looked at 3,691 real patches from Multi-SWE-bench, a benchmark that tests these agents on actual GitHub issues. What they found is a pattern they call "refactoring runaway": the agent does the requested fix, but also throws in a bunch of unrelated code reorganization β renaming things, restructuring functions, tidying up code that had nothing to do with the bug.
Why does this happen? Two reasons:
The problem isn't that refactoring is bad. It's that tangled refactoring makes pull requests hard to review, hard to revert, and risky to merge. A 50-line change that includes the actual bug fix plus 200 lines of unrelated cleanup is far more dangerous than two separate, focused changes. Reviewers can't tell what's load-bearing.
The paper categorizes the kinds of tangled refactorings that show up most often, measures how widespread the problem is, and proposes mitigation strategies β essentially teaching agents to recognize when they're drifting off-task and to keep their changes minimal and focused on the original issue.
The key insight is uncomfortable but important: making AI coders behave more like humans isn't always a good thing. Humans have bad habits too, and an agent that faithfully imitates those habits inherits them at scale. "Just fix the bug" turns out to be a non-trivial discipline to instill.
Daily Automotive Engines
2026-05-24
Your oil pump is a positive displacement device β usually a gerotor or gear pump driven directly off the crankshaft. That means for every revolution, it moves a fixed volume of oil regardless of what the engine needs. At 7000 RPM with cold 5W-30, that pump is trying to shove enormous volumes through galleries sized for hot oil at idle. Without intervention, gallery pressure would spike past 150 psi, blow oil filter cans, rupture the cooler, and pop the front seal. The pressure relief valve (PRV) is what stops that disaster.
The classic design is dead simple: a spring-loaded plunger or ball sitting in a bore that taps into the main oil gallery just downstream of the pump. When pressure exceeds the spring's preload β typically 60β80 psi on a passenger car, 100+ psi on a race engine β the plunger lifts and dumps excess oil back to the pump inlet or directly to the sump. The pump keeps spinning at full displacement; the relief valve just bleeds off whatever the engine can't swallow.
Location matters enormously. Two schools of thought:
Modern variable-displacement oil pumps (found on most new GM, Ford, and BMW engines) make the relief valve a backup rather than the primary control. A solenoid varies pump output based on ECU-commanded pressure, saving 1β3 hp of parasitic loss. But there's still a mechanical PRV behind it as a failsafe β solenoids fail, and you don't want hydraulic lifters pumping up into valve float at 6500 RPM.
Real-world example: The LS-series Chevy small block had infamous PRV problems in the LS3/LS7 era. The pressure relief spring would oscillate at certain RPMs, causing pressure drops that starved the rod bearings on cylinder 7 (farthest from the pump). Fix: stiffer aftermarket springs from Melling or a billet pump from Katech. Same root cause as the Coyote 5.0's notorious "ticking" β relief valve resonance.
Rule of thumb: Hot idle oil pressure should be roughly 10 psi per 1000 RPM, capping out at the relief valve setpoint. So at 700 RPM hot idle you want ~7β10 psi minimum; at 3000 RPM you want ~30 psi; above 6000 RPM you're on the relief valve and pressure stops climbing. If pressure keeps rising past 80 psi at high RPM, your relief valve is stuck closed. If it never climbs past 20 psi, the valve is stuck open β or your bearings are toast.
Daily Debugging Puzzle
std::move from const: The Move That Silently Copies2026-05-24
This program loads an expensive template and then hands it off to several worker documents. The author was careful to use std::move everywhere to avoid copies. The instrumentation in the constructors should confirm the moves are happening.
#include <iostream>
#include <vector>
#include <string>
class Document {
std::vector<std::string> lines;
public:
Document(std::vector<std::string> l) : lines(std::move(l)) {}
Document(const Document& o) : lines(o.lines) {
std::cout << "[copy: " << lines.size() << " lines]\n";
}
Document(Document&& o) noexcept : lines(std::move(o.lines)) {
std::cout << "[move: " << lines.size() << " lines]\n";
}
};
const Document load_template() {
return Document({"header", "body", "footer"});
}
int main() {
const Document tmpl = load_template();
Document working = std::move(tmpl); // expected: move
Document another = std::move(tmpl); // expected: move (or UB?)
Document third = std::move(tmpl);
}
Output:
[copy: 3 lines]
[copy: 3 lines]
[copy: 3 lines]
Three copies. And weirdly, tmpl is still intact after all those "moves" β its lines vector still contains the original three strings. What happened?
std::move on a const object produces a const T&&, which the move constructor cannot accept β so overload resolution silently falls back to the copy constructor.
The thing to remember is that std::move doesn't move anything. It's just a cast β it converts its argument to an rvalue reference. The actual movement happens inside whichever constructor or assignment operator is selected by overload resolution.
Here, tmpl has type const Document. So std::move(tmpl) is a const Document&&. Now overload resolution looks at the two candidates:
Document(Document&&) β wants a non-const rvalue reference. A const Document&& cannot bind to it (you can't drop const).Document(const Document&) β const lvalue references bind happily to const rvalues. βSo the copy constructor wins. No warning, no error β just a silent fallback. The "optimization" did nothing, and on a hot path with large objects you've turned three pointer swaps into three deep copies.
What makes this nasty:
std::move(x) looks like a move.const to a local variable for safety, and performance silently regresses.store(T t) { container.push_back(std::move(t)); } looks fine until T is deduced as const Something.-Wpessimizing-move and friends, but they don't catch this case.Don't declare objects const if you intend to move from them later. Either drop the const on the source, or accept that you're handing out copies:
// Option 1: drop const if you're going to move
Document tmpl = load_template();
Document working = std::move(tmpl); // [move: 3 lines]
// Option 2: only move from the last user
const Document tmpl = load_template();
Document working = tmpl; // honest copy
Document another = tmpl; // honest copy
Document last = std::move(...); // only if you can drop const
If you want a compile-time guardrail, you can declare a deleted overload:
Document(const Document&&) = delete;
Now std::move(tmpl) on a const object becomes a hard error instead of a silent copy β useful when the performance of moving really matters.
std::move is just a cast to an rvalue reference; moving from a const object produces a const T&& that binds to the copy constructor, so your "move" silently becomes a copy with no diagnostic.
Daily Digital Circuits
2026-05-24
You already saw that hot carrier injection ages NMOS transistors. PMOS has its own degradation mechanism called NBTI, and it's the dominant aging effect in modern chips below 65nm. Unlike HCI which needs current flow, NBTI happens whenever a PMOS is just sitting there turned on β gate held low, no switching required.
The physics: when VGS is negative (PMOS in inversion), the strong vertical field at the SiβSiO2 interface breaks SiβH bonds that were used to passivate dangling silicon bonds during fabrication. Hydrogen drifts away, leaving interface traps that capture holes. The result: PMOS threshold voltage |Vtp| increases over time, drive current drops, and gate delays grow.
Two phases matter:
This recovery behavior is why duty cycle matters more than total on-time. A PMOS held constantly low (like in an SRAM cell storing a 0 for years) ages dramatically. A PMOS that switches at 50% duty cycle ages far less because it spends half its life recovering.
Real-world example: SRAM cells in CPU caches. A cache line storing the same value for hours stresses one of its cross-coupled PMOS devices continuously. After years of running the same OS kernel code, the PMOS holding the "always 1" side of certain bits weakens enough that the cell's static noise margin shrinks. Eventually a read flips the bit. Intel and others now use data scrambling β XORing cache lines with a pseudo-random pattern β specifically to balance NBTI stress across both halves of every SRAM cell.
Rule of thumb: For a PMOS at nominal voltage and 105Β°C operating temperature, expect roughly 30 mV of |Vt| shift over 10 years at 100% duty cycle. Doubling the temperature acceleration factor: every 10Β°C hotter roughly doubles the shift. Voltage acceleration is even harsher β ΞVt scales as roughly VGS3, so a 10% overvoltage produces ~33% more aging.
Designers compensate with guardbanding (sign off timing with 10β15% extra margin to absorb future degradation), adaptive voltage scaling (raise VDD as the chip ages to recover lost speed), and avoiding circuits where a single PMOS sits in stress indefinitely.
Daily Electrical Circuits
2026-05-24
Sometimes you don't need a precision sine wave or a crystal-locked clock β you just need a cheap, reliable square wave to blink an LED, drive a buzzer, or clock a slow logic circuit. The relaxation oscillator is the answer: one op-amp, two resistors for feedback, one resistor and one capacitor for timing. No inductors, no crystals, no specialty parts.
The topology is a Schmitt trigger with a capacitor charging through a resistor into the inverting input. The non-inverting input sees a fraction of the output through a divider β call it Ξ² = R2/(R1+R2). When the output is at +Vsat, the cap charges toward +Vsat through R. When the cap voltage crosses +Ξ²Β·Vsat, the comparator flips, output snaps to βVsat, and the cap now discharges toward βVsat. When it reaches βΞ²Β·Vsat, it flips again. Endless oscillation.
The period works out to:
T = 2RC Β· ln((1+Ξ²)/(1βΞ²))
Handy shortcut: pick R1 = R2 so Ξ² = 0.5. Then ln(3) β 1.0986, and T β 2.2Β·RC. That's the rule worth memorizing. For a 1 kHz square wave: T = 1 ms, so RC = 1 ms / 2.2 β 455 ΞΌs. Use C = 10 nF and R = 47 kΞ©. Done.
Real-world example: a panel-mount "power on" indicator that blinks at 2 Hz instead of staying solid β easier to spot in peripheral vision. Use an LM358 (cheap, single-supply capable), set R1 = R2 = 10 kΞ©, C = 1 ΞΌF, R = 220 kΞ©. That gives T β 0.48 s, close enough to 2 Hz. Drive an LED through a series resistor off the op-amp output.
Gotchas to watch for:
For sub-1% frequency accuracy, this isn't your circuit β use a 555 with a precision cap, or better, a crystal-based oscillator divided down. But for "I need a blinker, now, from my parts bin," nothing beats it.
Daily Engineering Lesson
2026-05-24
A servo motor isn't really a motor type β it's a control architecture. Take any motor (brushed DC, brushless DC, AC induction), bolt on a position sensor (encoder or resolver), wrap it in a feedback loop, and you have a servo. The defining feature: the controller continuously compares commanded position to actual position and drives current to close the error.
This makes servos fundamentally different from steppers. A stepper is open-loop β you send pulses and hope the motor follows. A servo is closed-loop β if the load stalls the shaft, the controller sees the error grow and pushes harder until it moves or faults. Steppers lose steps silently; servos don't.
The classic PID cascade in industrial servos has three nested loops, each running at different rates:
Each loop's output is the next loop's setpoint. Tuning starts inside-out: get current stable first, then velocity, then position. Tune the position loop first and you'll chase oscillations forever.
Real-world example: a CNC mill's X-axis ball screw, driven by a 750 W brushless servo with a 20-bit absolute encoder (about 1 million counts/rev). The controller commands a move to X = 152.4000 mm. The position loop sees the error, asks for 500 RPM. The velocity loop sees the actual shaft is at 480 RPM, commands more current. The current loop drives 4.2 A through the windings. When the cutter hits harder material, load torque rises β the velocity loop sees the shaft slowing and pushes current to 6.8 A automatically. The operator never knows; the part stays within 5 microns of programmed position.
Rule of thumb β position loop bandwidth: the position loop should run at roughly 1/5 to 1/10 the velocity loop bandwidth, and velocity should be 1/5 to 1/10 of current loop bandwidth. Violate this separation and the loops fight each other, producing oscillation that no PID tuning can fix.
Hobby servos (the RC kind) hide all this behind a PWM pulse-width interface: 1.0 ms = full one way, 1.5 ms = center, 2.0 ms = full the other way. Internally there's still a potentiometer giving position feedback and an analog comparator driving the motor β same architecture, just cheaper sensors and a single proportional loop.
Forgotten Books
2026-05-24
Book: Proceedings by American Society of Civil Engineers (1901)
Read it: Internet Archive
Buried in the table of contents of the January 1901 ASCE Proceedings is a paper title that, to a modern engineer, lands like a thunderclap:
"The Kinzua Viaduct of the Erie Railroad Company. By GEORGE S. MORISON, R. S. BUCK and L. S. MOISSEIFF"
The forgotten knowledge here isn't a recipe or a folk cure β it's a name. L. S. Moisseiff. Leon Solomon Moisseiff, a young Latvian-born engineer just beginning his career, is listed as the third author on a paper about one of the most ambitious railroad reconstructions in American history. Four decades later, Moisseiff would become the most infamous bridge designer in the world.
The Kinzua Viaduct itself was a 301-foot-tall iron trestle in Pennsylvania, originally completed in 1882 and rebuilt in steel during 1900 to carry the heavier locomotives of the new century. The rebuild was extraordinary: workers swapped out the entire superstructure in just 105 days while keeping the line operating. At the time it was the highest railroad bridge in the world. The 1901 paper would have been a victory lap β three engineers documenting how they had rebuilt a sky bridge above an empty valley without dropping a single train into it.
What modern readers won't find in this excerpt β but what makes it haunting β is what Moisseiff did next. He went on to become the leading American theorist of deflection theory, the mathematical framework that justified building suspension bridges lighter, longer, and more slender than ever before. His masterpiece was the Tacoma Narrows Bridge, which opened in July 1940 and collapsed in November of that same year in a now-iconic film of twisting roadway. The bridge had been killed by aeroelastic flutter β a phenomenon Moisseiff's theory did not account for.
The Kinzua Viaduct outlived him. It stood for another 60 years, eventually becoming a state park. Then in July 2003, an F1 tornado tore through the valley and snapped eleven of its twenty towers like dry pasta. The bridge that the young Moisseiff helped document in Proceedings Vol. XXVII was felled by exactly the kind of wind force that β in a different shape, on a different bridge β had ended his career.
The forgotten piece of context, then, is the apprenticeship: the proof that even the engineers we remember for their failures spent decades doing careful, brilliant work. Moisseiff's name on a Kinzua paper in 1901 is the equivalent of finding a young aerospace engineer's name on the Apollo 11 guidance computer before they moved on to design the Challenger O-rings. The 1909 ASCE volume captures him at the height of his promise β three years before he started his own consulting practice, four decades before the wind found him out.
Browse the same volume's table of contents and you'll find other ghosts: "Some Peculiar Railroad Bridge Accidents" by Joseph Mayer, "The Practical Column under Central or Eccentric Loads" by Albert I. Frye. An entire profession debating, in real time, how to keep things from falling down.
Forgotten Darkroom
2026-05-24
Book: Secrets of the dark chamber : being photographic formulae at present practiced in the galleries of Messrs. Gurney, Fredericks, Bogardus, etc. of New York City, never before published, together with full and simple directions for making photographic chemicals by Davie, D. D. T (1870)
Read it: Internet Archive
In 1870, a man named D. D. T. Davie published what may be the photographic equivalent of a corporate leak. The very title of his book promises to expose the proprietary chemistry of the most famous portrait studios in New York City β formulas, he insists, that have "never before been published."
"Through the kindness and generosity of our most distinguished New York photographers, I have been permitted to explore their dark chambers, and to copy their formulae⦠My object in presenting this work has been to gather up the knowledge of our most experienced and successful photographers, and impart it to those who have less opportunities to get the improvements."
The names on the cover were not casual. Jeremiah Gurney, Charles DeForest Fredricks, and Abraham Bogardus were celebrity photographers of post-Civil-War America. Gurney's Broadway gallery was a destination for politicians and society figures. Bogardus would serve as the first president of the National Photographic Association. These men were Mathew Brady's competitors β and in 1870, their chemistry was their moat.
This is the forgotten fact: in the wet-plate collodion era, a photographic studio's edge was not its lighting, its lens, or even its operator's skill. It was the chemistry. Each gallery brewed its own collodion, mixed its own silver baths, compounded its own toner with chloride of gold, and varnished its prints with formulas guarded like Coca-Cola's. Davie boasts of his receipts for "chloride of gold, nitrate of silver, varnish, etc., etc., the genuineness of which I can vouch for myself, having had thirty years' constant practice in that branch."
Why secrecy? Two reasons. First, photochemistry was genuinely unstable β a collodion that worked beautifully in July would fog in January, and a working recipe was hard-won empirical knowledge. Second, the entire industry was a few decades old. Patent law barely covered chemical processes, and a successful formula could be copied overnight if it leaked. So galleries hired chemists, locked their darkroom doors, and trained apprentices selectively.
Modern parallels almost write themselves:
What's striking is how fast the secrecy collapsed. Davie's leak came barely twenty years into commercial photography. By the 1880s, dry-plate manufacturing had industrialized the entire chemistry stack β Kodak's "you press the button, we do the rest" appeared in 1888 β and Gurney's secret silver bath was worth nothing. The trade secret had a half-life shorter than the careers of the men who guarded it.
The lesson lurking in Secrets of the Dark Chamber isn't really about photography. It's that every era has its "dark chambers" β rooms where proprietary craft knowledge sits behind closed doors β and every era, eventually, has its D. D. T. Davie.
Forgotten Patent
2026-05-24
In April 1928, a Bell Labs engineer named Harry Nyquist published a paper β and filed a series of supporting patents at AT&T β that would quietly become the mathematical bedrock of every MP3, every Zoom call, every streaming song, and every digital camera shutter that has ever clicked. The paper was called "Certain Topics in Telegraph Transmission Theory," and its companion patent work on pulse transmission included US Patent 1,915,440 (filed 1928, granted 1933) covering methods for transmitting telegraph signals through band-limited channels.
Nyquist's question sounded mundane: how fast can you cram telegraph pulses through a wire of a given bandwidth before they smear into each other and become unreadable? His answer was startling. He proved that a channel of bandwidth B hertz can carry exactly 2B independent pulses per second β no more, no less. Push harder and the pulses interfere; push less and you waste capacity.
This number β 2B β is the Nyquist rate, and it is the secret handshake of the digital age.
That last point was the bombshell. In 1928, "signals" meant continuous analog wiggles β voices, music, telegraph clicks. Nyquist showed they could be reduced to a stream of numbers with no loss of information, provided you sampled fast enough. Twenty-one years later, Claude Shannon would formalize this into the NyquistβShannon sampling theorem: any signal band-limited to frequency f can be perfectly reconstructed from samples taken at rate 2f.
Look at any digital device and you are looking at Nyquist's 1928 theorem in action:
What makes the patent surprising is the era. In 1928, vacuum tubes were new, television was experimental, and the word "bit" wouldn't exist for another two decades. Nyquist was nominally solving a telegraph billing problem for AT&T β how to sell more characters per second on a leased line. Instead, he wrote down the speed limit of information itself.
Could it be built better now? No β and that's the point. Nyquist's bound is a law of nature, like the speed of light. Every engineer who designs an ADC, a modem, or a codec is still negotiating with a Swedish-American telephone engineer who died in 1976.
Daily GitHub Zero Stars
2026-05-24
Language: TypeScript
cast_away is a TypeScript project aimed at building a media sender for Chromecast or similar receiver devices. In other words, it's the "send a video from my computer/phone to the TV" piece of the casting puzzle β the part that discovers receivers on the local network, negotiates a session, and streams media to them.
What makes this interesting is that casting is one of those technologies most people use daily but very few have ever poked at directly. Google's official Cast SDK is heavily oriented toward web apps loaded through Chrome, and the underlying protocol (a TLS-wrapped protobuf chatter over port 8009) is documented mostly through reverse-engineered projects like pychromecast and node-castv2. A fresh TypeScript implementation is a nice addition to that small ecosystem, especially for developers who want type safety and modern async patterns while hacking on cast workflows.
A few groups who might find this worth watching:
Because it's brand new and zero-star, it's also a great moment to jump in β the API surface is small enough to read in a sitting, and early contributors can help shape direction (codec support, queueing, subtitles, receiver app selection) before conventions calcify.
Daily Hardware Architecture
2026-05-24
You already know the bypass network skips the register file to hand results from one instruction directly to the next. But bypass isn't free, and modern CPUs run into a hard physical wall: not every functional unit can forward to every other one in a single cycle. This is why some instruction pairs run slower than you'd expect even when there's no apparent dependency stall.
The wire problem. A full bypass network connecting N execution units requires roughly NΒ² point-to-point wires, each carrying 64+ bits, each needing drivers strong enough to traverse the chip in under a clock period. At 4 GHz, a cycle is 250 picoseconds. Light travels about 7.5 cm in that time in silicon β and signals are much slower. On a modern die, you physically cannot bypass from a unit on one side of the core to a unit on the other in one cycle.
The solution: clustered bypass. CPUs group execution units into clusters (often called "domains" or "issue clusters"). Within a cluster, bypass is single-cycle. Between clusters, you pay an extra cycle of latency. Intel's Sunny Cove and AMD's Zen 4 both partition their integer and FP/vector domains this way β crossing between them costs 1β2 extra cycles.
Concrete example: the FP-to-integer penalty. On Zen 4, a vmovd eax, xmm0 (move a float-domain value into an integer register) costs 3 cycles, not 1. The FP cluster computes the value, then it must traverse a cross-domain bypass path before integer instructions can consume it. This is why hand-tuned codecs avoid mixing scalar integer and SIMD math on the same critical path β even though the instructions are "fast," the cross-domain hop wrecks latency.
Bypass levels. Modern x86 cores typically expose three tiers:
Rule of thumb: if you chain operations on a latency-critical path, keep them in the same domain. A dependency chain of 10 integer ops takes ~10 cycles. Cross domains twice and the same chain takes 12β14 cycles β a 20β40% slowdown for the same logical work.
Why not just make bypass universal? Engineers have tried. The wire delay scales worse than the logic delay, and at 5+ GHz the bypass network becomes the cycle-time bottleneck. Clustering is a deliberate retreat: accept occasional 1-cycle penalties so the common case can stay fast.
Hacker News Deep Cuts
2026-05-24
Link: https://github.com/orgs/community/discussions/51573
HN Discussion: 1 points, 0 comments
This is the kind of quiet, infrastructure-level story that should be raising alarms across every security team relying on GitHub's built-in tooling β but it's sitting at one point with zero comments. The linked thread is a GitHub Community discussion (#51573) reporting that Dependabot and code scanning security alerts are silently failing to deliver notifications. Not malformed. Not delayed. Justβ¦ not arriving.
If you're a maintainer or a security engineer, the implications are uncomfortable. The entire premise of GitHub's security suite β Dependabot alerts, secret scanning, CodeQL findings β rests on the assumption that when something bad is detected, the right humans get pinged. Email, web notifications, mobile push: if those channels are dropping messages without any visible error, then your CVE response window isn't what your dashboard says it is. You might be sitting on a critical vulnerability with the alert technically generated but never seen.
What makes this worth a closer look:
The thread itself is community-driven, which means it's the canonical place where affected users compare notes, post repro steps, and (eventually) extract a response from GitHub staff. Even if you're not currently affected, the discussion is worth scanning to understand the failure mode β whether it's tied to org-level notification settings, specific alert types, or a broader delivery pipeline regression.
The broader lesson, beyond GitHub specifically: any security control whose effectiveness depends on a notification channel needs an independent heartbeat. A weekly synthetic alert that you confirm receipt of. A scheduled job that diffs the Security tab against what your team has actually triaged. Otherwise you're trusting the pipe, and pipes leak quietly.
HN Jobs Teardown
2026-05-24
Source: HN Who is Hiring
Posted by: jrudolph
Of the ten postings, meshcloud's is the most revealing because its stack choices are unusually specific and its product thesis β multi-cloud governance for enterprises managing "thousands of AWS Accounts, Azure Subscriptions and GCP Projects" β sits at exactly the friction point that defines mid-2020 enterprise cloud adoption.
The stack tells a story. Kotlin + Spring + Angular + TypeScript is a classic JVM-enterprise pairing β boring in the best way, optimized for hiring senior engineers out of the German/EU enterprise talent pool rather than chasing trendy frameworks. But the outlier is RavenDB. Picking a niche .NET-origin document database over MongoDB or Postgres is a deliberate bet: RavenDB's strengths are ACID multi-document transactions and complex indexing β exactly what you need when you're modeling deeply nested IAM policies, account hierarchies, and audit trails across three cloud providers. The choice signals they're solving a data-modeling problem, not a scale problem.
What it reveals about the company. They're hiring three roles simultaneously β Fullstack, Frontend (with ngrx, implying complex client-side state), and Cloud Engineers spanning all three hyperscalers plus Kubernetes. That breadth says they're past prototype stage and building out a real platform team, but small enough that one posting covers everything. The product pitch β "DevOps Teams can enjoy private & public clouds without obstructions" β is selling to platform/security teams who are the obstruction. That's a sophisticated buyer.
Skills and trends highlighted:
Green flags: Onsite and remote offered (rare for a Frankfurt company at this date β the post lands just as COVID forces the issue). Honest, specific stack listing rather than buzzword soup. Clear customer profile ("largest enterprises in the world").
Red flags: No mention of funding stage, team size, or comp. "Thousands of accounts" customers usually means long enterprise sales cycles β engineers should expect slow feedback loops from real users. RavenDB expertise is genuinely scarce, so onboarding will be steep, and you're betting on a vendor whose community is a fraction of Postgres or Mongo.
Daily Low-Level Programming
2026-05-24
Every modern x86 core ships with a Performance Monitoring Unit (PMU): a bank of hardware counters that tick on micro-architectural events the ISA otherwise hides. When you run perf stat ./a.out, you're not sampling β you're reading silicon registers that the CPU updated for free, in parallel with your code.
The PMU has two register types: fixed-function counters (always count one thing β instructions retired, core cycles, reference cycles) and general-purpose counters (programmable: pick an event from a per-microarchitecture list, write its code to IA32_PERFEVTSELx, and the matching IA32_PMCx starts incrementing). Skylake has 3 fixed + 8 GP counters per logical core; with hyperthreading on, that halves to 4 GP per thread.
The killer feature is PEBS (Precise Event-Based Sampling). A naΓ―ve interrupt-on-overflow fires somewhere after the event β typically dozens of instructions later, because of out-of-order execution. PEBS instead has the CPU itself write a record (RIP, registers, latency, data address) into a kernel buffer when the counter overflows, attached to the actual retiring instruction. That's how perf record -e cache-misses:pp can point at the exact load that missed.
Concrete example. You have a hash table with mysterious 8% slowdown. perf stat -e cycles,instructions,LLC-load-misses,dTLB-load-misses ./bench shows IPC of 0.4 (terrible) and 12M LLC misses on 200M loads β 6% miss rate. Switch to perf record -e LLC-load-misses:pp and the report fingers one line: the next pointer dereference during chain traversal. The cache line holding next is in a separate allocation from the key. Inline the key into the node β IPC jumps to 2.1.
Rule of thumb. An L3 miss costs ~200β300 cycles on modern Xeons. If LLC-load-misses Γ 250 / cycles > 0.2, you're memory-bound and no amount of micro-optimization will help β fix layout. Conversely, if branch-misses Γ 15 / cycles > 0.1, you're front-end-bound on mispredicts.
Gotchas. Counters are per-core, not per-process β the kernel multiplexes them when you ask for more events than counters exist, and the displayed values are scaled estimates (note the "(50.00%)" in perf output). Virtualization usually disables the PMU entirely unless the hypervisor explicitly exposes it (kvm -cpu host,+pmu). And event names like cache-misses are kernel aliases that map to different raw events per microarch β perf list shows what's actually wired up.
Reddit Small Subs
2026-05-24
Subreddit: r/retrobattlestations
Discussion: View on Reddit (160 points, 19 comments)
This post is a side-by-side video comparison of a late-90s PC game running under two different rendering paths on period-correct hardware: a Pentium-II 266MHz with 128MB of RAM and a 3D Blaster Voodoo Banshee 16MB. One pane shows the CPU-only software renderer; the other shows the same game rendered via Direct3D using the Banshee's hardware 3D pipeline.
What makes the clip educational is that it makes a piece of computing history visceral. In the mid-to-late 90s, 3D acceleration was a genuine paradigm shift, and this comparison lets you see exactly what changed:
The Voodoo Banshee is itself a fascinating artifact: 3dfx's attempt to combine the Voodoo2's 3D pipeline with a 2D core on a single chip, eliminating the need for a passthrough cable to a separate 2D card. It was a transitional product on the road from add-in 3D boards to the integrated GPUs we take for granted today.
For anyone who didn't live through it, this short video communicates more about the 1998-era hardware acceleration revolution than a chapter of text could. For those who did, it's a sharp reminder of how much hidden CPU work the software path was doing β and how transformative dedicated silicon felt the first time you flipped that toggle in the game's options menu.
RFC Deep Dive
2026-05-24
Every engineer has typed X-Forwarded-For, X-Frame-Options, or X-Mailer without questioning the leading X-. That two-character convention is the subject of one of the IETF's most charmingly self-correcting Best Current Practice documents β a short RFC that essentially says "we were wrong for thirty years, please stop."
The original idea. Dave Crocker's RFC 822 (1982) introduced the X- prefix for email headers as a polite way to mark something experimental or private: anything starting with X- was guaranteed never to collide with a future standard header. The convention spread virally β into MIME content types (application/x-www-form-urlencoded), HTTP, SIP, vCard, LDAP, and beyond. It felt principled: a clear namespace boundary between "official" and "vendor."
The problem it created. Experimental things have an awkward habit of succeeding. X-Forwarded-For became ubiquitous. X-Archived-At shipped in millions of mailing-list messages. application/x-gzip was everywhere. When the IETF eventually wanted to standardize these, it faced a brutal choice:
Forwarded per RFC 7239) and live with a decade where parsers must handle both spellings forever.X- name, which permanently lies about the field's status β it's standardized but still looks experimental.Either way, you get the "two-name problem." Implementers must read both X-Foo and Foo; senders must guess which the recipient understands; specifications fill up with compatibility clauses. The X- prefix wasn't a namespace, it was a trap.
What RFC 6648 actually says. Three recommendations, in plain language:
X- as special in new protocols. Don't carve out an "experimental" namespace at all.X- or similar markers. Pick a good name and use it from day one. If the field gets standardized, the name stays valid.X- headers should be left alone β flag day renames cause more pain than they cure.The reasoning is subtle. A name should describe what the parameter does, not who blessed it. Standardization status is metadata that belongs in registries (IANA), not in the wire syntax. Once you internalize this, the X- prefix looks like committing your build number into every source file.
The lovely backstory. Dave Crocker, who authored the original RFC 822 convention in 1982, is a co-author of the RFC deprecating it thirty years later. Few standards bodies are willing to publish "the thing my younger self invented was a mistake, here's why" β fewer still get the original author to sign the death certificate. Mark Nottingham (HTTP working group chair) and Peter Saint-Andre (XMPP) brought the cross-protocol perspective.
Why it still matters. Walk through any modern HTTP response and you'll see the lesson half-learned: Content-Security-Policy, Strict-Transport-Security, and Permissions-Policy all shipped without the prefix β direct descendants of this RFC. Meanwhile X-Frame-Options, X-Content-Type-Options, and X-XSS-Protection remain as fossils, and the Forwarded / X-Forwarded-For coexistence is exactly the mess RFC 6648 predicted. If you're designing a header, query parameter, JSON field, or DNS TXT format today: pick a real name, register it if appropriate, and skip the prefix.
Stack Overflow Unanswered
2026-05-24
The student is using arm-linux-gnueabi-gcc to assemble and link two ARM assembly files (memory.s and io.s) for a university course. Everything works in the default little-endian mode, but adding -mbig-endian β purely so that .data values display in big-endian order β breaks the link with:
libgcc_s.so.1: error adding symbols: file in wrong format
Why this is interesting: it exposes a misunderstanding that even experienced engineers occasionally hit. The -mbig-endian flag is not a cosmetic toggle on the data section β it switches the entire ABI/EABI variant the compiler targets. ARM EABI has two distinct, incompatible variants (armeb and arm), each with their own ELF EI_DATA byte, instruction encoding endianness for fetched words, and β critically β their own prebuilt system libraries. The toolchain prefix arm-linux-gnueabi- ships only the little-endian libgcc_s.so.1. When you flip to big-endian, the linker dutifully tries to pull in the same multilib path's libgcc and gets back an ELF whose e_ident[EI_DATA] says little-endian. Mixing endiannesses in one executable is forbidden, so ld rejects it with the famously cryptic "wrong format" error.
Direction toward a solution:
arm-linux-gnueabihf built with --with-multilib-list=... including be, or the dedicated armeb-linux-gnueabi- cross compiler.-nostdlib -nostartfiles and provide their own _start. This sidesteps the libgcc dependency entirely..byte directives to lay bytes out manually, or post-process with objcopy --reverse-bytes=4 on the section.Gotchas:
qemu-armeb, not qemu-arm.-mbig-endian flag must be passed to both compile and link steps; passing it only to one produces this same error.gnueabi distribution simply doesn't ship.
Daily Software Engineering
2026-05-24
In a distributed system, a node that has crashed and a node that's just slow look identical from the outside: silence. The heartbeat pattern turns that silence into a signal. Each node periodically sends a small "I'm alive" message to peers (or to a coordinator), and the absence of those messages within a deadline is treated as failure.
The mechanics are simple, but the tuning is where engineers get burned. You pick two numbers: the heartbeat interval (how often to send) and the timeout (how long to wait before declaring a node dead). Set them too tight and you'll false-positive every time the network hiccups, triggering needless failovers. Set them too loose and you'll keep routing traffic to a corpse.
Rule of thumb: timeout should be at least 3Γ the heartbeat interval, plus a margin for network jitter. If you heartbeat every 1 second, don't declare dead until at least 3β5 seconds of silence. This tolerates one or two dropped packets without flapping. For cross-region links, multiply by 5β10Γ to account for higher latency variance.
Real-world example: Kubernetes uses heartbeats from the kubelet to the control plane. Each node sends a NodeStatus update every 10 seconds. After 40 seconds without one, the node is marked NotReady. After 5 more minutes, pods get evicted. That long eviction delay is deliberate β a transient network blip shouldn't drain a node and reschedule 50 pods, because the cure (mass rescheduling) is worse than the disease (a brief outage).
Three pitfalls worth internalizing:
Phi Accrual, used by Cassandra and Akka, is worth knowing about: instead of a hard timeout, it outputs a continuous suspicion level based on the statistical distribution of past heartbeat intervals. You set a suspicion threshold, not a timeout, and the detector adapts to actual network conditions.
Tool Nobody Knows
2026-05-24
You have SSH access to a jumpbox sitting inside a private network. From your laptop you want to reach the database at 10.4.7.22, the internal wiki at wiki.corp.lan, and three Kubernetes services nobody bothered to expose. The classic answers all hurt:
ssh -L 5432:db.corp:5432 β fine for one port. Now do twelve.ssh -D 1080 + SOCKS proxy β only the apps that grok SOCKS will use it. psql won't. kubectl won't.sshuttle solves this. It needs only SSH access and a working Python on the remote side. No root on the server. No tun/tap. It rewrites your local firewall (iptables on Linux, pf on macOS) to redirect matching traffic into a TCP-over-SSH session, where a Python helper on the remote replays it onto the target network.
# Forward the entire internal corp network through a bastion
sshuttle -r bastion.corp.example 10.0.0.0/8 192.168.0.0/16
# Forward EVERYTHING β full default-route VPN
sshuttle -r me@bastion 0.0.0.0/0
# Include DNS so internal hostnames resolve via the remote
sshuttle --dns -r me@bastion 0/0
# Forward a subnet but punch a hole for your local LAN
sshuttle -r me@bastion 0/0 -x 192.168.1.0/24 -x 127.0.0.0/8
# Auto-detect remote subnets and forward only those
sshuttle -Nr me@bastion
The killer trick is -N: it reads /proc/net/route on the remote and tunnels exactly the subnets that side is connected to. No more "what's the CIDR again?"
Why it beats ssh -D: SOCKS only works for applications that explicitly use it. sshuttle works for everything β your browser, psql, kubectl, mosquitto_sub, a random Go binary β because it intercepts at the kernel level. Your apps don't know they're being tunneled.
Why it beats real VPNs: no admin privileges on the remote. If you can ssh user@host and run python3, you have a VPN. Sudo is required locally (to write firewall rules), but that's it.
The TCP-over-TCP fix: a naive SSH tunnel runs TCP inside TCP, which produces ugly stalls when both layers retransmit. sshuttle terminates TCP locally, sends a stream of frames to the remote, and the remote opens fresh TCP connections to the targets. Latency is real but the pathological collapse case is gone.
Practical session:
# In a separate terminal β sshuttle holds the foreground
$ sshuttle --dns -Nr [email protected]
client: Connected.
# In another shell, just use the network like you're inside it
$ dig +short db-master.corp.lan
10.4.7.22
$ psql -h db-master.corp.lan -U analytics
$ kubectl --context=corp get pods
$ curl https://wiki.corp.lan/
Ctrl-C tears down the firewall rules cleanly. There is no daemon to leak, no config file to forget, no certificate to rotate. When the bastion goes down, sshuttle exits and your laptop is back to normal in milliseconds.
Two warts worth knowing: it can't tunnel UDP without --method=tproxy (root on the remote, defeats the point), and on macOS recent OS updates occasionally break pf integration β pin a known-good version. Otherwise, it has been the same five-flag tool since 2010.
What If Engineering
2026-05-24
Pumped hydro is the cheapest grid storage we have, but it needs mountains. What if we used the ocean as the lower reservoir β building a sea-walled lagoon that runs reversible turbines on the tide for baseload, and pumps water out (or in) to store surplus wind and solar? Call it a tidal lagoon battery.
Picture a 100 kmΒ² lagoon walled off from the sea β roughly the footprint of Swansea Bay's proposed scheme, scaled up 5Γ. Average tidal range on the UK coast: ~7 m. The trick is that we don't just harvest the tide; we overdrive the head difference with surplus renewable power.
Energy from a hydraulic head is E = Ο Β· g Β· V Β· h. If we pump the lagoon down by an extra 5 m below low tide using surplus wind:
Stack that on top of the natural tidal harvest (~400 MW average for a lagoon this size) and you get a hybrid that does both baseload and dispatchable storage. The UK currently has ~30 GWh of pumped hydro at Dinorwig and friends β three of these lagoons match the entire national fleet.
A 30 km perimeter wall in 15 m of water needs to resist a 5 m differential head plus storm surge. Hydrostatic pressure at the base: P = Οgh β 150 kPa over 15 m, giving a horizontal thrust of ~1.1 MN per meter of wall. That's manageable with a rubble-mound + concrete caisson design (the Dutch Delta Works hit similar loads), but the materials bill is brutal: roughly 40 million tonnes of rock and concrete β about 1% of global annual cement production for one site.
You want bulb turbines (like La Rance, France, running since 1966) that pump and generate. To handle 2.6 GWh over a 6-hour discharge, you need ~430 MW of turbine capacity. La Rance's units are 10 MW each, so ~40 turbines per lagoon. Each one is a 7.5 m diameter steel beast costing ~$40M. Turbines alone: $1.6B.
Here's the part the physics doesn't tell you: a 5 m artificial tidal range on top of the natural cycle destroys the intertidal mudflat ecosystem. The lagoon floor cycles between submerged and exposed on a 12-hour clock instead of a tidal one, and salinity stratifies. La Rance saw silt accumulation jump 5Γ and lost most of its native flatfish within a decade. Any real proposal needs a "minimum sympathetic cycle" mode β probably cutting usable storage by 30-40%.
Capex: roughly $8-12B per lagoon (wall + turbines + grid tie). At 2.6 GWh Γ 300 cycles/year Γ $80/MWh arbitrage = $62M/year revenue, plus ~$280M from baseload tidal. Payback: ~25 years. Comparable to nuclear, half the carbon, and the wall lasts 120+ years.
Wikipedia Rabbit Hole
2026-05-24
Wikipedia: Read the full article
In 1859, a Dutch physicist named Pieter Rijke discovered something that shouldn't have been possible: a glass tube that sings when you heat a wire inside it. No moving parts. No electronics. Just a vertical pipe, a heated metal gauze placed in the lower quarter, and suddenly β a loud, pure tone fills the room, sometimes painfully so. Remove the heat source, and the singing stops. Place the gauze in the upper half of the tube, and it refuses to sing at all.
This is the Rijke tube, and it's one of the earliest and most accessible demonstrations of thermoacoustic oscillation β the conversion of heat directly into sound. The physics is elegant: air rises through the heated gauze by natural convection. As a sound wave forms in the tube, it alternately compresses and rarefies the air. When the compression phase coincides with air passing through the hot gauze, that parcel gets heated at the moment of maximum density, dumping energy into the wave. The wave grows. The tube sings.
This is governed by Rayleigh's criterion, formulated by Lord Rayleigh in 1878: if heat is added to a gas at the moment of greatest compression, oscillations are amplified. If added during rarefaction, they're damped. It's why the gauze must sit in the lower half β that's where the compression phase aligns with the upward airflow.
Here's where it gets interesting. This charming Victorian physics demonstration is the same phenomenon that destroys rocket engines. Combustion instabilities in liquid-fueled rockets β including ones that plagued the F-1 engines of the Saturn V β are essentially giant, catastrophic Rijke tubes. The combustion chamber is a resonant cavity; the flame is the heat source; if the heat release synchronizes with pressure oscillations, the engine can shake itself to pieces in milliseconds. NASA engineers spent years and detonated dozens of test engines learning to suppress this. Gas turbine designers fight the same battle today.
The flip side is that the same effect can be useful. Thermoacoustic engines run the Rijke principle in reverse and forward: heat β sound β mechanical work, or sound β temperature gradient (refrigeration with no moving parts). NASA has tested thermoacoustic Stirling devices for deep-space power because they have essentially nothing to wear out. Researchers have built fridges powered by waste heat that contain only gas and a stack of mesh β no compressor, no refrigerant pump.
You can build a Rijke tube in an afternoon. A length of steel pipe, a piece of stainless steel mesh, and a propane torch will get you a tone loud enough to annoy your neighbors. The pitch depends only on the tube length β it's the fundamental of an open pipe, exactly like an organ flue pipe, except the "wind" is buoyancy and the "reed" is a glowing hot screen.
Daily YT Documentary
2026-05-24
Channel: Bright history (131 subscribers)
Long before steel pipelines crisscrossed the American West, 19th-century engineers solved a brutal logistics problem with an almost absurdly elegant invention: the wooden flume. These were elevated water highways β V-shaped troughs of planked lumber, sometimes stretching for dozens of miles across canyons and mountain ridges, carrying not just water but entire logs, ore, and supplies down from inaccessible terrain.
This video from Bright history dives into how flumes worked as a kind of pre-industrial gravity-powered conveyor system. Lumberjacks felled timber high in the Sierras, dropped the logs into the flume, and let physics deliver them to sawmills in the valley β no mules, no roads, no railways needed. Some flumes even doubled as transportation: workers would ride them down in V-shaped boats at terrifying speeds, a precursor to the log flume rides at modern theme parks.
What makes the topic genuinely educational is the engineering tradeoffs: maintaining grade across uneven terrain, calculating water flow to keep heavy logs moving without jamming, and the constant battle against rot, leaks, and wildfire. It's a forgotten chapter of infrastructure history that shows how creative people got before steel and diesel made brute force cheap.
Daily YT Electronics
2026-05-24
Channel: Tamil Electro Lab (253 subscribers)
Commercial component testers like the M328 are everywhere on AliExpress, but building one yourself is a great way to understand how they actually identify parts. This project uses an ESP32 paired with a TFT display to detect and classify LEDs, resistors, diodes, and both NPN and PNP transistors in real time.
The underlying technique is clever: by applying small test voltages across three probes in different combinations and measuring the resulting currents via the ESP32's ADC, the firmware can deduce what kind of component is connected and how it's oriented. For a transistor, that means identifying base, collector, and emitter pins automatically β a genuinely useful skill to understand if you've ever pulled an unmarked TO-92 out of a junk bin.
The ESP32 is a smart choice here because it has enough ADC channels and processing headroom to handle the measurements and drive a TFT display simultaneously, all for a few dollars. Viewers should come away with a clearer picture of how semiconductor junctions behave under bias, how to multiplex measurement probes via GPIO, and how to present results on a graphical display. From a very small channel, but the project is substantive and the educational value is real.
Daily YT Engineering
2026-05-24
Channel: Everyday Metallurgy (2340 subscribers)
Metal Injection Molding (MIM) sits in a strange gap in manufacturing education β it's not quite casting, not quite powder metallurgy, not quite plastic injection molding, but borrows from all three. Most coverage online stops at "you mix metal powder with a binder and inject it like plastic," which leaves out the parts that actually matter: how the binder is debound without collapsing the green part, why sintering shrinkage is so dramatic (often 15-20%), and how engineers design around that predictable shrink.
This video promises to tackle the questions that the surface-level explainers skip. For anyone who's wondered why MIM is the go-to for small, complex stainless or tool-steel parts (think surgical instruments, firearm components, watch cases) but never made sense for large geometries, this is the kind of deep-dive that connects the process physics to the design constraints.
Everyday Metallurgy is one of the more substantive small channels in this space β at 2,340 subscribers it's the largest of today's candidates, but the content style leans toward genuine technical explanation rather than visual filler. The framing ("questions nobody has answered before") is mildly clickbaity, but the topic itself rewards the depth.
Daily YT Maker
2026-05-24
Channel: HMDWork (2530 subscribers)
A router table is one of those shop upgrades that transforms a handheld tool into a precision machine, and building your own is a rite of passage for woodworkers who want to understand why commercial tables cost what they do. This build from HMDWork walks through a stripped-down, practical version that should be achievable with materials most hobbyists already have on hand.
The interesting engineering challenges in any router table build are fence flatness, insert plate registration, and getting the router mounted dead-square to the top so bit projection translates predictably to cut depth. Watching how a smaller maker tackles these problems β often with clever low-cost solutions rather than the machined aluminum found on premium tables β tends to be more instructive than glossy commercial reviews.
It is worth noting this video carries the hashtag-heavy title format that often signals filler content, and the rest of today's candidates leaned heavily toward Shorts, clickbait, and compilation reels. Among a weak lineup, a real shop project still beats a 30-second "genius hack" clip. If the execution holds up, viewers should come away with both a usable jig design and a better intuition for what makes a router table accurate.
Daily YT Welding
2026-04-29
Channel: AMR Motorsports (144 subscribers)
Note: this batch of candidates is unusually weak β most entries are repetitive promotional shorts for the same 3D welding table product, hashtag-spam titles, or background-music build montages with no instruction. This pick is the least bad option rather than a standout.
AMR Motorsports continues an ongoing shop project: a rolling welding cart designed to hold both a MIG welder and a plasma cutter on a single mobile platform. In this installment they're cutting mounts on an evolution-style cold saw β a tool worth seeing in action if you've only ever used an abrasive chop saw, since the cold saw produces clean, square, burr-free cuts on structural steel without the shower of sparks.
The value here is watching a small shop work through the fixturing problem of mounting two different machines that have different footprints, weight distributions, and cable-routing needs onto one frame. Cart builds are a rite of passage for hobbyist fabricators, and seeing someone else's mount geometry and bracket layout choices is often more useful than a polished tutorial.
Short, real, and rooted in an actual working build rather than a product pitch.
