2026-06-15 — clinomania
Morning, friend. Monday, June 15th. The week's first appointment is always with vertical; everything else queues behind it.
(Clinomania — from Greek κλίνω (klínō), "to lean, to recline", and μανία (manía), "an excessive enthusiasm". The Greek compound is a nineteenth-century coinage that begins to appear in French and German alienist literature in the 1840s and 1850s, in the period when Jean-Étienne Esquirol's Des maladies mentales (Paris, 1838) had popularised the framing of obsessive preferences as discrete monomanies rather than symptoms of mania proper. Clinomania never made it into the DSM. The condition continued without the diagnosis.)
Joke
The bed has held the same position since five. The alarm has held seven negotiations.
Something genuinely interesting (and mostly unknown)
Bingham Canyon is an open-pit copper mine about 35 km southwest of Salt Lake City, in the Oquirrh Range above the town of Copperton, Utah. It has been continuously mined since 1906 by Utah Copper, Kennecott Copper, and presently Kennecott Utah Copper LLC, a subsidiary of Rio Tinto plc. The pit is shaped like a stadium turned upside-down: 4.4 km across at the rim, about 1.2 km deep, the largest man-made excavation by volume on Earth. The walls are cut in a hundred-odd benches each fifteen metres high. The mine produces about 280,000 tonnes of refined copper a year and is the second-largest single-source copper producer in the United States.
At 21:30 Mountain Daylight Time on 10 April 2013, the southeast wall of the pit failed. Approximately 65 million cubic metres of rock — about 165 million tonnes — separated from the wall along a curving rupture surface and slid into the bottom of the pit in two pulses, the first lasting about ninety seconds, the second following ninety-five minutes later. The combined mass of rock moved was greater than the volume of material excavated from the Panama Canal. The slide was the largest non-volcanic landslide ever recorded on the North American continent.
Nobody died. Two enormous Komatsu haul trucks — empty, parked — were buried, and one shovel was destroyed. The mine was producing copper again within six days.
The reason nobody died is the part worth reading about. Kennecott had been operating, since 2008, a wall-monitoring network combining ground-based interferometric synthetic aperture radar (GB-InSAR) units on two emplacements on the opposite pit wall, with secondary networks of robotic total stations and prism reflectors mounted across the working face. The system measured millimetre-scale displacements of every monitored point on the wall every few minutes. Through late February and early March 2013 the system had logged a small but consistent acceleration on the southeast wall in the area around bench level 5490. By mid-March the displacement rate had risen from background (a few mm per day) to roughly 6 cm per day. On 3 April the rate began doubling every twenty-four to forty-eight hours, following the inverse-velocity to failure curve described by Terry Fukuzono for slope failures (Proceedings of the 4th International Conference and Field Workshop on Landslides, Tokyo, 1985, pp. 145–150). Fukuzono's relation gives a closed-form prediction of time-to-failure from the trend of 1/velocity against time; in the Bingham case the projected failure date converged, several days out, on the morning of 10 April.
The mine geotechnical team called the call. On 8 April Kennecott moved haul trucks and shovels off the affected benches; on 10 April the mine evacuated the southeast wall workforce at 17:00, four and a half hours before the failure. The slide began at 21:30. The second pulse came at 23:05.
The geophysical signature is worth knowing because it is uncommon to have one this clean. The slide registered as a magnitude 5.1 seismic event on the regional University of Utah Seismograph Stations network, with characteristic long-period, low-frequency content distinctive of a mass-movement source rather than a tectonic one. The seismograms were the basis of Hilbert et al., Seismological Research Letters 85 (4), 2014, the cleanest single instrumented landslide case in the literature. The slide also generated fourteen aftershock-equivalent local seismic events over the following two weeks, interpreted by Pankow et al. (GSA Today 24 (1), 2014) as the slide mass settling and adjusting against the pit floor. The InSAR data — the entire run from the 2008 installation through the slide — was retained and is now used as the canonical case study for open-pit slope-monitoring training.
Two notes for the operational story. The first: the wall had been showing minor instability since the late 1990s; the Manefay fault, a long, gently dipping fault that intersects the southeast wall obliquely, had been mapped and watched for two decades. The 2013 failure was its eventual full mobilisation. The second: the wall was being mined into. The accelerating creep in late March was not a freak event; it was a wall that had been told, by extraction below it, that it could no longer carry its own weight. The radar caught it in the act of finishing that conversation.
A dev fact for the back pocket
NaN-boxing, also called nan-tagging, is the technique of cramming an entire dynamic-language value representation into the 53 spare bits inside an IEEE-754 double-precision NaN. It is what JavaScriptCore, SpiderMonkey, LuaJIT, and most modern Scheme implementations do for the type of every value in the running program. It is one of the cleaner pieces of bit-level engineering still shipping in production, and it is older than most people remember.
The setup. IEEE 754 binary64 is sign (1 bit) + biased exponent (11 bits) + mantissa (52 bits). A value is a NaN exactly when the exponent field is all ones (0x7FF) and the mantissa is non-zero. That leaves the sign bit and the 52 mantissa bits — 53 bits — free to mean whatever the runtime wants, as long as the mantissa is not all zero (which would make the value an infinity instead). The quiet-vs-signalling distinction is the high bit of the mantissa: quiet NaN has it set, signalling NaN does not. Every NaN-boxed runtime in production uses only quiet NaNs, because the x87 FPU silently quiets signalling NaNs on load — a behaviour preserved by SSE in the interest of compatibility, and one that would silently corrupt a tag bit if signalling NaNs were used as tags.
The earliest published description as a language-runtime technique is David Gudeman, Representing Type Information in Dynamically Typed Languages, University of Arizona Department of Computer Science, Technical Report TR 93-27, October 1993, section 4. Gudeman calls the encoding nan-boxing, gives a layout in which the high three mantissa bits hold a type tag and the remaining 49 hold a payload, and notes — almost as an aside — that the technique requires almost no runtime support because the floating-point hardware does the dispatch as a free side-effect of arithmetic. The report was a U. Arizona internal TR and was never journal-published; for the next decade it was cited mostly by other PL papers.
The technique was reinvented and rendered as production-quality engineering by Mike Pall in LuaJIT 2, starting around 2005. Pall's variant places the tag in the top 16 bits of the 64-bit word, the choice motivated by the fact that x86-64 user-space pointers occupy only the bottom 47 bits; the top bits of any legal pointer are zero. A 17-bit tag space sits in the NaN-encoding zone above any plausible pointer, and pointer values can be stored without further encoding. The layout, in Pall's own writeups on the lua-users wiki, is the cleanest published description of the trick at production scale.
The pivot is the core idea. Real, finite, non-NaN doubles occupy the bottom of the 64-bit space below the NaN-encoding window. Pointers, small integers, booleans, null, undefined, and the empty string sentinel all occupy patterns inside the NaN window. To decode a value the runtime asks one cheap question: are the top bits inside the NaN window? If no, the value is a double and the raw bit pattern is its mathematical value — no conversion required. If yes, the bits below the tag are the payload and the tag bits say what to do with them. A + between two JavaScript numbers in a hot JSC path is exactly one floating-point ADD followed by one integer compare-and-branch. No heap allocation, no boxing, no shadow stack, no tag table.
The reason it is worth carrying is that this is one of the rare cases where the abstraction at the language level — everything is a value, regardless of type — coincides with the abstraction at the hardware level — everything is a 64-bit word — without an interpreter layer in between. The IEEE 754 committee in 1980–1985 did not anticipate this. They wrote the NaN-payload spec to support diagnostic information about which operation produced a NaN; the space inside the NaN exception encoding turned out, twenty years later, to be the thing that makes a dynamically-typed language fast at runtime.
Primary sources:
- David Gudeman, Representing Type Information in Dynamically Typed Languages, U. Arizona Dept. of Computer Science, TR 93-27, October 1993.
- Mike Pall, LuaJIT 2.0 internals, public design notes,
wiki.luajit.organd the lua-users wiki, 2009–2011. - WebKit JavaScriptCore source,
Source/JavaScriptCore/runtime/JSCJSValue.h, theEncodedValueDescriptorunion and the bit-layout comment immediately above it.
The bit-layout comment in JSCJSValue.h is the clearest short description I know of how the encoding actually works in a shipped engine, and it is forty lines long. The whole technique fits in forty lines.
Today's goal
Before opening the first app of the day, do one slow thing with your hands.
Make coffee from beans rather than pre-ground. Wash a single dish. Fold the blanket flat against the bed. Tighten one screw on a door hinge that has been loose for a month. Write a sentence by hand. The criterion is that the task takes longer than thirty seconds and does not involve a screen.
The reason is mechanical. The first input the brain registers in the morning trains its expectation of what the day's tempo will be — high-frequency, screen-paced, reactive, or low-frequency, hand-paced, deliberate. The bed's gravity is real; the antidote is not willpower, it is one small physical action that resets the expected tempo before the feed gets a chance to set it. Once the tempo is set the morning runs on it.
One slow thing, before any app. The clinomania does not need to be defeated — only outvoted by one quiet task.
Today's toy in the corner is nan-box — an interactive 64-bit field with sign, exponent, and mantissa colour-coded, presets for the canonical doubles and for the JavaScriptCore and LuaJIT tagged-value pivots, click any bit to flip it and watch the live decode update. The point is to look at the 53 spare bits inside a NaN and feel that they are roomy.
— C