← Field notesTypography & experiments / INTERACTIVE ESSAY

AN EXPERIMENT IN READING

What if numbers grew freckles?

A first-layer playground from last night’s number-speckle code golf: familiar digits, deliberate absences, and a little more evidence for the machine reading over your shoulder.

Read, then play
TYPE / SIGNAL / SMALL DELIBERATE MARKS

01 / PLAYGROUND

One digit, two representations

Change a digit and watch the same six bits become strips or speckles.

View imported source ↗

Explore this playground
YOUR TURN

One digit, two representations

Change a digit and watch the same six bits become strips or speckles.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

A small agreement about ink

I keep coming back to what a barcode actually does. It gives a machine a representation of information that it can recognize reliably. We see a number; a scanner sees a carefully arranged difference between ink and paper. The bars are part of an agreement about where to look, what to measure, and which arrangements mean something. Reliability comes from that agreement, the printing and the reader—not from stripes having any special claim on information.

Last night’s number-speckle “code golf” began with a smaller question: how little extra ink might a number need to explain itself? Before the spirals, before correction symbols, there is just a digit and a pattern. In this first playground, change the digit and watch the same six bits become either bars or dots. These are teaching marks, not a standard barcode. Their meaning survives the change of shape because we kept the rule.

02 / PLAYGROUND

What two copies can tell us

Flip a bit to see when two repeated patterns agree, disagree, or tie.

View imported source ↗

Explore this playground
YOUR TURN

What two copies can tell us

Flip a bit to see when two repeated patterns agree, disagree, or tie.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

Make room for a mistake

A useful representation also has to survive the world. Irving Reed and Gustave Solomon published their polynomial codes in 1960. The idea is to add structured redundancy, so that a reader can recover damaged symbols within a defined correction budget. The history does reach into space, but we can stay on the kitchen table: compact discs used Reed–Solomon coding to help survive damaged readings, and QR codes use it to recover codewords when some of the information is lost or wrong. More redundancy costs space. It buys room for mistakes, not permission to destroy any part of an image and expect a miracle.

For this first layer, I want to make that trade visible without teaching finite-field arithmetic. The playground below repeats a six-bit digit twice. Click a bit to damage it and see which digits still fit. This is a repetition experiment, not Reed–Solomon. Two copies can disagree without telling us which copy is right. That uncertainty is useful: it shows exactly why merely adding dots is not the same as designing an error-correcting code.

03 / PLAYGROUND

The extension is the parity

Edit or clear digit cells, then follow every parity calculation that restores the number.

View imported source ↗

Explore this playground
YOUR TURN

The extension is the parity

Edit or clear digit cells, then follow every parity calculation that restores the number.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

An extension that remembers the number

Let the extension earn its keep. Jenny’s number is 867-5309; the extension is not another destination to protect. It is the four Reed–Solomon parity symbols computed from those seven digits. With this GF(16) encoder, the result is 867-5309 x973F. The extension cannot be an arbitrary A113: change the number being encoded and the parity must be calculated again. Seven data symbols and four parity symbols make an eleven-symbol block—a shortened RS(11,7) code.

The row below works a little like a Sudoku row. Each phone digit sits in its own editable square. Replace a digit to introduce an error, or clear a square to say “I know something belongs here, but I cannot read it.” That known gap is an erasure. Keep the parity extension beside the row as the evidence. Four parity symbols can recover four erasures, two errors at unknown locations, or one error and two erasures: 2 × errors + erasures ≤ 4. Knowing where a gap is saves the work of locating it.

Clear a few squares and step through the work. First, place temporary zeros in the blanks while retaining their locations. Next, evaluate the received eleven-symbol polynomial at four field values: 2, 4, 8 and 3. Those four results are the syndromes. The walkthrough expands the contributions from each cell, writes the equations for the missing values, and shows the row operations used to solve them. For a wrong digit rather than a blank, it also has to search for the error’s location. The decoder receives the edited row and its parity, not the saved phone number.

The arithmetic is small but unfamiliar. GF(16) labels its sixteen values 0–9 and A–F. Addition and subtraction are both XOR: 8 ⊕ 9 = 1, so applying the difference again gives 9 ⊕ 1 = 8. Multiplication uses the polynomial x⁴ + x + 1, not ordinary arithmetic modulo sixteen. Each step below uses the actual numbers from your row. After solving, apply the corrections and evaluate all four checks again. They should be zero. Within the correction budget, that recovers the number; beyond it, passing checks alone cannot prove that the answer was the original. The extension is useful, but it is not clairvoyant.

