All entries

Marks you can press, and records to press them on

One day took the atlas from fifty-three records to two hundred and ninety-one, and took the axis from a picture of data to something a reader can operate.

Two problems turned out to be the same problem. The axis looked broken because six of its eight decades were empty, and the axis was unusable because its marks were not controls. Neither could be fixed convincingly without the other: filling the decades made the marks collide, and making the marks work exposed how little there was to press.

The axis was a picture of data

The dots were drawn in an SVG that was aria-hidden with pointer-events: none. No record could be opened from the axis at all — one of them, whose month-only extent fitted no day bucket, was reachable solely through a button in the footer.

Marks are now buttons in a layer over the line, with labels, focus and hover, while the SVG keeps the line, the ticks and the extent bars. A packing function replaced the old dot placement: the lane has a fixed number of rows, rows alternate around the axis so a short run reads as a cluster rather than a slope, and a run that will not fit collapses into a single mark carrying its count, which opens the list. A cluster never crosses a period boundary, so it always sits under the label that counts it. Cells tile at 24 pixels, the WCAG 2.2 minimum target size, because 44-pixel hit areas at a 14-pixel step swallowed one another and left marks unclickable.

Two of the empty decades were not empty in the data at all. Thirteen records, ImageNet through GPT-4, were simply missing from the visible selection in meta.json, so the 2000s and the 2010s showed a dash. Seeding those and adding fifteen more closed the real gaps.

While the page was open: the island had been shipping the entire dataset to the browser, 111 KB of a 138 KB page, including entities and sources the timeline never reads and both languages of every record. A projection carrying only what the axis draws cut the props to 26 KB and the page from 33.8 to 10.4 KB gzipped. Plural forms started going through Intl.PluralRules, so Ukrainian reads “1 запис”, “3 записи” and “11 записів” instead of one form for every number. The palette went from fifty colour literals to twenty-five role tokens with dark counterparts.

Then the same records were given a second way to be read: a list, newest first, under the headings the axis already uses, showing exactly what the current zoom holds, with the mode kept in the URL so a reading view can be linked.

Fifty-three records became two hundred and ninety-one

In three passes. Sixty-one records for 1943 to 1970, thirty for 1971 to 1985, then six batches integrated at once — 1986 to 1999, speech recognition from 1970 to 2000, 2000 to 2010, 2011 to 2022, five cross-cutting threads, and 2023. The collection went from 148 events, 170 entities and 175 sources to 291, 389 and 356. From 1943 to 2023 no year was left empty; only 2024 and 2025 remained.

The links mattered more than the count. Back-propagation had five inbound links and no outbound one. AlexNet rested on ImageNet alone, and now follows CUDA, GPUs for deep networks, rectified linear units and the ILSVRC benchmark. ChatGPT had no method behind it and now follows InstructGPT. GPT-3 was missing outright. The speech line runs unbroken from the 1971 ARPA programme to Whisper, and it shows something the vision story usually gets credit for: deep learning beat the established method in speech in 2009, three years earlier.

What was left out, and why that is written down

Every source URL in the early batch was requested before the records were written. Six publishers answer an automated client with 403 — ACM, ScienceDirect, Taylor & Francis, AIP — and they are recorded as reachable-but-blocked rather than quietly kept or quietly dropped.

Five candidates were rejected outright for want of a verifiable URL: Rosenblatt’s 1957 Project PARA report, the 1960 Kalman filter paper, the founding of the MIT AI Project in 1959, IBM Shoebox, and Minsky’s 1954 thesis. Oleksiy Ivakhnenko’s 1968 paper on the Group Method of Data Handling was held back for a different reason: it refines a record the atlas already holds rather than adding one.

The rejections are in the batch’s own gaps.md, in the repository, where the next pass will read them. A collection that only records what it found is a collection that will keep rediscovering what it could not.

Entry written September 20, 2026

Commits this entry accounts for

  • 78dffd4
  • e9558be
  • 36143a6
  • 5e54180
  • 146475f
  • 528bc77
  • 56075f0
  • 0cb8bcb
  • 397c103