SITE GUIDE · GENERATIVE ASSETS Nº 214
How Delayline was made
A single-page instrument about EDSAC's mercury delay-line memory (Cambridge, 1949): a 17-bit word that exists only as ultrasonic pulses in flight, caught and regenerated at every lap. The page's one job is to make the viewer feel the precariousness of that storage — a number kept alive the way a juggler keeps plates alive — and then let them break it honestly, with a gain knob.
01Palette — argued from the laboratory
Post-war British machine-hall: grey steel chassis, mercury behind glass, a scope trace, valve heaters. The mercury sheen is a line/mark token only — body copy gets its own derived ink.
02Type
A grotesque with post-war engineering plainness for display and body — set tight and heavy in the masthead, plain and readable in copy. The one moment of typographic bravery is the letterspaced mercury-toned interstitial: THE WORD · IS NEVER · AT REST.
Every number the machine owns — the register, the HUD, the tank log, the recurrence — is set in mono, so measured values read as instrument output, never as marketing copy.
03Techniques — the honest recurrence
Everything is canvas 2D plus DOM; no libraries. The signature is that the stored word is never anywhere all at once: seventeen time slots circulate as acoustic packets (compression bands drawn perpendicular to the tube, amplitude fading with distance as 0.72x, width spreading with dispersion), and the binary register above the tube lights each lamp only while that bit's pulse crosses the read tap — a Gaussian window 0.014 laps wide. The simulation is one recurrence, evaluated at every pulse arrival:
empty slots: ring′ = ring × gain × 0.72 × coupling × 0.62 + 0.02 × gain → detected ring ≥0.50 births a phantom
- Per-bit crystal couplings (0.93–1.00, fixed) decide which bit is marginal. At nominal gain 1.50 every product clears the 0.70 saturation point and regeneration is perfect — the word survives indefinitely. Starved to 0.99, the weakest coupling decays geometrically and dies at a countable lap; couplings above 0.982 still clear saturation and survive forever, which the failure copy points out.
- Overdrive is the same arithmetic run on the empty slots: above gain ≈1.98 the residual-ring recurrence exceeds unity, amplifier noise recirculates and builds lap on lap (drawn as a growing shimmer — the second-read detail), until it crosses the discriminator and a phantom pulse is born.
- The amplifier scope redraws IN (the dispersed, attenuated Gaussian actually detected) and OUT (the reshaped top-hat) from the live recurrence values at every regeneration.
- Probe: window.__delayline exposes bits, amplitudes, rings, lap, gain, per-event log and speed control; every QA assertion gates on sim state, never wall-clock.
04Measured, not typeset
All failure figures on the page were driven and read back from the recurrence, then pinned as hard asserts in the verification harness: with word 1337 and the gain set to 0.99 at a lap boundary, bit 10 (coupling 0.93) falls through the 0.50 discriminator 6 laps later (its seventh arrival, detected at 0.478), with bit 3 following at lap 14 and bit 5 at lap 19; from nominal equilibrium at gain 2.05, the ring in slot 6 (coupling 1.00) crosses threshold on lap 12 (ring 0.513) and corrupts the circulating word. EDSAC's own figures are hedged to the literature — tubes about a metre and a half, circulation ~560 µs by several accounts, 17-bit short words with sign conventions varying by account — and the on-page tank declares its ≈6,400× slow-down rather than implying period speed.
05Iteration log
PASS 1 · CRAFT
- The vertical-mode scale caption was first drawn with a broken rotation transform, then still clipped the canvas edge at 375 px — replaced with a two-line left-aligned caption beside the tube; crystal labels moved beside the discs for the same reason.
- Register cells overflowed the panel between 640–900 px; added a 26 px intermediate size and tightened mobile cells to 16 px so 17 cells + gaps fit inside 375 px; the long middle register caption is dropped on narrow screens instead of wrapping badly.
- Reduced-motion resting phase was parked where no pulse sat at the read tap, so the settled frame showed a dead register; re-parked it at READ + 2·spacing so bit 2's lamp is lit in the still frame.
PASS 2 · DEPTH
- First draft of the starve card claimed bit 8 would die on lap 13 — the driven measurement said otherwise (couplings 0.99 and above clear saturation even at gain 0.99 and survive forever). Rewrote the card from the measured cascade instead of the guess: change the experiment, not the caption.
- Added the residual-ring shimmer in empty slots so overdrive is legible before it fails — you can watch the noise build for a dozen laps before the phantom is born.
- Micro-interaction: a live WEAKEST LOOP PRODUCT readout under the gain slider (gain × 0.72 × weakest live coupling, recomputed as you drag) that turns amber the instant the product falls below the 0.70 saturation point — the knob tells you a bit is doomed before the tube shows it.
- Gave the HUD a mercury odometer (laps × 1.5 m at tank scale) — the second-visit reward: your number has quietly swum a swimming pool's length of mercury.
PASS 3 · HARDENING
- 375 px: the tube rotates to a vertical tank (drawing is axis-parameterised, not transformed), the amp chassis drops below it, and the wordmark/nav were asserted inside the viewport box — not just scrollWidth.
- Reduced motion kills both CSS animation and the rAF loop and paints one settled mid-circulation frame; DPR capped at 2; rAF paused on document.hidden with a clamped delta on resume; canvas 2D failure shows a static poster guarded by [hidden]{display:none !important}.
- Chanel rule: removed a planned tank-temperature dial — the odometer already carries the second read, and the thermometer was ornament.