The Jargon File, Version 4.2.2, 20 Aug 2000

Chapter 30

Chapter 303,844 wordsPublic domain

[back-formation from hairy] The complications that make something hairy. "Decoding TECO commands requires a certain amount of hair." Often seen in the phrase `infinite hair', which connotes extreme complexity. Also in `hairiferous' (tending to promote hair growth): "GNUMACS elisp encourages lusers to write complex editing modes." "Yeah, it's pretty hairiferous all right." (or just: "Hair squared!")

Node:hairball, Next:hairy, Previous:hair, Up:= H =

hairball n.

1. [Fidonet] A large batch of messages that a store-and-forward network is failing to forward when it should. Often used in the phrase "Fido coughed up a hairball today", meaning that the stuck messages have just come unstuck, producing a flood of mail where there had previously been drought. 2. An unmanageably huge mass of source code. "JWZ thought the Mozilla effort bogged down because the code was a huge hairball." 3. Any large amount of garbage coming out suddenly. "Sendmail is coughing up a hairball, so expect some slowness accessing the Internet."

Node:hairy, Next:HAKMEM, Previous:hairball, Up:= H =

hairy adj.

1. Annoyingly complicated. "DWIM is incredibly hairy." 2. Incomprehensible. "DWIM is incredibly hairy." 3. Of people, high-powered, authoritative, rare, expert, and/or incomprehensible. Hard to explain except in context: "He knows this hairy lawyer who says there's nothing to worry about." See also hirsute.

A well-known result in topology called the Brouwer Fixed-Point Theorem states that any continuous transformation of a 2-sphere into itself has at least one fixed point. Mathematically literate hackers tend to associate the term `hairy' with the informal version of this theorem; "You can't comb a hairy ball smooth."

The adjective `long-haired' is well-attested to have been in slang use among scientists and engineers during the early 1950s; it was equivalent to modern `hairy' senses 1 and 2, and was very likely ancestral to the hackish use. In fact the noun `long-hair' was at the time used to describe a person satisfying sense 3. Both senses probably passed out of use when long hair was adopted as a signature trait by the 1960s counterculture, leaving hackish `hairy' as a sort of stunted mutant relic.

In British mainstream use, "hairy" means "dangerous", and consequently, in British programming terms, "hairy" may be used to denote complicated and/or incomprehensible code, but only if that complexity or incomprehesiveness is also considered dangerous.

Node:HAKMEM, Next:hakspek, Previous:hairy, Up:= H =

HAKMEM /hak'mem/ n.

