Daily Digest — 2026-05-19

26 newsletters today.

In this digest


Abandoned Futures

The Dynasphere: The 1932 Monowheel That Solved Problems We're Still Trying to Solve in 2026

2026-05-19

In February 1932, on the beach at Weston-super-Mare, England, Dr. John Archibald Purves climbed inside a ten-foot-tall steel ring, sat on a seat suspended at its center, and drove down the sand at 30 mph. The vehicle was called the Dynasphere, and it had exactly one wheel. The passenger sat inside the wheel. Purves had patented it the year before (British Patent 367,481), inspired by a sketch his father had made decades earlier after reading Leonardo da Vinci.

The mechanics were elegant. The outer ring was a lattice of steel held together by spokes, riding on rollers. An electric or petrol motor drove the rollers, which pushed the ring forward like a hamster wheel turned outward. Two versions were built: a 1,000-pound electric model and a heavier petrol version capable of carrying two people. Contemporary newsreels show it climbing modest grades, turning by shifting the rider's weight, and braking without theatrics.

Purves made a startling claim: because a monowheel has only one wheel, it has zero rolling resistance loss to a second axle, no differential, no drivetrain torque split. He calculated the Dynasphere needed roughly one-quarter the horsepower of a conventional car of comparable mass to maintain cruising speed. Modern analysis of single-track rolling vehicles broadly supports this โ€” the energy advantage is real.

So why did it die? Three reasons, all of them solvable now:

  • Gerbiling. Under hard braking or acceleration, the rider's seat would swing up inside the ring like a hamster losing its footing. Purves had no gyroscopic stabilization, no accelerometers, no active counter-torque. The fix existed only on paper in 1932.
  • Steering. The Dynasphere turned by the rider leaning, which works at walking pace and becomes terrifying at 25 mph. Differential roller speed steering was theorized but not implemented.
  • Visibility and weather. The rider sat inside a cage. Rain, mud, and road debris flung up by the ring made it miserable. There was no enclosed cabin design.

Now look at 2026. Every single failure mode has a commodity solution:

  • Gerbiling is identical to the control problem solved by every self-balancing scooter since the Segway (2001). A six-axis IMU costing $3 and a brushless motor on the inner gimbal can hold the seat level through 1g of deceleration. Honda's Riding Assist (2017) and Lit Motors' C-1 prototype proved gyro-stabilized single-track vehicles work at highway speed.
  • Steering via independent left/right roller drive is trivial with two motor controllers โ€” the same vectoring math Rivian uses for tank-turn on the R1T.
  • Visibility through a transparent polycarbonate hub, plus exterior cameras streaming to an OLED panel inside, gives 360ยฐ awareness better than a Tesla.

The deeper case for the Dynasphere now: urban last-mile delivery is hunting for a vehicle the Dynasphere already is. It has a tiny footprint (a 10-foot ring rolls in a single lane width), enormous cargo volume relative to mass (the entire interior is usable), and inherent compliance with curbs and potholes because the contact patch is enormous and the suspension is the deformation of the ring itself. A modern composite-ring Dynasphere with hub-mounted lidar would weigh under 600 lbs, carry 400 lbs of cargo, and run for 8 hours on a 5 kWh battery.

Purves filed his patent at the bottom of the Depression. Nobody was buying experimental vehicles. By 1933 he was out of money, and by 1940 the monowheel was a curiosity for newsreels. But the physics never changed โ€” only the supporting technology caught up.

Key Takeaway: The Dynasphere wasn't impossible in 1932 โ€” it was just missing the $3 IMU, the brushless motor, and the polycarbonate window that would have made every one of its objections vanish, all of which we've had on shelves for twenty years.

Daily Automotive Engines

Piston Crown Design: Dish, Dome, and Valve Reliefs

2026-05-19

The top of the piston โ€” the crown โ€” isn't just a flat disc. Its shape is one of the most consequential design choices in the engine, dictating compression ratio, flame propagation, and whether your valves and pistons can occupy the same space without meeting catastrophically.

Three basic crown geometries:

  • Flat-top: The default. Simple, light, and offers the best surface-to-volume ratio for clean combustion. Common in modern naturally aspirated engines where the combustion chamber in the head does the shaping.
  • Dished (concave): A bowl machined into the crown lowers compression. Standard on turbo and supercharged engines where you need to drop static compression to maybe 8.5:1 or 9.0:1 to make room for boost without detonation. The dish also helps direct the flame front in some designs.
  • Domed (convex): A raised crown raises compression โ€” popular in old-school high-compression NA race motors running 12:1 or higher. Downside: the dome blocks flame travel across the chamber, creating shrouded regions and uneven burn. Modern engines almost never use big domes because pent-roof heads with flat-tops burn cleaner.

Valve reliefs (eyebrows): Those scalloped pockets you see machined into the crown exist because at TDC during valve overlap, the intake and exhaust valves are both open and dangling into the cylinder. On an interference engine with aggressive cams, the piston would smack the valves without the reliefs. Reliefs cost a little compression and create a small shrouded volume, but they're cheap insurance.

Real-world example: The LS3 6.2L uses a flat-top piston with small valve reliefs to achieve 10.7:1 compression with its 68cc heads. Swap to LS3 heads on a smaller-chamber LS1 block (which had dished pistons for 10.25:1), and you'd lose compression โ€” the bigger chamber volume isn't offset by the flat-top crown. Builders do the opposite trick: keep flat-tops, mill the heads to shrink chambers, gain compression.

Quick calculation โ€” piston-to-valve clearance check: Lay a strip of soft modeling clay across the valve reliefs, install the head with old gasket, rotate the engine through TDC by hand, then measure the squished clay thickness. Minimum safe clearance is roughly 0.080" on the intake and 0.100" on the exhaust (exhaust runs hotter and stretches more). Less than that, and you fly-cut the pistons deeper or back off cam advance.

The crown also carries the top ring land โ€” too thin a deck above the top ring and detonation can crack it off, which is why turbo pistons have thicker ring lands and the top ring moved down 0.200" or more from the crown edge.

See it in action: Check out Flat vs Dished vs Domed Pistons #automobile #pistons #mechanisms by Aaron Medina to see this theory applied.
Key Takeaway: Piston crown shape sets compression ratio and dictates valve clearance โ€” flat-tops burn cleanest, dishes drop compression for boost, and domes are a relic of older combustion chamber designs.

Daily Debugging Puzzle

Java's BigDecimal(double) Constructor Trap: The Precision Tool That Imports Imprecision

2026-05-19

Below is a daily-compound interest routine. The team chose BigDecimal precisely because double arithmetic isn't safe for money. The auditors then reported a $0.83 drift on a single account against their reference spreadsheet. The code compiles, the unit tests on small inputs pass, and the setScale at the end looks responsible. Where is the rot?

import java.math.BigDecimal;
import java.math.RoundingMode;

public class InterestCalculator {
    // Apply daily compounding for `days` days at `dailyRate` on `balance`.
    public static BigDecimal compound(double balance, double dailyRate, int days) {
        BigDecimal b    = new BigDecimal(balance);
        BigDecimal rate = BigDecimal.ONE.add(new BigDecimal(dailyRate));
        for (int i = 0; i < days; i++) {
            b = b.multiply(rate);
        }
        return b.setScale(2, RoundingMode.HALF_UP);
    }

    public static void main(String[] args) {
        // $1,000,000 at 0.0001337 per day for 365 days.
        BigDecimal result = compound(1_000_000.00, 0.0001337, 365);
        System.out.println("Final balance: $" + result);
        // Reference value: $1,051,287.41
        // This prints:     $1,051,288.24
    }
}

The Bug

The defect is on a single line: new BigDecimal(dailyRate). Developers reach for BigDecimal assuming it preserves the number they wrote. But the BigDecimal(double) constructor takes the exact IEEE-754 representation of the double and converts that, not the decimal literal the programmer typed.

The literal 0.0001337 cannot be represented exactly in binary floating point. The nearest double is approximately:

0.00013370000000000000713783100009625104...

So new BigDecimal(0.0001337) produces a 50-digit BigDecimal whose value is that long tail, not 0.0001337. Multiply that by itself 365 times and the tiny excess in the 18th digit compounds into a visible discrepancy in the cents column. The auditors aren't wrong; the code is.

