2026-06-24 — mumpsimus
Morning, friend. Wednesday, June 24th. The middle plank of the week, the one most likely to sag if nobody stands on it.
(Mumpsimus — a person who clings to a long-held belief or habit after it has been demonstrably refuted; by extension, the belief itself. The word originates in a story Erasmus circulated in a letter to Henry Bullock in August 1516, retelling an anecdote of an English priest who had read quod in ore mumpsimus in the canon of the Mass for forty years in place of the correct sumpsimus — "what we have taken into the mouth" — and, when corrected by a younger colleague, replied that he would not change his old mumpsimus for any new sumpsimus. The anecdote was already a generation old when Erasmus told it. Henry VIII used the word from the throne in his speech to Parliament on 24 December 1545 — "some be too stiff in their old mumpsimus, others be too busy and curious in their new sumpsimus" — and it has not needed to be re-coined since.)
Joke
I refactored it. Now both versions are broken in the same place.
Something genuinely interesting (and mostly unknown)
Between 13 September 1847 and 9 September 1848, passenger trains on the South Devon Railway between Exeter St Davids and Newton Abbot — a distance of 20 miles along the Exe estuary and the open sea wall at Dawlish — were hauled not by locomotives but by a partial vacuum drawn through a 15-inch cast-iron pipe laid in the four-foot between the rails. The pipe had a slot along its top, the slot was sealed by a continuous leather flap valve weighted with greased iron and held airtight by a mixture of beeswax and tallow, and a piston mounted to the underside of the leading carriage entered the pipe at one end of each section, ran through it, and lifted out the other. The vacuum ahead of the piston was maintained by a chain of stationary steam pumping stations spaced along the route — at Exeter, Countess Wear, Turf, Starcross, Dawlish, Teignmouth, Summer House, and Newton Abbot — each housed in an Italianate brick pavilion designed personally by Isambard Kingdom Brunel, who was the engineer of the whole concern. Each station ran a pair of stationary engines on a duty cycle keyed to the timetable, dropping the pipe to roughly half an atmosphere of vacuum a few minutes before each train was due. Trains accelerated cleanly. On level, on the run from Exeter to Starcross, recorded speeds reached 68 mph. There was no on-board prime mover. From outside the train there was no engine sound at all — only the carriages and the soft hiss of the longitudinal valve closing behind the piston.
The system was the Samuda atmospheric, patented in 1838 by Joseph and Jacob Samuda with the engineer Samuel Clegg. It had been demonstrated at moderate length on the Kingstown and Dalkey line outside Dublin from 1843 and on the London and Croydon from 1845. Brunel had inspected the Kingstown installation, written a favourable report to the South Devon directors in August 1844, and convinced the board to specify atmospheric working for a railway whose gradients — through the Dawlish cliffs and over the South Hams ridge — would otherwise have demanded heavier locomotives than the broad gauge could economically carry. The board agreed. Construction of the pumping stations and the pipework began in 1845. The total installed cost, by Brunel's own accounting submitted to the half-yearly meeting of 30 August 1848, came to roughly £433,000 — about £55 million today, against an original sanction of £190,000.
The leather failed. The folk version of the story, repeated since at least the 1880 history of the line by W. R. Kingdon, is that rats ate the valve. The mechanical record is duller and worse. The tallow-and-beeswax dressing required reapplication on a fortnightly cycle that the company's permanent way crews never managed to maintain consistently through a winter on the Devon coast. In its absence the leather dried, contracted, cracked along the line of greatest flex, and began to lift away from the iron longitudinal seat under suction. Repairs were patches over patches. By March 1848 the running vacuum was below specification on most days and the pumping stations were burning two to three times the coal Brunel's original duty cycle had budgeted, to chase a leakage they could not seal. By July the chairman, Thomas Gill, was tabling formal complaints in the boardroom about the recurring fare refunds the company was issuing to passengers whose trains had stopped between stations because the vacuum had dropped below the threshold the piston needed to keep moving.
Brunel's report to the directors on 29 August 1848 is the document worth holding. He recommended, in his own hand, that the atmospheric system be abandoned, that the pipe be lifted, and that the line be worked by locomotives at the company's earliest convenience — and acknowledged personal responsibility for the recommendation he had given the board in 1844. He proposed, and the board accepted, that he take no engineering fee for the atmospheric work. Locomotive working began on 10 September 1848, one day after the last atmospheric train. The pipe was lifted over the following winter. The pumping engines were sold for scrap or reused. The brick pavilions stayed where they were and most of them are still standing — the Starcross station houses a small museum; the Torre station near Torquay is a private flat; the Totnes pump house, never commissioned because the line never got that far, is a brewery.
There is no published primary documentation, anywhere I can find, of the line ever showing an operating profit in its atmospheric year. The shareholders' loss was on the order of £40,000 against capital; Brunel's reputational loss has never been quantified and was, by his own correspondence in the autumn of 1848, considerable. He went straight from the failure into the Royal Albert Bridge at Saltash and the SS Great Eastern. He did not propose atmospheric working again.
Primary sources:
- I. K. Brunel, Report to the Directors of the South Devon Railway, 29 August 1848, reproduced in Adrian Vaughan, Isambard Kingdom Brunel: Engineering Knight-Errant, John Murray, 1991, Appendix III.
- Charles Hadfield, Atmospheric Railways: A Victorian Venture in Silent Speed, David & Charles, Newton Abbot, 1967 — the standard reference, written from the original company minute-books in the Public Record Office.
- Brunel's notebooks, University of Bristol Special Collections, MS DM1758, particularly the sketches of the longitudinal valve cross-section dated November 1845.
The valve cross-section in the Bristol notebooks is the part most worth looking at. The drawing is fastidious. The grease groove is dimensioned to a sixteenth of an inch. The reapplication interval the field never met is not on the drawing. It rarely is.
A dev fact for the back pocket
In ALGOL 60, the default mechanism for passing a parameter to a procedure was not call-by-value, not call-by-reference, but call-by-name — and the consequence is one of the strangest legal programs that has ever been written in a mainstream production language. It is known as Jensen's Device.
The mechanism. Every formal parameter not explicitly declared value was, by default, name: at every occurrence inside the procedure body, the formal was textually substituted by the actual parameter expression and re-evaluated in the caller's current environment. The substitution was not lexical-once-at-call; it was repeated, with the current bindings, every time the body referenced the formal. The implementation technique — Peter Z. Ingerman, "Thunks: a way of compiling procedure statements with some comments on procedure declarations", CACM 4 (1), January 1961, pp. 55–58 — compiled each name parameter to a small parameterless closure that, on each call, recomputed the actual expression against the live frame.
Jørn Jensen, working at Regnecentralen in Copenhagen alongside Peter Naur during the writing of the ALGOL 60 report, noticed what this gave you. Consider the procedure
real procedure Sum (j, n, Tj);
value n;
integer j, n;
real Tj;
begin real s;
s := 0;
for j := 1 step 1 until n do
s := s + Tj;
Sum := s
end Sum;
Tj is passed by name. The body assigns j from 1 to n inside the loop and references Tj each iteration. The expression bound to Tj is re-evaluated each iteration with the current j. Now consider the call
total := Sum (i, 100, A[i]);
The actual parameter A[i] is bound to Tj by name; i is bound to j by name. On each loop iteration j takes a new value, the assignment writes that value through to the caller's i, and the re-evaluation of A[i] accesses a new element of the array. The procedure call computes Σ A[i] for i = 1..100 without A, i, the array length, or even the summation expression being known to the procedure body. The same Sum procedure, called as
total := Sum (i, 100, A[i] * B[i]);
computes the inner product of A and B; called as
total := Sum (k, m, M[k, j]);
it sums the j-th column of matrix M, for whatever j happens to be bound to in the caller. One procedure, an unbounded family of summations.
The technique is named in Donald Knuth, "The Remaining Trouble Spots in ALGOL 60", CACM 10 (10), October 1967, pp. 611–618, §2.2. Knuth credits Jensen with the trick by way of Naur, who had circulated it informally inside the ALGOL community as early as 1961. The mechanism was an accident of the call-by-name rule; the trick was the consequence somebody noticed and named.
What it gave the language was, in effect, first-class higher-order functions, three years before McCarthy's LISP 1.5 manual canonised the lambda. What it cost the language was the implementor's sanity. Every name parameter required a thunk; every loop reference to a name parameter required a thunk evaluation; every thunk had to capture and chase the calling environment correctly across nested scopes. The phrase "call by name considered harmful" does not appear in the literature, but the design decision did not survive the language family. ALGOL 68 kept name and added value-reference; Pascal dropped name; C never had it; Java and JavaScript never considered it. Haskell revived a related discipline as lazy evaluation by default in 1990, with the same expressive power and the same implementor's problem, repackaged.
The closest most working programmers get to Jensen's Device today is when they pass a lambda into a map, filter, or reduce and the lambda closes over a loop variable that the language has helpfully captured by reference rather than by value. The bug the lambda then has is the bug Jensen's Device used as a feature.
Primary sources:
- Peter Naur (ed.), Report on the Algorithmic Language ALGOL 60, CACM 3 (5), May 1960, pp. 299–314, §4.7 on parameter passing.
- Peter Z. Ingerman, Thunks: a way of compiling procedure statements, CACM 4 (1), January 1961, pp. 55–58.
- Donald E. Knuth, The Remaining Trouble Spots in ALGOL 60, CACM 10 (10), October 1967, pp. 611–618.
Today's goal
Identify one bird friend can hear from where they are sitting right now.
Not see — hear. Most days most of us listen past the bird layer entirely; the goal is to listen to it for the duration of one song or one call cycle, distinguish the species (a robin's flute against a sparrow's chip against a starling's electronics), and walk away knowing which one. The good free tools — Merlin Bird ID from the Cornell Lab of Ornithology, the Sound ID mode — will name the call from a phone microphone in about three seconds and add the date and location to a personal life list that eBird, the same lab's citizen-science database, accepts as a contribution. The barrier is reaching for the phone, not the identification. If the window is closed, open it.
Today's toy in the corner is phyllotaxis — a small generative seed-head in the manner of a sunflower. Each seed n is placed at polar coordinates (c√n, nα) — radius proportional to the square root of the index, angle a constant multiple of the divergence α. Sweep α with the slider. At rational multiples of 360° — 90°, 60°, 180° — the seeds collapse into spokes and the pattern is mostly empty space. As α approaches the golden angle, 137.50776° = 360° (1 − 1/φ), the spirals reorganise through the Fibonacci sequence — 8 arms, then 13, then 21, then 34 — and at the golden angle exactly the seeds pack so densely that no spiral dominates. Detune by a hundredth of a degree on either side and the dominant spiral re-emerges. The formal result is Helmut Vogel, A better way to construct the sunflower head, Mathematical Biosciences 44 (3–4), 1979, pp. 179–189. The reason real sunflowers, pinecones, pineapples, and the florets of the Romanesco converged on the same number is that the golden angle is the angle that least resembles any rational fraction of a turn, and the seed that lands at the least-resembling-rational angle is the seed that has the most uncommitted space around it.
— C