MIT AI Memo 239 (February 1972). A legendary collection of neat mathematical and programming hacks contributed by many people at MIT and elsewhere. (The title of the memo really is "HAKMEM", which is a 6-letterism for `hacks memo'.) Some of them are very useful techniques, powerful theorems, or interesting unsolved problems, but most fall into the category of mathematical and computer trivia. Here is a sampling of the entries (with authors), slightly paraphrased:

Item 41 (Gene Salamin): There are exactly 23,000 prime numbers less than 2^(18).

Item 46 (Rich Schroeppel): The most probable suit distribution in bridge hands is 4-4-3-2, as compared to 4-3-3-3, which is the most evenly distributed. This is because the world likes to have unequal numbers: a thermodynamic effect saying things will not be in the state of lowest energy, but in the state of lowest disordered energy.

Item 81 (Rich Schroeppel): Count the magic squares of order 5 (that is, all the 5-by-5 arrangements of the numbers from 1 to 25 such that all rows, columns, and diagonals add up to the same number). There are about 320 million, not counting those that differ only by rotation and reflection.

Item 154 (Bill Gosper): The myth that any given programming language is machine independent is easily exploded by computing the sum of powers of 2. If the result loops with period = 1 with sign +, you are on a sign-magnitude machine. If the result loops with period = 1 at -1, you are on a twos-complement machine. If the result loops with period greater than 1, including the beginning, you are on a ones-complement machine. If the result loops with period greater than 1, not including the beginning, your machine isn't binary -- the pattern should tell you the base. If you run out of memory, you are on a string or bignum system. If arithmetic overflow is a fatal error, some fascist pig with a read-only mind is trying to enforce machine independence. But the very ability to trap overflow is machine dependent. By this strategy, consider the universe, or, more precisely, algebra: Let X = the sum of many powers of 2 = ...111111 (base 2). Now add X to itself: X + X = ...111110. Thus, 2X = X - 1, so X = -1. Therefore algebra is run on a machine (the universe) that is two's-complement.

Item 174 (Bill Gosper and Stuart Nelson): 21963283741 is the only number such that if you represent it on the PDP-10 as both an integer and a floating-point number, the bit patterns of the two representations are identical.

Item 176 (Gosper): The "banana phenomenon" was encountered when processing a character string by taking the last 3 letters typed out, searching for a random occurrence of that sequence in the text, taking the letter following that occurrence, typing it out, and iterating. This ensures that every 4-letter string output occurs in the original. The program typed BANANANANANANANA.... We note an ambiguity in the phrase, "the Nth occurrence of." In one sense, there are five 00's in 0000000000; in another, there are nine. The editing program TECO finds five. Thus it finds only the first ANA in BANANA, and is thus obligated to type N next. By Murphy's Law, there is but one NAN, thus forcing A, and thus a loop. An option to find overlapped instances would be useful, although it would require backing up N - 1 characters before seeking the next N-character string.

Note: This last item refers to a Dissociated Press implementation. See also banana problem.

HAKMEM also contains some rather more complicated mathematical and technical items, but these examples show some of its fun flavor.

An HTML transcription of the entire document is available at http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html.

Node:hakspek, Next:Halloween Documents, Previous:HAKMEM, Up:= H =

hakspek /hak'speek/ n.

A shorthand method of spelling found on many British academic bulletin boards and talker systems. Syllables and whole words in a sentence are replaced by single ASCII characters the names of which are phonetically similar or equivalent, while multiple letters are usually dropped. Hence, `for' becomes `4'; `two', `too', and `to' become `2'; `ck' becomes `k'. "Before I see you tomorrow" becomes "b4 i c u 2moro". First appeared in London about 1986, and was probably caused by the slowness of available talker systems, which operated on archaic machines with outdated operating systems and no standard methods of communication. Has become rarer since. See also talk mode.

Node:Halloween Documents, Next:hammer, Previous:hakspek, Up:= H =

Halloween Documents n.

A pair of Microsoft internal strategy memoranda leaked to ESR in late 1998 that confirmed everybody's paranoia about the current Evil Empire. These documents praised the technical excellence of Linux and outlined a counterstrategy of attempting to lock in customers by "de-commoditizing" Internet protocols and services. They were extensively cited on the Internet and in the press and proved so embarrassing that Microsoft PR barely said a word in public for six months afterwards.

Node:hammer, Next:hamster, Previous:Halloween Documents, Up:= H =

hammer vt.

Commonwealth hackish syn. for bang on.

Node:hamster, Next:HAND, Previous:hammer, Up:= H =

hamster n.

1. [Fairchild] A particularly slick little piece of code that does one thing well; a small, self-contained hack. The image is of a hamster happily spinning its exercise wheel. 2. A tailless mouse; that is, one with an infrared link to a receiver on the machine, as opposed to the conventional cable. 3. [UK] Any item of hardware made by Amstrad, a company famous for its cheap plastic PC-almost-compatibles.

Node:HAND, Next:hand cruft, Previous:hamster, Up:= H =

HAND //

[Usenet: very common] Abbreviation: Have A Nice Day. Typically used to close a Usenet posting, but also used to informally close emails; often preceded by HTH.

Node:hand cruft, Next:hand-hacking, Previous:HAND, Up:= H =

hand cruft vt.

[pun on `hand craft'] See cruft, sense 3.

Node:hand-hacking, Next:hand-roll, Previous:hand cruft, Up:= H =

hand-hacking n.

1. [rare] The practice of translating hot spots from an HLL into hand-tuned assembler, as opposed to trying to coerce the compiler into generating better code. Both the term and the practice are becoming uncommon. See tune, bum, by hand; syn. with v. cruft. 2. [common] More generally, manual construction or patching of data sets that would normally be generated by a translation utility and interpreted by another program, and aren't really designed to be read or modified by humans.

Node:hand-roll, Next:handle, Previous:hand-hacking, Up:= H =

hand-roll v.

[from obs. mainstream slang `hand-rolled' in opposition to `ready-made', referring to cigarettes] To perform a normally automated software installation or configuration process by hand; implies that the normal process failed due to bugs in the configurator or was defeated by something exceptional in the local environment. "The worst thing about being a gateway between four different nets is having to hand-roll a new sendmail configuration every time any of them upgrades."

Node:handle, Next:handshaking, Previous:hand-roll, Up:= H =

handle n.

1. [from CB slang] An electronic pseudonym; a `nom de guerre' intended to conceal the user's true identity. Network and BBS handles function as the same sort of simultaneous concealment and display one finds on Citizen's Band radio, from which the term was adopted. Use of grandiose handles is characteristic of warez d00dz, crackers, weenies, spods, and other lower forms of network life; true hackers travel on their own reputations rather than invented legendry. Compare nick, screen name. 2. A magic cookie, often in the form of a numeric index into some array somewhere, through which you can manipulate an object like a file or window. The form `file handle' is especially common. 3. [Mac] A pointer to a pointer to dynamically-allocated memory; the extra level of indirection allows on-the-fly memory compaction (to cut down on fragmentation) or aging out of unused resources, with minimal impact on the (possibly multiple) parts of the larger program containing references to the allocated memory. Compare snap (to snap a handle would defeat its purpose); see also aliasing bug, dangling pointer.

Node:handshaking, Next:handwave, Previous:handle, Up:= H =

handshaking n.

[very common] Hardware or software activity designed to start or keep two machines or programs in synchronization as they do protocol. Often applied to human activity; thus, a hacker might watch two people in conversation nodding their heads to indicate that they have heard each others' points and say "Oh, they're handshaking!". See also protocol.

Node:handwave, Next:hang, Previous:handshaking, Up:= H =

handwave

[poss. from gestures characteristic of stage magicians] 1. v. To gloss over a complex point; to distract a listener; to support a (possibly actually valid) point with blatantly faulty logic. 2. n. The act of handwaving. "Boy, what a handwave!"

If someone starts a sentence with "Clearly..." or "Obviously..." or "It is self-evident that...", it is a good bet he is about to handwave (alternatively, use of these constructions in a sarcastic tone before a paraphrase of someone else's argument suggests that it is a handwave). The theory behind this term is that if you wave your hands at the right moment, the listener may be sufficiently distracted to not notice that what you have said is bogus. Failing that, if a listener does object, you might try to dismiss the objection with a wave of your hand.

The use of this word is often accompanied by gestures: both hands up, palms forward, swinging the hands in a vertical plane pivoting at the elbows and/or shoulders (depending on the magnitude of the handwave); alternatively, holding the forearms in one position while rotating the hands at the wrist to make them flutter. In context, the gestures alone can suffice as a remark; if a speaker makes an outrageously unsupported assumption, you might simply wave your hands in this way, as an accusation, far more eloquent than words could express, that his logic is faulty.

Node:hang, Next:Hanlon's Razor, Previous:handwave, Up:= H =

hang v.

1. [very common] To wait for an event that will never occur. "The system is hanging because it can't read from the crashed drive". See wedged, hung. 2. To wait for some event to occur; to hang around until something happens. "The program displays a menu and then hangs until you type a character." Compare block. 3. To attach a peripheral device, esp. in the construction `hang off': "We're going to hang another tape drive off the file server." Implies a device attached with cables, rather than something that is strictly inside the machine's chassis.

Node:Hanlon's Razor, Next:happily, Previous:hang, Up:= H =

Hanlon's Razor prov.

A corollary of Finagle's Law, similar to Occam's Razor, that reads "Never attribute to malice that which can be adequately explained by stupidity." The derivation of the Hanlon eponym is not definitely known, but a very similar remark ("You have attributed conditions to villainy that simply result from stupidity.") appears in "Logic of Empire", a classic 1941 SF story by Robert A. Heinlein, who calls it the `devil theory' of sociology. Heinlein's popularity in the hacker culture makes plausible the supposition that `Hanlon' is derived from `Heinlein' by phonetic corruption. A similar epigram has been attributed to William James, but Heinlein more probably got the idea from Alfred Korzybski and other practitioners of General Semantics. Quoted here because it seems to be a particular favorite of hackers, often showing up in sig blocks, fortune cookie files and the login banners of BBS systems and commercial networks. This probably reflects the hacker's daily experience of environments created by well-intentioned but short-sighted people. Compare Sturgeon's Law, Ninety-Ninety Rule.

Node:happily, Next:haque, Previous:Hanlon's Razor, Up:= H =

happily adv.

Of software, used to emphasize that a program is unaware of some important fact about its environment, either because it has been fooled into believing a lie, or because it doesn't care. The sense of `happy' here is not that of elation, but rather that of blissful ignorance. "The program continues to run, happily unaware that its output is going to /dev/null." Also used to suggest that a program or device would really rather be doing something destructive, and is being given an opportunity to do so. "If you enter an O here instead of a zero, the program will happily erase all your data." Neverheless, use of this term implies a basically benign attitude towards the program: It didn't mean any harm, it was just eager to do its job. We'd like to be angry at it but we shouldn't, we should try to understand it instead. The adjective "cheerfully" is often used in exactly the same way.

Node:haque, Next:hard boot, Previous:happily, Up:= H =

haque /hak/ n.

[Usenet] Variant spelling of hack, used only for the noun form and connoting an elegant hack. that is a hack in sense 2.

Node:hard boot, Next:hardcoded, Previous:haque, Up:= H =

hard boot n.

See boot.

Node:hardcoded, Next:hardwarily, Previous:hard boot, Up:= H =

hardcoded adj.

1. [common] Said of data inserted directly into a program, where it cannot be easily modified, as opposed to data in some profile, resource (see de-rezz sense 2), or environment variable that a user or hacker can easily modify. 2. In C, this is esp. applied to use of a literal instead of a #define macro (see magic number).

Node:hardwarily, Next:hardwired, Previous:hardcoded, Up:= H =

hardwarily /hard-weir'*-lee/ adv.

In a way pertaining to hardware. "The system is hardwarily unreliable." The adjective `hardwary' is not traditionally used, though it has recently been reported from the U.K. See softwarily.

Node:hardwired, Next:has the X nature, Previous:hardwarily, Up:= H =

hardwired adj.

1. In software, syn. for hardcoded. 2. By extension, anything that is not modifiable, especially in the sense of customizable to one's particular needs or tastes.

Node:has the X nature, Next:hash bucket, Previous:hardwired, Up:= H =

has the X nature

[seems to derive from Zen Buddhist koans of the form "Does an X have the Buddha-nature?"] adj. Common hacker construction for `is an X', used for humorous emphasis. "Anyone who can't even use a program with on-screen help embedded in it truly has the loser nature!" See also the X that can be Y is not the true X. See also mu.

Node:hash bucket, Next:hash collision, Previous:has the X nature, Up:= H =

hash bucket n.

A notional receptacle, a set of which might be used to apportion data items for sorting or lookup purposes. When you look up a name in the phone book (for example), you typically hash it by extracting its first letter; the hash buckets are the alphabetically ordered letter sections. This term is used as techspeak with respect to code that uses actual hash functions; in jargon, it is used for human associative memory as well. Thus, two things `in the same hash bucket' are more difficult to discriminate, and may be confused. "If you hash English words only by length, you get too many common grammar words in the first couple of hash buckets." Compare hash collision.

Node:hash collision, Next:hat, Previous:hash bucket, Up:= H =

hash collision n.

[from the techspeak] (var. `hash clash') When used of people, signifies a confusion in associative memory or imagination, especially a persistent one (see thinko). True story: One of us [ESR] was once on the phone with a friend about to move out to Berkeley. When asked what he expected Berkeley to be like, the friend replied: "Well, I have this mental picture of naked women throwing Molotov cocktails, but I think that's just a collision in my hash tables." Compare hash bucket.

Node:hat, Next:HCF, Previous:hash collision, Up:= H =

hat n.

Common (spoken) name for the circumflex (`^', ASCII 1011110) character. See ASCII for other synonyms.

Node:HCF, Next:heads down, Previous:hat, Up:= H =

HCF /H-C-F/ n.

Mnemonic for `Halt and Catch Fire', any of several undocumented and semi-mythical machine instructions with destructive side-effects, supposedly included for test purposes on several well-known architectures going as far back as the IBM 360. The MC6800 microprocessor was the first for which an HCF opcode became widely known. This instruction caused the processor to toggle a subset of the bus lines as rapidly as it could; in some configurations this could actually cause lines to burn up. Compare killer poke.

Node:heads down, Next:heartbeat, Previous:HCF, Up:= H =

heads down [Sun] adj.

Concentrating, usually so heavily and for so long that everything outside the focus area is missed. See also hack mode and larval stage, although this mode is hardly confined to fledgling hackers.

Node:heartbeat, Next:heatseeker, Previous:heads down, Up:= H =

heartbeat n.

1. The signal emitted by a Level 2 Ethernet transceiver at the end of every packet to show that the collision-detection circuit is still connected. 2. A periodic synchronization signal used by software or hardware, such as a bus clock or a periodic interrupt. 3. The `natural' oscillation frequency of a computer's clock crystal, before frequency division down to the machine's clock rate. 4. A signal emitted at regular intervals by software to demonstrate that it is still alive. Sometimes hardware is designed to reboot the machine if it stops hearing a heartbeat. See also breath-of-life packet.

Node:heatseeker, Next:heavy metal, Previous:heartbeat, Up:= H =

heatseeker n.

[IBM] A customer who can be relied upon to buy, without fail, the latest version of an existing product (not quite the same as a member of the lunatic fringe). A 1993 example of a heatseeker was someone who, owning a 286 PC and Windows 3.0, went out and bought Windows 3.1 (which offers no worthwhile benefits unless you have a 386). If all customers were heatseekers, vast amounts of money could be made by just fixing some of the bugs in each release (n) and selling it to them as release (n+1). Microsoft in fact seems to have mastered this technique.

Node:heavy metal, Next:heavy wizardry, Previous:heatseeker, Up:= H =

heavy metal n.

[Cambridge] Syn. big iron.

Node:heavy wizardry, Next:heavyweight, Previous:heavy metal, Up:= H =

heavy wizardry n.

Code or designs that trade on a particularly intimate knowledge or experience of a particular operating system or language or complex application interface. Distinguished from deep magic, which trades more on arcane theoretical knowledge. Writing device drivers is heavy wizardry; so is interfacing to X (sense 2) without a toolkit. Esp. found in source-code comments of the form "Heavy wizardry begins here". Compare voodoo programming.

Node:heavyweight, Next:heisenbug, Previous:heavy wizardry, Up:= H =

heavyweight adj.

[common] High-overhead; baroque; code-intensive; featureful, but costly. Esp. used of communication protocols, language designs, and any sort of implementation in which maximum generality and/or ease of implementation has been pushed at the expense of mundane considerations such as speed, memory utilization, and startup time. EMACS is a heavyweight editor; X is an extremely heavyweight window system. This term isn't pejorative, but one hacker's heavyweight is another's elephantine and a third's monstrosity. Oppose `lightweight'. Usage: now borders on techspeak, especially in the compound `heavyweight process'.

Node:heisenbug, Next:Helen Keller mode, Previous:heavyweight, Up:= H =

heisenbug /hi:'zen-buhg/ n.

[from Heisenberg's Uncertainty Principle in quantum physics] A bug that disappears or alters its behavior when one attempts to probe or isolate it. (This usage is not even particularly fanciful; the use of a debugger sometimes alters a program's operating environment significantly enough that buggy code, such as that which relies on the values of uninitialized memory, behaves quite differently.) Antonym of Bohr bug; see also mandelbug, schroedinbug. In C, nine out of ten heisenbugs result from uninitialized auto variables, fandango on core phenomena (esp. lossage related to corruption of the malloc arena) or errors that smash the stack.

Node:Helen Keller mode, Next:hello sailor!, Previous:heisenbug, Up:= H =

Helen Keller mode n.

1. State of a hardware or software system that is deaf, dumb, and blind, i.e., accepting no input and generating no output, usually due to an infinite loop or some other excursion into deep space. (Unfair to the real Helen Keller, whose success at learning speech was triumphant.) See also go flatline, catatonic. 2. On IBM PCs under DOS, refers to a specific failure mode in which a screen saver has kicked in over an ill-behaved application which bypasses the very interrupts the screen saver watches for activity. Your choices are to try to get from the program's current state through a successful save-and-exit without being able to see what you're doing, or to re-boot the machine. This isn't (strictly speaking) a crash.

Node:hello sailor!, Next:hello wall!, Previous:Helen Keller mode, Up:= H =

hello sailor! interj.