26 newsletters today.
Abandoned Futures
2026-08-23
In the early 1960s, NATO issued NBMR-3 — Basic Military Requirement 3 — for a supersonic V/STOL strike fighter that could disperse from bombed-out runways and operate from forest clearings. The assumption was chillingly simple: in the first hours of a Warsaw Pact assault, every fixed airbase in West Germany would be a smoking crater. Whoever could keep flying without a runway would win the air war. Britain answered with the Hawker P.1154. France answered with something far more audacious: the Dassault Mirage IIIV.
The airframe was recognizably a Mirage III delta, but stretched and reinforced to house eight Rolls-Royce RB162-1 lift jets buried vertically in the fuselage — four in front of the wing, four behind — plus a single SNECMA TF-104 (later TF-106) turbofan for cruise thrust with a swiveling nozzle for transition. Nine engines total. The lift jets were extraordinary pieces of engineering: 2,000 lb thrust each at 125 lb of engine weight — a thrust-to-weight ratio of 16:1, achieved by using fiberglass compressor blades and running for only 90 seconds at a time.
The prototype Mirage IIIV-01 hovered for the first time on February 12, 1965, at Melun-Villaroche. On March 24, 1966, the second prototype, IIIV-02, completed a full transition from hover to horizontal flight. Then, on September 12, 1966, it hit Mach 2.04 — becoming the only VTOL aircraft in history to exceed Mach 2. The F-35B does Mach 1.6. The Yak-141 barely scraped Mach 1.4. Nothing since has matched what a French delta with nine engines did in a single afternoon over Île-de-France.
Two months later, on November 28, 1966, IIIV-02 crashed on landing. The pilot survived. The program did not — at least not politically. The problems were brutal and honest:
France cancelled in 1966. NBMR-3 collapsed. Only the subsonic Harrier survived, by accepting a single vectored-thrust engine and Mach 0.9 as the price of not carrying dead weight.
Why revisit it now? Because every problem that killed the IIIV has a 2026 answer. Hot gas reingestion is solvable with CFD-optimized lift fan placement and cooled exhaust — exactly what the F-35B's Rolls-Royce LiftSystem proved works. Dead-weight lift engines are obsolete: modern electric ducted fans powered by a turbogenerator can spin down and feather in cruise, contributing zero drag. Composite airframes cut the structural weight that forced the IIIV to carry eight lift jets in the first place. And fly-by-wire transition control — impossible with 1966 hydromechanical linkages — makes the hover-to-cruise handoff routine rather than test-pilot heroics.
The IIIV proved that supersonic VTOL is aerodynamically real. What it lacked was electronics, materials, and a propulsion architecture that didn't punish you for hovering. We have all three now. A modern hybrid-electric supersonic VTOL, sized for dispersed operations against a peer adversary shooting cruise missiles at every runway in the Pacific, is exactly the airplane the Marines and the Taiwan Strait scenario are quietly begging for.
ArXiv Paper Digest
2026-08-23
Authors: Jacob Nielsen, Danial Namazifard, Lukas Galke Poech, Peter Schneider-Kamp
ArXiv: 2608.19889v1
PDF: Download PDF
Imagine if every open-source language model on the planet — Llama, Mistral, Qwen, all of them — depended on a single company's software library to even load. If that library disappeared tomorrow, a huge chunk of the AI ecosystem would grind to a halt. That's roughly the situation today: the vast majority of open models are defined in code that targets one specific Python framework (Hugging Face's transformers), and porting a model to run efficiently on different hardware or in a different training system is a painful, error-prone manual job.
This paper introduces Axon, a small programming language purpose-built for describing neural network architectures — particularly large language models — in a way that isn't chained to any single framework.
The core ideas:
The why matters more than the what. Right now, when a researcher invents a new attention mechanism or a hardware team builds a new accelerator, everyone has to reimplement the same models over and over, and each reimplementation risks subtle bugs that silently degrade quality. Axon tries to break this cycle by making the model architecture a portable, verifiable artifact — closer to a mathematical specification than a piece of PyTorch code.
The key insight is treating model architectures as a compilation problem rather than a scripting problem. Once you have a typed intermediate representation, you unlock the same benefits compilers give traditional software: portability across targets, catch-bugs-at-compile-time safety, and machine-checkable optimizations.
Daily Automotive Engines
2026-08-23
The cylinder head has to survive the most violent event in your engine — combustion pressures that can spike over 2,000 psi in a boosted build — and the only thing holding it against the block is a ring of fasteners. Choosing between head bolts and head studs is one of the most consequential decisions in engine assembly, and the physics behind it is more nuanced than "studs are stronger."
Head bolts are threaded fasteners that pass through the head, thread into the block, and are tightened by rotating the bolt itself. That rotation does two things simultaneously: it stretches the bolt and twists it. The torsional load — up to 30% of the total stress — is wasted work that doesn't contribute to clamping force. Worse, most modern OEM head bolts are torque-to-yield (TTY), meaning they're designed to stretch permanently into their plastic range. They achieve consistent clamp load but can only be used once.
Head studs are permanent threaded posts installed into the block first, hand-tight. The head drops over them, and nuts are torqued down onto the studs. Because the stud doesn't rotate during torquing, all the applied torque converts to axial stretch — no torsional loss. The stud sees pure tension, which is what steel handles best.
Real-world example: A stock Subaru EJ257 head bolt provides roughly 12,000–14,000 lbs of clamp load per fastener. Swap to ARP 625+ head studs (custom aged Inconel-derived alloy) and you're at 18,000–22,000 lbs per fastener at the same torque spec. On a boosted EJ pushing 30+ psi, cylinder pressures routinely lift stock head bolts, causing the infamous "lifted ringland" or head gasket failure between cylinders. Studs eliminate the lift.
Rule of thumb for clamp load: Peak cylinder pressure (psi) × bore area (in²) = lifting force per cylinder. For a 4-inch bore at 2,500 psi peak: π × 2² × 2,500 = ~31,400 lbs of lifting force distributed across 4–6 fasteners around that cylinder. You need at least 2× that clamp load as a safety margin to prevent gasket fretting.
The tradeoffs: studs make head removal harder (the head lifts straight up over long posts, requiring engine-out on some tight engine bays like FWD transverse V6s), they're more expensive, and on aluminum blocks you must be careful not to over-torque and pull the block threads. Bolts thread deeper into fresh material each install; studs stay put and can gradually stretch the block's threads over repeated head jobs.
Daily Debugging Puzzle
2026-08-23
This function shows how many days until a task is due. A user in Los Angeles (PDT, UTC-7) types tomorrow's date into the form.
function daysUntil(dueDateStr) {
const due = new Date(dueDateStr);
const today = new Date();
const MS_PER_DAY = 86_400_000;
return Math.ceil((due - today) / MS_PER_DAY);
}
// It's the afternoon of 2026-08-23 in LA. User picks tomorrow:
console.log(daysUntil('2026-08-24')); // prints 0 — "due today"?!
// Bizarrely, the "wrong" format works:
console.log(daysUntil('2026/08/24')); // prints 1 — correct
// And the unit test that passed at 10:00 UTC fails at 20:00 UTC.
// CI is green in London and red in San Francisco.
The ECMAScript spec pins two contradictory rules onto new Date(string):
YYYY-MM-DD) is parsed as UTC midnight.So for a Los Angeles user, new Date('2026-08-24') resolves to 2026-08-23T17:00:00 local time. At 3pm on Aug 23, "tomorrow" is only two hours away — (due - today) / MS_PER_DAY is roughly 0.08, and Math.ceil rounds it to 1… except when today is already past 5pm local, at which point the difference goes negative and Math.ceil returns 0. The bug is time-of-day sensitive and timezone sensitive, which is why it slips through every test the developer runs on their laptop and lights up only in customer bug reports from the West Coast.
The '2026/08/24' version "works" because slashes force local-time parsing, so both endpoints share the same zone. It's the same bug in a lucky disguise.
Never let the Date constructor guess. Parse the components yourself and use the multi-argument form, which is always local time. Normalize both endpoints to local midnight so DST hour shifts don't leave you with a 23h or 25h diff:
function daysUntil(dueDateStr) {
const [y, m, d] = dueDateStr.split('-').map(Number);
const due = new Date(y, m - 1, d); // local midnight
const today = new Date();
today.setHours(0, 0, 0, 0); // local midnight today
const MS_PER_DAY = 86_400_000;
return Math.round((due - today) / MS_PER_DAY);
}
Three things to notice: m - 1 because JavaScript months are zero-indexed (another trap for another day); setHours(0,0,0,0) to strip the wall-clock time from "now"; and Math.round instead of ceil or floor, because on DST transition days the elapsed milliseconds between "local midnight today" and "local midnight tomorrow" is not 86,400,000 — it's 82,800,000 or 90,000,000. Rounding absorbs that hour; ceiling and floor turn it into an off-by-one.
If you're serving a global audience and the due date is meant to be a specific instant (not "midnight in the user's zone"), do the opposite: force both endpoints to UTC, and require the user's client to convert on display. The rule is not "local is right" or "UTC is right" — it is "the two sides of the subtraction must agree."
new Date('YYYY-MM-DD') is UTC; new Date(y, m-1, d) is local — mixing the two silently shifts every date by your timezone offset.
Daily Digital Circuits
2026-08-23
Your 3.3V regulator has one job: never let more than 3.3V hit the load. But regulators fail. A pass transistor shorts drain-to-source, and suddenly 12V from the upstream rail is racing toward a chip rated for 3.6V absolute maximum. You have microseconds before every gate oxide on the die punches through. This is what a crowbar circuit is for — it deliberately short-circuits the power rail to ground the instant an overvoltage is detected, blowing the upstream fuse and killing the board rather than the silicon.
The classic implementation uses a silicon-controlled rectifier (SCR) — a four-layer PNPN device that acts like a latching thyristor. Once its gate is triggered, it turns fully on and stays on until the current through it drops below a holding threshold. A zener diode sets the trip voltage: if the rail exceeds (say) 3.9V, the zener conducts, dumps current into the SCR gate, and the SCR fires. Within about 1–2 microseconds, the rail is clamped to under a volt, drawing tens of amps through the SCR. That massive current pops the input fuse in milliseconds, isolating everything.
The design tradeoffs are brutal. Trip too low and you nuisance-trip on legitimate transients (load steps, hot-plug inrush). Trip too high and you fry the downstream chip before you fire. The typical rule of thumb: set the crowbar trip at 15–20% above nominal, and make sure it fires at least 20% below the load's absolute-max rating. For a 3.3V rail feeding a 3.6V-max chip: trip at ~3.9V, fuse rated to blow within 10ms at 3× nominal current.
Real-world example: The original IBM PC AT power supply used an SCR crowbar on the +5V rail with a trip point around 5.7V. The MC3423 overvoltage sensor IC (still sold today, six decades on) triggers an SCR when the sensed rail exceeds an internal reference, with a programmable delay capacitor to reject microsecond glitches. Modern server PSUs still use them on the 12V rail, even though "smart" digital shutdown exists — because a fired SCR takes zero firmware, zero clock cycles, and works when the controller itself has failed.
A subtle detail: the SCR must survive long enough to blow the fuse. If your fuse takes 100ms to open at 30A, the SCR's I²t rating must exceed (30A)² × 0.1s = 90 A²s. Undersize the SCR and it fails open before the fuse fails — leaving the overvoltage still on the rail. The crowbar has one job, and it must finish it.
Daily Electrical Circuits
2026-08-23
A basic two-transistor current mirror has one dirty secret: its output current isn't really constant. As the voltage on the output node swings, the mirror transistor's collector-emitter voltage changes, and thanks to the Early effect, the collector current drifts. The output impedance of a simple mirror is just ro — typically 50–200 kΩ for a small-signal BJT, which sounds high until you're trying to bias a 1 MΩ gain stage and watching your operating point wander with signal swing.
The cascode current mirror stacks a second transistor on top of each mirror transistor. The upper "cascode" transistor shields the lower mirror transistor from output voltage swings, holding its VCE nearly constant. The result: output impedance multiplied by roughly the current gain of the cascode device, giving you an effective rout ≈ gm·ro² — often 10–100 MΩ.
Topology (BJT version): Q1 and Q2 form the standard mirror at the bottom. Q3 and Q4 sit above them as cascodes, with their bases tied together at a bias point roughly 2·VBE above ground (often generated by a diode-connected stack on the reference side). The reference current flows through Q3-Q1; the output current mirrors through Q4-Q2.
The tradeoff: You lose headroom. A simple mirror needs VCE(sat) ≈ 0.2 V at the output. A cascode mirror needs at least VCE(sat) + VBE ≈ 0.9 V — a serious problem for low-voltage designs. The Wilson mirror and wide-swing cascode variants recover some headroom by biasing the cascode transistors closer to their compliance limit.
Real-world example: The tail current source of an op-amp differential input pair. A garden-variety mirror giving 100 kΩ output impedance would let common-mode input swings modulate the tail current by microamps — degrading CMRR to maybe 60 dB. Swap in a cascode mirror with 10 MΩ output impedance and CMRR jumps by 40 dB, easily hitting 100 dB. This is why nearly every precision op-amp (OP27, AD8620, LT1028) uses cascoded bias inside.
Rule of thumb: Output impedance improvement ≈ β/2 for BJT cascodes, or roughly the intrinsic gain (gm·ro, typically 50–500) for MOSFET cascodes. If your simple mirror has 100 kΩ output impedance and β = 200, expect the cascoded version to hit ~10 MΩ. Verify with the design equation rout ≈ ro4·(1 + gm4·ro2).
Daily Engineering Lesson
2026-08-23
A Hall effect sensor exploits a subtle quantum-adjacent phenomenon: when current flows through a thin conductor and a magnetic field passes perpendicular to that current, the Lorentz force pushes charge carriers to one side of the strip. The resulting sideways voltage — the Hall voltage — is proportional to the field strength. Discovered by Edwin Hall in 1879, it stayed a physics curiosity until semiconductors made the effect large enough to be useful.
Modern Hall sensors are integrated circuits: a Hall element plus an amplifier, temperature compensation, and often a Schmitt trigger or linear output stage, all in a TO-92 or SOT-23 package for under a dollar.
Three flavors you'll actually use:
Rule of thumb for current sensing: a Hall-effect current sensor (like the Allegro ACS712) outputs about 66 mV per amp for the 30A version, with the current-carrying conductor passing through the chip's built-in loop. No shunt resistor in the current path means no insertion loss and full galvanic isolation — the sensor never touches the measured circuit.
Concrete example — BLDC motor commutation: A typical brushless DC hobby motor or hard-drive spindle uses three latching Hall sensors spaced 120° around the stator. As the rotor spins, its permanent magnets pass over each sensor in turn, producing a 3-bit Gray-code sequence (like 001 → 011 → 010 → 110 → 100 → 101). The controller reads these three bits and knows exactly which of six commutation states to energize next. This is why cheap BLDCs have five wires from the driver (three phases plus a Hall sensor cable of five: +5V, GND, and three signals).
Watch out for: temperature drift (linear sensors drift ~0.05%/°C — bad for precision current sensing without calibration), stray field pickup from nearby wires (a 100A conductor 5 cm away creates ~4 gauss — enough to fool a sensitive linear sensor), and mechanical alignment (moving the magnet 1 mm can halve the field strength since field falls off with the cube of distance for a dipole).
Forgotten Books
2026-08-23
Book: A handbook of engine and boiler trials and of the indicator and Prony brake. For engineers and technical schools by Thurston, Robert Henry, 1839-1903 (1890)
Read it: Internet Archive
The excerpt available online is unfortunately just the Google Books boilerplate — but the title itself points to a piece of practical wisdom modern engineers have almost entirely forgotten: the Prony brake, a mechanical dynamometer so simple you could build one in an afternoon, yet accurate enough to certify commercial steam engines for sale in the 19th century.
Robert Henry Thurston was no lightweight. He founded the mechanical engineering program at Stevens Institute of Technology, became the first president of the American Society of Mechanical Engineers in 1880, and later ran Cornell's Sibley College. His 1890 handbook was the reference text for the two dominant testing tools of the age: the steam-engine indicator (which drew real-time pressure-volume diagrams on a rotating drum) and the Prony brake.
The Prony brake, invented by Gaspard de Prony in 1821, worked like this:
That's it. No load cells. No electronics. No calibration certificate from a national lab. A dripping bucket of water was often used to keep the wooden brake shoes from catching fire — the entire kinetic energy of the engine converted to heat in the friction band, and any engineer testing a serious engine expected to smell smoke.
Public domain books are our gateways to the past, representing a wealth of history, culture and knowledge that's often difficult to discover.
Google's own boilerplate captures the irony: the Prony brake is that lost knowledge. Modern engine dynamometers cost tens of thousands of dollars and require software. But engineering schools in the 1890s trusted first-year students to measure horsepower to within a percent or two using a plank, a rope, and a spring scale. The measurement is fundamental — force times distance times rotations — and no electronics can improve on the physics.
The technique isn't completely extinct. Small-engine hobbyists and some vocational programs still build Prony brakes to test lawnmower engines and go-karts. But the assumption that a working engineer should be able to build their own instruments — not just buy them — has largely evaporated. Thurston's handbook assumed the opposite: that any competent engineer could construct, calibrate, and interpret their measuring tools from first principles.
The next time you see a dyno chart from a car magazine, remember: the number was invented in 1821, and for most of the industrial revolution, it was measured with a stick and a bucket.
Forgotten Darkroom
2026-08-23
Book: Complete Self-Instructing Library of Practical Photography, Volume X: Negative Retouching, Etching and Modeling by J. B. Schriever / American School of Art and Photography (1909)
Read it: Internet Archive
Long before "Facetune" and the smoothing slider in every phone camera, there was a graphite pencil, a glass negative, and a working professional called a retoucher — a job so central to portrait photography that the American School of Art and Photography devoted an entire volume of its ten-part correspondence course to it.
Look at the table of contents of Volume X and it reads like the syllabus of a plastic surgery residency:
CHAPTER VII. Lesson IV — Applying the Lead to the Regular Negative
CHAPTER VIII. Difficulties — Lesson IV — Removing Imperfections on Negatives
CHAPTER IX. Lesson V — Blending
CHAPTER XII. Lesson VI — Modeling the Forehead
CHAPTER XIV. Lesson VIII — Modeling the Cheek
CHAPTER XVI. Lesson X — Modeling the Lips and Chin
CHAPTER XVIII. Lesson XII — Modeling the Nose, Eyebrows and Shadow Cheek
CHAPTER XX. Lesson XIII — Modeling Rembrandt and Shadow Lightings
This was serious industrial craft. Editor J. B. Schriever's school in Scranton, Pennsylvania was training working photographers by mail — the kind of studio operator who handled every wedding, every graduation, every family portrait in a small American city. And a huge part of their job was modeling: using a fine pencil directly on the emulsion side of a glass-plate negative to lengthen a jaw, soften a forehead, thin a nose, erase a pimple, or brighten a shadowed cheek — one graphite hatch at a time.
The course teaches it as a discipline with rigid progression. Lesson II is nothing but pencil exercises. Lesson III introduces "practice-charts." Only in Lesson IV do you touch a real negative. Lesson V is blending — the ancestor of the Photoshop feather. And the volume acknowledges the same failure modes we still see: the "Difficulties" chapter for Lesson IV is titled Removing Imperfections on Negatives, warning students against overworking a face into something that no longer looks human.
What's striking is that the entire cultural cycle we blame on Instagram — the anxiety about visible pores, the industry of face-thinning, the argument about whether retouched portraits are dishonest — was already fully industrialized a full century before smartphones. There is nothing new about the smoothed cheek. What changed is only who holds the pencil: in 1909, it was a paid specialist working on a single glass plate; in 2026, it is an algorithm applied to a billion faces per second.
The forgotten skill isn't the technique — retouching artists still exist. It's the humility of the curriculum. Schriever's course insists you spend weeks drawing on scrap before you're allowed near a customer's face. Today's beauty filters ship that same power to a twelve-year-old with no lessons at all, no "Difficulties" chapter, and no editor warning them what happens when the modeling goes too far.
Forgotten Patent
2026-08-23
In 1901, a German art historian turned amateur explorer named Hermann Anschütz-Kaempfe was planning something audacious: a submarine voyage under the Arctic ice cap. He hit a problem immediately. Near the poles, magnetic compasses become useless — the field lines dive nearly vertically into the ground, and the iron hull of a submarine warps whatever's left. He needed a compass that ignored magnetism entirely.
His solution was to spin a heavy wheel very fast, mount it so it could pivot freely, and let physics do the rest. A spinning gyroscope resists changes to its axis. Combine that stubbornness with gravity and the Earth's rotation, and the axis will slowly precess until it points at true north — no magnets required. Anschütz-Kaempfe filed German Reichspatent 182,855 in 1904 (granted 1906), covering the first practical gyrocompass. By 1908 the German battleship Deutschland was navigating with one.
An American inventor named Elmer Sperry filed his own gyrocompass patent (US 1,242,065) shortly after, and began selling to the US Navy. Anschütz-Kaempfe sued for infringement. The 1915 case is a footnote in history for one wonderful reason: the expert witness the court called to arbitrate the physics was a 36-year-old patent-office alumnus named Albert Einstein. Einstein sided with Anschütz-Kaempfe. Sperry lost. (Einstein later consulted on improvements to the design.)
For the next 50 years the gyrocompass ran the world's oceans. Every battleship, ocean liner, and submarine at Midway, at Normandy, in the Cold War, steered by a descendant of Anschütz-Kaempfe's spinning brass wheel. The principle then jumped domains: inertial navigation systems in ICBMs and the Apollo Guidance Computer used clusters of gyros and accelerometers to dead-reckon across continents and to the Moon without ever looking outside.
Then the wheels got very, very small.
Modern smartphones don't contain spinning masses. They contain MEMS gyroscopes — silicon tuning forks a few millimeters across, vibrating at tens of kilohertz. When the phone rotates, the Coriolis force deflects the vibrating mass sideways, and capacitive sensors read the deflection as an angular rate. The physics is different from Anschütz-Kaempfe's brass rotor, but the job is identical: measure rotation without depending on magnetic fields.
Every modern device that "knows which way is up" is doing what that 1904 patent did:
The gyrocompass is one of those inventions where the artifact evolved beyond recognition but the idea — rotation as a magnetism-independent reference frame — became load-bearing infrastructure. A German art historian who wanted to see the North Pole ended up building the sensor that tells your phone it's held sideways.
Daily GitHub Zero Stars
2026-08-23
Language: HTML
Among a sea of randomly-named repos pushed this minute, antono4/video-trending-app is one of the few that actually tells you what it is — a video trending application, built primarily in HTML. No stars, no description beyond the name, no topics tagged. Just a fresh push from someone learning to ship.
Video trending apps are a classic learning project for a good reason: they touch every corner of frontend development that a junior dev needs to master. To build one properly, you have to think about:
The fact that this is tagged as an HTML project (rather than JavaScript or TypeScript) suggests the author is keeping it minimal — probably vanilla JS with a static hosting target like GitHub Pages. That's actually refreshing in an era where every tutorial project ships with Next.js, Tailwind, and eighteen npm dev dependencies.
Who might find this interesting? Beginners looking at a peer-level codebase to compare notes with, bootcamp students hunting for portfolio inspiration that doesn't scream "I copied a tutorial," and mentors who like leaving encouraging issues on early-career repos. If you've ever taught someone their first API-driven project, this is exactly the kind of work worth a quick look and a supportive star.
The zero-star, zero-description state means it's genuinely early — a chance to see raw work-in-progress before polish sets in.
Daily Hardware Architecture
2026-08-23
You already know the uop cache (or DSB, on Intel) skips the front-end by caching pre-decoded micro-ops. What's less obvious is that it has a set-associative structure with brutal packing rules, and violating those rules kicks your loop out even when it easily "fits."
On Skylake through Alder Lake, the uop cache holds ~1,536 uops organized into 32 sets × 8 ways × 6 uops per way. But a "way" isn't just 6 uops — it's a line that must satisfy all of these:
The set index is derived from the linear address of the 32-byte window. So two hot 32-byte windows that hash to the same set fight for those 8 ways — classic conflict misses, but at the instruction level.
Concrete example: A tight vectorized loop with 22 uops that happens to straddle two 32-byte lines fits easily by uop count (22 ≪ 1,536). But if the first line contains 19 uops of dense AVX code, it needs 4 ways — exceeding the 3-way limit — and the entire window is marked uncacheable in the DSB. The loop now runs from the legacy decoders at ~4 uops/cycle instead of the DSB's 6 uops/cycle. That's a 33% front-end throughput cliff from adding one instruction.
Rule of thumb: Keep hot loops under 18 uops per 32-byte code window, and align loop entry points to 32 bytes. If perf stat -e idq.dsb_uops,idq.mite_uops shows MITE (legacy decode) uops climbing on a loop you thought was cached, you've hit the way-packing limit, not the capacity limit.
AMD Zen's op cache uses similar per-window packing (8 ops per entry, up to 8 entries per 64-byte window on Zen 4), so the same pathology appears with different constants. The compiler flag -falign-loops=32 exists specifically to dodge this.
Hacker News Deep Cuts
2026-08-23
Link: https://shkspr.mobi/blog/2026/08/death-to-px-long-live-ch/
HN Discussion: 2 points, 0 comments
Terence Eden's blog (shkspr.mobi) is a reliable source of sharp, opinionated web-standards writing, and this post lands on one of the most under-appreciated CSS units in the spec: ch. Most front-end developers reach reflexively for pixels — or, if they're feeling modern, rem — when sizing content containers. But neither unit expresses what we actually care about when laying out prose: how many characters fit on a line.
The ch unit is defined as the advance width of the "0" glyph in the current font. That means max-width: 65ch gives you a column roughly 65 characters wide, regardless of font-size, zoom level, or user font preferences. This maps directly onto a century of typographic research: readable line length sits between 45 and 75 characters. Every time you hardcode max-width: 800px on an article container, you're guessing at that number through a lossy translation layer.
Why this deserves a technical audience's attention:
ch-based layout respects the user's font-size settings and stays legible at 200% browser zoom. Pixel layouts routinely break at accessibility zoom levels because they were sized against an assumed default.clamp() and viewport units, ch lets you build layouts that adapt to both the reader's viewport and their chosen font size — the two axes that matter for reading.ch is often the correct primitive for text-bearing components, while rem stays right for UI chrome.The caveats are worth knowing too. ch is font-dependent, so a column measured in ch against a monospace font will differ dramatically from the same value against a proportional font — which is actually the point, but surprises people. And in variable-width fonts, the "0" width is only an approximation of the average character width. For hard constraints, the newer ic and rex units offer more precision.
This kind of small, well-argued post is exactly what HN used to surface reliably. It's not a framework announcement or a launch, but it changes how you write CSS tomorrow — which is a better ROI than most of what trends on the front page.
HN Jobs Teardown
2026-08-23
Source: HN Who is Hiring
Posted by: wasted_intel
Litmus is a Boston-based email tooling company hiring a Rails developer, with Vue and Ember also in production. On paper, this reads like a boring stack in 2026. In reality, it's one of the most revealing postings in the thread.
The stack tells a story of pragmatic longevity. Rails plus Ember was the canonical SaaS pairing of 2013–2015. The fact that Ember is still in use alongside a newer Vue codebase means Litmus has been shipping continuously for a decade without a rewrite — and they're honest enough to admit the migration is partial. Most companies hide their legacy layer; Litmus lists it in the job ad. That's a green flag for anyone who's tired of "we rewrote everything in Next.js last quarter" churn.
What the domain demands is unusual. Email rendering is one of the last genuinely hostile compatibility environments in software — Outlook still uses Word's HTML engine, Gmail strips CSS, dark mode rules differ per client. That's why their pitch mentions "creating the HTML/CSS, collaborating with others on the design, verifying accuracy with email client screenshots." Building screenshot infrastructure across dozens of email clients is a real distributed-systems problem hiding behind a marketing-tools facade. This is closer to a browser-testing company than a typical SaaS shop.
Signals about company stage:
Red flags: Very little. Perhaps that a company this established still needs to post on HN for a single Rails hire suggests the senior-Rails talent pool is thinning — a trend worth watching. Rails developers with 8+ years of experience are increasingly rare as bootcamps pivoted to React/Node years ago.
Green flags: Named team culture ("smart, curious, supportive"), honest tech disclosure (Ember admission), concrete problem domain, and a fixed application window that respects candidates' time.
Daily Low-Level Programming
2026-08-23
When you read() the first byte of a file, the kernel doesn't fetch just the page you asked for. It also asynchronously issues I/O for pages you haven't asked for yet. That's read-ahead, and it's why your cat huge.log is bottlenecked on disk bandwidth, not on the round-trip latency of every 4KB request.
The mechanism lives in mm/readahead.c and hangs off every file struct as a file_ra_state. It tracks three things: the current read-ahead window size, the position where the window starts, and an "async marker" page inside the window. When your read touches the async marker, the kernel launches the next window before returning your data — so by the time you're done processing this batch, the next batch is already in flight.
The window grows adaptively. First sequential access: 16KB. Confirmed sequential (you hit the marker): doubles to 32KB, 64KB, up to /sys/block/*/queue/read_ahead_kb (usually 128KB). Hit a non-sequential access and the window collapses back to nothing. This is why a purely random-access workload gets zero benefit from read-ahead, while a strictly sequential one gets asymptotic single-syscall throughput.
Rule of thumb: effective throughput ≈ window_size / (seek_latency + window_size/bandwidth). For a spinning disk with 8ms seek and 200MB/s bandwidth, a 4KB window gives ~500KB/s. A 128KB window gives ~15MB/s. Same disk, 30× the throughput, purely from prefetching.
Real-world example: PostgreSQL's sequential scan on a 100GB table on an NVMe drive. Without read-ahead, each 8KB block read costs ~10μs of queueing per request: ~10 seconds of pure latency stacked. With read-ahead pumping 128KB windows, the kernel keeps 32 pages in flight at once, saturating the drive's queue depth. Same query drops from ~30s to ~4s — and PostgreSQL never issued a single explicit prefetch.
You can steer this: posix_fadvise(fd, 0, 0, POSIX_FADV_SEQUENTIAL) doubles the window ceiling. POSIX_FADV_RANDOM disables read-ahead entirely — the right call for a database index scan where prefetching next-page-in-file is pure waste. readahead(fd, offset, len) forces population synchronously.
The pathology to watch: interleaved sequential streams. Two threads reading two files sequentially on the same fd (or heavily seeking within one file) can look non-sequential to the heuristic and collapse both windows. The fix is per-fd file handles or explicit POSIX_FADV_SEQUENTIAL.
read() loop into a pipelined stream by predicting sequential access and issuing the next window's I/O before you ask — but only if the access pattern stays predictable enough for the heuristic to keep the window open.
RFC Deep Dive
2026-08-23
If you have ever configured a modern router, switch, or firewall through anything other than a CLI screen-scrape, there is a good chance YANG was underneath it. YANG ("Yet Another Next Generation") is the data modeling language that finally gave network devices a machine-readable, vendor-neutral way to describe their configuration and operational state. It is the schema layer that made NETCONF, RESTCONF, gNMI, and the whole modern "network as code" movement possible.
The problem it solved. By 2010, network automation was a swamp. SNMP could read counters well enough but was hopeless for writing configuration. Every vendor had a bespoke CLI, and every automation team was writing brittle expect scripts that broke whenever a prompt changed. NETCONF (RFC 4741, later 6241) gave us a transactional XML-based protocol for pushing configuration, but NETCONF alone had no way to say what a valid configuration looked like. You needed a schema language. XML Schema was tried and universally hated for this use case: too verbose, no concept of configuration versus state, no notion of "this leaf only applies when that other leaf is set."
The key design decisions. YANG borrowed its syntax from SMIng (an abandoned attempt to modernize SNMP's SMI) and its structure from network engineers' intuitions about hierarchies. A YANG module defines a tree of container, list, and leaf nodes, roughly matching how you would draw a config on a whiteboard. Some notable choices:
config true) or read-only operational state. This distinction, absent from SNMP and XML Schema, is what makes declarative reconciliation possible.must, when, unique, and leafref statements express cross-tree invariants. A validator can reject bad config before it touches the device.revision stack. Schema evolution is a solved problem, not an afterthought.Why it matters today. YANG is the reason you can talk to a Cisco IOS XR, a Juniper Junos, and an Arista EOS box with the same Python library. OpenConfig, driven by Google and other hyperscalers, publishes YANG models that vendors implement, giving operators a genuine multi-vendor abstraction. gNMI, the streaming telemetry protocol that has largely displaced SNMP polling in large networks, uses YANG paths as its addressing scheme. Kubernetes-native network operators, service meshes doing L4 policy, and even some cloud provider APIs quietly generate their schemas from YANG. Tools like pyang, yanglint, and yangson validate models the same way you would lint code.
The quirky bits. YANG was designed at Tail-f Systems (later acquired by Cisco) largely by Martin Bjorklund, and the language shows a Scandinavian preference for terseness. The syntax deliberately mimics C-style braces rather than XML, because the authors knew network engineers would refuse to read anything else. YANG 1.1 (RFC 7950, 2016) added actions and notifications attached to data nodes, closing gaps that operators had been working around with ugly RPCs. And despite YANG's tight coupling to NETCONF in its name, the language itself is transport-agnostic; RESTCONF (RFC 8040) and gNMI both consume the same modules.
Stack Overflow Unanswered
2026-08-23
The asker wants a HashMap of route paths to async handlers. They've fallen into the classic pit: async fn in a trait desugars to impl Future, which isn't object-safe in the naive form, so they've reached for dyn_clone, Any::downcast_mut, and hand-rolled Pin<Box<dyn Future>> to make everything fit behind a dyn pointer.
Why it's genuinely hard: Rust's async model is zero-cost — each async fn produces a unique anonymous Future type. Erasing that into a uniform handler type requires boxing the future somewhere. The question is where to hide the box so callers don't see it. Meanwhile, handlers have different argument shapes (path params, query, JSON body, state), so a "one signature fits all" trait tends to devolve into Box<dyn Any> plumbing — which is exactly what the asker is trying to escape.
The clean approach mainstream frameworks use (axum, actix) is the extractor pattern combined with a blanket-impl Handler trait:
trait Handler<Args>: Clone + Send + 'static {
type Future: Future<Output = Response> + Send;
fn call(self, req: Request) -> Self::Future;
}
// Blanket impl for every async fn shape you support
impl<F, Fut, A1> Handler<(A1,)> for F
where
F: Fn(A1) -> Fut + Clone + Send + 'static,
Fut: Future<Output = Response> + Send,
A1: FromRequest,
{ /* extract A1, call self, return Fut */ }
Then wrap concrete handlers in a small erased type at registration time:
type BoxedHandler = Arc<dyn Fn(Request) -> BoxFuture<'static, Response> + Send + Sync>;
fn erase<H, A>(h: H) -> BoxedHandler
where H: Handler<A>, A: FromRequest + 'static
{
Arc::new(move |req| Box::pin(h.clone().call(req)))
}
The HashMap<String, BoxedHandler> then holds uniform values. No Any, no dyn_clone, no downcasting — the type erasure happens exactly once at insertion, and the boxing cost is one allocation per request (unavoidable for dynamic dispatch).
Gotchas:
async fn return types capture lifetimes of all arguments — use BoxFuture<'static, T> and move owned values into the future, or the borrow checker will drag you back into Pin hell.impl_handler! macro expansions for 0..16 args.Send bounds are viral — miss one and error messages become opaque walls of impl Future.Clone on handlers, Arc<F> at the erasure boundary is cheaper and simpler than dyn_clone.Daily Software Engineering
2026-08-23
Reconciliation loops are the beating heart of GitOps and Kubernetes: read desired state, read actual state, compute the diff, apply corrections, repeat forever. It's a beautiful model — until you have two loops reconciling the same resource with different opinions. Then you get a fight that never ends, burns CPU, and makes your dashboards flicker.
The pattern shows up whenever ownership is ambiguous. Classic scenarios:
replicas: 3, while HPA reconciles it to replicas: 7 based on CPU. Every 30 seconds they overwrite each other.tls.crt in a Secret; a Helm chart's post-install hook also writes to that Secret. Both loops "correct" the other's write.kubectl edits a ConfigMap to debug prod. Flux notices the drift 60 seconds later and reverts it — mid-investigation.Real example: A team ran Argo CD syncing a Deployment manifest with replicas: 2, and HPA scaling between 2 and 20. During a traffic spike HPA scaled to 15. Argo's next sync (every 3 minutes) scaled it back to 2. Latency spiked, HPA scaled up again, Argo scaled down. The oscillation lasted 40 minutes before someone noticed pods being killed mid-request. Fix: remove replicas from the manifest entirely, or add ignoreDifferences for that field in the Argo Application spec. Ownership must be exclusive per field, not per resource.
Rule of thumb: for any writable field on any resource, exactly one controller owns it. Zero owners means drift accumulates; two or more owners means a fight. Kubernetes 1.22+ made this explicit with Server-Side Apply field ownership — each manager claims specific fields, and conflicting writes error out instead of silently thrashing. Use it.
How to detect the fight: if the resourceVersion of an object increments faster than any human is touching it — say, more than 10 changes per hour with no deployment — two controllers are almost certainly wrestling. Check metadata.managedFields to see who's writing what.
Design defenses:
ignoreDifferences (Argo) or --server-side --force-conflicts deliberately — never as a shortcut.resourceVersion churn per object; it's the earliest signal of a loop war.Tool Nobody Knows
2026-08-23
Omar Sandoval wrote drgn at Facebook because gdb scripting on live kernels was painfully slow, crash(8)'s macro language was awkward, and neither could be embedded in production tooling. It's pip install drgn (or a distro package), and it does something none of those tools quite do: gives you a real Python 3 API for walking Linux kernel data structures on a running system, a /proc/kcore snapshot, or a kdump vmcore.
The trick is DWARF. Point drgn at your vmlinux (or the kernel-debuginfo package) and every struct field just… works, with tab completion and Python iteration protocols.
$ sudo drgn # attach to running kernel
>>> prog['init_task'].comm
(char[16])"swapper/0"
>>> prog['jiffies']
(volatile long unsigned int)4295567891
$ drgn -c /var/crash/vmcore \ # or postmortem on a vmcore
-s /usr/lib/debug/.../vmlinux
The killer feature is the helper library. Want every process holding an fd to a specific inode? In systemtap that's ~300 lines of C; in drgn:
from drgn.helpers.linux import for_each_task, for_each_file
for task in for_each_task(prog):
for fd, file in for_each_file(task):
if file.f_inode.i_ino == 12345:
print(task.pid.value_(),
task.comm.string_().decode(), fd)
Or "print every task stuck in D-state for >120s along with its kernel stack" — the classic hung-task investigation you normally do by squinting at dmesg:
from drgn.helpers.linux import for_each_task
from drgn.helpers.common.stack import print_annotated_stack
TASK_UNINTERRUPTIBLE = 2
now = prog['jiffies'].value_()
HZ = prog['CONFIG_HZ'].value_()
for t in for_each_task(prog):
if t.__state.value_() & TASK_UNINTERRUPTIBLE:
stuck = (now - t.last_switch_time.value_()) // HZ
if stuck > 120:
print(t.pid.value_(), t.comm.string_().decode(), stuck, "s")
print_annotated_stack(prog.stack_trace(t))
Where drgn quietly earns its keep in production:
/proc/kcore, walk the task list, dump stacks. No reboot, no kdump.page_counter.usage, spot the leaker.struct sock in tcp_hashinfo, print sk_state, sk_wmem_queued, ports. Do that in gdb./proc/kcore; it works unchanged on the vmcore that lands in /var/crash six hours later.There's also a --pid mode that attaches to userspace processes and loads their debuginfo — slower and less magical than kernel mode, but it covers the gdb -p case where you just want to pull a field out of a struct without setting breakpoints.
Why it beats the alternatives: crash(8) gives you a fixed vocabulary of commands (ps, foreach files, mount) plus its own scripting dialect you can only use inside crash. gdb's Python API technically works on kernels but symbol resolution and iteration over kernel lists is agonizingly slow — drgn was literally born from Omar timing "list every task" and finding gdb took minutes while a C program took milliseconds. bpftrace is fantastic for events, but useless for "what does the current state of this hash table look like right now."
Two gotchas that bounce people off it: (1) you need matching kernel debuginfo installed — usually a separate distro package; (2) live-kernel mode needs root because /proc/kcore is root-only. Neither is drgn's fault, and both go away the moment you've done it once.
What If Engineering
2026-08-23
A solar pond is a boringly brilliant invention: fill a shallow basin with salty water, and let a salinity gradient stop convection so sunlight-heated water at the bottom can't rise. The bottom layer cooks to 90 °C while the surface stays cool. Israel's Beit Ha'Arava pond ran a 5 MW turbine off it in the 1980s. But solar ponds are 3–5 m deep and sprawl over hectares. What if we tipped one on its side and made it a skyscraper?
Picture a 100 m × 100 m × 500 m glass-and-steel tower — 5 million m³ of stratified brine. Sunlight enters through a transparent south face and a mirror field at the base bounces more light in. The top 20 m is a fresh, cold "insulating cap." Below it, salinity ramps from 0 % to 26 % (saturated) at the bottom, thermally stable despite hot-below/cold-above because salt gets denser faster than heat makes water less dense.
How much heat can it bank?
5×10⁹ × 4180 J/kg·K × 70 K ≈ 1.46 × 10¹⁵ J ≈ 406 GWhA typical northern city of 50,000 people burns roughly 500 GWh of thermal energy in a six-month heating season. One tower gets you 80 % of the way there. Charge it April–September, discharge October–March through a district-heating loop of heat exchangers at the base.
Where physics starts pushing back:
Pressure. Saturated brine at the bottom has ρ ≈ 1200 kg/m³. At 500 m depth: P = ρgh = 1200 × 9.81 × 500 ≈ 5.9 MPa (~60 atm). That's the pressure of a submarine at 490 m depth — inside a building. Wall thickness for a hoop-stress limit of 200 MPa in steel over a 100 m span: t = PR/σ = 5.9e6 × 50 / 2e8 ≈ 1.5 m. That's a battleship-hull wall. Better: subdivide into narrow vertical cells, dropping R.
Gradient stability. Horizontal solar ponds fight double-diffusive convection — salt diffuses 100× slower than heat, but over 500 m of column, the "salt fingers" that form when hot salty water sits under cool fresh water can churn the gradient in months. You'd need internal baffles every ~10 m to break coherent convection cells, plus continuous brine-topping at the bottom to fight upward salt diffusion (~1 tonne of NaCl per day, back-of-envelope).
Optical penetration. Even in clean saltwater, sunlight is 90 % absorbed in the top 3 m. A vertical pond can't heat its own bottom directly — you'd need heliostats flooding the base with concentrated light through the transparent south wall, converting a solar pond into what's really a hybrid solar-thermal-plus-thermocline storage tank. Which, notably, is exactly how modern molten-salt plants work — minus the salt-gradient trick.
Economics per joule. Stored heat at ~$0.05/kWh-thermal implies the whole 406 GWh charge is worth ~$20M/season. A billion-dollar tower needs 50 seasons to pay back, ignoring pumping and salt losses. Bury it instead — as aquifer thermal energy storage already does with 70 %+ round-trip efficiency — and skip the hull-stress engineering entirely.
Wikipedia Rabbit Hole
2026-08-23
Wikipedia: Read the full article
In 1957, engineers at Rocketdyne watched an F-1 rocket engine — the same class of engine that would eventually push Apollo astronauts to the Moon — tear itself apart in milliseconds. Not from mechanical failure. Not from over-pressure. From sound. The combustion chamber had started to sing, and the singing had shaken it to pieces.
This is combustion instability, and it is one of the strangest failure modes in engineering. When a flame releases heat in phase with a pressure wave passing through it, the wave gets amplified. That louder wave then squeezes the flame harder on its next pass, releasing even more heat at exactly the wrong moment. The chamber becomes a self-playing organ pipe, except the "note" can reach 200 decibels and pressures that peel steel like foil.
The governing principle has an elegant name: the Rayleigh Criterion, formulated by Lord Rayleigh in 1878 (the same physicist behind Rayleigh scattering, which is why the sky is blue). It says: if heat is added to a gas at the moment of highest pressure, the oscillation grows. If added at lowest pressure, it damps. That's it. That's the whole knife-edge between a smoothly burning rocket and a very expensive explosion.
The F-1 engine's development became legendary partly because of how the Rocketdyne team eventually tamed this. They couldn't simulate it — computers of the era weren't remotely up to the task — so they resorted to something almost medieval: they would deliberately detonate small bombs inside a running engine to see if the combustion would recover its stability, or spiral into destruction. An engine that could "eat" a bomb and keep running smoothly was declared stable. It took roughly 2,000 full-scale tests and countless injector plate redesigns before they had it.
The phenomenon reaches beyond rockets. Gas turbines in power plants suffer it. So do domestic boilers, industrial furnaces, and the afterburners on fighter jets — the deep, throbbing "screech" of a J79 in afterburner is a barely-controlled thermoacoustic oscillation. It's the same physics as a Rijke tube, that classic physics demo where a heated wire mesh inside a vertical pipe makes it howl like a foghorn. Same equations. Different consequences.
Modern researchers have found something even weirder. Just before an engine goes fully unstable, the combustion doesn't smoothly ramp up its oscillations — it enters a state of intermittency, flickering between chaos and rhythmic pulsing in bursts. R. I. Sujith's group discovered this pattern is mathematically identical to phase transitions in condensed matter physics and to precursors of epileptic seizures in the brain. The signature of an engine about to grenade itself looks like the signature of a brain about to seize.
Which raises the unsettling implication: some of the most violent failure modes in engineering, biology, and physics may share the same underlying grammar. We just happen to hear the engineering one.
Daily YT Documentary
2026-08-23
Channel: Ayo Santiago (224 subscribers)
This batch of candidates is largely trailers, festival B-roll, and hashtag-spam clips, so the pickings are slim. That said, Ayo Santiago's "Take This Personal" stands out as the only entry that promises an actual documentary with substance behind it — a first-person account of trying to build a career in hip-hop without waiting for a major label to hand out a deal.
What makes this worth a look is the perspective. Most music-industry content is either polished label marketing or wistful "what could have been" retrospectives. An independent artist documenting their own grind in real time — booking their own shows, handling their own distribution, negotiating their own features — is a rarer and more honest artifact. Expect candid conversations about money, streaming economics, the tension between artistic vision and audience-building, and the daily logistics that rarely make it into glossy music docs.
At 224 subscribers, this is exactly the kind of small-channel work that gets buried by the algorithm. If you're curious about the mechanics of modern independent music — not the myth of overnight success, but the boring, tactical, unglamorous work of building an audience from zero — this is likely the most honest window into it that today's list offers.
Caveat: the rest of the day's candidates were weak (trailers, hashtag spam, festival interviews), so this is the strongest of a thin field rather than a standout across the board.
Daily YT Electronics
2026-08-23
Channel: ROBBE (712 subscribers)
Most of today's candidates are low-effort shorts, AliExpress affiliate spam, or hashtag-stuffed thumbnails. ROBBE's neon logo build stands out as an actual project video — a Dutch maker walking through the full process of turning a design idea into a working, self-fabricated neon-style sign.
Real glass-tube neon signs are notoriously hard to make at home (they require a gas manifold, high-voltage transformers, and glassblowing skill), so most modern "neon" builds use flexible LED neon rope bent along a laser-cut or 3D-printed acrylic backer. The interesting engineering questions in a build like this are: how do you translate a vector logo into a physical bend path, how do you hide the LED strip's power injection points, and how do you drive the strip cleanly from a low-voltage supply without visible hotspots or voltage drop across long runs?
Even without understanding Dutch, the visual workflow — CAD design, backer fabrication, LED routing, wiring, and final illumination — is legible and instructive. It's the kind of small-scale fabrication project that translates directly to signage, room decor, or enclosure lighting for other electronics builds.
Note: video is in Dutch; auto-generated subtitles or captions may be needed for non-Dutch speakers.
Daily YT Engineering
2026-08-23
Channel: STRUCTIQA (121 subscribers)
Most intro-level structural content stops at "the beam deflects downward" and moves on. This video from STRUCTIQA — a tiny 121-subscriber channel that appears to be building out a serious Structural Analysis series — tackles the more interesting question: why does the beam form a curve at all? The downward motion is the obvious part; the curvature is where the actual mechanics live.
Understanding beam curvature means understanding the internal strain distribution: fibers on the compression side shorten, fibers on the tension side stretch, and somewhere in between sits the neutral axis. The relationship between bending moment, curvature, and the flexural rigidity EI is one of those foundational ideas that unlocks everything downstream — deflection calculations, buckling, indeterminate structures, even finite element formulations. Getting an intuitive picture of it early pays dividends across the rest of a structural engineering education.
The competing candidates in today's batch are mostly exam-prep walkthroughs of reinforced concrete design procedures (LSM singly reinforced beam analysis, cantilever design steps). Useful if you're studying for a specific syllabus, but procedural rather than conceptual. This one is asking a "why" question rather than a "how do I plug numbers into the code" question, which is rarer and more valuable for building real intuition.
Daily YT Maker
2026-08-23
Channel: STEMbrains (247 subscribers)
Note: this batch was mostly low-quality AI-money-making clickbait and hashtag-spam Shorts. This Arduino build is the strongest of a weak field, though it's also quite short and light on narration.
This project builds an assistive walking stick for the visually impaired using an Arduino, an ultrasonic distance sensor (typically an HC-SR04), and a buzzer or vibration motor for feedback. It's a classic beginner-to-intermediate microcontroller project that hits a genuinely useful application rather than a toy demo.
What makes the concept worth exploring: the ultrasonic sensor emits a pulse and measures the return time to calculate distance. The Arduino sketch reads that distance on a loop and triggers escalating feedback — slow beeps at 1m, faster beeps as you approach an obstacle, continuous alarm at ~30cm. It's a great introduction to sensor polling, timing math (speed of sound → distance), and conditional thresholds in embedded code.
If you're new to Arduino, cloning this project teaches wiring a 4-pin sensor, using pulseIn(), and driving output devices — foundational skills that transfer to robotics, home automation, and any embedded work. The STEMbrains channel appears to focus on educational maker projects, which is a nice fit for hobbyists teaching kids.
Daily YT Welding
2026-08-23
Channel: Welding Supplies from IOC (36 subscribers)
Most of this week's batch is hashtag spam and background-music portfolio reels, so the pickings are thin. This demo from IOC (36 subscribers) is the least generic of the lot: it puts the Hypertherm Powermax 45 SYNC through real work on a custom fabrication project rather than just showing pretty sparks.
The Powermax 45 SYNC is worth understanding on its own merits. It's Hypertherm's mid-range air plasma cutter that introduced their SYNC cartridge consumables — a single-piece consumable stack that replaces the traditional electrode/swirl-ring/nozzle/retaining-cap assembly. The cartridge auto-identifies the process to the machine (drag cutting, fine cut, gouging, marking) and adjusts amperage and air pressure accordingly, which eliminates a lot of the fiddly setup errors that plague newer operators.
Watching one in actual use — with the operator making cuts, changing consumables, and moving through pierce-and-drag work — is more useful than any spec-sheet walkthrough. If you're weighing a Powermax 45 against a Chinese import or an older non-SYNC unit, seeing the workflow tradeoffs in a real shop is the honest comparison.
Caveat: this is a dealer channel, so expect a promotional tilt. Still the most substantive candidate in this week's set.
