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.