A dial has a price
Assumes The surround is three rows of a table, A viewing condition is an argument and The list nobody made.
This collection spends most of its essays on choices made once and never re-examined. Here is one of its own, deferred twice on a number nobody took.
The claim
The obstacle was a number, the number was never measured, and when measured it is not an obstacle.
- The reason given twice was payload. A dial renders every frame at build time and appearance swatches are not small.
- They are small. The family’s median body is 2.25 KB and its lightest 1.91, against a policy that gives anything under 3 KB thirteen stops.
- Ten of the eleven generators qualify for the most generous tier the site has.
- The eleventh is over the ceiling and already has a dial, declared in the same file as the ceiling.
- The whole thing costs 2.0 MB at seven stops across 141 placements, which is 2 per cent of a 103 MB site.
The thing that was deferred
CIECAM16 takes a surround: three constants describing how bright the field around the stimulus is relative to the stimulus itself. The standard tabulates three — average for a print sample on a desk, dim for a screen in a living room, dark for a projection in a cinema — and the constant that matters most enters as an exponent on lightness, which is why a film looks flat when the lights come up.
A room is not one of three things, and the standard’s own supplementary report permits interpolating the three constants linearly. This collection already does: the machinery that finds the room brightness at which a display delivers the most colour needs a continuum, because the answer sits between two of the boxes and a three-step function would put it on a boundary as an artefact of the tabulation.
So the continuum exists in the machinery and did not exist in the figures. A reader could see three rooms drawn side by side and could not move between them, on a site whose whole argument is that a choice somebody made once is a choice, and whose interactive controls exist to turn a caption into a control.
What a dial costs, mechanically
The cost is easy to state exactly, which is what makes the failure to state it worth an essay.
Every frame of a dialled figure is rendered at build time by the same generator that drew the static picture — that is the rule, and it is what makes a range a claim rather than a control: every assertion the figure makes is asserted at every stop, so a caption that stops being true partway along stops the build.
The consequence is that a frame carries the figure’s whole body. A dial with n stops multiplies a placement’s figure payload by n, and the site’s dial policy is written in tiers accordingly: roughly 13 stops under 3 KB, 9 between 3 and 6, 7 up to 10, and nothing above about 12 KB.
Those tiers are the site’s own and they are the kind of declaration this collection has learned to distrust: round numbers, sensible, written once. They were drawn from a measured distribution — bodies here run from 1.9 KB to 47 KB with a median of 4.0 — taken when the site had 64 generators. It has 190.
The measurement
Eleven generators, each drawn at its own defaults, weighed.
| generator | body | stops the policy allows |
|---|---|---|
| viewing-condition | 1.91 KB | 13 |
| cam-sweep | 1.92 KB | 13 |
| cam-against-lab | 2.11 KB | 13 |
| incomplete-adaptation | 2.20 KB | 13 |
| luminance-effects | 2.24 KB | 13 |
| cat-comparison | 2.25 KB | 13 |
| contrast-prediction | 2.60 KB | 13 |
| hue-spacing | 3.27 KB | 9 |
| tone-curve | 3.75 KB | 9 |
| lightness-scales | 4.55 KB | 9 |
| unique-hues | 14.13 KB | 0 |
Seven of the eleven are inside the 3 KB tier. The median is 2.25 KB, against the 4.0 the policy was written from. The appearance family is the light end of this site, and the sentence appearance swatches are not small is false of ten of its eleven members.
The eleventh is the interesting one.
The exception was already breaking the rule
unique-hues is 14.13 KB, which is over the 12 KB ceiling above which the policy says nothing gets a dial at all.
It has one. A dial on chroma, two stops, declared in the same file as the ceiling.
Nothing is wrong with the figure and nothing was done in bad faith; the dial is a reasonable one and two stops is a cheap version of it. What the pair says is that the ceiling was a rule nobody was checking, and it was being used simultaneously to justify not building something and being quietly broken by something already built.
That is the shape this collection keeps finding elsewhere — a filter’s parametric factors decided by a default, a test set’s saturation deciding an answer nobody attributed to it, a template’s secondary band — and it is worth recording that the site’s own machinery has an instance of it.
Deciding on the number
With the weight known, the cost is a line rather than an unknown.
| stops | added across 141 placements |
|---|---|
| 3 | 0.67 MB |
| 5 | 1.34 MB |
| 7 | 2.01 MB |
| 9 | 2.68 MB |
| 13 | 4.03 MB |
The site’s built output is 103 MB. Thirteen stops — what the tiers allow — is 3.9 per cent of it. Seven is 2.0.
Seven is what was built, and the reasoning is worth stating because the number is now the whole argument. Seven stops across the surround’s range puts a step every 0.033 in surround ratio, which is finer than the standard’s own tabulation by a factor of three and finer than anybody would claim to perceive. Thirteen would double the cost for a resolution nothing supports. And the figure the dial is declared on is the one whose subject is the surround rather than something the surround happens to modify, so the dial is on the argument rather than on the decoration.
What the dial would be for is the claim ledger itself, whose second column is exactly the reading a dial hands over.
The tier table is not a payload budget
The measurement establishes that the family sits in the table’s top tier and that the table’s finer distinctions never apply to it. There is a second thing wrong with the table, and it shows up as soon as its four rows are multiplied out.
A tier is a ceiling on body size and a stop count, so the two together imply a ceiling on total payload per placement:
| body under | stops allowed | total per placement |
|---|---|---|
| 3 KB | 13 | 39 KB |
| 6 KB | 9 | 54 KB |
| 10 KB | 7 | 70 KB |
| 12 KB | 0 | 0 KB |
A heavier figure is allowed to spend nearly twice as much total payload as a light one, and then at twelve kilobytes it is allowed none. That is not the shape a payload rule has. A rule written to cap payload would hold the product roughly constant, giving stops in inverse proportion to body size; this one lets the product rise by 80 per cent across three tiers and then drops it to zero at a threshold twenty per cent above the last one.
Which inverts the essay’s account of the exception. Take the top tier’s product, 39 KB, as the
budget the table’s first row implies, and ask what each body would get on a constant budget: a 6 KB
figure gets 6.5 stops rather than 9, a 10 KB figure gets 3.9 rather than 7, and a 14.13 KB figure
gets 2.8 — against the two stops unique-hues actually has.
So the figure described as already breaking the rule is very nearly the only one in the family obeying a consistent payload budget, and it is the ceiling that is the anomaly. The heavy figure was given a dial sized by somebody weighing the cost against the value in that particular case, arrived at within a tenth of what a uniform rule would allow, and then the rule it was measured against turned out to forbid the whole thing.
A rule that a careful judgement violates and a mechanical budget would not is a rule doing the opposite of its job, and the two coexisting in one file is a sharper version of the essay’s own observation than the one it makes.
Seven of eleven, not ten
One count in the claim section does not match the table beneath it. Ten of the eleven generators qualify for the most generous tier the site has — the most generous tier is thirteen stops, at bodies under 3 KB, and the table lists seven under 3 KB: 1.91, 1.92, 2.11, 2.20, 2.24, 2.25 and 2.60. Three more sit between 3 and 6 KB and qualify for nine stops. Ten of the eleven qualify for some tier, and that is the true sentence.
The correction leaves the argument where it was, since the decision taken was seven stops and every one of the ten clears seven comfortably. It matters only because the whole essay is about a number being cited without being checked.
What the cost table implies about the placements
The five rows of the cost table are exactly linear — 0.335 MB per extra copy of the whole set, to four figures — which lets one more quantity be read out of them that is not printed anywhere.
Dividing through by the 141 placements gives 2.38 KB as the average body per placement. Set against the family’s three summary statistics — a median of 2.25 KB, a mean of 3.72, and a mean of 2.68 with the heavy outlier removed — the placement-weighted average sits just above the median and well below either mean.
So the heavy generator contributes almost nothing to the total, which is what one would expect of
a figure appearing on few pages, and it means the two-megabyte estimate is not being propped up by
the outlier being rare. It is a genuine statement about a family of light figures, and the estimate
would barely move if unique-hues were dropped from the count entirely.
That is worth having because the essay’s headline rests on the median while its cost rests on the total, and a reader has no way to tell from the page whether those two are describing the same distribution. They are: the total behaves as though every placement carried a median-sized figure, because very nearly every placement does.
What the dial is worth having
A cost is only half a decision, and the other half is what the control buys — which is a claim about a reader rather than a measurement, and should be labelled as such.
The surround’s constant c enters CIECAM16 as an exponent on lightness, so moving it does not shift a curve, it bends one. Between the standard’s dark and average rooms the exponent changes by about a quarter, and the visible consequence is that the same stimulus is reported as substantially lighter in a lit room than in a dark one — which is the reason a film graded in a cinema looks flat on a television, and is one of the two or three effects an appearance model exists for.
A reader shown three rooms side by side sees three states and infers a trend. A reader who can move between them sees the bend. The second is the argument and the first is an illustration of it, and this collection’s stated position on drag is that the static frame carries the whole argument and the control corroborates — so the honest claim is that the dial makes an existing argument easier to test, not that it makes a new one.
Where it does more than corroborate is at the ends. The interpolation is linear in the three constants and the standard says nothing about whether that is right; a reader watching the curve bend smoothly between two tabulated rooms is being shown a modelling decision the tabulation hides, and can see that nothing distinguishes the tabulated points from the interpolated ones. That is worth two megabytes.
What is not measured, and why the raw number is the right one
The figures are gzipped in transit, and a dial’s frames are seven near-identical copies of one drawing — which is the best case a dictionary compressor has. The transferred cost is a small fraction of the raw one.
The raw number is still the one to decide on, for a reason about where the cost lands. The browser holds every frame decompressed in the DOM, because that is how the slider works: the frames are in the document and the script swaps which is visible. So the memory cost and the layout cost are the raw cost, and only the transfer is compressed.
On a page with several dialled figures that matters more than the transfer does. The site’s tier policy is stated in raw bytes for exactly this reason, and re-deciding it in compressed bytes would be changing the units to get a more comfortable answer.
What the failure was, in general terms
Two rounds deferred a piece of work on a quantity neither measured. Written down, the second deferral said so:
The surround still has no dial, for the second time running. The obstacle was named as payload and it was not measured, which means the item is deferred on the same unmeasured grounds as last time.
That is an honest record and it is also the diagnosis. A reason that is never checked stops being a reason and becomes a habit — the same failure mode as a gate turned on already-red and then disabled, or a bound asserted rather than proved slack, and the interval between the first deferral and this measurement is the interval over which the habit was operating.
The measurement took about an hour. It is eleven calls to eleven generators and a byte count, and every ingredient — the generators, the placement count, the tier table — was already to hand. Nothing was missing except somebody asking.
Which is the same finding this collection reaches about its subject, arriving one level out. A conclusion is worth what its inputs are known to; an input nobody has measured is worth nothing; and a decision resting on one is a decision resting on nothing, however sensible it sounds.
The two figures above are the before and after of the whole exercise, and the second one is not getting the dial. It draws three rooms as three rooms — the tabulation is its subject — so a control that interpolated between them would be arguing against the figure’s own point. A dial belongs on the figure whose argument is a trend, not on the one whose argument is a table, which is why one generator of the eleven has it and ten do not — and one of the ten was refused by a gate rather than by a judgement, for moving its numbers and not its drawing.
Worth stating what the tier table is, now that one of its numbers has been checked against the family it was being applied to.
It is a lookup from a figure’s body size to a stop count: thirteen under 3 KB, nine under 6, seven under 10, and nothing above about 12. Four thresholds and four counts, and no argument anywhere for why those and not others — they were chosen once against a distribution measured on sixty-four generators, which is a perfectly reasonable way to choose them and is also exactly the shape of decision this collection spends its essays finding.
What the measurement here does is not overturn the table. It establishes that the table was being used outside the distribution it was drawn from: the appearance family’s median body is 2.25 KB against the 4.0 the table assumed, so the family sits almost entirely in the top tier and the table’s finer distinctions never apply to it. A rule whose interesting cases never arise for the thing it is being applied to is a rule doing no work, and it was being cited as a reason.
The repair is not a better table. It is that a dial’s cost is a number anybody can take in an hour, so the table should be advice and the measurement should be the decision — which is how the seven stops in this round were arrived at, and is the only part of this worth carrying to another site.
Where the model stops
The eleven generators are weighed at their defaults. A placement passing options can be heavier or lighter, and the heaviest placement of the heaviest generator is not measured here — so the total is a mean-based estimate rather than a bound.
The 141 placements are counted by the same parse every placement count on this site comes from, which reads a page’s figure calls and the hero it declares. A generator called from a template rather than from an essay would be missed, and the figure index pages call every generator once each.
And the scope is the appearance family, because the surround is an argument to CIECAM16 and to nothing else here. The wider question — whether the tier policy still describes the whole site’s distribution now that it has 190 generators rather than 64 — is not answered. The measurement that would answer it is the same one repeated over every family, and the reason it is not here is that this file is loaded by a figure module, so importing every figure module would import that one back. That is a real constraint and it is also an excuse, and it is recorded as both.
Who found it, and when
Nobody found anything. A number that was always available was taken, and the interest is entirely in why it had not been.
The nearest thing to a general lesson is from software estimation, where the phenomenon has a name: a cost assumption that enters a decision as a stated fact, is never validated, and then propagates through every later decision that cites the first. The recommended treatment is to write the assumption down as an assumption, which the second deferral did — and that is why it was fixable, because a deferral recorded as resting on an unmeasured number is a deferral with an instruction attached.
Where the ladder goes next
Three structural choices were named as unreached two rounds ago and all three are now reached: the unit a difference is quoted in, the diagonal an adaptation is modelled as, and the template an observer is built from. What is left is an inventory of what the reaching cost, what it changed, and the one convention this round established that the seventy-odd figures predating it do not keep.
Named alongside this one
Essays reaching for the same objects. Nobody chose these; they are what the index of named objects makes visible.
- A tolerance has no light level appearance model · ciecam16 · specification · surround · viewing condition
- The appearance model has no straight piece appearance model · ciecam16 · specification · surround · viewing condition
- A model judged in another model's unit appearance model · ciecam16 · surround · viewing condition
- The gamut shrinks in the dark ciecam16 · specification · surround · viewing condition
- The proof is a different object ciecam16 · specification · surround · viewing condition
- Two rooms with one lightness scale ciecam16 · specification · surround · viewing condition
What links here
Every essay whose body links to this one.
The objects this essay names
Each one links to every other essay that touches it.
Appearance modelCIECAM16CompressionDeliveryInterpolationMeasurementPayloadSpecificationSurroundViewing condition