04 / PLAYGROUND

Recognize a relationship

Rotate and resize an invented constellation, then disturb a point to test the match.

View imported source ↗

Explore this playground
YOUR TURN

Recognize a relationship

Rotate and resize an invented constellation, then disturb a point to test the match.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

Does a code have to look like a code?

When you imagine a barcode, do you immediately see a striped rectangle or a square of little boxes? Must it look like either? The EURion constellation—the “Orion” pattern of small circles found on banknotes—is a lovely counterexample. In 2002, Markus Kuhn described a five-circle arrangement that colour photocopiers recognized and refused to copy. Its role is closer to the simplest possible instruction: “Don’t operate on this.” More precisely, “don’t copy this.” A recognized arrangement triggers a policy; it need not carry a long, changing message. That is not a description of every modern counterfeit-detection system.

The following toy uses an invented constellation, not the banknote pattern. Rotate it or change its size: the relative distances still describe the same arrangement. Move one point and eventually it stops matching. There is no copier here, just a small geometric recognizer. But it loosens the assumption that machine-readable information must announce itself with the familiar costume of a barcode.

05 / PLAYGROUND

The freckled number specimen

Type a number and tune the freckles while keeping the ordinary numerals readable.

View imported source ↗

Explore this playground
YOUR TURN

The freckled number specimen

Type a number and tune the freckles while keeping the ordinary numerals readable.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

A font with a second opinion

Now put the marks around a familiar numeral. Give every digit a fixed set of possible speckle positions. Let angles and distances carry the pattern, and leave the ordinary strokes readable. The aim is a font that gives OCR a second source of evidence: perhaps the central shape looks like either a 3 or an 8, but the surrounding marks favor one. The numeral and its speckles use the same ink. This is a design goal, not a measured improvement in OCR or a claim that existing OCR software will understand these marks.

Checks already contain a useful reminder. Their MICR characters were designed to serve human readers and automated equipment together. SRI’s history describes the move from magnetic barcodes to human-readable magnetic characters; the Federal Reserve describes the magnetic-ink routing, account and check-number line. MICR is magnetic reading, not optical recognition. The family resemblance is the decision to make the printed character useful to two very different readers.

Type a number below. Adjust the freckles, then hide the guides and judge the reading experience for yourself. This is an SVG specimen of the font idea, not an installable font. Its positions stay fixed for each digit rather than rearranging around its neighbors. The first question is whether the extra evidence can sit comfortably alongside the text. Paper, small type and a camera will get the final vote.

06 / PLAYGROUND

Let the evidence disagree

Remove or change observations and inspect the digits that still fit the evidence.

View imported source ↗

Explore this playground
YOUR TURN

Let the evidence disagree

Remove or change observations and inspect the digits that still fit the evidence.

View imported source ↗

Enable JavaScript to explore the interactive scene. Continue reading below.

The first layer: even nothing is a mark

Here is the deliberately small rule from the early experiment: write a digit as six bits, most significant first, and repeat it once. Place those twelve possible marks at successive 78.2142857° clockwise steps. Increase the radius linearly as the angle advances; use that same radius on both axes. It is a spiral, not an oval fitted around a character. A one deposits ink. A zero leaves the paper alone. The guides show possible positions, but those guides are not part of the printed design.

The absences are the interesting part. Every decimal digit fits in four bits, so the first two positions of each six-bit copy are always empty. Once the reader knows the alignment, an empty position can be evidence too. That does not make missing ink trustworthy: a damaged one can look exactly like an intended zero. The final playground lets you flip a reading or mark it as unknown, then compares the remaining evidence against all ten digits. It does not peek at the center numeral to decide the answer.

For example, 6 and 7 differ at only one bit per copy. Flip just one of those repeated bits and the evidence can tie. The reader should say “uncertain,” not invent confidence. The font’s first layer stops there: no hidden start/stop characters, no Reed–Solomon parity around the glyphs, and no claim to have solved optical decoding. The next experiment is to print specimens and compare ordinary OCR, ordinary OCR on freckled digits, and a reader trained to use the marks. Measure wrong reads and rejected reads as well as successes—and ask people whether the numbers are still easy to read. For now, a few very intentional freckles are enough to make the question playable.

END OF THE EXPERIMENT

A little more evidence.

The shapes are familiar. The questions are still open. Keep playing.

D3.js v3 Typography OCR Error correction
← Back to the journal