13 newsletters today.
Daily Automotive Engines
2026-06-20
The wastegate flapper is the unsung hero of boost control — a small swinging disc that diverts exhaust gas around the turbine wheel to limit shaft speed. It sits inside the turbine housing on a pivot shaft, hanging over the wastegate port like a trapdoor. When the actuator pushes the arm, the flapper lifts off its seat and exhaust bypasses the turbine. Sounds simple. It isn't.
The sealing problem. The flapper has to seal against a flat or conical seat at exhaust temperatures hitting 900°C+ with pressure differentials of 30–50 psi across the disc. Unlike a poppet valve, it has no spring forcing it closed — only the actuator preload and exhaust backpressure trying to blow it open. Any gap leaks exhaust past the turbine, which means lost spool, sluggish throttle response, and unstable boost at low RPM. A worn flapper that won't seat is why a healthy-looking turbo can suddenly feel laggy.
Flapper geometry. Two common shapes:
The pivot arm linkage. The flapper attaches via a riveted or welded joint to a swing arm on a pivot shaft that passes through the housing wall. That shaft runs in an unlubricated bronze or Inconel bushing — no oil, just graphite-loaded material surviving by clearance and heat tolerance. As bushings wear, the flapper develops play, no longer hits the seat squarely, and starts to rattle at light throttle. That metallic clatter from a tired turbo at idle? It's almost always wastegate flapper rattle, not bearings.
Real-world example. The Ford 3.5L EcoBoost in the F-150 became notorious around 100,000 miles for wastegate rattle on both turbos. The flapper develops a few thousandths of slop in the bushing, then bounces against the seat under exhaust pulses at idle. Not a failure — just an annoyance — but Ford updated the actuator linkage geometry on later builds to preload the flapper harder against the seat at closed position.
Rule of thumb. Preload the wastegate actuator so the flapper sees about 5–8 lbs of seat force at fully closed position with no boost signal. Too little and it rattles and leaks. Too much and you've raised the cracking pressure, which delays wastegate opening and causes boost spikes before the actuator can overcome preload. Most factory turbos shoot for the low end of that range; tuners chasing overboost protection bump it up.
Daily Digital Circuits
2026-06-20
A dynamic node — a wire precharged high then conditionally pulled low by an evaluation network — is only "valid" while the capacitance on the node holds its charge. The instant evaluation ends, the node is floating: no transistor is actively driving it. Leakage current, sub-threshold conduction, and gate tunneling slowly bleed charge away. At 7nm, a floating node can lose its logic-high value in microseconds. If your clock stalls (debug halt, clock gating, scan pause), the node forgets what it was and the next gate sees garbage.
The fix is a keeper latch: a tiny, weak PMOS transistor whose gate is driven by an inverter sensing the dynamic node. When the node is high, the inverter output is low, which turns the keeper PMOS on, replenishing any leaked charge from VDD. When the evaluation network pulls the node low, the inverter flips high and shuts the keeper off — but only after fighting it briefly.
The sizing problem. The keeper must be strong enough to overcome leakage but weak enough that the evaluation network can overpower it in a reasonable time. This is called contention. Rule of thumb: size the keeper PMOS such that its drive strength is 5–10× weaker than the weakest NMOS pull-down path in the evaluation network. If the eval network has stacked NMOS transistors (say, a 4-input dynamic NAND), the effective pull-down is already weakened by series stacking, so the keeper must shrink further — often to a W/L ratio under 0.1× a minimum-size device.
Real example — Intel's L1 cache wordline drivers. Dynamic decoders in high-frequency caches use precharged wordlines. During functional operation, the precharge-evaluate cycle runs at GHz rates and leakage is negligible. But when the processor enters a low-power C-state with the clock stopped mid-evaluation, leakage would corrupt the decoded address within milliseconds. Every dynamic node in the decoder path carries a half-keeper (PMOS-only) staticizer, adding ~2% area but converting the otherwise-dynamic block into a quasi-static one that survives indefinite clock stalls.
Quick calculation. A 7nm floating node has roughly 0.5 fF of capacitance and leaks ~10 nA total. Time to drop from VDD=0.75V to the inverter threshold of 0.4V: t = C·ΔV/I = (0.5e-15)(0.35)/(10e-9) ≈ 17 μs. That's why uncontrolled clock stalls of even a few hundred microseconds will silently corrupt unkeepered dynamic logic.
Keepers also defend against noise injection: a coupled aggressor wire can capacitively kick a floating node below the next-stage threshold for a few hundred picoseconds. A keeper supplies recovery current and prevents the glitch from latching downstream.
Daily Electrical Circuits
2026-06-20
Rotary encoders convert shaft rotation into electrical pulses, giving you incremental position and direction information. Unlike potentiometers, they rotate continuously with no end stops and don't wear out a resistive element. They're everywhere: motor shafts, CNC handwheels, volume knobs, printer carriages, and robot joints.
The quadrature trick. An incremental encoder has two output channels, A and B, that produce square waves 90° out of phase. The phase relationship encodes direction: if A leads B, the shaft turns clockwise; if B leads A, counterclockwise. The pulse count encodes distance. A third channel, Z (index), pulses once per revolution for absolute reference.
Two physical flavors. Optical encoders use an LED and photodetectors reading through a slotted disk — high resolution (thousands of counts/rev), but sensitive to dust. Magnetic encoders use Hall sensors reading a multi-pole magnet — rugged, cheap, and immune to contamination, but lower resolution.
Decoding with hardware. Reading quadrature in software with polling is fragile: miss an edge and your count drifts forever. Use either a dedicated quadrature decoder peripheral (most ARM Cortex-M MCUs have one in their timer block — STM32's TIM1/2/3/4 all support "encoder mode") or pin-change interrupts on both A and B. The classic state machine looks at the previous and current (A,B) state — only 4 valid transitions exist per direction, anything else is noise or a missed edge.
4x decoding. If your encoder is rated at 1024 PPR (pulses per revolution), you actually get 4096 counts/rev by counting every edge on both A and B. That's free resolution — always enable 4x mode in your decoder peripheral.
Debouncing the cheap ones. The $1 mechanical detent encoders found in volume knobs bounce horribly — 1-5 ms of contact chatter per detent. Add a 10 nF cap from each output to ground and a 10 kΩ pull-up. The RC time constant (100 µs) filters bounces while passing legitimate edges. For high-speed optical encoders, skip the RC filter — it'll eat your pulses.
Real-world example. A NEMA 17 stepper motor with a 1000 PPR optical encoder on its shaft, driving a 5 mm pitch leadscrew. After 4x decoding: 4000 counts/rev × 1 rev/5 mm = 800 counts/mm, or 1.25 µm per count. That's machinist-grade positioning feedback with an STM32 timer doing all the decoding work in hardware — your firmware just reads TIM2->CNT whenever it wants the current position.
Maximum frequency rule of thumb. Your decoder must sample faster than 4× the highest expected edge rate. At 3000 RPM with a 1000 PPR encoder: 50 rev/s × 4000 edges/rev = 200 kHz edge rate. Hardware peripherals handle this easily; pin-change ISRs on an 8-bit AVR will choke.
Daily GitHub Zero Stars
2026-06-20
Language: Java
Among a sea of cryptically-named repos pushed at the same minute, this one stands out as an actual, described, human-scale software project. It's a Sudoku game built in Java with Swing, submitted as a Semester 3 Data Structures & Algorithms project. The description is refreshingly informative — it tells you exactly what's inside before you even click.
What makes it interesting is the surprisingly rich feature list for a student assignment:
This is the kind of repo that doesn't deserve to languish at zero stars. It's a tidy, focused undergraduate project that ties together algorithm theory (backtracking, constraint satisfaction), data structure choice (why a HashSet for row/column/box checks?), and end-user UX in one buildable artifact. That's actually a lot of pedagogical territory in one place.
Who'd benefit from a look?
The repo's biggest risk is the usual student-project one — documentation might be thin, and the code style may reflect a learner's hand. But that's also part of its charm: it's a snapshot of someone actually learning, and forks that polish it would make great portfolio contributions.
Daily Hardware Architecture
2026-06-20
The DRAM data bus is bidirectional — the same wires carry bits from the chip to the controller on reads and from the controller to the chip on writes. Like a single-lane road with traffic flowing both ways, the bus has to physically reverse direction when you switch between operations, and that reversal costs cycles you never get back.
The relevant timings are tRTW (read-to-write) and tWTR (write-to-read). On a typical DDR5-6400 module you'll see numbers like tRTW = 18 cycles and tWTR_L = 24 cycles. During these gaps, the bus is idle. No data moves. The DRAM is still drawing power, the controller is still queueing requests, but the wires are sitting in high-Z while the on-die termination flips polarity and signal integrity settles.
The math. A DDR5-6400 channel delivers 51.2 GB/s peak. A burst-of-8 read transfers 64 B in 4 clocks. If you do 16 back-to-back reads, that's 64 cycles of useful work. If you alternate read/write/read/write with 16-cycle turnarounds, you spend roughly half the time turning the bus around. Effective bandwidth collapses to ~25 GB/s. Rule of thumb: every read-to-write switch costs you a full burst's worth of bandwidth.
Why memory controllers reorder. This is why every modern memory controller batches reads and writes into write drains. The controller fills a write queue while servicing reads, and only when the write queue hits a high watermark (or read pressure drops) does it flip the bus, drain 16-32 writes in a row, and flip back. You'll see this in performance counters as bursty write bandwidth — the writes don't trickle out, they go in big convoys.
Real-world example. A streaming benchmark that does a[i] = b[i] + c[i] reads two cache lines and writes one. Naïvely, you'd expect 2/3 read bandwidth and 1/3 write bandwidth. But the controller batches: you'll see long stretches of pure read traffic, then a write drain, then more reads. If you add non-temporal stores (which bypass cache and go straight to the write queue), the write drain pressure increases and you can actually hurt throughput on a read-heavy mix. This is why memcpy implementations carefully tune their non-temporal store thresholds — typically only switching to NT stores above ~L3 cache size, where the bus turnaround cost is amortized over enough data to matter.
The controller's reordering is invisible to software but visible in uncore_imc performance counters: watch CAS_COUNT.RD vs CAS_COUNT.WR and you'll see the convoy pattern directly.
Daily Low-Level Programming
2026-06-20
When Linux exhausts memory and reclaim fails, it doesn't return ENOMEM to your allocator — it picks a victim process and sends SIGKILL. The mechanism is the OOM killer, and the victim is chosen by a score computed in oom_badness() at mm/oom_kill.c.
The base score is the process's resident memory footprint, in pages:
RSS (anonymous + file-backed mapped)This sum is normalized against total available memory and scaled to 0–1000. A process using 30% of RAM gets ~300. Higher score = more likely to die. The kernel iterates all eligible tasks, picks the highest score, and kills it (along with all threads sharing its mm_struct).
Userspace can bias the decision via two files in /proc/<pid>/:
Real-world example: systemd sets OOMScoreAdjust=-900 on sshd so you can still log in after an OOM event. Conversely, Kubernetes sets oom_score_adj=+1000 on BestEffort pods, +999 down to ~+2 on Burstable pods (scaled by requested memory), and a negative value on Guaranteed pods. That's literally how QoS classes get enforced under memory pressure — not by cgroup limits alone, but by biasing who the OOM killer eats first.
Rule of thumb: if your process is using X% of RAM and has oom_score_adj = A, its score is roughly 10·X + A. A process at 20% RAM with adj=+200 (score ~400) will be killed before one at 35% RAM with adj=0 (score ~350).
Two gotchas:
oom_lock. If the chosen victim doesn't release memory fast enough (e.g., stuck in uninterruptible I/O), the system livelocks — this is why vm.oom_kill_allocating_task=1 exists as an escape hatch: kill the requester, no scan.Check dmesg after a mysterious process death: the kernel logs the full task list with scores, RSS, and the victim's PID. It's the fastest forensic trail you have.
oom_score_adj, which is how systemd protects sshd and how Kubernetes enforces pod QoS under memory pressure.
RFC Deep Dive
2026-06-20
RFC: RFC 5201
Published: 2008
Authors: Robert Moskowitz, Pekka Nikander, Petri Jokela, Thomas Henderson
The internet has a foundational design flaw that we've papered over for forty years: an IP address means two completely different things at once. It is both where you are (a routing locator) and who you are (an endpoint identifier). TCP connections are bound to IP addresses, so when you change networks — laptop closes, phone hops from Wi-Fi to LTE — your "identity" changes, and every connection breaks. RFC 5201 introduces the Host Identity Protocol (HIP), a serious attempt to surgically separate these two roles at the protocol layer.
HIP inserts a new namespace between the network layer and the transport layer: the Host Identity (HI), which is a public key. From the HI, you derive a fixed-length Host Identity Tag (HIT), a 128-bit value formatted to look exactly like an IPv6 address (it lives in the 2001:20::/28 ORCHID prefix). Transport sockets bind to HITs, not IP addresses. The kernel maintains a mapping from HIT to the host's current set of IP locators, and that mapping can change without TCP ever noticing.
The handshake is where the cryptographic elegance lives. HIP uses a four-packet base exchange — I1, R1, I2, R2 — that performs a Diffie-Hellman key agreement and authenticates both peers via their HIs. But it has a clever wrinkle: the responder embeds a cryptographic puzzle in R1 that the initiator must solve before R2 will be accepted. The responder keeps no state until the puzzle solution arrives in I2. This makes HIP resistant to DoS state-exhaustion attacks in a way that TLS only later approximated with HelloRetryRequest cookies in TLS 1.3.
Key design decisions worth appreciating:
Why didn't HIP take over the world? The honest answer is deployment economics. Every host needs a HIP stack, applications need to learn that 2001:20::/28 "addresses" aren't routable, and DNS needs HIP RR records (RFC 5205) to bootstrap discovery. QUIC eventually solved the most painful symptom — connection survival across address changes — using connection IDs at the transport layer, requiring no kernel or network changes. HIP solved the deeper problem; QUIC solved the urgent one.
But HIP did not disappear. It runs in industrial networks, in Boeing's avionics, and inside some 3GPP mobility architectures. More importantly, its identifier/locator split idea is the conceptual ancestor of LISP, ILNP, WireGuard's static-key peers, and the cryptographic identity model in modern overlay networks like Tailscale and Nebula. Anyone designing a zero-trust mesh today is, knowingly or not, reinventing pieces of HIP.
Daily Software Engineering
2026-06-20
Most reader-writer locks penalize readers: they take a lock, touch a shared cache line, and serialize against other readers on the bus. For data that's read constantly but written rarely — system time, configuration, routing tables — that's a brutal tax. The seqlock (sequence lock) flips the deal: readers pay nothing on the fast path, and writers eat the cost.
The mechanism is a single monotonically increasing counter plus the protected data:
Readers never write to shared memory. No cache line bouncing, no atomic RMW, no contention between readers. The two counter reads bracket the data read like a tripwire: if a writer touched anything in between, the reader sees a mismatch and retries.
Real-world example: the Linux kernel uses seqlocks for jiffies and gettimeofday(). Millions of cores call gettimeofday() per second; the timekeeping code updates the clock source maybe 1000 times per second. With a mutex, every reader would serialize on a single cache line — catastrophic. With a seqlock, readers run in parallel and the timer interrupt handler is the only writer.
Rule of thumb: seqlocks win when the read:write ratio exceeds roughly 100:1 AND the protected data is small enough to read in a handful of instructions. If reads are long, retry probability under contention rises as P(retry) ≈ read_duration / write_interval, and you can livelock.
The non-obvious traps:
Use seqlocks for scalar snapshots: clocks, counters, small config structs. Reach for RCU when readers walk pointers. Reach for a mutex when writes are frequent or reads are slow.
Wikipedia Rabbit Hole
2026-06-20
Wikipedia: Read the full article
Imagine a crystal that remembers. Squeeze it and it makes electricity. Heat it and it makes electricity. Apply a voltage and it physically deforms — and then, crucially, it stays polarized even after you remove the field, holding onto its electrical orientation like a magnet holds magnetism. This is ferroelectricity, and it's one of the most quietly consequential phenomena in modern electronics.
The name is a beautiful misnomer. Ferroelectric materials usually contain no iron at all. They're called "ferro" because they behave by analogy to ferromagnets: both exhibit hysteresis loops, both have domains that flip under an external field, both have a critical temperature (the Curie point) above which the ordered state collapses into chaos. The pioneer Joseph Valasek discovered the effect in 1920 — in Rochelle salt, a crystal grown from cream of tartar that French pharmacists had been making since the 1600s as a laxative.
Here's the cascade that makes ferroelectricity so rich:
That "remembered" part is the killer feature. Lead zirconate titanate (PZT) and similar perovskites form the basis of FeRAM — ferroelectric random-access memory — which stores bits as the direction of crystal polarization. Unlike DRAM, it doesn't need constant refreshing. Unlike flash, it writes in nanoseconds and survives trillions of cycles. Sony's PlayStation 2 memory cards used FeRAM. Your transit card probably does too.
The connections sprawl outward. The same PZT crystals power ultrasound transducers in hospitals, drive inkjet printer nozzles by deforming on cue, stabilize image sensors in your phone camera, and generate the precise frequencies in quartz watches (though quartz itself is only piezoelectric, not ferroelectric — it's the simpler cousin). Bone is weakly piezoelectric, which is why exercise stimulates bone growth: mechanical stress generates tiny electrical signals that osteoblasts respond to.
And then it gets weird. In 2020, researchers discovered ferroelectricity in hafnium oxide films just a few atoms thick — a material the semiconductor industry already mass-produces by the kilometer as gate insulators. Suddenly, every silicon foundry on Earth had the ability to build ferroelectric transistors into existing chips. The race to commercialize ferroelectric FETs for neuromorphic AI hardware — chips that compute the way brains do — is now one of the hottest contests in semiconductors.
Daily YT Documentary
2026-06-20
Channel: American Arrest Files (432 subscribers)
Most people have a vague sense that police need "probable cause" to search a home or seize property, but few understand what that phrase actually requires in practice. This short explainer from a small criminal-justice channel walks through the chain of reasoning that turns raw evidence into a judge-signed search warrant — the legal threshold investigators must clear, the affidavit they have to draft, and the role the magistrate plays as a check on overreach.
Note: this is a brief format video, and the channel leans toward the "know your rights during police stops" genre rather than rigorous legal scholarship. None of today's candidates were strong long-form documentaries — most were shorts, AI-narrated explainers, hashtag-spam thumbnails, or stock-footage travel reels. This one was picked because it tries to teach a specific, useful concept that ordinary viewers genuinely benefit from understanding, drawn from a niche channel covering arrest procedure.
Worth a few minutes if you've ever wondered what stands between a hunch and a kicked-in door.
Daily YT Electronics
2026-06-20
Channel: 1 Day 1 Project (5 subscribers)
This is a genuinely educational digital electronics project that walks through building a binary counter on a breadboard using the classic 74LS47 BCD-to-seven-segment decoder/driver. Unlike most LED-blink tutorials in the candidate pool, this one engages with real digital logic concepts: binary-coded decimal encoding, decoder ICs, and how to drive a common-anode seven-segment display.
The 74LS47 is a foundational chip in any digital electronics curriculum — it takes a 4-bit BCD input and translates it into the seven outputs needed to light up the correct segments for digits 0-9. Pairing it with a counter IC (likely a 74LS90 or 4026) to step through values is a classic exercise that teaches viewers how separate logic blocks combine into a working subsystem. The description mentions going from schematics to prototyping, which suggests the maker actually shows the design reasoning rather than just "connect wire A to wire B."
At only 5 subscribers, this is exactly the kind of small-channel content worth surfacing. The project teaches transferable skills — reading datasheets, understanding TTL logic levels, and breadboard layout for multi-IC circuits — that apply directly to FPGA work, microcontroller projects, and retro computing builds.
Daily YT Engineering
2026-06-20
Channel: Chaos Ledger (40 subscribers)
The Ford Pinto is one of the most cited case studies in engineering ethics curricula, and for good reason: it's where mechanical design, cost-benefit analysis, and human life collided in the most uncomfortable way possible. This video from a tiny channel (40 subs) walks through the actual design decisions that made the Pinto's rear-end collisions so catastrophic — the placement of the fuel tank behind the rear axle with only nine inches of crush space, the unprotected filler neck that tore loose on impact, and the bolts on the differential housing that punctured the tank.
What separates a good Pinto explainer from a bad one is whether it engages with the engineering trade-offs rather than just moralizing. The infamous Ford cost-benefit memo (the $11-per-car fix vs. projected burn deaths) is a foundational artifact in how engineers are taught to think about risk, liability, and the limits of utilitarian calculation. Understanding why that math was wrong — both technically and ethically — is more useful than any abstract ethics lecture.
Caveat: at 40 subscribers and a punchy title, production quality may be modest. But the topic itself is dense enough with real engineering content (crash dynamics, fuel system design, FMVSS 301 standards) that even a competent walkthrough teaches something durable.
Daily YT Welding
2026-05-29
Channel: Workshop 6 (8 subscribers)
Note: this week's crop is unusually weak — most candidates are hashtag-spam shorts promoting modular 3D welding tables, a factory product review, and a furniture timelapse with no welding instruction. This is the least bad pick, and genuinely the only one showing a fabricator doing real work.
A welding table is the most-used tool in any metal shop, and buying a commercial one runs into thousands of dollars. This video from a tiny 8-subscriber channel shows the alternative: scavenging scrap stock and turning it into a functional, flat, heavy work surface.
What makes a scrap build genuinely instructive is watching how the builder solves the problems a kit eliminates for you — squaring a frame from material that isn't perfectly straight, managing weld distortion on a large flat top, choosing leg geometry that resists racking, and deciding where to add gussets versus where they'd just get in the way of clamping. These are transferable skills that apply to any fixture or jig you'll ever build.
Small-channel scrap builds also tend to be honest about mistakes in a way polished content isn't, which is where the real learning lives.