What makes this trap particularly nasty:

  • The type system happily accepts a double argument, even though there is no safe lossless conversion.
  • The output looks plausible โ€” it's only off by pennies, so it survives spot checks.
  • Calling .setScale(2, HALF_UP) at the end looks like it sanitizes the result, but rounding the final answer doesn't undo 365 multiplications that each carried bogus low-order digits.
  • IDE warnings rarely flag this; SpotBugs catches it, but only if enabled.

The Fix

Two correct approaches:

  1. Never let a double hold a money value in the first place. Take a String at the boundary and feed it to new BigDecimal(String), which parses the decimal literally.
  2. If you're stuck with a double from a legacy API, use BigDecimal.valueOf(double). It routes through Double.toString(), which produces the shortest decimal that round-trips to the same double โ€” i.e., the number the programmer most likely intended.
public static BigDecimal compound(String balance, String dailyRate, int days) {
    BigDecimal b    = new BigDecimal(balance);
    BigDecimal rate = BigDecimal.ONE.add(new BigDecimal(dailyRate));
    // Carry enough precision through the loop; only round at the end.
    java.math.MathContext mc = new java.math.MathContext(20);
    for (int i = 0; i < days; i++) {
        b = b.multiply(rate, mc);
    }
    return b.setScale(2, RoundingMode.HALF_UP);
}

// Caller:
compound("1000000.00", "0.0001337", 365);  // -> 1051287.41

Equivalent rescue when only a double is available:

BigDecimal rate = BigDecimal.ONE.add(BigDecimal.valueOf(dailyRate));

Effective Java item 60 says it directly: "Avoid float and double if exact answers are required." The moment money touches a double, the precision is already gone โ€” wrapping it in BigDecimal afterward just encodes the error with more digits.

Key Takeaway: new BigDecimal(double) preserves the binary float's exact value, not the decimal you wrote โ€” use BigDecimal.valueOf(d) or, better, pass a String so the imprecise double never enters the pipeline.

Daily Digital Circuits

Wire Load Models and RC Delay: Why Your Signal Slows Down Before It Even Reaches a Gate

2026-05-19

