Random Poetry and Other Losses printed April 17, 1979 Random Poetry and Other Losses The Great Quux (C) Copyright 1978 by Guy L. Steele Jr. All rights reserved. Any similarity of anything in this document to anything in the real world, except for a satiric purpose, is purely coincidental. The Great Quux page Random Poetry and Other Losses printed April 17, 1979 BBN Superlisp [to be sung to the tune of Jesus Christ Superstar] Every time I look at you I don't understand Why you think "Do What I Mean" is so cool and grand; You'd have managed better if you'd thought it through, Why'd you pick such an awkward way your bugs to undo? Your hairy feature will not be the last revolution, It's clear "Mean What I Do" is the ultimate solution! Don't you get me wrong, Don't you get me wrong, Don't you get me wrong, now, Don't you get me wrong, I only want to hack, I only want to hack, I only want to hack, I only want to hack. BBN! BBN! Some people think you're the living end! BBN! BBN! Some people think you're the living end! BBN! SuperLISP! Can "Do What I Mean" measure up to this? BBN! SuperLISP! Can "Do What I Mean" measure up to this? Tell us what you think about your friends at the top, Who d'you think besides yourself's the pick of the crop? Is LISP 1.5 where it's at? Is it where you are? Does Stanford's LISP have features too or is that just PR? Do you have the breakpoint scheme that MACLISP is known for, Or is that just the kind of kludge the user's on his own for? Don't you get me wrong, Don't you get me wrong, Don't you get me wrong, now, Don't you get me wrong, I only want to hack, I only want to hack, I only want to hack, I only want to hack. BBN! BBN! Some people think you're the living end! BBN! BBN! Some people think you're the living end! BBN! SuperLISP! Can "Do What I Mean" measure up to this? BBN! SuperLISP! Can "Do What I Mean" measure up to this? -- The Great Quux (with apologies to Rice and Webber) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 1 Random Poetry and Other Losses printed April 17, 1979 Both Ways, Now [to be sung to the tune of Both Sides, Now] Decimal digits in a row, Just set the dials and let 'er go. The ENIAC was grossly slow -- I used to code that way, But then this Fortran came along; I danced and sang a happy song: So natural -- what could go wrong? I little knew, that day! I've looked at Fortran both ways, now, At II and IV, and still somehow, It's rows of numbers I recall; I really don't know Fortran at all. Fortran IV is real good stuff, But business hackers have it tough; For them this Fortran's not enough -- Then Cobol saved the day! But now I sing a sad refrain; This Cobol loss is no one's gain, And writing programs is a pain (I get writer's cramp that way!) I've looked at Cobol both ways, now, I code in it, and still somehow, It's FORMAT statements I recall; I really don't know Cobol at all. Cobol will for business do; Accounts and payroll make it through (And bills for zero dollars too -- I get them every day!) But those who hack symbolic frobs Cannot make do with Cobol jobs, And now I sing through anguished sobs, But Lisp is here to stay. I've looked at Lisp code both ways, now, At lambda forms, and still somehow, It's Cobol statements I recall; I really don't know Lisp at all. -- The Great Quux (with apologies to Joni Mitchell) (C) Copyright 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 3 Random Poetry and Other Losses printed April 17, 1979 A Time for DWIM [to be sung to the tune of A Time for Us (theme song from Romeo and Juliet)] A time for DWIM There'll never be; No clever code This losing mode Can UNDO for me. This "golden hope" (To be denied) Could never Correctly fix the bugs my programs hide. A way for bugs There'll never be To fix with generality. So to this DWIM Let's say farewell; The crocks therein Prove it can't win And ring its knell: Do What I Mean Is just a ruse -- It really Means only: Fix How Teitelman doth Lose! -- The Great Quux (with apologies to Rota, Kusik, and Snyder) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 4 Random Poetry and Other Losses printed April 17, 1979 The Sound of FORTRAN [to be sung to the tune of The Sound of Music] My programming day has come to an end, I know, But one minor bug still restrains me, though, So back to me desk I stumble, More coffee I pour in my mug, And I drink, and I think, and I program Just one more hack, just one more hairy kludge To remove that bug. Machines are alive with the sound of FORTRAN, With numbers they've crunched for a thousand hours; They add and subtract to the sound of FORTRAN, And raise fractions to unheard of powers. My code's full of REAL statements, INTEGER and COMPLEX too, duplicated thrice oe'r, And so intermixed with the WRITEs and READs to cause errors galore; Arrays are declared of dimension six, but indexed minus two; Computed GO TOs are last in the range of a DO! I now recompile my corrected programs; I know I will get what compiled before -- My code will be blessed with the sound of FORTRAN, And I'll lose once more. -- The Great Quux (with apologies to Rodgers and Hammerstein) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 5 Random Poetry and Other Losses printed April 17, 1979 The HACTRN Once before a console dreary, while I programmed, weak and weary, Over many a curious program which did TECO's buffer fill, -- While I pondered, nearly sleeping, suddenly there came a feeping, As of something gently beeping, beeping with my console's bell. "'Tis my DDT," I muttered, "feeping on my console's bell: Once it feeped, and now is still." Ah, distinctly I remember that dark night in bleak December, And each separate glowing symbol danced before me, bright and chill. Eagerly I wished the morrow; vainly I had sought to borrow From my HACTRN aid for sorrow -- sorrow for the bugs which fill -- For the strange unknown and nameless bugs which ever all my programs f Bugs which now I searched for still. And the coughing, whirring, gritty fan I heard inside my TTY Made me with fantastic terrors never known before to thrill; So that now, to still the beating of my heart I stood repeating, "'Tis some interrupt entreating DDT to signal me -- Some strange interrupt entreating DDT to signal me -- Its importance surely nil." Presently my soul grew stronger: hesitating then no longer I decided that I would respond to this strange program's call; TECO, which I then attended, to my soul more strength extended; With ^Z I ascended, going to my DDT -- V I typed, and answered soon my DDT -- TECO there, and that was all! Dumbly at my console peering, as I sat there, wondering, fearing, Doubting now that any interrupt was ever there to call; But the silence was unbroken, and my HACTRN gave no token, And the only sound there spoken from my TTY's whirring fan -- The low and rough and distant sound came from my TTY's whirring fan -- TECO there, and that was all. Back into my TECO going, with my pounding heart now slowing, Soon again I heard a feeping, somewhat louder than before. "Surely," said I, "surely this is some strange bug of RMS's Which an interrupt professes, though I have no other job; Let me then ask DDT if it thinks there's another job -- 'Tis a bug, and nothing more!" Again I went up to my HACTRN while cold shivers up my back ran V I typed, my jobs now once more to display. Only TECO was there listed; though my trembling heart resisted Yet I willed my hand, insisted, J to quickly type -- To answer this bold query DDT did hesitantly type A ghostly "FOOBARJ". The Great Quux page 6 Random Poetry and Other Losses printed April 17, 1979 From V protected, now, this phantom job, selected Gave no clue to why it had invoked that former beeping shrill. "Though," I said, "you're no inferior, I shall act as your superior And examine your interior, this strange matter to explore." Then I typed a 0/ this matter further to explore -- Quoth the HACTRN, ":KILL". Much I worried -- this outrageous bug might prove to be contagious, Though thus far it had not seemed to do my TECO any ill: For we cannot help concurring such a bug would cause a stirring, Feeping on a console whirring, disappearing then from sight -- An evanescent mystery subjob disappearing then from sight With no clue but ":KILL"! But my HACTRN, swapping, running, gave no further sign of cunning By this unknown phantom, which was in a thirty second sleep; None of this I comprehended; to my TECO I descended, And in terror I pretended that the bug had gone away -- I pretended that for good the mystery bug had gone away -- When my console gave a feep. Now I quickly, hoping, praying, started up a PEEK displaying All the the jobs and subjobs there which did the system fill: What I found was quite unpleasant, for there was no FOOBAR present: Only TECO was there present, underneath my DDT; I quit the PEEK, and "FOOBARJ" typed out my DDT -- Then quoth the HACTRN, ":KILL". But -- this FOOBAR now beguiling all my sad soul into smiling -- I tightly grinned, determined that this glitch should cause nobody ill Now, into my armchair sinking, I betook myself to linking Fancy unto fancy, thinking why this unknown phantom job -- Why this grim, ungainly, ghastly, gaunt, and unknown phantom job Feeped and did a ":KILL". This I sat engaged in guessing, but conceived no thought expressing How a phantom job could sound those strange and ghostly beeps; This and more I sat divining, with my head at ease reclining, With the symbols coldly shining at me from the CRT, With the bright, sharp symbols coldly shining on the CRT -- Which suddenly gave seven feeps! Then methought the air grew denser, filled with clouds which grew immenser, As when under darkened daylight thick and stormy weather brews; With some bit of hesitation stemming from my trepidation Again I typed that incantation finding out how much I'd lose -- V I typed again to find how much I'd lose -- TECO there, and seven FOOs! "Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER! Whether accident, or feeping as another hacker wills! Tell me now why I am losing, why my HACTRN you're abusing, Which no doubt is of your choosing: echo truly on my screen!" Then DDT as if in answer echoed quickly on my screen, Typing seven ":KILLs". The Great Quux page 7 Random Poetry and Other Losses printed April 17, 1979 "Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER! By the ITS above us which the DSKDMP doth fulfill, I shall be the system's saviour: I shall mend your crude behaviour, I shall halt your strange behaviour, and thee from the system lock!" Madly, wildly laughing I made DDT invoke a LOCK, And quickly typed thereat -- "5KILL"! "Be this now our sign of parting, phantom job!" I shrieked, upstarting As my HACTRN now informed me ITS was going down in 5:00. "You have run your last instruction and performed your final function! But, refuting this deduction HACTRN then my TTY grabbed -- To type out yet another message HACTRN now my TTY grabbed -- Quoth the HACTRN, "ITS REVIVED!" And the FOOBAR, never sleeping, still is beeping, still is beeping On the glaring console out from which I cannot even log! And other happenings yet stranger indicate inherent danger When bugs too easily derange or mung the programs of machines; When programs too "intelligent" start taking over the machines: Is this the end of AutoProg? -- The Great Quux (with apologies to Edgar Allan Poe) Notes for those not familar with the terms in this poem: TTY ("titty") = any terminal, not necessarily a teletype (in this case, a CRT); in particular, a terminal associated with and in control of a job tree (see "DDT" below). The terminal may be passed up and down the job tree; at any point in time only one job in the tree may use the tree's TTY. When ^Z is typed on the TTY, the system intervenes, stopping the job which has the TTY, and interrupts that job''s superior in the tree, which may then grab the TTY from the inferior job. DDT ("dee dee tee") = HACTRN ("hack-tran") = top level debugging and job controlling procedure, capable of controlling up to eight simultaneous jobs (which may themselves be DDTs!) and performing other miscellaneous functions. HACTRN specifically denotes a DDT at the top of a job tree, while DDT is the more general term. The two terms refer to the same job in the poem, and are thus treated as synonymous. Note that DDT requires its subjobs to have unique names for obvious reasons; hence the concern over seven jobs all named FOO. The Great Quux page 8 Random Poetry and Other Losses printed April 17, 1979 PEEK = a program similar to the SYSTAT of certain PDP-10 monitor systems of dubious quality. PEEK is actually much more versatile, giving information in any of some dozen modes, such a job status, DECtape status, Arpanet sockets, terminal status, and scheduler variables and statistics. It also has provisions for maintaining a continuously updated display on a CRT, and for line printer usage. TECO ("teeko") = text editor and corrector (that is, the good version of several versions of TECO which are floating around). :KILL ("colon kill") = message typed out by DDT whenever it kills a subjob. Note that subjobs, if running, may request DDT to kill themselves. If the job does not have the TTY when it makes such a request, DDT merely rings the TTY's bell (which on the CRT in the poem above is a particularly obnoxious flavor of "beep"), and prints nothing until you ascend to DDT, and perhaps type J (see below). LOCK = utility program, which interprets the particular command "nKILL" to mean "please bring the time-sharing system down in n minutes" (where it is required that n5). The system will then go down at the prescribed time unless the request is countermanded with a "REVIVE" request. ITS = Incompatible Timesharing System, the good timesharing system for the PDP-10. DSKDMP ("disk dump") = program used to, among other things, bootstrap ITS into a running state. = "altmode"; read it as such to preserve the meter. V = command to DDT, requesting it to print out the names of all its subjobs. J = command to DDT, asking that it select the job which has requested attention so that it may be dealt with. DDT responds "jobnameJ" so that you will know which job it was. ^Z ("control zee") = command to ITS to stop the job which currently has the TTY, and interrupt the next higher job in the job tree. Ordinarily this has the effect of returning to DDT. The Great Quux page 9 Random Poetry and Other Losses printed April 17, 1979 0/ ("zero slash") = command to DDT, asking it to print out the contents of location zero of the selected subjob. This operation is theoretically transparent to the subjob itself. RMS = Richard M. Stallman, who does an admirable job of keeping DDT, as well as many other programs, relatively bug-free. (C) Copyright 1973, 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 10 Random Poetry and Other Losses printed April 17, 1979 A Collection of Nursery Rhymes and Other Random Losses by The Great Quux, RMS, and Anonymous A monitor system named DOS Became superseded by OS. It's not hard to guess Why the consequent mess Caused programmers all to scream "S.O.S." -- TGQ May 1973 IBM had a PL/I, Its syntax worse than JOSS; And everywhere this language went, It was a total loss. -- TGQ June 1973 System/3! System/3! See how it runs! See how it runs! Its monitor loses so totally! It runs all its programs in RPG! It's made by our favorite monopoly! System/3! -- TGQ October 1973 RRR of x always equals 1. R is dimension, RR, rank. APL is fun! -- RMS December 1973 RRRboat gentlystream 4 7R"merrily" life value error life ) -- Anon January 1974 Hey, diddle, diddle the overflow pdl To get a little more stack; If that's not enough then you lose it all And have to pop all the way back. -- TGQ January 1974 (C) Copyright 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 11 Random Poetry and Other Losses printed April 17, 1979 It may surprise some people to know that the PDP-10 instruction set, far from being innovative, was developed strictly along classical lines. Many of the operation codes, for example, come from the Latin. Two fifth-declension nouns (declinable only in the singular) are as follows: Nominative: moves hrres Genitive: movei hrrei Dative: movei hrrei Accusative: movem hrrem Ablative: move hrre There are, of course, also hlres, hrles, and hlles. These all derive from the corresponding verbs hrro, hrlo, etc. (second conjugation, semi-deponent.) Thus when playing chess with MacHack one might say, "movem hrro," that is, "I am hurrying a move." Similarly, the code jffo ("i am jffing") comes from a defective Latin verb dating from an era when ancient computers marked time by periodically pushing counters onto a wire. The number of empty spaces left on the wire could easily be counted by an instruction very like jffo, from which could be calculated the number of "jiffies" (clock ticks; 1 jiffy = 40 seconds) which had passed; hence the name. Teutonic languages have also lent several words to the PDP-10: rot ("red") derives from the pieces of decayed redwood traditionally used as temporary markers in older German manual shift registers; while ash was commonly the result when an older German got disgusted and threw his shift register in the fire. --- The Great Quux (with apologies to no one) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 12 Random Poetry and Other Losses printed April 17, 1979 PLIate's Dream [to be sung to the tune of Pilate's Dream from Jesus Christ Superstar] I dreamed I was a brand new language, The ultimate in speed; I handled strings as fast as RPG, And twice as easily. I crunched numbers like COBOL, Trees like APL, And FORTRAN loaned its FORMATs and GO TOs, The cause of many screws. And then a man said, "Now we'll write a monitor, With Multics what it's for. Our project is begun; We'll code in PL/I." Then I saw thousands of coders Searching for their bugs, And then I heard them mentioning my name And leaving me the blame. -- The Great Quux (with apologies to Rice and Webber) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 13 Random Poetry and Other Losses printed April 17, 1979 As I was passing Project MAC, I met a Quux with seven hacks. Every hack had seven bugs; Every bug had seven manifestations; Every manifestation had seven symptoms. Symptoms, manifestations, bugs, and hacks, How many losses at Project MAC? -- TGQ April 27, 1974 (c) Copyright 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 14 Random Poetry and Other Losses printed April 17, 1979 Reclaimer, spare that tree! Take not a single bit! It used to point to me, Now I'm protecting it. It was the reader's CONS That made it, paired by dot; Now, GC, for the nonce, Thou shalt reclaim it not. That old familiar tree, Whose CDRs and whose CARs Are spread, o'er memory -- And wouldst thou it unparse? GC, cease and desist! In it no freelist store; Oh spare that moby list Now pointing throughout core! It was my parent tree When it was circular; It pointed then to me: I was its CADADR. My CDR was a list, My CAR a dotted pair -- That tree will sore be missed If it remains not there. And now I to thee point, A saving root, old friend! Thou shalt remain disjoint From freelists to the end. Old tree! The sweep still brave! And, GC, mark this well: While I exist to save, Thou shan't reclaim one cell. -- The Great Quux (with apologies to George Pope Morris) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 15 Random Poetry and Other Losses printed April 17, 1979 I Could Have Tooled All Night [to be sung to the tune of I Could Have Danced All Night from My Fair Lady] Tool! Tool! I feel like such a fool! All term I goofed off; I can't catch up now! Sleep! Sleep! I've got to get some sleep! Tooling wouldn't help me anyhow! I could have tooled all night, I could have tooled all night, and still have tooled some more; I could have been absurd, Learned all my Latin verbs, It wouldn't raise my score. I can't remember all those theorems, And all those facts from my mind flee -- I only know exams, Are why one usually crams, But tooling never could help me! I could have tooled all night, I could have tooled all night, And memorized each book; I only now regret, My sections never met, And lectures I forsook. I cross my fingers now in terror, I only hope some luck's with me -- But had I tooled or not, I'd still be on the spot, My goofing off deserves the E! -- The Great Quux (with apologies to Lerner and Loewe) (C) Copyright 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 16 Random Poetry and Other Losses printed April 17, 1979 I think that I shall never see A matrix lovely as a tree. Trees are fifty times as fun As structures a la PL/I (Which Dijkstra claims are too baroque). And SNOBOL's strings just can't compare With all the leaves a tree may bear. And COMIT strings are just a joke. Vectors, tuples too, are nice, But haven't the impressive flair Of trees to which a LISP is heir. A LISPer's life is paradise! Many people think that JOSS And others, too, are strictly boss; And there are many BASIC fans Who think their favorite language spans All that would a user please. Compared to LISP they're all a loss, For none of them gives all the ease With which a LISP builds moby trees. RPG is just a nurd (As you no doubt have often heard); The record layouts are absurd, And numbers packed in decimal form Will never fit a base-two word Without a veritable storm Of gross conversions fro and to With them arithmetic to do. And one must allocate the field Correct arithmetic to yield, And decimal places represent Truncation loss to circumvent: Thus RPG is second-rate. In LISP one needn't allocate (That boon alone is heaven-sent!) The scheme is sheer simplicity: A number's just another tree. When numbers threaten overflow LISP makes the number tree to grow, Extending its significance With classic treelike elegance. A LISP can generate reports, Create a file, do chains and sorts; But one thing you will never see Is moby trees in RPG. One thing the average language lacks Is programmed use of push-down stacks. But LISP provides this feature free: A stack - you guessed it - is a tree. An empty stack is simply NIL. In order, then, the stack to fill The Great Quux page 17 Random Poetry and Other Losses printed April 17, 1979 A CONS will push things on the top; To empty it, a CDR will Behave exactly like a pop. A simple CAR will get you back The last thing you pushed on the stack; An empty stack's detectable By testing with the function NULL. Thus even should a LISPer lose With PROGs and GOs, RETURNs and DOs, He need his mind not overtax To implement recursive hacks: He'll utilize this clever ruse Of using trees as moby stacks. Some claim this method is too slow Because it uses CONS so much And thus requires the GC touch; It has one big advantage, though: You needn't fear for overflow. Since LISP allows its trees to grow, Stacks can to any limits go. COBOL input is a shame: The implementors play a game That no two versions are the same. And rocky is the FORTRAN road One's alpha input to decode: The FORMAT statement is to blame, But on the user falls the load. And FOCAL input's just a farce; But all LISP input comes pre-parsed! (The input reader gets its fame By getting storage for each node From lists of free words scattered sparse. It parses all the input strings With aid of mystic mutterings; From dots and strange parentheses, From zeros, sevens, A's and Z's, Constructs, with magic reckonings, The pointers needed for its trees. It builds the trees with complex code With rubout processing bestowed; When typing errors do forebode The rubout makes recovery tame, And losers then will oft exclaim Their sanity to LISP is owed - To help these losers is LISP's aim.) The flow-control of APL And OS data sets as well Are best described as tortured hell. For LISPers everything's a breeze; They neatly output all their trees With format-free parentheses And see their program logic best The Great Quux page 18 Random Poetry and Other Losses printed April 17, 1979 By how their lovely parens nest. While others are by GOs possessed, And WHILE-DO, CASE, and all the rest, The LISPing hackers will prefer With COND their programs to invest And let their functions all recur When searching trees in maddened quest. Expanding records of fixed size Will quickly programs paralyze. Though ISAM claims to be so wise In allocating overflow, Its data handling is too slow And finding it takes many tries. But any fool can plainly see Inherent flexibility In data structured as a tree. When all their efforts have gone sour To swell fixed records, losers glower. But list reclaimers hour by hour By setting all the garbage free Yield CONSequent capacity: Thus trees indefinitely flower. (And trees run on atomic power!) To men of sensibility The lesson here is plain to see: Arrays are used by clods like me, But only LISP can make a tree. - The Great Quux (with apologies to Joyce Kilmer) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 19 Random Poetry and Other Losses printed April 17, 1979 Alphabetical Order MACLISP Ben PDP-6 (may its core increase!) Awoke one jiffy from a deep dream of trees And saw, by parsing out a TTY: .FILE. (DIR) Scanning all the jobs, within the system here, A PEEK, displaying on a CRT of gold; A low USRTIM made the MACLISP bold: And to the PEEK by CLI: a message sent, "What displayest thou?" The message to it quickly went, And the PEEK through CLA: a message did transduce, And answer'd "The names of programs of practical use." "And is mine one?" sent MACLISP. "Nay, not so," Replied the PEEK. MACLISP ran more slow But swapping still. "I pray thee then," it sent, "Display me as one that helps to systems implement." The PEEK :KILLed and vanished. The next time It ran again, in a display mode sublime, It showed the names the Grim File Reaper had blessed, And lo! MACLISP's name was thirty-seventh. -- The Great Quux (with apologies to Leigh Hunt) (C) Copyright 1973 Guy L. Steele Jr. All rights reserved. The Great Quux page 20 Random Poetry and Other Losses printed April 17, 1979 Lambda Bound [to be sung to the tune of Homeward Bound] I'm just a little value cell, And I play my special role so well -- Hmmm -- Serving as a global switch To predicate some system glitch; But some strange value -- who knows which? -- Could cause me functions to bewitch! Lambda bound! I wish I was Lambda bound! Bound, so no SETQ's get me; Bound, so quits will reset me; Bound, where I can forget my Top-level value. It's hard to catch those system screws: 'Most any value causes me to lose -- Hmmm -- Each atom looks the same to me, Whose interned name I cannot see, And every NIL and every T Reminds me that I long to be Lambda bound! I wish I was Lambda bound! Bound, so no SETQ's get me; Bound, so quits will reset me; Bound, where I can forget my Top-level value. The Great Quux page 21 Random Poetry and Other Losses printed April 17, 1979 Next time I'll have a MAR break set And try to catch each clobber threat -- Hmmm, mmmm -- The next covert attempt to mung Will cause the MAR break to be sprung, But then the poor LISP will be hung Because I'm not as I have sung: Lambda bound! I wish I was Lambda bound! Bound, so no SETQ's get me; Bound, so quits will reset me; Bound, where I can forget my Top-level value. -- The Great Quux (with apologies to Paul Simon) (C) Copyright 1974 Guy L. Steele Jr. All rights reserved. The Great Quux page 22 Random Poetry and Other Losses printed April 17, 1979 Song of the Certified Data Processor [to be sung to the tune of When I Was a Lad from H.M.S. Pinafore] When I was a lad I served a term As office boy to a computing firm. I polished the handle of the big front door And swept up all the card chips from the keypunch floor. He swept up all the card chips from the keypunch floor. I swept that chad so carefullee That now I am officially a CDP. He swept that chad so carefullee That now he is officially a CDP. My office job was a heavy load, So I went to night school and learned to code. I was soon coding payroll in RPG And compiled all my programs on a System/3. He compiled all his programs on a System/3. I compiled my code so gay and free That now I am officially a CDP. He compiled his code so gay and free That now he is officially a CDP. I wrote efficient code each day, But I missed the benefits of higher pay. I asked for a raise, but my boss said, "See, Youse ain't good enuf because youse ain't a CDP." "He ain't good enuf because he ain't a CDP." So I vowed that someday I would see Myself become officially a CDP. So he vowed that someday he would see Himself become officially a CDP. For nineteen weeks I worked to cram All the textbooks for the CDP exam. Then I took the exam and was shocked to see That the questions didn't seem to mean a thing to me. All the questions didn't seem to mean a thing to him. So I wrote down some answers randomly, But I gave up all my hopes to be a CDP. So he wrote down some answers randomly, But he gave up all his hopes to be a CDP. The Great Quux page 23 Random Poetry and Other Losses printed April 17, 1979 Well, those random answers worked out fine; They scored my results at the top of the line. Now I am a consultant here, And I make at least a hundred thousand bucks each year. And he makes at least a hundred thousand bucks each year. But I only command such a salary Because I am officially a CDP. But he only commands such a salary Because he is officially a CDP. Now, office boys, whoever you may be, If you want to rise to the top of the tree, Just go and take the CDP exam, And no matter what you answer they won't give a D--n! And no matter what you answer they won't give a D--n! Just answer it all as random as you please And you will all officially be CDPs. Just answer it all as random as you please And you will all officially be CDPs. -- The Great Quux (with apologies to Gilbert and Sullivan) (C) Copyright 1974 by Guy L. Steele Jr. All rights reserved. The Great Quux page 24 Random Poetry and Other Losses printed April 17, 1979 A pile of stuff written in April, 1976 April 1, 1976 [1] Notes taken in 6.015 (Signals and Systems) On Matched Filters: The ancients used potions, their love schemes to hatch; They knew the right philtre encouraged a match. When a lad made a wink at a comely young lass, The philtre she used was designed for a pass. The signals to use were determined by philtre; The two peaked as one, for the lad could not jilt her. The two thus entwined, so that noise did not bother (Excepting that made by the groom's in-law mother...) On Time Division Multiplexing: To get the most use from your broadcasting medium: Activity is, strangely, relieved by the TDM. [2] Notes taken in 6.893 (Machine Perception and Manipulation) "... and so the line connecting the points Ga and Gb in gradient space, which correspond to the planes A and B in image space, is the set of points representing positions of a plane see-sawing around the line of intersection between A and B..." Now I see; then I saw; The planes of a cube have a linear law. The endpoints of lines in the gradient space Show where the see-sawing planes fall into place. Macrakis, sitting beside me, half-asleep: "COFFEE!" Caffeine doesn't help me composing this verse. It only awakes me; my thoughts all disperse. One thinks better dozing, collapsed in a heap; Why else are most students in classes asleep? "... the lines in gradient space are perpendicular to the lines in image space. This doesn't provide enough constraints, however. Additional equations may be derived from the intensity information. One can get one or more solutions for a trihedral vertex. If the vertex has more than three planes, then there are more constraints than necessary, and one may have to resort to least squares..." The Great Quux page 25 Random Poetry and Other Losses printed April 17, 1979 Alone, the geometry isn't enough: You also require intensity stuff. We get enough data if points are tri-planed, While four leave the gradients over-constrained. [3] Some Higgledy-Piggledies For those not familiar with this verse form: A Higgledy-Piggledy has eight lines. All but the fourth and eighth lines are double dactyls, while the fourth and eighth are a dactyl plus an upbeat. The first line is nonsense; the second, a name; the sixth must be a single six- syllable word; and the fourth and eighth must rhyme. It is permissible for the first line to make sense, or for the fifth line instead of the sixth to be all one word. If too many rules are bent, the verse is just called a double-dactyl verse, rather than a Higgledy-Piggledy. [a] If you write (DO ((X NIL X) ...) ...) instead of the usual (DO ((X NIL) ...) ...), i.e. you explicitly step a variable by its own value, NCOMPLR (the MacLISP compiler) may get confused, and in any case generates inessential code. Higgledy piggledy, Project MAC NCOMPLR Still is committing its DO-stepping sins: Though it may seem somewhat Counterintuitive, FOO stepped by FOO screws; de- Faulting it wins. [b] You can't do EQ on numbers and hope to win. Recall also the famous test in which NCOMPLR produced better numerical code than the DEC FORTRAN compiler (Fateman 1973). Quaxity quuxity, MacLISP and NCOMPLR Have a convention that Makes losers freak: Integers allocate Hyperefficiently, Bettering FORTRAN, but Screwing up EQ. The Great Quux page 26 Random Poetry and Other Losses printed April 17, 1979 [c] As usual, taking a DWIM view of InterLISP. Quaxity quuxity, Teitelman's InterLISP Has a DWIM feature that's Really a screw; MacLISP has evident Superiority, Letting its customer Mean what he do. April 2, 1976 Though NEWIO has been around for many months, few people use it. I wonder why? Quaxity quuxity, TGQ's NEWIO Has many functions that No one can grok: Documentation is Incomprehensible; GLS will explain it, but Still it's a crock. April 3, 1976 [a] NIL leads a double life in LISP. Quaxity quuxity, NIL the atomic one Acts like a wavicle, Seemingly twin: Not just the inverse of Verisimilitude; Also the inverse of Where lists begin. [b] I am getting weary of bicentennial parading by industry. "Bicentennial Minutes" now appear not only on television, but on milk cartons and beer cans. Quaxity quuxy, A- Merican businessmen Use bicentennial, Profit to gain. Hope by the time we reach Quadricentennial They'll not so plague me -- ad- Vertisements pain! The Great Quux page 27 Random Poetry and Other Losses printed April 17, 1979 [c] For SF fans: see Asimov's article on the "peace bomb" (contained in his collection "Opus 100"). Quaxity quuxity, Young Isaac Asimov Strange thiotimoline's Secret unfurled. Cascaded series of Endochronometers Brought paradoxical Floods on the world. [d] More SF, this time in memory of James Blish: Quaxity quuxity, Blish used philosophy When he was writing "The Quincunx of Time." Beeps of Dirac used to Chronocommunicate Fostered determinate Free will sublime. [e] DJL, computer science type undergraduate, has decided to go to MIT grad school in Materials Science. Quaxity quuxity, David J. Littleboy (MIT graduate) Makes his plans plain. Leaving the study of Data-technology, He prefers seeking ma- Terial gain. [f] I once read that space has three dimensions because orbits aren't stable in 4-space. I often have wondered in What kind of orbit a Planet proceeds in a Tesseract space? Multidimensional, Hyperelliptical, Dizzying spacemen in Trans-solar chase. The Great Quux page 28 Random Poetry and Other Losses printed April 17, 1979 [g] Finally, let's hear it for quantum mechanics, who service small automobiles for today's nuclear family. Pauli and Heisenberg Offer two rules for con- Fused aristocracies, Quantum domains: "Egalitarian Nonexclusivity Must be forbidden"; "Un- Certainty reigns." April 4, 1976 [a] When in Canada, do as the Canadans do... Quaxiti quuxiti, Quaxity quuxity, Remus et Romulus Remus and Romulus, Gemini fratres a Wolf-nourished brothers, were Lupa aluntur. Twins, so they say. Romulus inquit: non Romulus patiently Aedificabitur Founded a city; as Paucis diebus, sed He said, "Rome will not be Roma nascetur. Built in a day." [b] Apples grow on trees, but no trees in APLs. Quaxity quuxity, Kenneth E. Iverson Made APL, matrix Hackers to please, Not only famous for Arithmeticity; Also for characters. (Wish it had trees!) [c] Sussman built a hacker for a Ph.D. thesis. When will someone for a thesis build a hacker that builds a hacker? Quaxity quuxity, Gerald J. Sussman made HACKER so famous for Loopholes it plugs. Armed with its knowledge of Entomological Manifestations, it Ferrets out bugs. The Great Quux page 29 Random Poetry and Other Losses printed April 17, 1979 [d] It doesn't take truth to destroy a reputation, but only a rumor. Yet sometimes the nastiest rumor is the truth. Consider the one which says EQUIV causes true values (1-bits) to complement bits of the other argument... Quaxity quuxity, XOR's more famous than Brother EQUIV, though they've Similar use. Uncomplementary Verisimilitude, Rumor undoubtedly Cooked EQUIV's goose. [e] And why did Napoleon clutch his stomach? (Mail $1000 and a self-addressed, stamped envelope, and we'll send you a jingle in 25 words or less.) Quaxity quuxy, Na- Poleon Bonaparte Conquered all Europe, but What was the use? Some say the problem was Megalomania; Others, he lacked modern High-platform shoes. [f] People got excited about BNF, and used it to drive parser generators. But you still can't really tell how to write programs in the language. Quaxity quuxity, Backus's BNF Drives a preprocessor, Generates code. Parsing is specified Metasyntactically; Writing it's easy, but reading, I'm snowed. (c) Copyright 1976 by Guy L. Steele Jr. All rights reserved. The Great Quux page 30 Random Poetry and Other Losses printed April 17, 1979 My Favorite Hacks [to be sung to the tune of My Favorite Things from The Sound of Music] Circular MAPCAR and ANDCA'd negation, Indirect JMP auto-incrementation, Tangled spaghetti embroidered in stacks: These are a few of my favorite hacks. Mismatched DEFINE-TERMIN pairs with .QUOTEing, Misbalanced brackets for macroed remoting, PDP-6's with chess tourney plaques: These are a few of my favorite hacks. LAMBDAs as GO TOs and spooling on TPLs, Flip-flops and bit drops and TRCE's in triples, Crufty heuristics that prune minimax: These are a few of my favorite hacks. When the bugs strike, When the disks crash, When I read this verse, I simply remember my favorite hacks And then I feel even worse! -- The Great Quux (with apologies to Rodgers and Hammerstein) (c) Copyright 1976 by Guy L. Steele Jr. All rights reserved. The Great Quux page 31 Random Poetry and Other Losses printed April 17, 1979 NOTES Circular MAPCAR A constant or periodic series of arguments can be given to a mapped function in LISP by supplying a circular list to MAPCAR. For example: ((LAMBDA (C3) (RPLACD C3 C3) (MAPCAR 'CONS C3 THE-LIST)) (LIST 3)) conses a 3 onto every element of THE-LIST. Another way to use this hack is to use MAP, which allows the mapped function to splice new things into the circular list on the fly. ANDCA'd negation The sequence of PDP-10 instructions MOVN A,NUMBER ANDCA A,NUMBER JUMPE A,FOO jumps to FOO iff NUMBER is an exact power of two. Indirect JMP auto-incrementation: On the PDP-11, the instruction JMP @(R4)+ can be used as a combined subroutine call and subroutine return, using the technique of threaded code. Tangled spaghetti Spaghetti stacks, as described by Bobrow and Wegbreit. The Great Quux page 32 Random Poetry and Other Losses printed April 17, 1979 Mismatched DEFINE-TERMIN Bizarre effects can be obtained in the MIDAS assembly language for the PDP-10 by using .QUOTE to get in mismatched DEFINE-TERMIN pairs. For example: DEFINE DEFSYM X/ IRPS Z,,[X] IFNDEF Z,X .ELSE [ $$TEM1==Z X IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/` ] .ISTOP TERMIN TERMIN The multiple .QUOTEs allow used of the word DEFINED in the error message. Misbalanced brackets A standard MIDAS hack for accumulating text in a macro to be assembled at a remote location is: ;initialization: DEFINE BNKBLK OP OP TERMIN ;BNKBLK accumulates text. DEFINE BLCODE NEWCFT BNKBLK [DEFINE BNKBLK OP OP]NEWCFT TERMIN TERMIN ;BLCODE adds its arg to the end of BNK ;add some text: BLCODE [FOO] ;add FOO. BLCODE [BAR] ;add BAR (note BLCODE inserts CRLF's, ;assemble what has been accumulated: BNKBLK ;which expands into ... ; FOO ; BAR This hack depends on the misbalancing of the brackets in BLCODE with respect to the DEFINE-TERMIN pairs. The Great Quux page 33 Random Poetry and Other Losses printed April 17, 1979 PDP-6's The MIT AI Lab PDP-6 has won chess trophies and plaques running Greenblatt's MacHac program. LAMBDAs as GO TOs LAMBDA expressions of no arguments can be used to simulate GO TO statements in a straightforward manner. (See LAMBDA: The Ultimate Imperative, Gerald Jay Sussman and Guy L. Steele., M.I.T. A.I. Lab Memo.) Flip-flops and bit drops If you don't know about these, forget it. TRCE's in triples The sequence of PDP-10 instructions: TRCE A,42 TRCE A,42 TRCE A,42 exchanges the 40 bit and the 2 bit in accumulator A. Crufty heuristics The alpha-beta technique, the gamma heuristic (described by Newborn in his book "Computer Chess"), and others, are used to prune minimax game trees. Notes (c) Copyright 1976 by Guy L. Steele Jr. All rights reserved. The Great Quux page 34 Random Poetry and Other Losses printed April 17, 1979 :PDUMP 99 blocks of crud on the disk, 99 blocks of crud! You patch a bug, and dump it again: 100 blocks of crud on the disk! 100 blocks of crud on the disk, 100 blocks of crud! You patch a bug, and dump it again: 101 blocks of crud on the disk! (Repeat ad nauseam...) -- The Great Quux 2 December 1976 (c) Copyright 1976 by Guy L. Steele Jr. All rights reserved. The Great Quux page 35 Random Poetry and Other Losses printed April 17, 1979 ZOOM Poems This sequence of verses was written at a time when a party game called "Zoom, Schwartz, Profigliano" had become popular around the AI Lab (as a result of a trip to Talbot House in January, 1977). For some reason Marilyn Matz didn't like the game, and her standard response to "Zoom!" was "Bitch!". Most of these verses were jokes sent to Marilyn and other interested parties. They all contain acrostics. Zebras slinking in the night On twinkling hooves betray their flight. Oh, would that tigers, burning bright Might eat them, get them out of sight! -- 13 May 1977 14:55 Zealous though a hacker be, Obnoxious bugs cavort with glee. One poor, defeated hacker shrugs: May be no way to kill dem bugs! -- 13 May 1977 16:47 Stupid the furor which AI detractors Collectively raise over Weizenbaum's book. Hackers will always, I think, remain hackers, and Weizenbaum's slander has REAL hackers shook. All the real hackers know hacking's a hobby; Randoms are those whom computing consumes. Terribly artful the well-hacked-up frobbie, but Zany the work of thee fools Joe assumes! -- 13 May 1977 17:00 [A lighthearted reference to the chapter on compulsive hacking in Prof. Joseph Weizenbaum's interesting book "Computer Power and Human reason".] The Great Quux page 36 Random Poetry and Other Losses printed April 17, 1979 Perhaps the best way to explain my position Relies on the beauty of LISP. Orthogonal issues, obscured by the syntax, Frightfully kludgy (I say with derision), Ignore, but usee parens, so crisp. Green giants (I'm rooting for bagels, you see -- Lox, perhaps also, particularly) I think, are the greatest of users. A tiny compiler has no chance of winning; No smarts, it's a bag-biter from the beginning, One of the greatest of losers! -- 13 May 1977 17:11 [There are some involved puns in this last one. Note particularly that "green giant" is an inside term means an NCOMPLR (MacLISP compiler) running interpretively, and also the pun on "green giant rutabagas", a favorite phrase around the lab.] [Sent to Marilyn:] Before you complain, I Humbly maintain That poetry's loss is yet hackerdom's gain. Clearly these verses are versus your pleasure; I Hope you'll feel free to respond in full measure! -- 13 May 1977 17:20 Tightly zipped her garish pantsuit, Hurried on, electric, royal, Eating of a rancid orangefruit, Grasping Mars' own rapier foil Runs Sabrina, young, inchoate, Eager child, to stop Giganto. Anger hers, now under loquat Trees waits, silent, incognito. Quiet, armed she now springs ambush; Ugly runs the monstrous nebbish. Ugly trash this awful onrush -- Xebecs, Zebras read no rubbish! -- 13 May 1977 20:16 [Allow me to draw your attention to the initial letters of the first, second, penultimate, and last words on each line; they form four acrostics. The last two lines are a meta-comment on the verse itself.] (C) Copyright 1977 by Guy L. Steele Jr. All rights reserved. The Great Quux page 37 Random Poetry and Other Losses printed April 17, 1979 Some Random Verses There was in ITS an escape code (whose name was DQOT) used internally in the character streams for terminal output which was undocumented for some reason. A call went out for jingles in 25 words or less. DQOT'S myster- ious and very weir- d; it quotes another char- acter, as noted where? -- 1 September 1977 Es schneit, es schneit With all its might! I say, der Schnee has come today! -- 5 December 1977 (C) Copyright 1977 by Guy L. Steele Jr. All rights reserved. The Great Quux page 38 Random Poetry and Other Losses printed April 17, 1979 Written in a Recitation (8.321 Quantum Mechanics I) at MIT, 11:30 AM 30 September 1977 October Eve's September morn Is warm and dry And I, forlorn: Alone I sit Amidst my friends In heat of day That never ends. The heat I do not mind So much; It's countered by The wind's soft touch -- The dryness, though, Is more severe; It parches throat, And eye, and ear. The heat is Nature's way Of keeping Man to frequent Fall-asleeping; But never desert wind So dry As chalkboard dust (Square root of pi Times sigma [i from One to N] Of alpha-eigenket, And then...) For when the sun Beats down its worst A little water Quenches thirst. But Man's devised The dryest yet: A dryness Nothing real can wet, For heat with weather Correlates, But dryness -- When we recitates! -- The Great Quux (c) 1977 Guy L. Steele Jr. All rights reserved. The Great Quux page 39