26 newsletters today.
Abandoned Futures
2026-05-31
In 1962, the U.S. Navy issued a tri-service contract for a research aircraft to settle a question the Pentagon had been arguing about for a decade: which VTOL configuration actually worked? Tilt-wings (XC-142), tilt-jets (XFV-12), tail-sitters (Convair XFY-1) — every concept had crashed, stalled, or failed to transition. Bell Aerosystems proposed something different: four ducted fans, each in a tilting nacelle, two on the forward fuselage and two on the rear. The Navy bought two prototypes for $28 million. The result was the Bell X-22A, and it is the most successful VTOL configuration almost nobody remembers.
First flight came on March 17, 1966, at Bell's Niagara Falls plant. The aircraft was powered by four General Electric YT58-GE-8D turboshafts totaling 5,000 shp, cross-shafted so any single engine failure still drove all four ducts. The 7-foot ducted fans were a deliberate choice: a shrouded propeller produces roughly 40% more static thrust than an open rotor of the same diameter, and the duct lip itself generates lift in forward flight. The nacelles rotated from 90° (hover) to 0° (cruise) on a single hydraulic actuator per duct.
It worked. The X-22A achieved full transition from hover to forward flight and back — something the XC-142 managed inconsistently and the XFV-12 never managed at all. It hit 255 knots in cruise, hovered out of ground effect, and demonstrated the first variable stability flight control system in a VTOL, letting engineers dial in different handling characteristics in flight to simulate future aircraft. Over 500 flight hours across both prototypes through 1984, the X-22A logged more transition flights than every other American tilt-VTOL combined.
So why didn't the Navy build it? Vietnam ate the budget. By 1967, the tri-service VTOL transport requirement had been quietly shelved — the Marines needed helicopters now, not research aircraft in three years. The X-22A's role degenerated from "prototype for production" to "variable-stability testbed," which is how it survived to 1984 but never spawned a successor. The second prototype crashed on its eighth flight in 1966 (hydraulic failure, both pilots survived), and Bell's attention shifted to the program that would eventually become the V-22 Osprey — a tilt-rotor, not a tilt-duct.
Here's the case for 2026: the tilt-duct beats the tilt-rotor on every metric that matters for urban air mobility. Ducted fans are quieter (the shroud blocks tip vortex noise, the dominant rotorcraft signature), safer on the ground (no exposed blades at head height — the Osprey has killed people who walked into its proprotors), and more efficient in hover per unit disc area. Modern composites solve the X-22A's weight problem (it was 60% over spec at 18,000 lb). Distributed electric propulsion eliminates the cross-shafting nightmare entirely — Joby, Archer, and Beta are all building variants of this idea right now without acknowledging that Bell flew the architecture 60 years ago. The X-22A's flight data, sitting in NASA archives, would save any eVTOL startup two years of envelope expansion.
ArXiv Paper Digest
2026-05-31
Imagine you and four friends are trying to agree on where to eat dinner, except you're all texting from different cities, some of your phones randomly die, and a couple of you might be lying about what messages you received. Somehow, you all need to end up at the same restaurant. That's the job of a consensus protocol — the algorithm that lets a bunch of computers agree on something even when machines crash, networks drop messages, or nodes behave badly. These protocols (Raft, Paxos, PBFT, and their cousins) sit underneath basically everything: databases, cloud storage, blockchains, and the financial systems that move trillions of dollars.
Here's the scary part: bugs in these protocols can cause data corruption, lost transactions, or split-brain scenarios where two halves of a system both think they're in charge. And they're notoriously hard to find. The bugs that matter most aren't typos — they're logic bugs that only surface in specific sequences of events, like "node A crashes, then node B becomes leader, then a stale message from A arrives mid-election." Human reviewers miss these. Traditional testing tools miss them. And it turns out LLMs miss them too when you just throw code at them and ask "any bugs?"
The authors built Agora, a system of cooperating LLM agents that tries to find these deep bugs autonomously. The key insight: instead of asking an LLM to spot bugs by reading code (which it's bad at for stateful, multi-stage logic), Agora gets the LLM to generate hypotheses about what could go wrong — "what if a leader election happens during a log replication?" — and then systematically tests each hypothesis against the actual protocol implementation.
This is a meaningful shift in how to use LLMs for hard verification work:
The result is a tool that can find protocol-level bugs in production-grade consensus implementations — the kind of bugs that historically required PhD-level distributed systems experts staring at TLA+ specs for weeks.
Daily Automotive Engines
2026-05-31
For decades, fuel systems were a continuous loop. The pump pushed fuel from the tank to the rail, the regulator at the rail bled off excess back to the tank via a return line. Simple, robust, and self-cooling — the circulating fuel kept the pump happy. But starting in the mid-1990s, that return line started disappearing. Today, virtually every new gasoline car runs a returnless fuel system.
The reason wasn't performance — it was evaporative emissions. Fuel returning to the tank arrived hot, having absorbed heat from the engine bay. Hot fuel evaporates aggressively, overwhelming the EVAP charcoal canister and pushing hydrocarbons past it. EPA Tier 2 and LEV II regulations made this untenable.
Two architectures emerged:
Real-world example: Ford's 4.6L modular V8 transitioned from returnless mechanical (1999) to ERFS (2003+ on the Mustang GT). Tuners noticed early ERFS cars would log a "Fuel Pump Driver Module Lack of Communication" code when the FPDM under the trunk floor corroded — a notorious failure that caused stalling. The fix: the module is just a PWM controller; you can sometimes test by jumping it to run the pump at 100% duty.
The pressure-flow rule of thumb: Injector flow scales with the square root of pressure differential. A returnless system with rail-mounted MAP referencing means pressure stays constant absolute (say, 58 psi), so at 20 inHg vacuum the differential to the manifold is actually higher than a vacuum-referenced return system would deliver. Math: New flow = Old flow × √(New ΔP / Old ΔP). Swap a vacuum-referenced 43 psi regulator for a fixed 58 psi returnless setup at idle and you've increased injector flow ~16% before the ECU compensates.
Trade-offs: Returnless pumps run hotter (no cooling flow), so they're typically submerged in tank fuel for thermal management. Low fuel level becomes more dangerous to pump life. And diagnostically, you've lost the ability to clamp the return line as a quick pressure test — you now need a scan tool to command pump duty cycle.
Daily Debugging Puzzle
os.path.join Absolute-Path Trap: The Base Directory That Quietly Vanishes2026-05-31
This helper resolves a file path inside the authenticated user's home directory. It's meant to be a thin wrapper that callers use everywhere — download endpoints, file viewers, log tailers. The base directory is always trusted; only the second argument comes from the request. What could go wrong?
import os
USER_ROOT = "/srv/app/userdata"
def resolve_user_file(user_id: str, requested: str) -> str:
"""Return the absolute path to a file inside the user's sandbox."""
user_home = os.path.join(USER_ROOT, user_id)
full = os.path.join(user_home, requested)
# Defence in depth: reject obvious traversal attempts.
if ".." in requested.split(os.sep):
raise PermissionError("path traversal blocked")
return full
# Looks fine on the happy path:
print(resolve_user_file("alice", "notes/today.md"))
# /srv/app/userdata/alice/notes/today.md
# And it blocks the obvious attack:
print(resolve_user_file("alice", "../bob/notes/today.md"))
# PermissionError: path traversal blocked
# But this returns /etc/shadow:
print(resolve_user_file("alice", "/etc/shadow"))
os.path.join has a behavior most people learn the hard way: if any argument after the first is an absolute path, every earlier argument is silently discarded. From the docs: "If a component is an absolute path, all previous components are thrown away and joining continues from the absolute path component."
So os.path.join("/srv/app/userdata/alice", "/etc/shadow") returns "/etc/shadow". The USER_ROOT sandbox you carefully constructed is gone. Worse, the .. check passes — there are no .. components in /etc/shadow — so the function happily hands back a path that escapes the sandbox without ever traversing out of it.
This is a real CVE pattern. It has shipped in static-file servers, template loaders, and "upload to user folder" endpoints. The reason it slips through review is that the bug looks like correct, idiomatic code: of course you use os.path.join to combine paths. The Python docs even recommend it over manual "/" concatenation, which would actually have been safer here ("/srv/app/userdata/alice" + "/" + "/etc/shadow" would yield a nonsense path that open() rejects).
Don't trust join to enforce containment. Resolve to a canonical absolute path, then verify it lives under the sandbox using os.path.commonpath or Path.is_relative_to (3.9+). And use os.sep-aware comparisons — a naive startswith matches /srv/app/userdata-evil.
from pathlib import Path
USER_ROOT = Path("/srv/app/userdata").resolve()
def resolve_user_file(user_id: str, requested: str) -> Path:
user_home = (USER_ROOT / user_id).resolve()
# Strip leading separators so absolute inputs become relative.
candidate = (user_home / requested.lstrip("/\\")).resolve()
if not candidate.is_relative_to(user_home):
raise PermissionError("path escapes sandbox")
return candidate
The crucial steps: resolve() collapses .. and symlinks before the containment check (otherwise TOCTOU strikes again), and is_relative_to does a proper component-wise comparison rather than a string prefix match.
os.path.join is a string concatenator, not a security boundary — any absolute argument silently erases the base directory, so always resolve() and verify containment explicitly.
Daily Digital Circuits
2026-05-31
You already know H-trees: a balanced binary tree of buffers that delivers the clock to every flip-flop with matched wire lengths. H-trees work great up to about 2–3 GHz. Above that, on chips with hundreds of millions of flip-flops, the tree starts losing the skew battle. The fix at the top of the frequency curve is to throw the tree away at the last level and replace it with a clock mesh.
A mesh is exactly what it sounds like: a giant grid of wires shorted together, driven by many buffers in parallel from a shorter tree above. Every flip-flop taps the nearest mesh wire. Because the entire grid is one electrical node, all taps see essentially the same voltage transition at the same time — the mesh averages out driver mismatches, OCV (on-chip variation), and load imbalance.
Why trees fail at high frequency: In a tree, the last buffer driving each leaf is on its own. If that buffer is a slow corner and its neighbor is a fast corner, you eat the full delta as skew. In a mesh, fast drivers help charge the wire seen by slow drivers — they're literally tied together. Skew drops from ~30 ps (tree) to ~2–5 ps (mesh) on the same node.
The cost is brutal:
Real-world example: IBM POWER and high-end Intel/AMD server CPUs use mesh distribution above ~4 GHz. The IBM POWER8 clock mesh was driven by ~1000 final-stage buffers feeding a grid covering the whole die, achieving sub-5-ps global skew at 4+ GHz. A pure H-tree at that frequency would have needed timing margin so loose the chip wouldn't have been competitive.
Rule of thumb: Mesh capacitance ≈ (die area in mm²) × (metal-stack cap density, ~0.2 pF/mm² for top metals). Mesh power = ½ × C × V² × f. For a 400 mm² die at 1V, 4 GHz: P = 0.5 × 80 pF × 1V² × 4 GHz ≈ 160 mW just to slosh the mesh — before any flop switches. That's why mesh is reserved for chips where skew, not power, is the binding constraint.
Hybrid designs are now standard: tree to a regional mesh, mesh inside each region. You get most of the skew benefit at a fraction of the power.
Daily Electrical Circuits
2026-05-31
The Gilbert cell isn't just for multiplying audio signals — its most important commercial use is as a frequency mixer in every radio receiver, cell phone, and software-defined radio you own. A mixer takes two inputs at frequencies fRF and fLO and produces outputs at the sum and difference frequencies. This is how your FM tuner converts a 100 MHz station down to a 10.7 MHz intermediate frequency (IF) that's easy to filter and amplify.
The trig identity that makes it work: cos(ωRFt) × cos(ωLOt) = ½[cos((ωRF−ωLO)t) + cos((ωRF+ωLO)t)]. Multiplication in the time domain produces sum and difference frequencies. A lowpass filter after the mixer keeps the difference (the IF), discarding the sum.
Why the Gilbert cell specifically: A diode-ring mixer also multiplies, but it has conversion loss (typically 6–7 dB) because diodes are passive. The Gilbert cell is active — it provides conversion gain (10–20 dB typical) while still doing four-quadrant multiplication. The lower differential pair is driven by the RF signal (small, linear regime), and the upper two cross-coupled pairs are switched hard by the LO (large signal, ±400 mV is enough to saturate). The LO acts like a polarity-reversing switch synchronized to ωLO — which mathematically is multiplication by a square wave.
The square-wave gotcha: Because the LO drives the upper pairs into hard switching, you're actually multiplying by a square wave, not a pure sinusoid. A square wave contains odd harmonics (3fLO, 5fLO, 7fLO...), so your mixer also produces spurious responses at fRF ± 3fLO, etc. This is why you need a preselector filter before the mixer.
Real example — Mini-Circuits SBL-1 vs SA612: The SBL-1 is a passive diode-ring mixer: 7 dB conversion loss, needs +7 dBm of LO drive, but has excellent linearity (IIP3 ≈ +15 dBm). The NXP SA612 is a Gilbert-cell active mixer: +14 dB conversion gain, needs only −10 dBm LO drive, runs on 5 V at 2.4 mA — perfect for a battery-powered shortwave receiver. The tradeoff: SA612 has poor IIP3 (around −15 dBm), so it overloads in strong-signal environments.
Rule of thumb: For receiver design, your noise figure at the antenna is dominated by the first active stage. If you put a Gilbert cell mixer first (no LNA), expect NF ≈ 5–8 dB. Add an LNA with NF = 1.5 dB and 15 dB gain ahead of it, and Friis's formula gives you a system NF very close to the LNA's 1.5 dB — the mixer's noise contribution is divided by the LNA gain.
Daily Engineering Lesson
2026-05-31
A butterfly valve is a quarter-turn valve where a disc mounted on a shaft rotates within the flow path. Rotate the disc 90°: from fully blocking the pipe (closed) to lying edge-on with the flow (open). It's the workhorse valve for large-diameter, low-to-moderate-pressure service — water treatment plants, HVAC chilled water loops, fire mains, and any place a gate valve would be enormous and expensive.
Why butterflies dominate large pipes: Compare a 12-inch gate valve (heavy, tall, expensive, slow to actuate) with a 12-inch butterfly (thin wafer body sandwiched between flanges, light, cheap, opens in a quarter turn). The butterfly's face-to-face dimension is often 1/5 that of a gate valve, and it weighs a fraction as much.
Three main types:
The flow characteristic problem: Butterfly valves have a highly nonlinear flow curve. At small openings (0–20°), almost no flow passes — the disc is still nearly blocking. Between 60–90°, the flow barely changes with angle. The useful control range is roughly 25°–70°. Trying to throttle near closed causes the disc to flutter and erode the seat.
Rule of thumb — Cv sizing: A fully open butterfly valve typically has a flow coefficient roughly Cv ≈ 20 × D², where D is nominal diameter in inches. So a 6-inch valve has Cv ≈ 720. Flow rate in GPM ≈ Cv × √(ΔP), where ΔP is pressure drop in psi. A 6-inch valve with 4 psi drop passes: 720 × √4 = 1,440 GPM.
Watch out for:
Forgotten Books
2026-05-31
Book: The Presto book of menus & recipes by Mrs. Della Thompson Lutes (1928)
Read it: Internet Archive
Tucked into the front matter of a humble fifty-cent promotional booklet from Presto Canning Products is an observation so quietly devastating that it still applies almost a century later. Della Thompson Lutes, director of the Modern Priscilla Proving Plant and a prolific homemaking author, opens her little book with this admission:
This is not a book of canning directions, but one of suggestions for using home-canned foods. A brief description of methods is given to show how easy it is to stock the storeroom shelves with pure, delicious home-canned fruits and vegetables… It is much easier to get recipes for canning than to get new and interesting menus and recipes for using your own canned goods.
Read that twice. In 1928 — at the absolute peak of American home canning, when "hundreds of quarts of garden products" per household was unremarkable — Lutes identified a structural blind spot in the entire preservation literature. Every cookbook, every USDA bulletin, every Ball Brothers pamphlet taught women how to put up food. Almost none taught them what to do with the rows of jars staring down from the cellar shelves in February.
The Presto book was a corporate giveaway — Cupples Company published it to sell jars, caps, and rings — but Lutes treated it as a serious editorial intervention. She wasn't writing for novices; she was writing for the woman who already had the pantry and was running out of ideas for it.
The pattern she diagnosed has, if anything, gotten worse. Search "home canning" on YouTube today and you will find thousands of videos on water-bath processing, pressure canning, jar sterilization, headspace measurement, and the Ball Blue Book. Search "what to cook with canned tomatoes from last summer" and you find a comparative wasteland — generic pasta sauce recipes that don't care whether the tomatoes came from a jar you sealed in August or a can from Aldi.
The deeper point Lutes was making, embedded in her ode to hospitality, is that preservation only matters if it terminates in a meal somebody eats:
And, again, hospitality depends on food. Simple and homely it may be, but to break bread with a guest is…
This is the half of the food system that the modern homesteading revival has largely missed. The Instagram aesthetic stops at the gleaming jar on the shelf. Lutes understood that the jar is not the product — the February dinner is the product. A pantry of unused preserves is a failure dressed up as a success.
If you have ever opened a chest freezer to find unidentifiable foil packets from 2023, you have lived the exact problem a Michigan housewife was diagnosing in 1928.
Forgotten Darkroom
2026-05-31
Book: DTIC AD0406460: Development of Periscope for Thrust Chamber Combustion Analysis by Defense Technical Information Center (1963)
Read it: Internet Archive
In May 1963, an engineer named J.D. O'Donnell at Aerojet-General's Liquid Rocket Plant in Sacramento submitted Volume 6 of a final report to the Air Force Ballistic Systems Division. Its subject was so audacious it almost reads like science fiction: a periscope designed to peer directly into the combustion chamber of a firing liquid-fuel rocket engine.
DEVELOPMENT OF PERISCOPE FOR THRUST CHAMBER COMBUSTION ANALYSIS... Prepared by AEROJET-GENERAL CORPORATION, Liquid Rocket Plant, Sacramento 9, California. Prepared for BALLISTIC SYSTEMS DIVISION, AIR FORCE SYSTEMS COMMAND.
Stop and consider what this means. The inside of a liquid rocket thrust chamber is one of the most hostile environments humans have ever engineered: temperatures above 3,000°C, pressures over 1,000 psi, supersonic gas flow, and a chemical environment that destroys most known materials. The report describes Aerojet's effort to build an optical instrument that could survive long enough to send back images of what was actually happening inside.
Why does this matter? Because in 1963, rocket engine combustion was still largely a black box. Engineers knew what went in (propellant and oxidizer) and what came out (thrust, sometimes catastrophic failure), but the actual dynamics inside — injector spray patterns, mixing zones, the dreaded "combustion instability" that destroyed engines like the F-1 during early Saturn V development — could only be inferred from pressure traces and the wreckage of test stands.
The Aerojet periscope was an attempt to see. By routing the optical path through a small cooled window and a series of mirrors, the instrument could relay live images to a camera safely positioned outside the blast zone. This was the same era when engineers working on the F-1 engine at Rocketdyne were detonating bombs inside running engines to characterize their stability margins — direct visual observation was a far gentler alternative.
What's striking is how this technique has been forgotten by the general public even as it became standard practice. Modern rocket developers — SpaceX, Blue Origin, Rocket Lab — routinely instrument their engines with optical access ports and high-speed cameras. When you watch slow-motion footage of a Raptor engine ignition or see those mesmerizing internal views of a combustion chamber on YouTube, you're seeing the descendants of this 1963 periscope.
The lineage runs further: borescopes for inspecting turbine engines, optical access ports in internal combustion engine research, and the schlieren imaging systems used to visualize shock waves all trace back to the same insight — that even in the most violent environments, if you can route photons out cleverly enough, you can watch physics happen in real time.
The forgotten lesson here isn't really about periscopes. It's about a methodological commitment: when an opaque system is failing in ways you don't understand, the answer is rarely more sensors. Sometimes it's literally just looking inside.
Forgotten Patent
2026-05-31
Heinrich Hertz never filed a patent. He famously dismissed his own discoveries as having "no use whatsoever." But buried inside his 1887 paper "Ueber einen Einfluss des ultravioletten Lichtes auf die electrische Entladung" ("On an Effect of Ultraviolet Light upon the Electrical Discharge") is one of the most consequential observations in physics — an accidental side-note that would later shatter classical physics and earn Einstein his Nobel Prize.
Hertz was trying to prove James Clerk Maxwell's prediction that electromagnetic waves existed. His apparatus was elegant: a spark-gap transmitter on one side of his Karlsruhe lab, a loop of wire with a tiny gap on the other — the receiver. When the transmitter sparked, a faint matching spark would jump the receiver's gap, proving waves had crossed the room invisibly. This was the experimental birth of radio.
But Hertz noticed something strange. The receiver sparks were brighter and easier to trigger when ultraviolet light shone on the gap's metal electrodes. He enclosed the receiver in a dark box — sparks weakened. He cut a quartz window — sparks returned (quartz passes UV; glass blocks it). He methodically catalogued the effect across two papers, then moved on. He had no theory to explain it, and he was chasing bigger game.
That "side effect" was the photoelectric effect: light knocking electrons out of a metal surface. And it broke physics.
Classical wave theory predicted that brighter light should knock electrons out with more energy. Experiments showed the opposite — brightness only changed how many electrons flew off, while color (frequency) determined their energy. Dim ultraviolet light worked; intense red light did nothing. The wave model couldn't explain it.
Then in 1905, a 26-year-old patent clerk in Bern named Albert Einstein proposed a radical fix: light comes in discrete packets — quanta, later called photons. Each photon carries energy proportional to frequency (E = hf). One photon, one electron, threshold behavior. The math worked perfectly. Einstein won the 1921 Nobel Prize not for relativity, but for explaining Hertz's accidental observation.
The downstream patent landscape is staggering:
The deepest irony: Hertz's experiment was designed to confirm light as a wave. The footnote he barely understood ended up proving light is also a particle — kicking off wave-particle duality, quantum mechanics, and ultimately the semiconductor revolution that underpins this very webpage.
Hertz died in 1894 at age 36, never knowing he had cracked open both radio and quantum physics in the same room, with the same sparks. His unit of frequency — the hertz — sits in every datasheet, but his quieter discovery is what lets your phone's camera see.
Daily GitHub Zero Stars
2026-05-31
Language: TypeScript
OncBrain is a refreshingly specific project: a curated, AI-summarized digest of oncology meeting tweets. Major cancer conferences like ASCO, ESMO, and ASH generate a firehose of clinical commentary on social media — trial readouts, abstract reactions, hallway gossip about practice-changing data — and almost none of it ever makes it into a structured form that a busy clinician or researcher can scan in five minutes.
This repo takes a shot at solving exactly that problem. By scraping conference-related posts, clustering them by topic (drug, trial, indication), and running them through an LLM summarizer, it produces a digest that's far more useful than a raw timeline. The TypeScript stack suggests a web-deployable frontend, likely with scheduled background jobs pulling and processing tweet data between conference sessions.
Why this is interesting:
Who would benefit: Practicing oncologists who can't attend every conference, pharma medical affairs teams tracking competitive readouts, science journalists, and patient advocates trying to keep up with rapidly-evolving treatment landscapes. Also useful as a reference architecture for anyone building domain-specific content-digest tools — the combination of social scraping, topic clustering, and LLM summarization is a reusable recipe.
A polished version of this could easily become a paid newsletter or a clinical decision-support side tool.
Daily Hardware Architecture
2026-05-31
When you have a multi-level cache hierarchy, you face a question that sounds simple but has enormous consequences: if a line is in L1, must it also be in L2? The answer defines your inclusion policy, and it shapes everything from coherence traffic to effective cache capacity.
There are three options:
Inclusive (Intel's traditional choice through Broadwell): Snoops from other cores only need to check L2. If a line isn't in L2, it can't be in L1 either. This makes coherence cheap — but it costs you. Your effective capacity is just L2's size, because L1's contents are duplicated. Worse, when L2 evicts a line, it must back-invalidate L1, even if L1 was using that line heavily. A hot L1 line can get nuked because L2 chose a victim poorly.
Exclusive (AMD's traditional choice, K7 through Zen 2 for L2/L3): Effective capacity = L1 + L2. Great for capacity, but every L1 miss that hits L2 requires a swap: the L2 line moves to L1, and the L1 victim moves to L2. Snoops must check both levels.
NINE (Intel Skylake-X onward, most ARM big cores): The pragmatic middle. L2 doesn't promise to hold L1's contents, but doesn't actively evict them either. You need a separate snoop filter (often called a coherence directory) to track what's in L1 without inclusion. Skylake-X's massive 1MB L2 made inclusion too expensive — duplicating 1MB into L3 wasted die area — so Intel switched.
Concrete example: On Haswell (inclusive L3), a single core thrashing 6MB of data could evict useful lines from other cores' L1/L2 caches via back-invalidation, because L3 evictions cascade upward. On Skylake-X (NINE L3), this cross-core interference largely disappears.
Rule of thumb: If L2 is less than ~4× the size of L1, inclusion wastes too much capacity to justify the coherence simplicity. Intel's switch happened when L2 grew from 256KB (8× L1's 32KB) to 1MB (32× L1) — at that ratio, the duplication cost stayed reasonable, but once L3 sizes per core stopped growing proportionally, inclusion at L3 became indefensible.
The hidden cost everyone forgets: back-invalidations show up as L1 misses in your profiler with no obvious cause. If you see mysterious L1 misses on inclusive hardware, suspect another core's L2/L3 activity.
Hacker News Deep Cuts
2026-05-31
Link: https://blog.tymscar.com/posts/v100localllm/
HN Discussion: 1 points, 0 comments
The URL slug gives the game away: v100localllm. Someone bought an NVIDIA Tesla V100 — a card that retailed for around $10,000 when it shipped in 2017 and powered a meaningful fraction of the world's deep learning research — for £200 on the secondhand market, and crammed it into a consumer gaming rig to run local LLMs.
This is the kind of post that rewards a careful read because the practical obstacles are non-trivial and the writeup almost certainly walks through them:
The payoff is 32GB of HBM2 memory at ~900 GB/s bandwidth — enough to comfortably run a 30B-parameter model in fp16, or much larger ones quantized. For comparison, a new RTX 4090 has 24GB at 1 TB/s and costs ten times as much. The V100's FP16 tensor performance (~125 TFLOPS) still embarrasses anything in the consumer Ampere line for inference workloads that fit its memory.
The broader story here is the secondhand datacenter GPU market, which has quietly become one of the best-kept secrets in the local AI hobbyist scene. As hyperscalers cycle out Volta and early Ampere hardware for Hopper and Blackwell, V100s, P40s, and M40s flood eBay at fractions of their original prices. For tinkerers willing to deal with cooling and power-connector adapters, you can build a 48GB+ VRAM LLM rig for under £500 — a configuration that's literally impossible to buy new at consumer prices.
HN Jobs Teardown
2026-05-31
Source: HN Who is Hiring
Posted by: dijit
Ubisoft Massive's SRE posting (ID: 22667729) is the most revealing in the batch because it exposes a tension most game studios refuse to acknowledge in public: AAA game development is now an infrastructure problem disguised as a creative one.
The stack tells a story. They're running SaltStack, Python, and Terraform — a combination that screams "we grew up on bare metal and are migrating toward cloud-ish patterns without fully committing." SaltStack in 2020 is a deliberate choice; most shops at this scale would be on Ansible or Kubernetes-native tooling. Salt's event-driven reactor system makes sense for orchestrating build farms and asset pipelines where you need to react to thousands of artists pushing changes simultaneously. The C++ proximity is the giveaway — this team is supporting engine programmers, not web developers.
What this reveals about the company. Massive is the studio behind The Division series, and "release AAA games with the highest possible reliability" is code for: our launch days have historically been catastrophic and we need them to stop being catastrophic. Hiring an SRE specifically for release reliability — rather than a generic DevOps role — suggests they've internalized the SRE discipline from web companies and are applying it to a domain (game launches) that traditionally treated downtime as inevitable.
Skills and trends highlighted:
Green flags: The posting was written by the actual team member (dijit), not HR. It describes the team's character ("smart, curious"... wait, that's Litmus — Massive's is more honest: "classically trained sysadmins who have always had a brush with automation"). That self-aware framing suggests engineering writes its own job ads, which usually correlates with engineering having real authority.
Red flags: No mention of on-call rotation expectations, no salary band, and "supporting the needs of the adjacent programming squad" hints at a service-desk dynamic where SRE exists to absorb engineering chaos rather than enforce reliability discipline upward.
Daily Low-Level Programming
2026-05-31
When a divide-by-zero, page fault, or hardware interrupt fires, the CPU needs to jump to your handler within nanoseconds. It doesn't search a list or call a function — it indexes a single fixed table: the Interrupt Descriptor Table (IDT). The IDTR register holds the table's base address and limit; vector number times 16 gives you the entry.
On x86-64, the IDT has 256 entries, each 16 bytes. Vectors 0–31 are CPU exceptions (0=#DE divide error, 6=#UD invalid opcode, 13=#GP, 14=#PF page fault, 18=#MC machine check). Vectors 32–255 are software-assignable: legacy IRQs land at 32–47, the Linux system call vector historically sat at 0x80, and IPIs/APIC interrupts occupy the high end (0xFB local timer, 0xFF spurious).
Each entry is a gate descriptor packing: a 64-bit handler offset (split across three fields for historical reasons), a 16-bit code segment selector, a 3-bit IST index, a type field (0xE=interrupt gate, 0xF=trap gate — the difference is whether IF gets cleared on entry), a DPL (descriptor privilege level — set to 3 for INT 0x80 so userspace can invoke it), and a present bit.
The IST (Interrupt Stack Table) field is critical for reliability. Normally, an interrupt switches to the kernel stack from the TSS's RSP0. But what if the kernel stack itself is corrupt, or you're handling a double fault caused by a stack overflow? IST 1–7 in the TSS provide known-good stacks. Linux dedicates IST stacks to #DF (double fault), #NMI, #MC, and #DB precisely so these survive any conceivable stack disaster.
Real-world example: When Linux boots, idt_setup_traps() in arch/x86/kernel/idt.c writes all 32 exception handlers. The page fault handler at vector 14 points to asm_exc_page_fault. When your process touches an unmapped address, the MMU raises #PF, the CPU reads IDTR, fetches entry 14 (offset 14×16 = 224 bytes into the table), pushes the error code and SS:RSP:RFLAGS:CS:RIP, optionally switches stacks via IST, and jumps — all in microcode, no software involvement until your handler runs.
Rule of thumb: IDT entry address = IDTR.base + (vector × 16). Want to inspect it live? In a kernel debugger: sidt dumps the base/limit, then read 16 bytes per vector. The handler offset is reassembled from bytes [0:2] | [6:8] | [8:12] — a layout preserved from 32-bit gates for backward compatibility.
RFC Deep Dive
2026-05-31
RFC: RFC 3626
Published: 2003
Authors: T. Clausen, P. Jacquet (editors), with contributions from C. Adjih, A. Laouiti, P. Minet, P. Muhlethaler, A. Qayyum, L. Viennot
OLSR solves a problem that conventional link-state routing (OSPF, IS-IS) handles badly: routing in a network where every node is a router, links appear and vanish as people walk around, and the medium itself is shared. It is one of the founding protocols of the Mobile Ad-hoc Networking (MANET) family, born from INRIA's Hipercom project in the late 1990s.
The core problem. Classical link-state routing assumes you can flood Link State Advertisements cheaply across stable point-to-point links. In a wireless mesh, every transmission is a broadcast that every neighbor must decode, and naive flooding causes the so-called broadcast storm: N nodes rebroadcasting create O(N²) redundant transmissions and collisions. Reactive protocols like AODV avoided this by only finding routes on demand, but paid a latency penalty on every new flow. OLSR takes the proactive path but makes flooding cheap.
The key invention: MultiPoint Relays (MPRs). Each node picks a minimal subset of its one-hop neighbors such that every two-hop neighbor is reachable through at least one of them. Only MPRs rebroadcast control traffic; everyone else stays silent. Only MPRs advertise link-state information, and they only advertise links to the nodes that selected them. This compresses both the flooding mechanism and the link-state database. In dense networks the savings are dramatic, often an order of magnitude in control overhead.
Mechanics. Two periodic messages do all the work:
HELLO — sent every 2 seconds (default), carries a node's list of neighbors with link status (symmetric, asymmetric, MPR). HELLOs are never forwarded; they only discover the local two-hop neighborhood, which is enough for each node to compute its MPR set.TC (Topology Control) — sent every 5 seconds by MPRs, advertises the set of neighbors that selected this node as their MPR. TCs are flooded via the MPR mechanism. From accumulated TCs every node builds a partial topology graph and runs shortest-path on it.OLSR is unapologetically chatty compared to reactive protocols, but routes are always ready: there is no first-packet latency, which matters for short flows like DNS lookups, ICMP, or VoIP signaling.
Why it still matters. OLSR became the de-facto routing protocol of community wireless mesh networks: Freifunk in Germany, Funkfeuer in Austria, Athens Wireless, and parts of guifi.net in Catalonia all ran (and many still run) OLSR or its successor. The popular olsrd implementation by Andreas Tonnesen made it dead simple to drop on an OpenWrt router and have a city-scale mesh self-organize overnight. OLSRv2 (RFC 7181, 2014) modernized the packet format and pulled the common bits into the generic MANET packet/message framework (RFCs 5444, 5497, 6130), but the MPR idea is unchanged.
Lasting influence. If you have ever worked with Thread, Zigbee mesh, Bluetooth Mesh, or 802.11s, you are downstream of the MPR insight: not every node needs to relay, and the ones that do should be chosen by topology, not by accident. Even modern data-center protocols like BGP's add-path and SR's Topology-Independent LFA echo OLSR's premise that link-state distribution and forwarding selection are separable problems.
Stack Overflow Unanswered
2026-05-31
The asker is integrating a Nuvoton MCU with the NXP TDA8035 smart card interface IC. They've stitched together reference code from Nuvoton, MCUXpresso, and Arduino, but the card never returns an ATR (Answer To Reset) — the very first byte sequence a card emits after activation. Without an ATR, no further ISO 7816-3 communication is possible.
Why this is interesting: The ATR failure mode is deceptively rich. The TDA8035 is an analog front-end that does level shifting, VCC sequencing, clock generation, and ISO 7816 activation/deactivation timing for you — but only if you drive its control lines in the right order and your UART-style I/O is configured correctly for the bizarre half-duplex, open-drain, inverse-convention world of smart cards. There are at least a dozen places for a beginner to go wrong silently.
A debugging flow chart, in priority order:
CMDVCC (active low) starts this; check that PWR/OFF is deasserted and PRES (card detect) reads inserted.XTAL/CLKDIV), RST go high after the warm-up, and then I/O transitioning. If CLK isn't toggling, no card will ever respond.F=372, D=1 initially, giving an etu of 372/f_clk. At 3.5712 MHz that's ~9600 baud, 8 data bits, even parity, 2 stop bits, half-duplex, open-drain. Forgetting parity or stop bits is the single most common cause of "no ATR."TS is either 0x3B (direct) or 0x3F (inverse). If you see garbage that looks bit-reversed and complemented, you're reading an inverse-convention card with direct decoding.Gotchas: Many TDA8035 dev boards omit the 1.8 µF VCC tank cap → unstable activation. The SAM_VCC level select pin must match the card class. And if the MCU's UART can't do 2 stop bits natively, you must emulate them or the card will see a framing error and never reply.
Daily Software Engineering
2026-05-31
If you've ever wondered how Elasticsearch returns results in 20ms from a corpus of 100 million documents, the answer is almost always: an inverted index. It's the data structure behind every serious full-text search system — Lucene, Elasticsearch, Solr, PostgreSQL's GIN indexes, and even your IDE's "find in files."
A normal (forward) index maps documents to the words they contain: doc_42 → ["the", "quick", "brown", "fox"]. That's great for showing a document, but terrible for searching. To find every document containing "fox," you'd scan every document.
An inverted index flips it: words map to the documents that contain them.
"fox" → [doc_42, doc_117, doc_2891]"quick" → [doc_42, doc_88, doc_2891]Now "find documents with 'fox' AND 'quick'" becomes a set intersection of two sorted posting lists — an O(n+m) merge, not a full-corpus scan.
Real-world example: Imagine a job board with 5 million postings. A user searches "remote python senior." Without an inverted index, you'd scan every posting's description. With one, you fetch three posting lists (maybe 200K, 150K, 80K entries), intersect them in sorted order, and return the top 20 in milliseconds. Lucene goes further — each posting also stores term frequency and position, so it can rank by relevance (TF-IDF, BM25) and support phrase queries like "senior python developer" in order.
The cost you pay: writes are expensive. Adding one document means updating potentially hundreds of posting lists. That's why Lucene uses immutable segments — new documents go into a new small segment, and segments merge in the background (an LSM-like pattern). It's also why Elasticsearch's "near real-time" search has a ~1 second refresh interval by default.
Rule of thumb: An inverted index typically costs 20-30% of your raw text size on disk (with compression like delta-encoding posting lists and front-coding terms). For 100GB of documents, budget ~25GB for the index. Memory needs are smaller — only hot terms and skip pointers need to stay resident.
When NOT to use one: If you only need exact-match lookups on short fields (email, user ID), a B-tree is simpler and faster. Inverted indexes shine for tokenized text where one field contains many searchable terms. And if your queries are mostly "give me documents matching this structured filter," a column store usually beats a search index.
Tool Nobody Knows
2026-05-31
You've hit this wall: a directory owned by UID 1000 that needs to look like UID 33 (www-data) for a web server, or backup files from an NFS share where the UIDs don't match, or a read-only mount you need to pretend is writable for a chroot test. The kernel's mount --bind can't help — it shows the exact same inodes with the exact same permissions. The classic answer was chown -R, which is destructive and only works if you have root and the source filesystem cooperates.
bindfs is a FUSE filesystem that mirrors a directory while rewriting ownership, permissions, and even whole UID maps on the fly. Source files aren't touched. It's been in Debian since 2006 and remains one of the most useful tools nobody installed.
The basic invocation looks like a fancy bind mount:
bindfs /home/shaun/site /var/www/site
Now the interesting flags. Force everything to appear as www-data so nginx is happy:
bindfs --force-user=www-data --force-group=www-data \
--perms=u=rwX:g=rX:o= \
/home/shaun/site /var/www/site
Your files on disk remain owned by you. The web server sees what it needs. Edit a file in your editor, no chown dance afterwards.
UID remapping for NFS misery — local user 1000 should appear as 2000 in the mirror, and vice versa:
bindfs --map=1000/2000:@1000/@2000 /nfs/raw /nfs/mapped
The @ prefix means group, the colon separates entries, and the mapping is bidirectional so writes round-trip correctly.
A genuinely clever pattern — show each user only their own files in a shared tree:
bindfs --mirror-only=alice,bob,carol /srv/shared /srv/view
# Anyone not in the list gets EACCES, even root by default
Need a read-only view of a writable tree without remounting the underlying filesystem?
bindfs -r /etc /tmp/etc-snapshot
# Scripts can poke around with zero risk of accidental writes
Combine with overlayfs and you have a poor man's container. The reverse trick — making a read-only source appear writable (writes silently dropped, the calling process sees success) — is invaluable for testing software that demands write access it doesn't actually need.
Why this beats the alternatives:
mount --bind: no permission translation, period.chown -R: destructive, requires root on the source, breaks on read-only or shared filesystems.idmapped mounts: powerful but needs kernel 5.12+, mount namespaces, and root.all_squash: server-side, affects every client, can't be selective.One caveat: it's FUSE, so there's syscall overhead — don't put it under a database hot path. For everything else (config dirs, web roots, backup staging, chroot prep, dev environments where UIDs don't match production), it's nearly invisible. Unmount with fusermount -u /mountpoint when done, or pass -o nonempty to layer it over a mountpoint that already has files. Add --no-allow-other for a private mount only your UID can see, which is the right default for anything sensitive.
What If Engineering
2026-05-31
Most updraft towers heat air at the base with a giant greenhouse. But the atmosphere already gives us a free temperature gradient: roughly 6.5 °C per kilometer of altitude (the environmental lapse rate). What if we built a tall, insulated chimney that exploits this existing ΔT — no solar collector required — by letting cold air fall down an insulated tube and warm air rise outside it? Effectively, a 24/7 atmospheric heat engine.
The trick: pull air in at the top (cold, ~−20 °C at 5 km), let it descend through an insulated downcomer. Adiabatic compression as it falls warms it at the dry adiabatic rate of 9.8 °C/km, which is steeper than the environmental lapse rate. So the air arriving at the bottom is warmer than the surrounding ambient — and we extract that enthalpy difference with a turbine before venting it. This is the principle behind the proposed "energy tower" (Zaslavsky, Technion, 1980s), usually run wet by spraying water at the top. Let's run it dry first.
Take a tower 1 km tall, 100 m diameter. Cross-section A ≈ 7,850 m².
This is why the dry version fails: the atmosphere is (usually) stably stratified, meaning its lapse rate is less than adiabatic. Air pushed down a dry tube arrives hotter than outside ambient and wants to rise back up. The tower stalls.
Enter evaporative cooling. Spray fine water mist at the top. Each kg of water evaporated absorbs ~2,450 kJ — enough to cool a parcel of air by ~10 K per 4 g/kg of water added. Now the descending air follows the moist adiabat (~5 K/km) while staying saturated, arriving at the bottom cooler and denser than ambient. It accelerates downward.
Energy budget for the 1 km × 100 m tower in a hot dry climate (Tₐₘᵦ = 40 °C, RH 20%):
That's roughly a mid-sized wind farm in a single structure, running day and night, with no fuel input — just water. Water cost: at ~4 g/kg air × 225,000 kg/s ≈ 900 kg/s, or 78,000 m³/day. That's the killer. You'd need a desert next to a sea, plus seawater piping or pre-desalination. The Negev study estimated $0.02–0.04/kWh — competitive — but only with cheap brackish water and a hot, dry site.
Structurally, the tower is the easier part: at 1 km tall and 100 m wide it's chunkier than the Burj Khalifa's aspect ratio. Hoop stresses from internal underpressure (~400 Pa) are trivial — about 1/250th of atmospheric. The real engineering pain is the 100-m turbine ring at the base and the corrosion-resistant lining (saltwater mist + thermal cycling).
Wikipedia Rabbit Hole
2026-05-31
Wikipedia: Read the full article
In 1951, the composer John Cage walked into the anechoic chamber at Harvard University expecting to experience something no human had ever really experienced before: absolute silence. The chamber's walls were lined with sound-absorbing wedges so effective that the room measured below the threshold of human hearing — quieter than the inside of a soundproof vault, quieter than the deepest cave. Cage closed the door behind him and waited.
He heard two sounds. One high, one low. Puzzled, he asked the engineer on duty what was wrong with the chamber. The engineer's answer rewired Cage's entire philosophy of music: "The high one was your nervous system in operation. The low one was your blood in circulation."
This was the moment that produced 4′33″ — Cage's infamous 1952 composition in which a performer sits at a piano (or holds any instrument) for exactly four minutes and thirty-three seconds and plays nothing at all. It is often described, dismissively, as "the silent piece." But Cage insisted it was the opposite. Having proven to himself in that Harvard chamber that silence does not exist as long as you are alive to perceive it, the piece is actually a frame around whatever ambient sound happens to occur during its performance: coughs, shuffling programs, rain on the roof, traffic outside, your own breathing.
The score is meticulous. It is written in three movements (the famous premiere was 30″, 2′23″, and 1′40″), marked tacet — the classical musician's instruction to remain silent. David Tudor premiered it at Maverick Concert Hall in Woodstock by sitting at the piano and closing the keyboard lid to mark the start of each movement, opening it between them. Some audience members walked out. Others, Cage later said, missed the entire point — which was that they had been listening to music the whole time without realizing it.
A few rabbit-hole-worthy connections:
The deepest irony? The world's quietest anechoic chamber today, at Microsoft's Building 87, measures −20.6 dBA — a sound level so low it is below the Brownian motion of air molecules. Visitors regularly report hallucinations after 20 minutes inside. Cage's revelation, it turns out, scales: the quieter the room, the louder you become.
Daily YT Documentary
2026-05-31
Channel: Getinformedz (24 subscribers)
High in the Caucasus Mountains — the rugged spine separating Europe and Asia — shepherds have spent thousands of years selectively breeding a livestock guardian dog tough enough to face down wolves and bears on its own. This mini-documentary introduces the Caucasian Shepherd Dog (also called the Caucasian Ovcharka), one of the largest and most formidable working breeds on Earth.
What makes this worth watching is the functional biology angle. The Caucasian Shepherd isn't just big for show: its dense double coat insulates against alpine winters, its massive bone structure and broad skull evolved to deliver a crushing bite, and its independent temperament is a deliberate trait — these dogs were bred to make life-or-death decisions without a human handler present. The video walks through how centuries of landrace selection by Georgian, Armenian, and Azerbaijani shepherds shaped a guardian that wolves genuinely avoid confrontation with.
It's a useful entry point into a broader topic: the difference between herding dogs (Border Collies, Australian Shepherds) and livestock guardian dogs (Caucasian Shepherds, Anatolians, Great Pyrenees), which live with the flock as a member rather than driving it. Understanding that distinction reframes how you think about working-dog breeding entirely.
From a 24-subscriber channel, so production polish is modest — but the subject matter is genuinely educational and not something most viewers will have encountered.
Daily YT Electronics
2026-05-31
Channel: Fix Factor (4280 subscribers)
Most of today's candidates were Shorts or hashtag-spam factory clips. This one stands out because it tackles a genuinely tricky skill: bonding nickel strip to an 18650 lithium cell without a spot welder.
Soldering directly to 18650s is controversial for a reason — lithium cells are heat-sensitive, and dwelling too long with an iron can damage the separator, degrade capacity, or in worst cases vent the cell. Anyone building battery packs from salvaged laptop cells, e-bike packs, or power tool rebuilds eventually faces the choice between buying a spot welder or learning to solder cells safely.
A good tutorial here should cover the real techniques that make this work: scuffing the cell terminal to break the oxide layer, using high-wattage irons with a chisel tip so heat transfers fast and you can pull away quickly, flux choice, and pre-tinning the nickel strip so contact time on the cell is measured in under two seconds.
At 4,280 subscribers Fix Factor is small enough to qualify and the topic is concrete and skill-based rather than a product showcase. Worth watching if you have a drawer of salvaged 18650s and no welder.
Daily YT Engineering
2026-05-31
Channel: EngineeringTheCurriculum (1880 subscribers)
Most introductions to beam analysis hand students the shear and bending moment diagrams as if they were separate procedures to memorize. Dr. Margi Vilnay takes the better path: she derives the differential relationships that bind distributed load w(x), shear V(x), and bending moment M(x) together — namely that dV/dx = -w and dM/dx = V.
Once these relationships click, beam problems stop feeling like rote bookkeeping. You can sketch a shear diagram by integrating the load curve in your head, and a moment diagram falls out by integrating the shear. Points of zero shear become obvious locations of maximum moment. Discontinuities from point loads and couples stop being mysterious — they're exactly what the math predicts.
This lecture sits in the sweet spot of a structured university-style series (Lecture 4 of a sequence), so the prerequisites are explicit and the pacing is built for genuine understanding rather than exam cramming. Dr. Vilnay's prior lectures introduce free-body diagrams and equilibrium, so by Lecture 4 students have the foundation to appreciate why these differential connections matter for real structural design — not just for passing a statics course.
Worth watching for anyone studying mechanics of materials, structural engineering, or revisiting fundamentals before tackling indeterminate structures or finite element work.
Daily YT Maker
2026-05-31
Channel: fab shop (261 subscribers)
Honest disclaimer: Both candidates today are weak. The first is essentially a phone-number advertisement for a shed fabrication business, with a hashtag-spam title and no instructional content. The second — a Marathi-language mini-vlog from "fab shop" — at least promises an on-site look at a real welding and fabrication job rather than a sales pitch, so it's the least bad pick.
The title translates roughly to "Reached the site and started the prep work", suggesting a day-in-the-life follow-along of a small fabrication crew arriving at a residential job site. For viewers curious about how independent fabricators outside the Western maker-YouTube bubble actually operate — what tools they haul, how they set up a mobile welding rig, how they handle measurements and layout without a proper shop — these kinds of on-site vlogs can be quietly informative even without narration.
Don't expect a tutorial. Expect ambient footage of angle grinders, stick welding, and the improvisation that defines small-shop metalwork in India. If you watch with the sound on and pay attention to technique rather than commentary, there's something to learn about jobsite workflow, jig-free fitup, and the economics of fabrication at this scale.
Daily YT Welding
2026-05-31
Channel: Akshay Maurya (117 subscribers)
Note: this week's candidate pool was unusually weak — most submissions were hashtag-spammed Shorts or repetitive "moving welding" clips with no instruction. This is the least-bad option, and at least attempts a real tutorial format.
From a tiny channel with just 117 subscribers, this tutorial aims at the fundamentals that trip up nearly every new TIG welder. TIG (Gas Tungsten Arc Welding) is famously the hardest of the common processes to learn because the welder is juggling three independent inputs at once: the torch hand controlling arc length, the filler hand dipping rod into the puddle, and the foot pedal modulating amperage in real time.
A good beginner tutorial should cover tungsten preparation (grinding direction matters — striations parallel to the electrode produce a stable arc), shielding gas flow (typically 15–20 CFH of pure argon for steel), arc length discipline (keep it roughly equal to the electrode diameter), and the rhythm of dip-and-pause filler feeding. The "perfect bead" the title promises comes down to puddle reading — watching the wetting edge and dialing heat to maintain a consistent dime-stack pattern.
Worth a look if you're new to TIG and want to compare technique explanations across creators, but temper expectations given the channel size and production scale.
