9. There is no escape
This last point is perhaps the most important. The language is
inadequate but circumscribed, because there is no way to escape its
limitations. There are no casts to disable the type-checking when
necessary. There is no way to replace the defective run-time
environment with a sensible one, unless one controls the compiler
that defines the "standard procedures". The language is closed.
People who use Pascal for serious programming fall into a fatal
trap. Because the language is impotent, it must be extended. But
each group extends Pascal in its own direction, to make it look
like whatever language they really want. Extensions for separate
compilation, FORTRAN-like COMMON, string data types, internal
static variables, initialization, octal numbers, bit operators,
etc., all add to the utility of the language for one group but
destroy its portability to others.
I feel that it is a mistake to use Pascal for anything much beyond
its original target. In its pure form, Pascal is a toy language,
suitable for teaching but not for real programming.
Pascal has since been almost entirely displaced (by C) from the
niches it had acquired in serious applications and systems
programming, but retains some popularity as a hobbyist language in
the MS-DOS and Macintosh worlds.
There is a classic story of a tiger team penetrating a secure
military computer that illustrates the danger inherent in binary
patches (or, indeed, any patches that you can't --- or don't ---
inspect and examine before installing). They couldn't find any
trap doors or any way to penetrate security of IBM's OS, so
they made a site visit to an IBM office (remember, these were
official military types who were purportedly on official business),
swiped some IBM stationery, and created a fake patch. The patch
was actually the trapdoor they needed. The patch was distributed
at about the right time for an IBM patch, had official stationery
and all accompanying documentation, and was dutifully installed.
The installation manager very shortly thereafter learned something
about proper procedures.
Since a real operating system provides useful, higher-level
services for the tasks commonly performed with peeks and pokes on
micros, and real languages tend not to encourage low-level memory
groveling, a question like "How do I do a peek in C?" is
diagnostic of the newbie. (Of course, OS kernels often have to
do exactly this; a real C hacker would unhesitatingly, if
unportably, assign an absolute address to a pointer variable and
indirect through it.)
True story: Once upon a time there was a bug that really did depend
on the phase of the moon. There was a little subroutine that had
traditionally been used in various programs at MIT to calculate an
approximation to the moon's true phase. GLS incorporated this
routine into a LISP program that, when it wrote out a file, would
print a timestamp line almost 80 characters long. Very
occasionally the first line of the message would be too long and
would overflow onto the next line, and when the file was later read
back in the program would barf. The length of the first line
depended on both the precise date and time and the length of the
phase specification when the timestamp was printed, and so the bug
literally depended on the phase of the moon!
The first paper edition of the Jargon File (Steele-1983) included
an example of one of the timestamp lines that exhibited this bug,
but the typesetter `corrected' it. This has since been
described as the phase-of-the-moon-bug bug.
At one time phreaking was a semi-respectable activity among
hackers; there was a gentleman's agreement that phreaking as an
intellectual game and a form of exploration was OK, but serious
theft of services was taboo. There was significant crossover
between the hacker community and the hard-core phone phreaks who
ran semi-underground networks of their own through such media as
the legendary "TAP Newsletter". This ethos began to break
down in the mid-1980s as wider dissemination of the techniques put
them in the hands of less responsible phreaks. Around the same
time, changes in the phone network made old-style technical
ingenuity less effective as a way of hacking it, so phreaking came
to depend more on overtly criminal acts such as stealing phone-card
numbers. The crimes and punishments of gangs like the `414 group'
turned that game very ugly. A few old-time hackers still phreak
casually just to keep their hand in, but most these days have
hardly even heard of `blue boxes' or any of the other
paraphernalia of the great phreaks of yore.
The funniest use of `ping' to date was described in January 1991 by
Steve Hayman on the USENET group comp.sys.next. He was trying
to isolate a faulty cable segment on a TCP/IP Ethernet hooked up to
a NeXT machine, and got tired of having to run back to his console
after each cabling tweak to see if the ping packets were getting
through. So he used the sound-recording feature on the NeXT, then
wrote a script that repeatedly invoked `ping(8)', listened for
an echo, and played back the recording on each returned packet.
Result? A program that caused the machine to repeat, over and
over, "Ping ... ping ... ping ..." as long as the
network was up. He turned the volume to maximum, ferreted through
the building with one ear cocked, and found a faulty tee connector
in no time.
Two meg single-platter removable disk packs used to be called
pizzas, and the huge drive they were stuck into was referred to as
a pizza oven. It's an index of progress that in the old days just
the disk was pizza-sized, while now the entire computer is.
A recent innovation in plan files has been the introduction of
"scrolling plan files" which are one-dimensional animations made
using only the printable ASCII character set, carriage return and
line feed, avoiding terminal specific escape sequences, since the
finger command will (for security reasons; see
letterbomb) not pass the escape character.
Scrolling .plan files have become art forms in miniature, and some
sites have started competitions to find who can create the longest
running, funniest, and most original animations. Various animation
characters include:
Centipede:
mmmmme
Lorry/Truck:
oo-oP
Andalusian Video Snail:
_@/
and a compiler (ASP) is available on USENET for producing them.
See also twirling baton.
A slightly more directed form of plokta can often be seen in mail
messages or USENET articles from new users --- the text might end
with
^X^C
q
quit
:q
^C
end
x
exit
ZZ
^D
?
help
as the user vainly tries to find the right exit sequence, with the
incorrect tries piling up at the end of the message....
The ultimate pnambic product was "Dan Bricklin's Demo", a program
which supported flashy user-interface design prototyping. There is
a related maxim among hackers: "Any sufficiently advanced
technology is indistinguishable from a rigged demo." See
magic, sense 1, for illumination of this point.
IBM (which originated as a tabulating-machine manufacturer) married
the punched card to computers, encoding binary information as
patterns of small rectangular holes; one character per column,
80 columns per card. Other coding schemes, sizes of card, and
hole shapes were tried at various times.
The 80-column width of most character terminals is a legacy of the
IBM punched card; so is the size of the quick-reference cards
distributed with many varieties of computers even today. See
chad, chad box, eighty-column mind, green card,
dusty deck, lace card, card walloper.