Hello World

note on AI use

This work contains content generated by artificial intelligence.

AI was used to:

  • improve the accessibility of this page
  • write code
  • write certain portions of the text
  • revise certain portions of the text
  • generate non-photorealistic artwork

Everything this post describes, it is doing while you read it.

The page is listening

Click anywhere, then again a little longer. What appears behind the words is what the site heard: it reads clicks as morse, measured against each other rather than against a clock, so any speed works.footnote 1

Two bars on a shared scale: a short one a single unit long, a long one three
units, and a dashed line standing between their two ends at about 1.73
units.
Figure 1 — The line between a short mark and a long one falls at √3 units, which is the geometric midpoint of 1 and 3.

At the end of the trail above are the five characters this page answers to: tap them anywhere on the site and you land here.footnote 2 A few pages have no code and open only to the right phrase. Or hold a press — or the space bar — for five seconds, and type the message instead.

What a post can carry

The picture numbers itself and carries both a description and a caption. Footnotes number themselves by where they are cited. Emphasis is italic, and bold inside italic.

A post points at another page by the code that page answers to, in a sentence — Glow playground — or on its own:

Glow playground

the light behind every page here, and the swarm of smaller ones a page can ask for

project · TM1GV

A quotation names a few words and the build finds the sentence they fall in:

Ninety reads as something trapped in a jar, so these turn half as far.

Glow playground · TM1GV

What the numbers do

Every time on this page was published in UTC and is in your own zone by the time you see it, with the zone on hover rather than on the line — you already know which one you are in. Nothing moved underneath: the datetime attribute each one carries is still the UTC the build wrote, so what the page means never depended on any of this having run.

What the site asks the platform for is the languages your browser says it would like, in the order it says them, and then as little else as says what is meant:

const local = new Intl.DateTimeFormat(navigator.languages, {
    day: 'numeric',
    month: 'long',
    year: 'numeric',
    hour: 'numeric',
    minute: '2-digit',
    timeZoneName: 'long',
});

The interesting option is the one that is missing. Ask for hour: '2-digit' and you get 05:15 AM, which no locale writes; leave it out and a browser set to a 24-hour clock is given one. Ask for timeZoneName: 'short' and New York is told EDT while Shanghai is told GMT+8long has a real name for every zone there is, which is why the times above have one.

The other half of the rule is the half that keeps the page working: a number a machine reads is never touched. The lights drifting behind these words are placed by a matrix written to a stop and four decimal places, and a decimal comma there is a different value or no value at all.

critter.el.style.transform = `matrix(${a.toFixed(4)},${b.toFixed(4)},`
    + `${c.toFixed(4)},${d.toFixed(4)},`
    + `${critter.x.toFixed(1)},${critter.y.toFixed(1)})`;

Both blocks were coloured by the build. Nothing was highlighted in your browser and nothing was fetched to do it — what arrived is markup, and one stylesheet that names six colours.

Versions

This post is on its sixth; the list below says what changed and when. A version can be kept, framed as an archive and reached by a code of its own. These four were taken down instead, and their addresses still forward here.

Behind the words

A page here gets one of two things behind its words: the big light, drifting, or a swarm of small ones. This post asked for the swarm, so the big light is parked on the title at the top and the small ones are down here sitting on the emphasis. Scroll: they stay on the page rather than riding the screen. Ask your machine for no animation and they arrive already landed. This post asks to be read dark, and the toggle in the footer overrules it.

The menu is the way around by hand, and the decoder reads it too — tapping blog opens the blog. The search inside it covers everything the site lists, which is everything but this post.

Notes

  1. The line between a short mark and a long one falls at √3, about 1.73 — the point equally wrong in both directions, and the only sense of "middle" that survives being rescaled. back to footnote 1
  2. Twenty-six letters and ten digits, which is all the decoder reads. A code is minted from the address, so one written down last year still works. back to footnote 2

Versions

  1. Gave the page one light behind its words rather than two things moving at once: the big one rests on the title, and the swarm sits on the emphasis for as long as there is emphasis on the screen.

  2. Said what the site does with a date and a number, now that it does one thing rather than three, and let the two code blocks demonstrate the highlighter by being highlighted.

  3. Rewritten as a demonstration of the site rather than an account of it, and the four versions before it taken down.

  4. Named each version by where it comes rather than by the key it is filed under, since a key need not count from one.

  5. Added the figure and the two notes, said what the code at the top of the page is for, and set the post to be read dark.

  6. Said how to reach the message when tapping a rhythm is not something your hands or your browser want to do.

  7. First published. Taken down rather than kept, since everything in it is said better by the version after it.