At nanometer geometries, the wire between two gates often delays your signal more than the gates themselves. Every metal trace on a chip has resistance (because copper isn't a perfect conductor) and capacitance (because it sits next to other wires and the substrate). Together they form a distributed RC network that low-pass filters your edge.

The classic model is the Elmore delay: for a wire of length L with per-unit resistance r and per-unit capacitance c, the delay to the far end is approximately 0.5 ยท r ยท c ยท Lยฒ. The Lยฒ is what kills you โ€” doubling wire length quadruples delay. This is why long global signals (clocks, resets, bus enables) get buffered every few millimeters instead of being run as one long trace.

A concrete number: In a 7nm process, a typical M3 metal wire has r โ‰ˆ 200 ฮฉ/mm and c โ‰ˆ 200 fF/mm. A 1mm unbuffered wire then has Elmore delay โ‰ˆ 0.5 ร— 200 ร— 200ร—10โปยนโต ร— 1ยฒ = 20 ps. That sounds tiny โ€” until you realize a gate in the same process switches in 5 ps. The wire is 4ร— slower than the logic it's connecting.

The rule of thumb: Insert a buffer when wire delay exceeds the delay of two inverters. Optimal buffer insertion spaces repeaters so that segment delay equals buffer delay โ€” this converts the Lยฒ curve into a linear delay-vs-length line. Modern place-and-route tools do this automatically during a step called buffer insertion or repeater planning.

Wire load models matter even before layout exists. During synthesis, the tool has no idea how long wires will be, so it uses a statistical wire load model โ€” a lookup table that estimates capacitance based on fanout and block size. These are notoriously optimistic for large blocks, which is why pre-layout timing reports often look great and post-layout reports look terrible. The fix in modern flows is physical synthesis: the synthesizer does a rough placement so it can estimate real wire lengths.

Wire capacitance also creates coupling between adjacent traces. A switching aggressor can inject noise onto a quiet victim wire โ€” up to 30% of VDD in dense routing. Tools mitigate this by spacing critical nets, shielding with grounded wires, or routing them on different layers.

The takeaway for designers: at advanced nodes, RTL changes that "shouldn't matter" โ€” moving a register across a block boundary, increasing fanout from 4 to 16 โ€” can blow your timing not because of added logic, but because of added wire.

See it in action: Check out 1st yr. Vs Final yr. MBBS student ๐Ÿ”ฅ๐Ÿคฏ#shorts #neet by Dr.Sumedha Gupta MBBS to see this theory applied.
Key Takeaway: At modern process nodes, wire RC delay scales as length squared and frequently dominates gate delay, which is why buffer insertion and physical-aware synthesis exist.

Daily Electrical Circuits

Voltage-Controlled Amplifiers (VCAs): Building Blocks for Dynamic Gain Control

2026-05-19

A Voltage-Controlled Amplifier takes two inputs โ€” a signal and a control voltage โ€” and outputs the signal scaled by a gain that the control voltage determines. VCAs are the heart of audio compressors, automatic gain control (AGC) loops, synthesizer envelopes, and lock-in amplifiers. Unlike a PGA (which steps gain digitally), a VCA varies gain continuously and smoothly, which matters when you need to modulate amplitude without zipper noise.

The core trick: a current-controlled element. Most VCAs exploit the exponential I-V relationship of a BJT base-emitter junction, or a translinear multiplier cell. The classic Gilbert cell uses two cross-coupled differential pairs sharing a tail current. When the tail current changes, the transconductance (gm) of the pairs scales linearly with it โ€” and since gm sets the gain, you've built a multiplier. The output voltage equals (signal ร— control current) / reference current.

OTA-based VCAs are simpler for hobbyist builds. An Operational Transconductance Amplifier like the LM13700 or CA3080 outputs a current proportional to input voltage times the bias current Iabc. Gain is set by:

  • gm โ‰ˆ 19.2 ร— Iabc (in mA/V at room temp, for the LM13700)
  • V_out = gm ร— V_in ร— R_load

Practical example โ€” audio compressor sidechain: You want to reduce gain by 6 dB when input exceeds -10 dBu. Feed your audio through an LM13700 OTA. A precision rectifier detects peak level; an op-amp integrator with a 10 ms attack / 100 ms release time constant produces a control voltage. That control voltage drives a current mirror that sets Iabc. At nominal level, Iabc = 500 ยตA gives unity gain through a 10 kฮฉ load. To drop 6 dB, halve Iabc to 250 ยตA.

Watch out for these gotchas:

  • Distortion: OTAs are linear only over ยฑ30 mV input. Use input attenuators (1:100) and amplify the output to keep THD below 1%.
  • Control-voltage feedthrough: Rapid changes in Iabc inject charge into the signal path. Trim with a small pot to null at DC.
  • Temperature drift: The exponential junction is ~-2 mV/ยฐC. Precision VCAs (THAT2180, SSM2018) include on-chip temperature compensation.

Rule of thumb: For audio-grade VCAs, budget at least 80 dB of control range and keep signal levels at ~10 mV peak at the OTA input. If you need better than 0.1% THD, skip discrete OTAs and use a dedicated chip like the THAT2180 โ€” it's worth the $5.

See it in action: Check out Dual VCA 1U by Intellijel to see this theory applied.
Key Takeaway: VCAs multiply a signal by a control voltage using transconductance scaling โ€” keep signal levels small and use dedicated ICs when distortion specs matter.

Daily Engineering Lesson

Manning's Equation: Sizing Open Channels and Partially Full Pipes

2026-05-19

Pressurized pipe flow uses Darcy-Weisbach or Hazen-Williams, but the moment water has a free surface โ€” a storm sewer flowing half full, a drainage swale, a concrete-lined channel, a culvert โ€” gravity drives the flow and roughness fights it. Manning's equation is the workhorse civil engineers reach for in this regime, and it's been the standard since 1889 because it's empirical, simple, and accurate enough.

The equation (SI units):

V = (1/n) ยท R2/3 ยท S1/2

Where V is mean velocity (m/s), n is Manning's roughness coefficient (dimensionless), R is the hydraulic radius (flow area รท wetted perimeter, in meters), and S is the slope of the energy grade line (m/m, often approximated as channel slope). Flow rate Q = V ยท A.

The key insight: velocity depends on the shape of the wetted cross-section, not just its area. Hydraulic radius R rewards "deep and narrow" over "wide and shallow" because less perimeter means less friction per unit of flow area. A 1 m ร— 1 m square channel running full has R = 1/4 = 0.25 m. The same area as a 2 m ร— 0.5 m channel has R = 1/6 โ‰ˆ 0.17 m โ€” 30% lower, so it carries roughly 22% less flow at the same slope.

Typical Manning's n values worth memorizing:

  • Smooth concrete pipe: 0.012
  • Corrugated metal pipe: 0.024 (literally double โ€” corrugations matter)
  • PVC/HDPE: 0.010
  • Earth channel, clean: 0.022
  • Natural stream, weedy: 0.05โ€“0.10

Worked example: A 600 mm concrete storm pipe (n = 0.012) at 1% slope, flowing full. R for a full circular pipe = D/4 = 0.15 m. V = (1/0.012) ยท (0.15)2/3 ยท (0.01)1/2 = 83.3 ยท 0.282 ยท 0.1 = 2.35 m/s. Area = ฯ€(0.3)2 = 0.283 mยฒ. Q = 0.67 mยณ/s, or about 600 L/s.

Two practical gotchas:

  • Circular pipes carry maximum flow at ~94% full, not 100%. Above that, wetted perimeter grows faster than area, so a slightly-less-than-full pipe actually moves more water than a completely full one.
  • Minimum velocity matters as much as maximum. Sanitary and storm sewers are typically designed for โ‰ฅ0.6 m/s (2 ft/s) at design flow to keep solids in suspension. Below that, sediment drops out and you get a maintenance nightmare.

Engineers don't usually solve Manning's by hand for non-circular partial flow โ€” it's an iterative trig problem. Spreadsheets, nomographs, or tools like HydroCAD and StormCAD do the lookup. But understanding what drives the answer (R and n, both raised to fractional powers) tells you immediately why lining a ditch with concrete can shrink it by half.

See it in action: Check out HP 35s tutorial on Manning Equation for Circular Channel solving flowrate flowing partially full by usefulequations to see this theory applied.
Key Takeaway: Open channel capacity scales with hydraulic radius to the 2/3 power and inversely with roughness, so channel shape and surface matter as much as cross-sectional area.

Forgotten Books

1921: The Year a Cookbook Noticed Fruit Was No Longer Seasonal

2026-05-19

Book: Woman's Institute Library of Cookery (Volume 5) by Woman's Institute of Domestic Arts and Sciences (1923)

Read it: Internet Archive

Buried in the preface of a 1921 cookbook for housewives is an offhand observation that, in hindsight, marks one of the great quiet revolutions of the 20th century. The Woman's Institute of Domestic Arts and Sciences โ€” a correspondence school based in Scranton, Pennsylvania, that mailed cookery instruction to women across America โ€” wrote this in the preface to its fifth volume:

With fruits becoming less seasonal and more a daily food, an understanding of them is of great value to the housewife.

Read that again. In 1921, a domestic-arts textbook felt compelled to explain fruit to its readers, because fruit had just stopped being a seasonal luxury and become something you could expect on the table every day. The book's table of contents reflects the transition: it pairs Fruit and Fruit Desserts with Canning and Drying and Jelly Making, Preserving, and Pickling โ€” preservation knowledge a homemaker still needed, alongside guidance for a new world where you didn't always have to preserve at all.

What the Woman's Institute was witnessing in real time was the birth of the modern produce aisle. The 1910s and 1920s were when refrigerated rail cars, mechanical icing stations, and the United Fruit Company's banana fleet finally fused into a continental cold chain. California oranges, Florida grapefruit, and Central American bananas began arriving in northern cities year-round. The U.S. banana โ€” virtually unknown to most Americans in 1880 โ€” was, by the time this book was printed, the country's most-consumed fresh fruit.

For housewives raised on the rhythm of seasons โ€” strawberries in June, apples in October, citrus as a Christmas treat โ€” this was disorienting. The cookbook's authors are essentially saying: you used to know what to do with fruit because you only saw it for two weeks a year. Now it's always here. We have to teach you again.

It's worth noting what got lost in this transition. The same volume devotes serious space to Canning and Drying and Jelly Making, Preserving, and Pickling โ€” skills that had been load-bearing knowledge for centuries. Within two generations, most American households would lose them entirely. The pressure canner, the jelly bag, and the working knowledge of pectin set-points would migrate from "every kitchen" to "specialty hobby."

Modern readers will recognize the pattern. The same thing has now happened to bread (we forgot it within a generation, then rediscovered it during 2020), to fermentation, and arguably to cooking itself. The Woman's Institute was writing at the inflection point โ€” when industrial logistics first started replacing household skills with convenience. They saw it clearly enough to write a textbook about it. They probably did not see that the textbook itself would, within fifty years, become as obsolete as the seasonal knowledge it was meant to update.

The forgotten claim: A 1921 cookbook documented, in real time, the exact moment American fruit stopped being seasonal โ€” and quietly noted that the preservation skills generations had relied on were about to become optional.

Forgotten Darkroom

A Bibliography That Began at the Very Birth of a Science

2026-05-19

Book: Bibliography of the metals of the platinum group : platinum, palladium, iridium, rhodium, osmium, ruthenium, 1748-1917 by Howe, James Lewis, 1859- author (1919)

Read it: Internet Archive

In 1919, the U.S. Geological Survey published Bulletin 694 โ€” a quietly astonishing book. It was not a treatise, not a textbook, not a discovery. It was a list. But the list spanned 169 years of human attention to six of the rarest substances on Earth.

James Lewis Howe, professor of chemistry at Washington and Lee University and the leading American authority on platinum-group metals, opened his preface with a modest statement of intent:

"The purpose of this bibliography is to enumerate the articles upon the metals of the platinum group found in scientific literature to the end of the year 1917. It has been my aim to make the record of the chemistry of these metals as complete as possibleโ€ฆ"

The starting year โ€” 1748 โ€” is the forgotten knowledge here. That date is not arbitrary. It marks the year the Spanish naval officer Antonio de Ulloa formally published his account of a strange, infusible white metal found in the riverbeds of New Granada (modern Colombia), a metal the local miners called platina, "little silver." The Spanish Crown considered it a nuisance: it was so dense and inert that counterfeiters mixed it into gold coins, and royal decree once ordered tons of it dumped into the Rio Bogotรก and the sea.

Howe's bibliography is therefore a complete map of how humanity went from throwing platinum into rivers to recognizing it as essential โ€” and he did it just in time. By 1917:

  • Palladium had become the catalyst that made modern hydrogenation possible.
  • Rhodium and iridium tips made fountain pens and standard meter bars.
  • Osmium had briefly powered the first incandescent filaments before tungsten replaced it.
  • Ruthenium โ€” the last to be isolated, in 1844 โ€” was still hunting for an industrial purpose it would not find until the catalytic-converter era.

What's been lost is not a recipe or a remedy. It's the habit of compiling exhaustive bibliographies of an entire scientific discipline. Before databases, before DOIs, before Google Scholar, one chemist sat down and physically read or cataloged every article ever published on six elements โ€” across seven languages and 169 years. The result, Howe wrote, was intended to be "as complete as possible," and the book's 455-page index suggests he came close.

Modern readers will recognize the underlying problem immediately: catalytic converters, fuel cells, cancer drugs (cisplatin), and every hard-drive read head depend on platinum-group metals, and yet we have no comparable single-volume index of their literature today. We have search engines that index everything and remember nothing. Howe's bulletin remembers.

It is also a quiet reminder that the chemistry of these metals โ€” now worth more per ounce than gold โ€” was once obscure enough that a single scholar in rural Virginia could plausibly know all of it.

The forgotten claim: Until 1919, it was still possible for one chemist to read every scientific paper ever written about an entire family of elements โ€” and James Lewis Howe did exactly that, capturing the complete pre-modern memory of platinum-group metals before the literature exploded beyond any single mind's reach.

Forgotten Patent

Valdemar Poulsen's Telegraphone: The 1898 Patent That Invented the Voicemail, the Answering Machine, and Magnetic Tape

2026-05-19

In 1898, a 29-year-old Danish telephone engineer named Valdemar Poulsen filed Danish Patent 2653 โ€” followed by US Patent 661,619, granted November 13, 1900 โ€” for an invention he called the Telegraphone. It was the first machine ever built that could record sound magnetically, play it back, and erase it to record again. Oberlin Smith had described the idea on paper a decade earlier, but Poulsen actually built one that worked.

The mechanism was startlingly simple. A steel piano wire was strung between two pulleys. An electromagnet โ€” connected to a telephone microphone โ€” rode along the wire on a tiny carriage, magnetizing the steel in patterns that matched the sound waves hitting the microphone. To play back, you reversed the carriage, and the magnetized wire induced a current in the electromagnet's coil, driving an earpiece. To erase, you ran a steady current through the magnet as the carriage traveled. Record, play, erase, repeat โ€” every function of a modern tape deck, in 1898.

Poulsen demonstrated it at the 1900 Paris Exposition, where he recorded the voice of Emperor Franz Joseph of Austria โ€” the oldest surviving magnetic recording in existence, still playable today at the Danish Museum of Science and Technology. The Telegraphone won the Grand Prix.

Poulsen's real ambition wasn't a recording novelty โ€” it was the answering machine. His US patent explicitly describes attaching the device to a telephone line so that "messages may be received and stored when the called party is absent." That sentence, written in 1900, is voicemail. The American Telegraphone Company sold the devices to businesses through the 1900s and 1910s as office dictation machines, and a few telephone exchanges trialed them as automatic message recorders. The technology was sound; the market wasn't ready. The company collapsed in the 1920s after a fraud scandal.

The deeper consequence was the storage medium itself. Poulsen's steel wire became wire recording, used heavily by the US military in WWII for cockpit voice recorders and field dictation. In 1928, German engineer Fritz Pfleumer patented coating paper (later plastic) with iron oxide powder โ€” a flexible tape doing exactly what Poulsen's wire did, but easier to splice and store. That became magnetic tape: reel-to-reel, cassette, VHS, the IBM tape libraries that ran every bank and airline through the 1970s, and the streaming-quality reel formats that recorded every record album from the 1950s onward.

The magnetization-on-a-moving-medium concept didn't stop at tape. When IBM built the RAMAC 305 in 1956 โ€” the first hard disk drive โ€” they were doing exactly what Poulsen did, but on a spinning platter instead of a moving wire. Modern hard drives still use the same fundamental physics: an electromagnet writes patterns onto a ferromagnetic surface, and an inductive (or magnetoresistive) sensor reads them back. The 18TB drive in a modern data center is Poulsen's telegraphone with 120 years of geometry optimization.

And his original product idea? Voicemail finally arrived in 1979 when Gordon Matthews patented the digital voice message system (US 4,371,752) for VMX Inc. โ€” solving, with semiconductors, the exact problem Poulsen had solved with steel wire eight decades earlier.

Key Takeaway: Poulsen didn't just invent magnetic recording โ€” he invented the answering machine in the same patent, then waited 80 years for the world to want it.

Daily GitHub Zero Stars

nilsdx/celestial-fusion

2026-05-19

Language: TypeScript

Link: https://github.com/nilsdx/celestial-fusion

This is a delightfully niche find: an unofficial wiki for Destiny, a private server for the cult-classic MMO Phantasy Star Online Blue Burst. Originally released by Sega in 2000 and brought to PC in 2004, PSO:BB has been kept alive for two decades by dedicated private server communities long after official servers shut down. celestial-fusion appears to be a TypeScript-based companion knowledge base for one of those communities.

What makes this interesting from a developer perspective:

  • Modern stack for retro content โ€” Using TypeScript (likely Next.js or Astro under the hood) to document a 25-year-old game is a fun mismatch of eras. It's also a great template for anyone wanting to build a fan wiki that isn't trapped in MediaWiki's UX.
  • Game-specific data modeling โ€” PSO:BB has notoriously complex item systems: weapon attributes, mag stats, section IDs, photon drops, rare drop tables. Modeling that cleanly in TypeScript types is genuinely useful reference material.
  • Community preservation โ€” Private server wikis are some of the most undervalued software engineering on the internet. They keep games playable and findable decades after publishers abandon them.

Who might find it useful:

  • PSO:BB players on the Destiny server who need drop charts, quest walkthroughs, or class build references.
  • Devs building fan wikis who want a modern TypeScript alternative to Fandom or MediaWiki โ€” fork it, replace the content, ship.
  • Retro game preservationists studying how communities self-document games whose publishers have moved on.

With zero stars and a fresh push, it's clearly in its early days, but the niche it serves is real and the technical approach is sensible.

Why check it out: A TypeScript fan wiki keeping a 25-year-old MMO alive โ€” equal parts game preservation and a nice template for modern community-built documentation sites.

Daily Hardware Architecture

The Wakeup Array: How CPUs Decide an Instruction Is Finally Ready to Run

2026-05-19

You've seen reservation stations and issue queues, but the actual mechanism that turns "waiting" into "ready" is a piece of hardware most people never hear about: the wakeup array. It's a CAM (content-addressable memory) that sits inside the scheduler and answers one question, every cycle, for every parked instruction: did my operand just arrive?

Here's how it works. Each entry in the issue queue stores the physical register tags it's waiting on โ€” typically two source tags per instruction. When a functional unit finishes (or is about to finish) an operation, it broadcasts the destination tag on a result bus. Every waiting instruction compares that tag against its source tags in parallel. A match flips a "ready" bit. Once both source ready bits are set, the instruction becomes eligible for the select logic, which picks winners for issue this cycle.

The brutal part: wakeup must complete in a single cycle for back-to-back dependent instructions to issue on consecutive cycles. If ADD r3, r1, r2 finishes at cycle N, the dependent SUB r4, r3, r5 needs to be selected at cycle N+1. That means broadcast, compare, ready-bit set, and select all happen in one clock. This is why wakeup is one of the most timing-critical loops in the whole pipeline.

Concrete example โ€” Intel Sunny Cove: the unified scheduler holds 160 entries, each with two source tag comparators. At 4 GHz, each entry performs ~8 billion tag comparisons per second. With 8 result buses broadcasting per cycle, that's 160 ร— 2 ร— 8 = 2,560 comparisons per cycle. The CAM area and power for this single structure is comparable to a small L1 cache.

Why scheduler size hits a wall: wakeup delay scales roughly with โˆšN where N is the queue size, because the broadcast wires get longer and the comparator fan-out grows. Rule of thumb: doubling the issue queue roughly increases wakeup delay by 40%. This is why modern CPUs don't just build 1000-entry schedulers โ€” past ~200 entries, you'd need to pipeline wakeup, which breaks back-to-back issue and tanks performance on dependent chains.

Speculative wakeup: for variable-latency ops (mostly loads), the scheduler wakes dependents assuming an L1 hit. If the load misses, dependents must be replayed โ€” yanked back from the pipeline and re-issued later. This is why load-use latency dominates pointer-chasing code: every miss triggers a replay cascade through the wakeup array.

See it in action: Check out Guardian System Update... Meta Quest 2 Update ๐Ÿ˜ฎ by Just Gabe VR to see this theory applied.
Key Takeaway: The wakeup array is a single-cycle broadcast CAM that turns completed results into ready instructions, and its timing constraints are the fundamental reason issue queues can't grow without bound.

Hacker News Deep Cuts

The <Noscript> Element as a Trap

2026-05-19

Every web developer has reached for <noscript> at some point, usually with the best intentions: "show this message to users who have JavaScript disabled." It feels like the obvious accessibility move, the polite fallback. This article argues that the element is actually a trap โ€” one that does the opposite of what most developers think it does.

The core problem is a category error in how <noscript> is defined. The element doesn't ask "can this user run JavaScript?" It asks "is JavaScript currently enabled in the browser?" Those sound identical but they aren't. Consider the failure modes:

  • JavaScript is enabled but the script failed to load โ€” CDN outage, content blocker stripping the script tag, network error mid-fetch, CSP rejection. The browser thinks JS is on, so your <noscript> fallback never renders. The user sees a broken page with no explanation.
  • JavaScript is enabled but throws an exception early โ€” same outcome. The <noscript> sits silently in the DOM, suppressed.
  • Privacy-conscious users with selective script blocking โ€” uMatrix, NoScript, and similar tools often allow first-party scripts but block third-party. Your fallback assumptions break in subtle ways.

The piece likely walks through what to do instead. The standard recommendation is progressive enhancement done correctly: render the working HTML first, then let JavaScript enhance it. If your page needs JS to function at all, a <noscript> tag isn't going to save the experience for the small slice of users without it โ€” and it actively hides failures from the much larger slice whose JS broke for some other reason.

There's also a subtler point worth flagging: <noscript> creates a false sense of robustness. Developers who add it feel they've handled the edge case and stop thinking about graceful degradation. That's worse than having no fallback, because no fallback at least forces honest design choices.

This is the kind of article that takes a piece of HTML folklore everyone has internalized and shows it was wrong the whole time. Short, sharp, and changes how you write markup โ€” exactly the genre that does well on HN once it gets noticed.

Why it deserves more upvotes: A concise critique of an HTML element nearly every developer has used wrong, with implications for how you think about progressive enhancement and failure modes on the web.

HN Jobs Teardown

eBay: What Their Hiring Reveals

2026-05-19

Source: HN Who is Hiring

Posted by: adamilardi

eBay's posting for an Applied Researcher on the NYC recommender systems team is the most revealing in the batch โ€” it's a snapshot of how a legacy marketplace giant is fighting to stay relevant against Amazon's recommendation engine and Shopify's fragmented commerce model.

The stack tells a story of pragmatic scale:

  • Spark/YARN โ€” thousands of nodes, suggesting Hadoop-era infrastructure that's been kept alive rather than ripped out for Kubernetes/Ray. This is "we have petabytes and we're not migrating just for fashion."
  • XGBoost alongside deep learning โ€” eBay isn't drinking the all-neural-nets Kool-Aid. Gradient boosting still wins on tabular click data, and admitting that publicly is refreshing.
  • Online learning โ€” the interesting one. This signals real-time model updates, which matters when inventory is auction-driven and item lifetimes are measured in days, not the months Amazon enjoys with catalog SKUs.

What the posting reveals about stage and direction: The phrase "reinvent the recommender systems experience" combined with linking to a literal item page (ebay.com/itm/391756623227) is telling. They're not pitching greenfield work โ€” they're pitching the chance to fix something visible and broken. That's a mature-company tell: the surface area is the product, and they know it's underperforming. The "true grit" and "most challenging codebases" line is HR-speak for "expect legacy Java and undocumented Scala jobs."

Skills/trends highlighted:

  • Applied researchers who can also ship โ€” "50% coding" is the giveaway. Pure-research PhDs need not apply; this is the ML engineer-researcher hybrid role that's eaten the industry since 2022.
  • Willingness to take junior candidates for a recommender role is unusual and a green flag โ€” suggests a senior-heavy team that needs hands, not a thin team needing a savior.
  • NYC location for ML is deliberate: away from the SF talent war, closer to ad/finance ML talent pools.

Red flags: The "most challenging codebases and the most elegant systems alike" phrasing is a polite warning that you'll spend time in both. The terse posting and direct-email application ([email protected]) suggest a hiring manager bypassing the corporate funnel โ€” which is great for response time but means onboarding may be lonely.

Green flags: VISA sponsorship, junior-friendly, real production scale, and an honest scope (improve this specific page) rather than vague "transform the business" language.

The signal: Legacy e-commerce giants are quietly running some of the largest applied-ML operations in the industry, and they've stopped pretending pure-research roles exist โ€” every ML hire now ships code.

Daily Low-Level Programming

The Write-Combining Buffer: Why Streaming Stores Bypass the Cache

2026-05-19

When you write to memory, the normal path is: store hits L1, propagates through MESI, eventually drains to DRAM. That's great for data you'll re-read soon. It's terrible when you're streaming โ€” writing a gigabyte of data once and never touching it again. You pollute the cache, evict useful lines, and waste coherence traffic on data nobody will read.

Intel and AMD CPUs solve this with write-combining (WC) buffers โ€” a small set of typically 4โ€“10 line-sized buffers (64 bytes each on x86) that sit between the store buffer and memory. Stores marked as write-combining accumulate in a WC buffer until the buffer is full, then get flushed as a single burst write to DRAM. The cache hierarchy is bypassed entirely.

You access WC behavior two ways:

  • WC memory type โ€” set via MTRRs or PAT, typically used for framebuffers and GPU-mapped memory. Every store to that region is write-combined.
  • Non-temporal stores โ€” instructions like MOVNTDQ, MOVNTPS, VMOVNTDQ (and the intrinsic _mm_stream_si128). These are write-combining regardless of memory type.

Real-world example: memcpy for large buffers. glibc's optimized memcpy switches to non-temporal stores once the destination exceeds roughly the L3 size (often ~8MB threshold). Below that, normal stores win because the data stays cache-resident for the caller. Above it, NT stores win because they skip the read-for-ownership (RFO) โ€” a normal store first reads the cache line into Modified state, doubling memory bandwidth. NT stores skip the read entirely.

The catch: WC buffers are weakly ordered. A normal store followed by an NT store can become globally visible in the opposite order. You must issue SFENCE before any thread reads the destination, or before signaling completion. Forget the fence and you'll see partially-written buffers that look like memory corruption.

Rule of thumb: if your write working set exceeds half of L3, and you won't read the data within ~100ยตs, non-temporal stores will roughly double your write throughput by eliminating RFO traffic. A 32GB/s DRAM channel that delivers 16GB/s of useful writes under normal stores delivers ~30GB/s under NT stores.

Diagnose it with perf stat -e l2_rqsts.all_rfo. If RFO count equals your store count on a write-only workload, you're missing the NT-store optimization. After conversion, RFO should drop to near zero and offcore_requests.all_data_rd stays flat while uncore_imc_writes climbs.

See it in action: Check out CPU Cache Write Policies (Write Through, Write Back, Write Allocate, No Write Allocate) by BitLemon to see this theory applied.
Key Takeaway: Non-temporal stores route writes through write-combining buffers that bypass the cache and skip read-for-ownership โ€” roughly doubling streaming write throughput, but only if you remember the SFENCE.

Reddit Small Subs

What is a boost converter?

2026-05-19

Subreddit: r/AskElectronics

Discussion: View on Reddit (16 points, 18 comments)

This thread is a small gem because it tackles one of the most counterintuitive ideas in electronics: how do you get more voltage out of a circuit than you put in, without violating conservation of energy? The asker compares a boost converter to a capacitor, which is a reasonable first guess but ultimately wrong โ€” and the comment section walks through why with admirable patience.

The core trick of a boost converter is the inductor, not the capacitor. Here's the intuition the thread builds up:

  • A switch (usually a MOSFET) rapidly connects an inductor to ground, allowing current to ramp up and store energy in the inductor's magnetic field.
  • When the switch opens, the inductor refuses to let its current change instantly (that's its defining property โ€” V = Lยทdi/dt). To maintain that current, it generates whatever voltage is necessary, often well above the input.
  • That voltage spike pushes current through a diode into an output capacitor, which smooths it into a steady DC level higher than the input.
  • Repeat thousands of times per second, and you have a stable boosted output.

What's educational here isn't just the mechanism โ€” it's the conservation-of-energy framing several commenters use. You don't get "free" voltage. Power in (roughly) equals power out, minus losses. If you boost 5 V to 20 V, you're trading current: the input draws about 4ร— the current the output delivers. That single insight unlocks why boost converters can't magically run a 100 W device off a coin cell.

The thread also touches on the practical cousins โ€” buck (step-down), buck-boost, and SEPIC topologies โ€” and why switching converters dominate modern electronics over linear regulators (efficiency, often 85โ€“95% versus a linear regulator's wasted heat).

For a beginner, the OP's instinct to reach for the capacitor analogy is telling. Capacitors store energy in an electric field and resist voltage changes; inductors store energy in a magnetic field and resist current changes. Boost converters exploit that current-inertia property in a way capacitors simply can't replicate alone. Understanding this duality is one of the bigger conceptual leaps in learning analog electronics.

Why read this: A clear, beginner-friendly walkthrough of how inductors โ€” not capacitors โ€” let switching converters step voltage up while obeying conservation of energy.

RFC Deep Dive

RFC 977: Network News Transfer Protocol

2026-05-19

RFC: RFC 977

Published: 1986

Authors: Brian Kantor (UC San Diego), Phil Lapsley (UC Berkeley)

Before Reddit, before web forums, before mailing lists became the default, there was Usenet โ€” a globally distributed discussion system that, by the mid-1980s, was creaking under its own weight. RFC 977 defined NNTP, the Network News Transfer Protocol, and quietly became one of the most influential โ€” and most forgotten โ€” application protocols of the early internet.

The problem. Usenet originally moved articles between hosts using UUCP (Unix-to-Unix Copy) over dial-up modems. Each site would phone its neighbors, flood-fill new articles, and hang up. This worked fine when there were a few dozen sites exchanging a few hundred messages a day. By 1986, with TCP/IP spreading and traffic exploding, the model was untenable: every site stored every article whether anyone read it or not, and dial-up batch transfers were both slow and expensive.

Kantor and Lapsley's insight was that the new always-on internet allowed a fundamentally different model: instead of pushing the entire news feed to every reader's local machine, let news readers talk directly to news servers over TCP, fetching only what they wanted. The server holds the spool; clients query it.

Key design decisions:

  • Line-oriented ASCII over TCP port 119, with three-digit numeric response codes โ€” a design lifted directly from SMTP (RFC 821) and FTP. If you've squinted at 250 OK in a mail log, NNTP will feel instantly familiar.
  • Newsgroups are hierarchical (comp.lang.c, rec.arts.sf.written), and articles within a group are numbered sequentially per server. Clients track a high-water mark and ask NEWNEWS or GROUP + NEXT to walk forward.
  • Dual-mode operation. The same protocol handles both reader-to-server traffic (humans reading articles) and server-to-server traffic (replacing UUCP flooding) via the IHAVE command. One protocol replaced two distinct mechanisms.
  • Message-IDs are globally unique (<local@host>), letting servers deduplicate articles arriving from multiple peers โ€” essential for flood-fill propagation that converges instead of looping.

Why it matters today. NNTP is mostly a ghost โ€” most ISPs dropped their news servers in the 2000s โ€” but its DNA is everywhere:

  • The "pull instead of push" model that NNTP pioneered became the template for nearly every modern feed reader, from RSS aggregators to Mastodon's timeline fetching.
  • Binary Usenet (via yEnc encoding and the later RFC 3977 revision) is still a thriving piracy and archival backbone, with commercial providers offering multi-year retention. NNTP outlived its mainstream purpose by becoming an underground CDN.
  • The protocol's message-ID-based deduplication and flood propagation are conceptually identical to how git exchanges objects, how IPFS resolves content, and how ActivityPub federates posts.
  • If you've ever used gmane.org to browse a mailing list as a newsgroup, you've touched NNTP this decade.

The backstory. Lapsley wrote much of the reference implementation as a Berkeley undergraduate; the protocol was prototyped at UCSD and Berkeley in 1985 and standardized the following year. It's a rare case where a graduate-student-and-friends weekend project became the de facto protocol for global discussion for nearly two decades. The 1986 RFC stood essentially unmodified until RFC 3977 finally replaced it in 2006 โ€” a 20-year run on the original spec.

Why it matters: NNTP invented the pull-based, message-ID-deduplicated, flood-federated feed model that underpins everything from RSS readers to ActivityPub โ€” and quietly powers a thriving binary distribution underground to this day.

Stack Overflow Unanswered

Global variables not working in my kernel

2026-05-19

Stack Overflow: View Question

Tags: c, x86, linker, osdev, watcom

Score: 2 | Views: 169

The asker is building a 16-bit real-mode kernel in C using Open Watcom. Local variables work fine โ€” they can print to VGA memory at 0xB8000 โ€” but as soon as they promote those variables to file-scope globals, the kernel misbehaves. This is one of the most classic OSdev rites of passage, and the answer almost always lives at the seam between the compiler, the linker script, and the boot loader.

Why it's interesting: a hosted C program gets BSS zeroing and DATA initialization for free from the C runtime startup (crt0). A freestanding kernel has no such luxury. When you transition from locals to globals, you suddenly depend on three invariants that nobody set up for you:

  • The .data section's initialized contents must actually be loaded from disk into RAM at the address the linker assigned.
  • The .bss section must be zeroed before main runs.
  • In 16-bit real mode, DS (and often SS) must point at the segment where those sections live โ€” otherwise the CPU happily reads/writes garbage at the wrong physical address.

Direction toward a solution:

  1. Have Watcom emit a map file (wlink ... option map) and inspect where .data and .bss were placed. Compare those addresses to what your boot loader is actually loading. If the boot loader only reads the .text bytes from disk, globals with initializers will be uninitialized in RAM.
  2. Check your boot loader's DS setup. A common bug: setting CS via a far jump but leaving DS=0, so accesses to a global at linear address 0x10000 get resolved relative to segment 0.
  3. Zero BSS explicitly in your kernel entry stub before calling C code: walk from _bss_start to _bss_end writing zeros.
  4. For Watcom specifically, watch the memory model. -ms (small), -mc (compact), -ml (large) change how the compiler emits pointer references to globals. A model mismatch between the kernel and its boot stub leads to exactly this "locals work, globals don't" symptom.

Gotchas: VGA_MEM 0xB8000000UL in the snippet looks like a far pointer encoding (segment 0xB800, offset 0x0000) โ€” fine if Watcom's far qualifier is honored, but if a global pointer is dereferenced via the default DS, the whole computation collapses. Also: if the boot loader loads the kernel above the 64 KB boundary, any 16-bit near pointer to a global silently truncates.

The challenge: "Locals work, globals don't" in a freestanding 16-bit kernel is rarely a C bug โ€” it's a missing piece of the cooperation between linker section layout, boot-time loading, and segment-register setup.

Daily Software Engineering

Database Connection Pooling: Stop Paying the TCP Handshake Tax

2026-05-19

Every database connection costs more than you think. A fresh PostgreSQL connection requires a TCP handshake, TLS negotiation, authentication, and backend process fork โ€” typically 20-50ms before you've sent a single byte of SQL. Your average query might take 2ms. You're spending 10-25x more on setup than on actual work.

A connection pool keeps a set of pre-established connections warm and hands them out to application threads on demand. When the thread finishes, the connection returns to the pool instead of being destroyed.

The three knobs that matter:

  • Max pool size โ€” the ceiling on concurrent DB connections from this app instance
  • Min idle โ€” connections kept warm even when traffic is low (avoids cold-start latency spikes)
  • Connection timeout โ€” how long a thread waits for a free connection before failing fast

The rule of thumb for sizing: connections = ((core_count ร— 2) + effective_spindle_count). For a typical 8-core app server hitting SSD-backed Postgres, that's around 17 connections. Most developers reflexively set max pool to 100 and wonder why their database melts under load. More connections is not more throughput โ€” past a certain point, the database spends more time context-switching than executing queries.

Real-world example: A team I worked with had 20 app instances, each with a pool size of 50, hitting a Postgres instance configured for 200 max connections. Under load, half the app instances couldn't get connections at all, and the database was at 100% CPU thrashing between 200 backend processes. We dropped pool size to 10 per instance (200 total, matching DB capacity), latency dropped 40%, and p99 stopped spiking. Less was more.

Watch for these pitfalls:

  • Long-running transactions hoarding connections โ€” one slow query holding a connection for 30 seconds starves every other thread
  • Connection leaks โ€” forgetting to return connections in error paths. Use try-with-resources, context managers, or RAII patterns religiously
  • Pool exhaustion masquerading as DB slowness โ€” if your app is "waiting on the database," check if it's actually waiting on the pool
  • Validation queries โ€” pools should test connections before handing them out (PgBouncer's server_check_query, HikariCP's connectionTestQuery) to avoid serving dead sockets

Add a layer when needed: For high-fanout architectures (many small services, serverless functions), put PgBouncer in transaction-pooling mode between your apps and the database. It multiplexes thousands of client connections onto dozens of real backend connections.

Key Takeaway: Connection pools exist because TCP and auth are expensive โ€” size them to match database capacity, not application demand, and remember that fewer connections often means higher throughput.

Tool Nobody Knows

chrt: Make the Kernel's Scheduler Do What You Actually Want

2026-05-19

Everyone reaches for nice when a background job hammers the CPU. nice is a hint. The scheduler weighs it against runtime, sleep history, and a dozen heuristics, then does roughly whatever it wants. If you need the kernel to actually care, you need chrt.

chrt (from util-linux, already on every Linux box) sets a process's scheduling policy, not just its weighting inside one policy. The policies are the levers the kernel actually pulls.

The two policies you'll use most

SCHED_IDLE โ€” runs only when nothing else wants the CPU. Stronger than nice 19: an idle-class task can sit on a busy core forever and never preempt a regular task. Perfect for rsync backups, video encodes, or anything that should disappear until the box is bored.

chrt -i 0 ffmpeg -i source.mkv -c:v libx264 output.mkv

SCHED_FIFO / SCHED_RR โ€” soft real-time. The process preempts every normal task on its CPU until it blocks. Audio engines (jackd, pipewire), trading loops, and ROS nodes live here. Priority 1โ€“99; higher beats lower.

sudo chrt -f 50 jackd -dalsa

Inspecting and changing live processes

Find out what a running process actually is:

$ chrt -p 12345
pid 12345's current scheduling policy: SCHED_OTHER
pid 12345's current scheduling priority: 0

Move a runaway rebuild to the idle class without killing it:

sudo chrt -i -p 0 $(pgrep -f "cargo build")

That's the wizard move โ€” your build keeps going, your tmux pane stays responsive, your video call doesn't stutter, and you didn't have to kill -STOP anything.

The real trick: combine with taskset and ionice

Scheduling policy controls CPU contention. taskset controls which CPUs the task can touch. ionice controls disk contention. They're orthogonal, and together they carve out actual cores and bandwidth.

# Pin to CPU 7, idle scheduling, idle I/O class
taskset -c 7 chrt -i 0 ionice -c3 restic backup /home

That backup will not perceptibly slow anything you're doing. It will also finish, eventually, because SCHED_IDLE still runs โ€” it just yields to anything else that wants the cycles.

Why this beats nice

nice -n 19 still gets meaningful CPU time when the system is loaded, because CFS gives every runnable task some share. SCHED_IDLE gets nothing while other tasks are runnable. The difference shows up the moment you have a CPU-bound foreground task โ€” nice 19 stutters, chrt -i 0 doesn't.

For real-time the comparison is even more lopsided: no nice level will preempt a regular task on a busy core. Only a real-time policy can do that, and chrt is how you opt in without writing C and calling sched_setscheduler(2) yourself.

Gotchas

  • Real-time policies need CAP_SYS_NICE. Without it you'll get EPERM. Either run as root or grant the cap: setcap cap_sys_nice+ep ./your-binary.
  • A SCHED_FIFO loop with no sleep() or blocking syscall will lock up a core. The kernel's RT throttler saves you (default: 950ms per second of wall clock), but don't rely on it.
  • chrt -m prints the valid priority ranges for each policy on your running kernel โ€” useful when a script assumes 1โ€“99 and you're on something exotic.
  • Children inherit the policy. Wrapping a shell script in chrt -i 0 idles every grandchild too โ€” usually what you want, occasionally a foot-gun.
Key Takeaway: nice asks the scheduler politely; chrt picks the policy class the scheduler actually enforces, and that's the only knob that matters once the system is loaded.

What If Engineering

What If Every Building Used Radiative Sky Cooling Instead of Air Conditioning?

2026-05-19

Air conditioning is brute-force thermodynamics: pump heat from inside to outside using compressors that burn ~10% of global electricity. But there's a colder reservoir we ignore โ€” outer space, sitting at 3 K. Between us and it lies an atmospheric transmission window from 8โ€“13 ฮผm where our atmosphere is nearly transparent to infrared. A surface tuned to radiate strongly in that band, while reflecting incoming sunlight, can dump heat directly into the cosmic void. No compressor. No electricity. Even at noon.

The physics is set by Planck's law and Kirchhoff's law. A blackbody at 300 K (room temp) radiates peak emission near 10 ฮผm โ€” right in the sky window. Stanford's Fan group demonstrated this in 2014 with a photonic stack of HfOโ‚‚ and SiOโ‚‚ layers, achieving ~5 ยฐC below ambient in direct sunlight. Subsequent metasurfaces and polymer films (PDMS on silver) have pushed practical cooling power to ~100 W/mยฒ during the day and ~150 W/mยฒ at night under clear skies.

The household math. A typical U.S. single-family home has a peak cooling load of about 3.5 kW (a 1-ton AC unit). At 100 W/mยฒ:

Area needed = 3,500 W / 100 W/mยฒ = 35 mยฒ

That's roughly a third of a 100 mยฒ roof. Plausible โ€” until you account for the COP problem. A modern AC has COP โ‰ˆ 4, so it delivers 3.5 kW of cooling for ~900 W of electricity. The sky cooler delivers cooling for free, but it can't deliver it where you want without a heat exchanger and a coolant loop. Add a small circulating pump (~50 W) and you're still beating AC by a factor of 15 in electricity.

Scaling to a city. New York City peaks around 10 GW of summer AC demand. To replace it:

Sky-cooler area = 10 ร— 10โน W / 100 W/mยฒ = 10โธ mยฒ = 100 kmยฒ

NYC's land area is 778 kmยฒ. You'd need ~13% of the city covered in radiative film โ€” essentially every flat rooftop. The rooftop area of NYC is estimated at ~100 kmยฒ. The numbers just barely close.

Where the physics bites back:

  • Humidity destroys the window. Water vapor absorbs across 8โ€“13 ฮผm. In Houston at 80% RH, cooling power drops to ~40 W/mยฒ. Miami and Mumbai are nearly hopeless during monsoon.
  • Clouds close the door entirely. An overcast sky radiates back at near-ambient temperature. Net cooling collapses to single watts.
  • You can't beat ambient by much. The ฮ”T below air temperature is bounded by the radiative flux divided by the convective heat transfer coefficient (~10 W/mยฒยทK). At 100 W/mยฒ net flux, that's ~10 ยฐC max sub-ambient โ€” enough for comfort cooling, not refrigeration.
  • Storage is the real problem. Peak cooling demand is at 3 PM. Peak radiative cooling is at 3 AM (no sun, dry air). You need a thermal mass โ€” a chilled-water tank in the basement, ~20 mยณ for a house โ€” to time-shift it.

The honest answer: replace 60โ€“80% of AC load in dry climates (Phoenix, Madrid, Denver), 20โ€“30% in humid ones. Globally, that's still a few hundred terawatt-hours of electricity recovered annually โ€” and the only moving parts are the photons leaving Earth.

Key Takeaway: Radiative sky cooling uses the 8โ€“13 ฮผm atmospheric window to dump heat directly into space at ~100 W/mยฒ, enough to replace most AC in dry climates โ€” but humidity, clouds, and the timing mismatch with peak demand mean it's a partner to compressors, not a replacement.

Wikipedia Rabbit Hole

Piezoelectric surgery

2026-05-19

Imagine a surgical instrument that can slice through dense bone in milliseconds but, if you pressed it against your fingertip, would do nothing at all. This isn't science fiction โ€” it's a real device sitting in oral surgery clinics right now, and it works by exploiting a peculiar quirk of physics that Pierre Curie discovered in 1880.

Piezoelectric surgery uses ultrasonic vibrations โ€” typically 24โ€“36 kHz โ€” driven by a piezoelectric crystal that physically deforms when electricity is applied to it. The tip oscillates at microscopic amplitudes (60โ€“200 micrometers), and that frantic micro-hammering shatters the mineralized matrix of bone. But here's the magic: soft tissue is too elastic to be cut at those frequencies. Nerves, blood vessels, the membrane lining your sinuses โ€” they simply absorb the vibration and bounce back unharmed.

This selectivity solved a problem that had quietly tormented surgeons for centuries. Traditional bone saws and burs are essentially miniature lumberjack tools โ€” they don't know the difference between a femur and the femoral artery running alongside it. A slip of the wrist during a sinus lift, a third molar extraction, or a spinal procedure could mean a severed nerve or a torn dural membrane. Piezosurgery, patented by Italian oral surgeon Tomaso Vercellotti in the late 1990s, made these procedures dramatically safer.

The applications have spread well beyond dentistry:

  • Maxillofacial surgery โ€” sculpting jawbones without risking the inferior alveolar nerve
  • Neurosurgery โ€” opening the skull without nicking the dura mater beneath
  • Otology โ€” operating on the tiny bones of the middle ear, where a millimeter of slop means deafness
  • Spinal surgery โ€” laminectomies adjacent to the spinal cord itself

There's a bonus effect too. The ultrasonic tip is paired with a cooling saline irrigant, and the cavitation produced by the vibrations creates a "blood-free" surgical field โ€” the same micro-bubble physics that powers ultrasonic jewelry cleaners is, in this case, blasting debris and blood out of the cut so the surgeon can actually see what they're doing.

The connection to everyday life is closer than you'd think. The same piezoelectric principle is what makes the click in your gas grill lighter, the beep in your microwave, and the quartz oscillator in your wristwatch tick exactly 32,768 times per second. Squeeze a quartz crystal, get voltage; apply voltage to a quartz crystal, get motion. Curie's brothers thought it was a curiosity. A century later, it cuts bone.

The deeper implication is almost philosophical: surgery has historically advanced by getting sharper โ€” better steel, finer edges, laser precision. Piezosurgery advances by getting more selective, exploiting the fact that different tissues have different mechanical resonances. The instrument doesn't need to be smarter than the surgeon's hand; it just needs to be deaf to the tissues it shouldn't touch.

Down the rabbit hole: A 19th-century physics curiosity discovered by Pierre Curie now lets surgeons saw through skull bone while leaving the brain membrane a millimeter away completely untouched.

Daily YT Documentary

The Dark History of the Toothbrush | Mini Documentary

2026-05-19

The Dark History of the Toothbrush | Mini Documentary

Channel: History on Everyday (226 subscribers)

We use a toothbrush twice a day without ever wondering where it came from โ€” and the answer turns out to be far stranger than expected. This mini documentary traces the toothbrush from its surprising origin in a 1770 English prison cell, where an inmate named William Addis carved the first bristled handle out of a leftover bone and some pig hair, to its transformation into a global hygiene staple.

The most interesting beat is the wartime pivot. Brushing teeth was a niche habit well into the 20th century, considered fussy or even effeminate in many places. It took military mandates during World War II โ€” when armies issued toothbrushes to every soldier and drilled daily brushing into the routine โ€” for the practice to spread into civilian households worldwide. Returning soldiers brought the habit home, and oral hygiene quietly became universal almost by accident.

Along the way the video touches on the shift from boar bristles to nylon (a DuPont innovation), the rise of fluoride, and why dentistry as a profession lagged behind the tool itself. It's the kind of small, focused history that reframes a mundane object as the product of prisons, pandemics, chemistry, and war logistics. A tight, well-researched watch from a tiny channel that deserves more eyes.

Why watch: A surprisingly rich origin story showing how a prison invention became universal only because WWII armies forced the habit on millions of soldiers.

Daily YT Electronics

DIY Electronic Dice Using Arduino UNO ๐ŸŽฒ | Smart 7-Segment Dice Project #stempark #arduino

2026-05-19

DIY Electronic Dice Using Arduino UNO ๐ŸŽฒ | Smart 7-Segment Dice Project #stempark #arduino

Channel: STEM PARK (390 subscribers)

Of a fairly thin batch of candidates (lots of shorts, clickbait amplifier circuits, and vague "build cool stuff" videos), this is the one that actually teaches a concrete, replicable project with several distinct learning concepts bundled together.

The electronic dice build is a classic beginner Arduino project because it touches on so many fundamentals in one small package. You get digital input handling via the push button (with the inevitable debouncing question), pseudo-random number generation using random() seeded properly so you don't get the same sequence on every reset, and 7-segment display driving โ€” either directly through seven GPIO pins or via a decoder IC like the 74HC4511. Mapping the digits 1-6 to the correct segment patterns is a nice exercise in bit manipulation or lookup tables.

It's also a project where you can see the abstraction layers: the physical button โ†’ digital signal โ†’ software logic โ†’ visual output. For someone just past blink-an-LED, this is the right next step. If the host walks through the wiring and code rather than just showing a finished build, it's genuinely useful weekend material.

Note: this batch was weak overall โ€” most other entries were shorts or clickbait-emoji "secret circuit" videos, so this won partly by default.

Why watch: A compact Arduino project that bundles button input, random number generation, and 7-segment display driving into one beginner-friendly build.

Daily YT Engineering

Why Jet Engine Blades Are Designed to Break

2026-05-19

Why Jet Engine Blades Are Designed to Break

Channel: What Holds It Up (37 subscribers)

This is a genuine engineering explainer about a counterintuitive design principle: controlled failure. Modern turbofan engines use hollow titanium fan blades โ€” and rather than being engineered for maximum strength at all costs, they're tuned to fail in a predictable, contained way when something goes catastrophically wrong, like a bird strike or fan blade out (FBO) event.

The reason this matters: an uncontained blade release at 10,000+ RPM turns a fan blade into a high-energy projectile capable of severing fuel lines, hydraulics, or cutting into the passenger cabin. So designers deliberately engineer the blade root, the containment ring, and the surrounding casing as a system โ€” the blade is allowed to shear off cleanly, and the Kevlar-wrapped containment shroud absorbs the energy. Certification literally requires demonstrating this with a live bird-strike test on the rig.

The hollow titanium construction is itself a clever bit of engineering โ€” diffusion-bonded and superplastically formed to get a stiff, light blade with internal trusswork. It's lighter (better fuel burn), and the geometry also tunes the failure mode.

From a 37-subscriber channel, so this is exactly the kind of small-creator technical content worth surfacing. The description suggests a real explanation rather than stock footage with narration.

Why watch: Learn why "designed to break" is sometimes the safest possible engineering choice, and how jet engines turn a worst-case failure into a survivable one.

Daily YT Maker

Amazing DIY Wrench From Motorcycle Sprocket | Genius Scrap Metal Tool

2026-05-19

Amazing DIY Wrench From Motorcycle Sprocket | Genius Scrap Metal Tool

Channel: SmartTools (8490 subscribers)

This pick comes from a slim field โ€” most of today's candidates are RC truck assembly montages, Shorts, or workshop b-roll with little instruction. SmartTools at least shows a complete scrap-to-tool fabrication sequence, which has real educational value if you're learning metalwork on a budget.

The build repurposes a discarded motorcycle sprocket โ€” already hardened steel with precision-cut teeth โ€” into a functional wrench. That's a smart material choice worth understanding on its own: sprockets are typically made from medium-carbon steel (often 1045 or similar), heat-treated for wear resistance, which makes them excellent stock for tools that need to resist deformation under torque.

Expect to see the usual scrap-metal-channel workflow: marking and layout, angle grinder cutting, drilling, shaping the jaw profile, and finishing. The interesting takeaways are less about copying the exact wrench and more about the general technique โ€” how to identify scrap stock with useful properties, how to lay out a jaw to fit a specific fastener, and how to clean up grinder work into something that looks intentional.

Caveat: SmartTools-style channels lean heavily on satisfying visuals and rarely narrate their reasoning. Watch with the sound off and pay attention to the jig setups, grinder angles, and order of operations โ€” that's where the real lessons live.

Why watch: A practical lesson in recognizing valuable scrap stock and shaping hardened steel into a usable tool with basic shop equipment.

Daily YT Welding

Welding mistakes that are ruining your metal projects #welding #explore

2026-05-19

Welding mistakes that are ruining your metal projects #welding #explore

Channel: Ninja Steel present (144 subscribers)

Caveat up front: today's batch is almost entirely hashtag-spam shorts from tiny channels, with no clear long-form educational content available. This pick is the least-bad of a weak field โ€” choose accordingly.

Of what's on offer, "Welding mistakes that are ruining your metal projects" at least frames itself around a teachable premise: common errors that produce weak or ugly beads, and how to avoid them. The description points toward cleaner, stronger beads by addressing root causes โ€” typically things like contaminated base metal, wrong amperage for the rod or wire, poor travel speed, incorrect work angle, or insufficient joint preparation.

For a beginner or self-taught hobbyist, a "mistakes" format can be genuinely useful because it inverts the usual tutorial: instead of one correct technique to memorize, you see the failure modes that explain why your welds look porous, undercut, or piled up. That diagnostic framing tends to stick.

That said, manage expectations โ€” at 144 subscribers and a short-form hashtag-heavy title, this is likely a brief clip rather than a deep dive. Treat it as a quick checklist to cross-reference against your own work, not a substitute for a proper tutorial from a more established teaching channel.

Why watch: A quick diagnostic checklist of common welding errors โ€” useful as a self-audit, though the rest of today's batch was hashtag-spam shorts with little real content.

All newsletters