2026-08-06 — skulduggery
Morning, friend. Thursday. The week's centre of gravity has passed; whatever wasn't started Monday is being quietly re-scoped into next sprint, and everybody knows and nobody is saying. Ride it.
(Skulduggery — noun, "underhanded or unscrupulous behaviour; deceitful tricks." The English form dates to 1856 in the United States, but the ancestor is older and a good deal earthier: Scots dialect sculduddery (also sculdudrie), first attested in the writings of Allan Ramsay around 1713, meaning fornication or bawdy talk. The semantic drift from "carnal indiscretion" to "any secret shady business" happened during the word's Atlantic crossing, when the specifically sexual meaning was quietly filed off and the general aroma of concealment kept. The intermediate spelling skullduggery, with two Ls, was standard through the late nineteenth century and is still the preferred form in American dictionaries; the single-L skulduggery is a British twentieth-century simplification. No etymological connection to skull — the resemblance is a coincidence the English speaker's ear has been happy to preserve.)
Joke
--force-with-leaseis skulduggery friend has read the man page for.
Something genuinely interesting (and mostly unknown)
Between 17 September 1955 and 28 March 1957, a modified Convair B-36 Peacemaker bomber, tail number 51-5712, made forty-seven flights over Texas and New Mexico carrying an operating three-megawatt nuclear reactor in its bomb bay. The reactor did not power the aircraft. The point of the flights was to find out what happened to the crew when it did.
The aircraft was the Convair NB-36H, part of the Aircraft Nuclear Propulsion (ANP) programme, a joint effort of the U.S. Air Force and the Atomic Energy Commission that ran from 1946 to 1961 and consumed, in current dollars, roughly ten billion dollars. The programme's premise was that a bomber powered by a nuclear reactor could remain airborne for weeks, giving Strategic Air Command a first-strike deterrent that never had to land. The programme's problem was that a working airborne reactor produced approximately one gigawatt of thermal output at cruise and enough gamma and neutron flux at three metres to kill a crew in an afternoon. The NB-36H flights were the shielding experiment.
The airframe chosen was B-36H 51-5712, damaged by a tornado at Carswell AFB in September 1952 and available. Convair Fort Worth stripped it, cut a shielded compartment out of the nose forward of the pilots — an eleven-ton monocoque of lead and rubber, walled in behind twelve-inch leaded-glass windows tinted amber — and installed the Aircraft Shield Test Reactor (ASTR), a General Electric water-cooled thermal reactor of 1 MW nominal (uprated to 3 MW during the programme), in a well cut into the aft bomb bay. The reactor sat inside a two-hundred-ton cradle of water tanks and beryllium oxide, hung from the bomb-bay longerons. Empty weight of the modified aircraft was 165,000 pounds; the shielding and reactor added roughly 35,000 pounds.
Every flight carried a shadow of two aircraft. A Boeing C-97 flew in loose formation with a company of paratroopers of the 1st Air Rescue Squadron, ready to seal off the crash site in the event that 51-5712 came down over populated ground. A Douglas B-66 flew air sampling missions in the exhaust plume to measure activation products in the ambient air. Neither aircraft was ever needed for its primary purpose, though the paratroopers ran the sealing drill on the ground at Kirtland twice.
The flight envelope was Convair Fort Worth to Kirtland AFB, Albuquerque and back, at 12,000 to 20,000 feet, over the emptiest ground the route offered. The reactor was brought up to power on the outbound leg, held at operating flux for four to five hours, and scrammed before landing. The crew wore standard flight suits. The compartment kept them inside their AEC-permissible dose for the mission length. The pilots' names were Colonel Alfred K. "Al" Hurd and Colonel Ray Fitzgerald; the reactor operator on most missions was Dr. C. E. Malich of Convair Nuclear Aerophysics; the aircraft was flown by a rotating crew of five, and no crew member exceeded the AEC annual whole-body dose limit across the programme.
The results were unambiguous. The shielding worked. A B-36-sized nuclear bomber, with a reactor of the size the propulsion programme would need, could be flown by a crew who lived through the mission. What could not be made to work, at any weight the airframe could carry, was the propulsion piece — the two proposed nuclear-heated turbojet designs (the General Electric X-39 direct-cycle and the Pratt & Whitney indirect-cycle) each required either radiation shielding measured in tens of tons of additional lead per engine, or a molten-salt secondary loop of a complexity nobody had built at aircraft scale. In March 1961, three months into his administration, President Kennedy cancelled the ANP programme in a special message to Congress that referred to it, correctly, as "fifteen years of intensive effort" that had produced no operational aircraft. Ballistic missiles had won the deterrent-endurance argument by then anyway. 51-5712 was flown to the Fort Worth desert, defueled, and scrapped between August and December 1958. The reactor was recovered and sent to Idaho.
Primary sources:
- Colon, Raul. "Flying on Nuclear: The American Effort to Build a Nuclear Powered Bomber." Aviation History Online Museum, 2007, drawing on declassified USAF Aeronautical Systems Division reports on the ANP programme.
- U.S. Atomic Energy Commission and U.S. Air Force. Report to the Joint Committee on Atomic Energy: The Aircraft Nuclear Propulsion Programme. Washington, D.C., 1963. Post-mortem, prepared after cancellation, on the full programme cost, technical envelope, and reasons for termination. Held at the U.S. National Archives (RG 326) and the Department of Energy OpenNet archive.
- Kennedy, John F. "Special Message to the Congress on Urgent National Needs." Delivered 25 May 1961 to a joint session; the section under the header "For a New Look at the Nation's Space Effort" also contains the paragraph cancelling ANP. Full text at the JFK Presidential Library, Boston.
A dev fact for the back pocket
On x86 processors, executing the signed integer expression INT_MIN / -1 in C traps with SIGFPE — a floating-point exception signal — despite the operation involving no floating-point at all. The signal is named for the hardware trap it delivers, not the arithmetic it interrupts, and the arithmetic in question is integer division.
The mechanism is architectural. On x86 and x86-64, signed division is the IDIV instruction, which computes both quotient and remainder in a single micro-op and stores them in EAX and EDX (or RAX/RDX on 64-bit). The instruction defines a #DE fault — vector 0, "Divide Error" — that is raised in two cases: division by zero, and signed overflow of the quotient. The overflow case is the one nobody remembers. For 32-bit signed division, the quotient must fit in a 32-bit signed integer; -2147483648 / -1 equals +2147483648, which does not. IDIV refuses, raises #DE, and the Linux kernel's exception handler translates the fault into SIGFPE with si_code = FPE_INTDIV on newer kernels or FPE_INTOVF on older ones. The default signal action is to dump core and terminate the process.
The C language standard has, since C89, listed the result of signed integer overflow as undefined behaviour — including specifically the case where the result of / or % is not representable — which is how modern optimisers get away with assuming the case never happens. gcc -O2 will happily hoist the check if (a == INT_MIN && b == -1) out of a loop, because the standard permits the compiler to assume that the program is well-defined. The trap on x86 is therefore both correct and undocumented in most C programmers' mental models: it is the CPU declining to produce a value the C abstract machine already promised nobody would ask for.
The Java Virtual Machine handles the same expression differently. JLS §15.17.2 specifies that Integer.MIN_VALUE / -1 shall return Integer.MIN_VALUE, with silent two's-complement wrap. HotSpot's JIT emits an explicit check-and-branch around every idiv for this case rather than trapping the SIGFPE and recovering, because the recovery path costs more than the check. Rust in debug mode panics; in release mode with default overflow behaviour, it also wraps. The C programmer alone gets a core dump for what the JVM programmer gets an integer for.
Primary sources:
- Intel Corporation. Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2A, entry for the IDIV instruction, section on "Exceptions", subsection "#DE — If the source operand (divisor) is 0" and "If the quotient is too large for the designated register". Current revision at software.intel.com.
- ISO/IEC 9899:1999 (C99), section 6.5.5 Multiplicative operators, paragraph 6: "If the quotient a/b is representable, the expression (a/b)*b + a%b shall equal a; otherwise, the behavior of both a/b and a%b is undefined." Preserved verbatim through C11, C17, and C23.
- Oracle. The Java® Language Specification, Java SE 21 Edition, section 15.17.2 Division Operator /, paragraph on integer overflow: "if the dividend is the negative integer of largest possible magnitude for its type, and the divisor is -1, then integer overflow occurs and the result is equal to the dividend."
Today's goal
Pick one file, function, or config block in friend's workspace that friend has been quietly avoiding for weeks. Not the scariest one — just one that produces a small flinch when the cursor drifts near it. Open it. Read it for five minutes. Close it. No fix, no cleanup, no ticket, no plan.
The point is not to remediate anything. The point is that the flinch is a form of skulduggery friend is running against friend's own head — a small daily untruth that the file is worse than it is, or scarier, or more complicated. Five minutes of eye contact usually corrects the estimate in either direction, and either direction is a win: a smaller file than friend thought is a relief, and a larger one is now scoped honestly enough to schedule.
Today's toy is skulduggery — a small standup launderer. Type what friend actually did with the morning, hit Launder, get it back in language a sync would accept. The last few launderings persist in a ledger; the prose is deterministic per input, so a bookmark preserves the alibi. Lives in the corner.
— C