login: 
	case '\7': *((char *)(384*1024L+062)) = 2;	/* beep */
        Welcome to VAX/VMS Version 1.60    
    ON ENDFILE(SYSIN)  GO TO ADATHIBA;  /* FILE-VEGE VIZSGALATA */
   Tape dump of all filesystems taken this afternoon.
"Analysis" is "design" spelled backwards.
"RULE 7: Option arguments cannot be optional." Sys V Interface p 343.
"Sound advice" is usually mostly sound with not much advice.
"The Dresser," first a play, then a movie, then AT&T headquarters.
"The more you drive ... the less intelligent you are." -- Miller, in Repo Man
"x.c", line 1: cannot recover from earlier errors: goodbye!
#(cat probably won't work on 8 bit files, you  will have to use a simpler filter)
$! nulled, predecessor circle
$3,000,000
%-W-NORML Normal Successful Completion
'Tis a gross error, held in schools, That Fortune always favours fools. - John Gay.
'Tis better playing with a lion's whelp,/Than with an old one dying.
'Tis nobler in the mind to Look Things Up than to Pull Them Out Of The Air.
(^|[ (,;])(([Jj]ul[^ ]* *|(07|7)/)0*5)([^0123456789]|$)
* UNIX is a Trademark of Bell Laboratories.
*** LGP ERROR ***: Initialize -- Cannot initialize graphics hardware device.
*** REPLACE THIS LINE WITH YOUR MESSAGE ***
-1: No code table for op: ++post
...and on the seventh day, He exited from append mode.
/usr/games/fortune: not found
/usr/news/gotcha
1 bulls, 3 cows
127 now in the unregulated subsidiary; see /usr/news/btl-split
2 is always smaller than 3, even for large values of 2.
2 lacks generality in a way that 1 doesn't.
23. ...  r-q1
355/113 -- not the famous irrational number PI, but an incredible simulation.
4.2BSD is like a nightmare about Tenex. - Geoff Collyer
4.2BSD may not be a complete disaster, but it does a good job of emulating one.
55mph -- It's not a good idea, it's just the law.
: is not an identifier
A 10.0-szer 0.1 sohasem 1.0!
A 6-char limit is like a 6-inch trout: throw it back.
A 6-char limit is like night.
A Cray is the best machine for simulating the performance of a Cray.
A Point is a pair of shorts.
A Smith and Wesson beats four aces.
A bad workman quarrels with his tools.
A big book is a big nuisance. - Callimachus, librarian of Alexandria
A billion here, a billion there; soon you're talking real money.  -E. Dirksen
A bird in hand is safer than one overhead.
A bird in the hand is worth what it will bring.
A block grant is a nice terminal, but it will keep you awake until noon.
A block grant is a solid mass of money surrounded on all sides by governors.
A chicken is just an egg's way of making more eggs.
A closed mouth gathers no foot.
A conservative is one who is too cowardly to fight and too fat to run.
A consistent indentation style is the hobgoblin of little minds.
A couch is as good as a chair.
A coward is one who in a perilous emergency thinks with his legs.
A critic is a legless man who teaches running.
A day for firm decisions!!!!!  Or is it?
A day without sunshine is like night.
A duck with three wings and a loaf of bread is brother to the sun god.
A duck with three wings and a loaf of bread is brother to the turkey.
A fly by night leaves no shadow beyond a doubt.
A fool and his money stabilize the economy.
A foolish consistency is the hobgoblin of little minds.
A furore Normanorum libera nos, O Domine!
A game, a teaching aid, a sport, and a piece of art. -Erno Rubik
A gentleman is one who is never rude unintentionally.  -Noel Coward
A good memory does not equal pale ink.
A good plan today is better than a perfect plan tomorrow.
A goodly apple rotten at the heart:/Oh, what a goodly outside falsehood hath!
A hacker does for love what others would not do for money.
A homeowner's reach should exceed his grasp, or what's a weekend for?
A hydrogen bomb doesn't care how brave you are.
A hypothesis is an opinion that you are trying to prove true.
A journey of a thousand miles begins with a cash advance from Sam.
A king's castle is his home.
A liberal is one too open-minded to take his own side in an argument.
A lone dime always gets the number nearly right.
A man does not attain the status of Galileo merely because he is persecuted;  he must also be right. -Stephen Jay Gould
A man must destroy himself before others can destroy him.  -Mong Tse
A man who fishes for marlin in ponds will put his money in Etruscan bonds.
A man who turns green has eschewed protein.
A man with 3 wings and a dictionary is cousin to the turkey.
A man without a faith is like a fish without a bicycle.
A megabyte here, a megabyte there, and pretty soon you're talking real power.
A megaflop is a failure of gigantic proportions.
A mighty maze! but not without a plan. -Pope
A more wretched hive of scum and villainy: not found.
A movie studio is the best toy a boy ever had. -Orson Welles
A penny saved is a political breakthrough.
A penny saved is ridiculous.
A penny saved kills your career in the Pentagon.
A philosopher does not need a torch to gather glow-worms by at mid-day. -- Earnest Bramah
A plague o' both your houses! They have made worms' meat of me.
A plucked goose doesn't lay golden eggs.
A poet who reads his verse in public may have other nasty habits.
A professor is one who talks in someone else's sleep.
A radical is a person with both feet firmly planted in the air.
A real Initiation never ends.  -Aleister Crowley
A really busy person never knows how much he weighs. -Edgar Watson Howe
A recently completed trial proved TOAD Generic 1 to be reliable, user-friendly, and convenient.
A resort area will be part of your next holiday plans
A rolling stone gathers momentum.
A rose by any other name would still have thorns.
A sharp tongue is the only edge tool that grows keener with constant use. -W. Irving
A song in time is worth a dime.
A stitch in time keeps your tu-tu from becoming a four-four.
A system programmer is someone who debugs his programs with an oscilloscope.
A theory is better than an explanation.
A thousand throats may be slit in one night by a running man.
A tree is best measured when it is down.
A truly wise man never plays leapfrog with a Unicorn.
A twisting road will take you to Warsaw, but you won't be bored.
A u.f.o. closely encountered is no longer a u.f.o.
A victory is the greatest tragedy in the world - except a defeat. -Wellington
A watched terminal never prints.
A wise man never tries to warm himself in front of a painting of a fire.
A witty saying means nothing.  -Voltaire
A woman is only a woman, but a good cigar is a smoke. -Rudyard Kipling
A578 Your FLP overflows into your KBUF.
AAAOO OOZOR AZZAZ ZAIEO AZAEI IIOZA KHOEO OOYTH OEAZA EAOOZ AKHOZ AKHEY THXAA LETHX KH
Ablata at alba.
Abortion and suicide are hereditary only if you prevent them.
About all some parents accomplish in life is either illegal, immoral or fattening.
About all some parents accomplish in life is to send a child to Harvard.
About the only thing on a farm that has an easy time is the dog.
Absence is better than a cure.
Absinthe makes the heart grow fonder.
According to the latest official figures, 43% of all statistics are worthless.
Accounting software is structured as a set of tools that can be used to build accounting systems.
Ad pulchritudinem tria requiruntur; integritas, consonantia, claritas. -Aquinas
Admiration is our polite recognition of another's resemblance to ourselves.
After 24 hours, corpses and guests smell bad.
After all, a murderer is only an extroverted suicide.
Afternoon very favorable for romance.  Try a single person for a change.
Again, and strongly, undress the sheep. It is getting to visitors.
All articles that coruscate with resplendence are not truly aurifers.
All dare to write, who can or cannot read. -Horace, `Epistles', Book II
All my men wear badges, or they wear nothing at all.
All of the bridges between our today and our yesteryear have been burnt.
All of these futures having been sold, this fortune appears as a matter of record only.
All syllogisms have three parts; therefore this is not a syllogism.
All that does not glitter is not not-gold.
All the ethics in Hollywood can be rolled up and fit into a gnat's navel.
All the good ones are taken.
All the great men are dead and I'm not feeling too well myself.
All things considered, life is 9-to-5 against.
All things that are, are lights.
All you need to know is in the manual.
Almost all good computer programs contain at least one random-number generator.
Always keep a record of data. It indicates you've been working.
Always make water when you can. -Wellington
America's best buy for a dime is a telephone call to the right person.
An Austrian army, awfully arrayed, Boldly by battery besieged Belgrade.
An airplane is in your future.
An artist is never ahead of his time, but most people are far behind theirs. - Varese
An asylum for the sane would be empty in America.
An atheist is a man with no invisible means of support.
An elephant is a mouse built to government specifications.
An elephant is a mouse with an operating system.
An idle mind is worth two in the bush.
An oscilloscope is what cavemen used to debug fire.  -Jim Veres
An ounce of application is worth a ton of abstraction.
And I alone am returned to wag the tail.
And malt does more than Milton can/to justify God's ways to man  -A.E. Housman
And so to bed.
Androgyny recapitulates philately.
Another good night not to sleep in a eucalyptus tree.
Any change or reform you make is going to have consequences you don't like.
Any clod can have the facts, but having opinions is an *art*. -Chas. McCabe
Any country with "democratic" in the title isn't.
Any fool can paint a picture, but it takes a wise person to be able to sell it.
Any man's speeding ticket on the Interstate diminishes me, for I am involved in mankind.
Any small object that is accidentally dropped will hide under a larger object.
Any sufficiently advanced technology is indistinguishable from a rigged demo.
Any sufficiently advanced technology is indistinguishable from magic.  -Clarke
Anyone can win, unless there happens to be a second entry.
Anyone who buys Wisconsin cheese is a traitor to mankind! -J. Pournelle
Anyone who understands my music will never be unhappy again. -L. Van Beethoven
Anyone's life is incomplete unless they are, in some smaller or larger way, saving the world.
Anything good in life is either illegal, immoral or fattening.
Arabic is a language, Persian is a sweetmeat, and Turkish is an art.
Arabic is a mystery -- love is just a crock.
Are we not men?
Are you kidding?
Are you sure you want a two dimensional array?
Aren't you glad his name wasn't Alexander Graham Klaxon?
Aries -- this is your lucky day!
Art is merely cheese made visible.
Artistic ventures highlighted.  Rob a museum.
As above, so below.
As goatherd learns his trade by goat, so writer learns his trade by wrote.
As of Tuesday, C will be flushed in favor of COBOL. Please update all programs.
Assassination is the extreme form of censorship.
At the feast of souls failure is always the guest of honor.
Attend winter sheep meetings. Learning never ends!
Auribus teneo lupum.
Automating a mess yields an automated mess. -Michael Hammer
Ave discordia.
Avoid a hasty decision.
Avoid reality at all costs.
Away put your weapon!  I mean you no harm.
BLISS is ignorance.
Bad taste is timeless.
Ban the bomb.  Save the world for conventional warfare.
Bank error in your favor.  Collect $200.
Basic is like doing arithmetic with Roman numerals. - MD McIlroy
Be sure to evaluate the bird-hand/bush ratio.
Be the sea, and see me be.
Beauty is only sin deep. H H Munro
Beauty is only skin deep, but ugly goes clean to the bone.
Beauty times brains equals a constant.
Becoming an overnight success usually takes years.
Been Transferred Lately?
Better be right or your big venture goes wrong. -Resistor color code mnemonic
Better to have failed your Wasserman than never to have loved at all.
Between the idea and the reality, between the motion and the act falls the shadow.
Beware -- local customs vary. Check with a native before going into the jungle.
Beware of a dark-haired man with a loud tie.
Beware of low-flying butterflies.
Beware the foot of Nessus!
Beware:  the light at the end of the tunnel may be New Jersey.
Beyond a certain point, the whole universe becomes a continuous Initiation.
Bigamy is having one spouse too many.  Monogamy is the same.
Biggus Diggus wants YOU.
Bignose from Winnetka.
Blessed St. Leibowitz, let them keep on dreamin' down there...
Blessed are the meek for they shall inhibit the earth.
Blessed are they who Go Around in Circles, for they Shall be Known as Wheels.
Bosses never realize that a bottle neck is always at the top.
Bourne again.
Brain fried -- core dumped
Brashith Alhim
Bring your wife or husband and pink slip for the best trade-in deal in town.
Bubble bubble, toil and trouble; cast that float into a double.
Buick offers inbred american quality. -TV ad
Build a better mousetrap, and nature will build a better mouse.
Build it so that even a fool can use it, and only a fool will want to use it.
Bus error -- core dumped
But he who kisses the joy as it flies/Lives in Eternity's sunrise.  -Wm. Blake
But many are not capable of a firm persuasion of anything.  -Wm. Blake
But you'll never become a rhinoceros...you haven't got the vocation!
But, Siriusly...
By failing to prepare, you are preparing to fail.
By omnibus I traveled to Brooklyn.
By the pricking of my thumbs,/Something wicked this way comes.
C'est CHouette.  Swiss bumper sticker
C'est dommage, mais c'est vrai.
C'est magnifique, mais ce n'est pas Unix. -Henry Spencer
CB is a great place to work. There are so many good going away parties.
CB is a many gendered thing.
California is a fine place to live if you happen to be an orange. - Fred Allen
Campus Crusade for Cthulhu -- It found me.
Can all this just be an accident?  Or could there be some alien intelligence behind it?
Can tomorrow be more than just the end of today?
Cannot fork -- try again.
Capitalism is indeed obsessed with money, but Marxism is obsessed with Marxism.
Captain Clark welcomes you aboard.
Caught in --More-- loop.
Caution -- be sure brain is engaged before putting mouth in gear.
Caution: Do not view laser light with remaining eye.
Caution: breathing may be hazardous to your health.
Celebrate Hannibal Day this year.  Take an elephant to lunch.
Celibacy is not hereditary.
Center 1127 -- It's not just a job, it's an adventure!
Center meeting at 4pm in 2C-543
Centran manuals are available in 2B-515.
Charlie don't surf.
Children are hereditary: if your parents didn't have any, neither will you.
Clothes make the man.  Naked people have little or no influence on society.
Club sandwiches, not baby seals.
Cocaine is nature's way of saying you make too much money.
Cogito Ergo Spud.
Cogito cogito ergo cogito sum.
Colorless green ideas sleep furiously.
Communication is only possible between equals.
Computers are not intelligent.  They only think they are.
Consistency is always easier to defend than correctness.
Constants aren't.  Variables don't.  LISP does.  Functions won't.  Bytes do.
Contains no kung fu, car chases or decapitations.
Continental Life. Why do you ask?
Convictions cause convicts -- what you believe imprisons you.
Core Error - Bus Dumped
Could not open 2147478952 framebuffers.
Courage is something you can never totally own or totally lose.
Cowards die many times before their deaths;/The valiant never taste of death but once.
Crazee Edeee,  his prices are INSANE!!!
Creativity is no substitute for knowing what you are doing.
Creditors have much better memories than debtors.
Critics are like eunuchs in a harem: they know how it's done, they've seen it done every day, but they're unable to do it themselves. -Brendan Behan
Cthulhu Saves! ... in case He's hungry later.
Dames is like streetcars -- The oceans is full of 'em. -Archie Bunker
Dames lie about anything - just for practice. -Raymond Chandler
Damn it, i gotta get outta here!
Dangerous knowledge is a little thing.
Data potato, du wop du wop.
Day of inquiry.  You will be subpoenaed.
De minimis non curat lex.
Death is nature's way of telling you to slow down.
Death to all fanatics!
Deep down, we all need that escape velocity.  -Steven Spielberg.
Democracy is also a form of worship. It is the worship of Jackals by Jackasses.
Department meeting in 3 minutes.
Deprive a mirror of its silver and even the Czar won't see his face.
Der Herrgott wurfelt nicht. -A. Einstein
Did you know ... that no-one ever reads these things?
Did you know that clones never use mirrors?
Die ich rief, die Geister, / Werd ich nun nicht los.
Die: to stop sinning suddenly.
Dieux!  Un monstre hideux.  En hurlant.  Nous poursuit.
Diplomacy is the art of saying "nice doggy" until you can find a rock.
Disco delenda est.
Disk crisis, please clean up!
Disobedience was Man's Original Virtue.  -Oscar Wilde.
Distrust yourself, and sleep before you fight.  'Tis not too late tomorrow to be brave. - J. Armstrong.
Ditat Deus.
Do not believe in miracles -- rely on them.
Do not clog intellect's sluices with bits of knowledge of questionable uses.
Do not confuse boredom with security.
Do not confuse effort with work.
Do not drink coffee in early A.M.  It will keep you awake until noon.
Do not go gentle into that good night/Rage, rage against the dying of the light
Do not meddle in the affairs of troff; it is subtle and quick to anger.
Do not meddle in the affairs of wizards: it makes them soggy and hard to light.
Do not meddle in the affairs of wizards: they are subtle and quick to anger.
Do not meddle in the mouth.
Do not sleep in a eucalyptus tree tonight.
Do not take life too seriously; you will never get out if it alive.
Do not throw butts in the urinal: it makes them soggy and hard to light.
Do not throw butts in the urinal: they are subtle and quick to anger.
Do not underestimate the power of the Force.
Do not use the blue keys on this terminal.
Do something unusual today.  Pay a bill.
Do what comes naturally now.  Seethe and fume and throw a tantrum.
Do what thou wilt shall be the whole of the law.
Does George know what he's got here?  -Steven Spielberg.
Does a firm persuasion that a thing is so make it so?  -Wm. Blake
Does the early bird enjoy the worm as much as the late bird enjoys the sleep?
Don't be overly suspicious where it's not warranted.
Don't believe everything you hear or anything you say.
Don't call me a mindless philosopher, you overweight glob of grease.
Don't commute, communicate.
Don't conscience-stricken before they're hatched.
Don't eat yellow snow.
Don't feed the bats tonight.
Don't force it, use a bigger hammer.
Don't forget to run "make depend"
Don't get mad, make book.
Don't go surfing in South Dakota for a while.
Don't hate yourself in the morning -- sleep till noon.
Don't kiss an elephant on the lips today.
Don't let your thoughts get in a rut. The knife which spreads may also cut.
Don't lie if you don't have to. -Leo Szilard
Don't look back -- something may be gaining on you.  -Satchel Paige.
Don't play games with me.  You weren't on any mercy mission this time.
Don't put a loaded rifle on the stage unless someone intends to fire it.
Don't rely on your nose -- TEST ATMOSPHERE!
Don't speak about Time, until you have spoken to him.
Don't tell any big lies today.  Small ones can be just as effective.
Don't try to have the last word. You might get it.
Don't try to out-weird me, I get stranger things than you free with my breakfast cereal.
Don't type so hard.
Don't vote -- it only encourages them.
Don't worry -- dat mine, it can't hurt us -- it's one of ours.  -Eccles
Don't worry if it doesn't work right; if everything did, you'd be out of a job.
Don't worry, it's not loaded.
Don't worry, they couldn't hit an elephant at this dist
Don't you feel more like you do now than you did when you came in?
Don't you have anything better to do with your time?
Down with categorical imperative!
Dreams are free, but there's a small charge for alterations.
Dreams are free, but you get soaked on the connect time.
Drive defensively, buy a tank.
Ducking for apples.  Change one letter and it's the story of my life. _ Dorothy Parker
Dump time is unreasonable
During 1986, UNIX will dominate the low end.  J. Scanlon
Dyslexics of the world, untie!
E Pluribus Unix.
E Unibus Plurum.
E pur si muove.
ERROR CREEPOUT HAS BEGUN
EVACUATION ROUTE  ---->
Each man's death diminishes me for I am involved in Humanity.  -John Donne
Easy for you to type, I have to do all the work.
Eat snart foobs.  -Unknown Jerome
Economic analysts say that while the economy may be slowing, it is not fizzling out.
Edinburgh is the Reykjavik of the South.
Ego sum ens omnipotens.
Eileen L. Behr has translated her skill in public speaking into a successful career selling capacitors.
Either I'm dead or my watch has stopped.  -Groucho Marx' last words
Either we are alone or we are not.  Either way is mind-boggling.
Eleemosynary deeds have their incipience intramurally.
English is a stretch language; one size fits all.  -W. Safire
Eschew the implement of correction and vitiate the scion.
Espanol tiene demasiada mucha grammatica.
Even a cabbage may look at a king.
Even a hawk is an eagle among crows.
Even if I could be Shakespeare, I think I should still choose to be Faraday. - A. Huxley
Even paranoia can sometimes be taken to extremes.
Even the boldest zebra fears the hungry lion.
Even the simplest solution is bound to have something wrong with it.
Even the smallest candle burns brighter in the dark.
Even the thousand-zloty note can't tapdance.
Even these days, it's not as easy to go crazy as you think.
Ever see what ratfor does on a syntax error in a for loop?
Ever wake up feeling like a null pointer? -Allan Pratt
Every absurdity has a champion to defend it.
Every cloud has a silver lining; you should have sold it, and bought titanium.
Every day, thousands of housewives pick up speed.
Every excess becomes a vice.
Every good subversive does it for fun.  -Rich Rosen
Every law creates a whole new criminal class overnight.
Every little picofarad has a nanohenry all its own.
Every purchase has its price.
Every solution breeds new problems.
Every time you make something foolproof, along comes a better class of fool.
Everybody should believe in something -- I believe I'll have another drink.
Everything breaks down.
Everything east of the San Andreas Fault will eventually plunge into the ocean.
Everything is funny so long as it is happening to someone else.  -Will Rogers
Everything should be as simple as possible, but no simpler. - A. Einstein
Everything takes longer than you think.
Everything you know is wrong.
Everything's been said before, but nobody's listening, so keep repeating.
Ewige Blumenkraft.
Excellent day for drinking heavily.  Spike the office water cooler.
Excellent day to have a rotten day.
Excellent time to become a missing person.
Executive ability is in your make-up.
Exercise is the Yuppie version of bulemia.
Exhibition will continue to decline and  ultimately lead to other sources of entertainment.
Expansion means complexity; and complexity decay.
Expected arrival date is presently unknown. -Dave Kristol
Experience varies directly with the equipment ruined.
Explicit liber viri elephantini.
External Security:
FORTRAN 8X combines the simplicity of PL/I and the parsimony of ADA. -S Feldman
Fact without theory is trivia, theory without fact is bullshit.
Facta, non verba -- et verbum caro factus est.
Facta, non verba.
Fairness?  Decency?  How can you expect fairness and decency on a planet of sleeping people?
Far duller than a serpent's tooth it is to spend a quiet youth.
Far too noisy, my dear Mozart.  Far too many notes. -Emperor Ferdinand.
Favor negative lobes.
Fear is failure and the forerunner of failure.
Fear not, the end of the world isn't until next week.
Few things are harder to put up with than the annoyance of a good example.
Fiat lux.
Fiat voluntas tua.
Fill what's empty; empty what's full; scratch where it itches. -Alice Roosevelt Longworth
Find the enemy and shoot him down; everything else is rubbish. -M. von Richthofen
Fine day to throw a party.  Throw him as far as you can.
Fine day to work off excess energy.  Steal something heavy.
First there is a mountain, then there is no mountain, then there is.
First things first.  Why not send for the Nazis right now.
Fleas can be taught nearly anything that a congressperson can.
Flee at once, all is discovered.
Flight 23 is down in the Bermuda Triangle.
Florida is the "flea and tick capital of America."
Fnord.
For a good time, call 8367-3100.
For every action there is an equal and opposite government program.
For me, UNIX is a way of being. -Armando P. Stettner
For people who like that kind of book, that is the kind of book they will like.
Forget it, Jake...it's Chinatown.
Forsan et haec olim meminisse juvabit.
Fortis fortuna adiuvat. - Terence
Fortran est; non potest legi.
Fortunate are they who can laugh at themselves; they will never want for amusement.
Fortune, good night, smile once more, turn thy wheel! - King Lear II.ii.180
Fortunes ... come tumbling into some men's laps. - Francis Bacon.
Frankly, I'd rather be in Philadelphia.
Freedom is the right to be our own potty little selves.  -G. K. Chesterton
Freedom of incrustations of grime is contiguous with rectitude.
Friends come and go, but enemies accumulate.
Fritter and waste the hours in an offhand way.
From EXPLMY: Serious internal error, check the error code in the documentation of VRFYMY.
Future looks spotty.  You will spill soup in late evening.
Gaffer's tape, like The Force, has a light and a dark side and binds the universe together.
Gallium Arsenide is the material of the future and it always will be.
Generalizations are useful.  The work contained in them can be reckoned as labor and therefore can create value.  -G.W. Hegel
Generosity and perfection are your everlasting goals.
Genius is the talent of a person who is dead.
Gentlemen, you can't fight here.  This is the war room.
Get your boots on, 'cause we're gunna go in DEEP!
Give me a rock, paper and scissors and I will move the world.  CCFestoon
Give me a sleeping pill and tell me your troubles.
Give your child mental blocks for Christmas.
Given enough inside information and unlimited credit, you've got to go broke.
Go directly to jail.  Do not pass Go, do not collect $200.
Go out and see what the real world has to offer -Gerry Todd
Go suck on an infinite tube.
God does not play dice.
God gives us relatives; thank goodness we can choose our friends.
God is in the rock too -- in the rock!
God isn't dead, he just couldn't find a parking place.
God made the integers; all else is the work of Man.
God not only plays dice with the universe, He loads the dice too.
Gods!  A hideous beast, baying is pursuing us!
Golden lads and girls all must,/Like chimney sweepers, come to dust.
Good Americans, when they die, go to Paris. - Thomas Appleton.
Good Rule: Don't put anything in your mouth labeled "HARMFUL IF SWALLOWED"
Good day for a change of scene.  Repaper the bedroom wall.
Good day for flaming at floyd!trb.
Good day for overcoming obstacles.  Try a steeplechase.
Good day to avoid cops.  Crawl to work.
Good day to do the unexpected:  write some documentation.
Good day to let down old friends who need help.
Good day to write a purchase requisition for a 747.
Good fish get dull but sex is always fun. -- Mehinaku proverb
Good health is just the slowest, most lingering way of dying.
Good intentions don't mean anything unless they can deliver.
Good manners and bad breath get you nowhere
Good news.  Ten weeks from Friday will be a pretty good day.
Gort!  Klaatu barada...uh...uh...
Government expands to absorb all available revenue and then some.
Government is just Anarchy's way of making more anarchy.
Graecum est; non potest legi.
Great shot, kid.  That was one in a million.
Great warrior?  Heh-heh-heh.  Wars do not make one great.
Green light in A.M. for new projects.  Red light in P.M. for traffic tickets.
Growth itself becomes the only moral end. -John Dewey
Guns don't kill detectives -- love does.
Ha! You killed my husband, Sam.  Be kind to me.
Had Cleopatra's nose been shorter, the whole history of the world would have been different. - Pascal
Hail to the sun god/He sure is a fun god/Ra! Ra! Ra!
Half Moon tonight.  (At least it's better than no Moon at all.)
Hang by your pseudopod, write if you find a warm rich planet ripe for conquest.
Hang in there, hammock-nose.
Hangover is the wrath of the grapes.
Have a nice diurnal anomaly.
Have you done your Christmas chopping yet? -anon. White House Advisor 12/24/81
Have you hugged my T-shirt today?
He can't think without his hat.
He cried at all his own weddings, and with reason.
He gave her a look that you could have poured on a waffle.
He is no lawyer who cannot take two sides.
He is truly wise who gains wisdom from another's mishap.
He is winding the watch of his wit; by and by it will strike.
He looked at me as if I was a side dish he hadn't ordered.
He missed an invaluable opportunity to hold his tongue.
He serves the state best who opposes it most. -Thoreau
He that laugheth in the face of death haveth the last laugh.
He thinks by infection, catching an opinion like a cold.
He was al coltissh, ful of ragerye,/And ful of jargon as a flekke pye. -Chaucer
He was so narrow-minded he could see through a keyhole with two eyes.
He who binds himself to a joy/Does the winged life destroy.  -Wm. Blake
He who has a shady past knows that nice guys finish last.
He who has imagination without learning has wings but no feet.
He who has science and art has religion. -Goethe
He who hesitates is last.
He who hesitates is scrap metal.
He who hesitates is sometimes saved.
He who invents adages for others to peruse takes along rowboat when going on cruise.
He who keeps his nose to the grindstone, has a flat face.
He who laughs last is a little slow on the uptake.
He who laughs, lasts.
He who listens last is the last one listening.
He who makes a beast of himself gets rid of the pain of being a man.  -H.S. Thompson
He who spends a storm beneath a tree, takes life with a grain of TNT.
He who trains his tongue to quote from learned sages will be known far and wide as a smartass.
He who wears belt and suspenders needs tighter belt.
Help a swallow land at Capistrano.
Help conquer the IQ shortage: worry less and think more.
Help me, i'm a prisoner in a chinese computer terminal!
Hey, I've got it -- let's put on a show!
Hi, this is Ken. What's the root password?
Hindsight is an exact science.
His heart was yours from the first moment that you met.
His money is twice tainted: 'taint yours and 'taint mine.
History is a race between education and catastrophe.  -H. G. Wells
Hit space to start
Hodie tempum scriptire in Latinum non habeo.  Cras epistlum submissibo.
Home is the place where, when you have to go there, they have to take you in.
Home is where / is.
Honi soit la vache qui rit.
Hop before you skip.
Horse sense is the thing a horse has which keeps it from betting on people.
How I want a drink, alcoholic of course, after the chapters involving quantum mechanics.
How can I take an interest in my work when I don't like it?
How can you work when the system's so crowded?
How did the Universe manage to go bang in such an unreasonable way? -PCW Davies
How do I love thee?  Hand me my calculator...
How is it far, if you can think of it?
How long you live has nothing to do with how long you are going to be dead.
How sharper than a child's tooth it is to have a thankless serpent.
How sharper than a serpent's tooth it is to have a thankless child.
How the elephant got into my pyjamas I'll never know.  -Marx, Animal Crackers
How wonderful opera would be if there were no singers.
How you look depends on where you go.
Human beings are the only animals of which I am thoroughly and cravenly afraid. 
Human kind cannot bear very much reality. -T.S. Eliot
Hypocrisy is the tribute vice pays to virtue.
Hypothesize and test.
I am Magnus.  You are registered in my memory banks...
I am a high-pressure guy, and I didn't take this job to conduct a going-out-of-business sale. - A.A. Penzias
I am free of the wheel of Maya; I am dead to the dance of life.
I am large; I contain multitudes.
I am the Supreme Being.  I'm not entirely dim.
I am the beast, I am the Word of the Aeon...I am a hell of a Holy Guru.
I am the wandering glitch -- catch me if you can.
I can call spirits from the vasty deep./Why, so can I, or so can any man.
I can resist everything except temptation.  -Oscar Wilde.
I can't decide whether to throw you overboard or just change the way you look.
I cannot teach him.  The boy has no patience.
I contradict myself?  Very well, then: I contradict myself.  I am large.
I dinna believe she'll hold up much longer, Captin.
I do not sketch or design a work, I merely begin. -Joan Miro
I don't even know what street Canada is on. - Al Capone
I don't have a moral plan... I'm a Canadian. -David Cronenberg
I don't like to walk, and I don't like to paddle. -James Watt
I don't love you any more since you ate my dog.
I don't mind your thinking slowly; i mind your publishing faster than you think. -W. Pauli
I give presents to the mother, but I think of the daughter.
I hate programs that chdir on you - Boyd Roberts
I have 36 rolls of 5247 for our use in the laser fridge...
I have NEVER written a program in C!  Narain Gehani
I have discovered the art of deceiving diplomats; I tell them the truth and they never believe me. -Cavour
I have everything we will need.
I have never let my schooling interfere with my educations.
I have nothing to say and I am saying it and that is poetry as I need it. -Cage
I have the most perfect confidence in your indiscretion.
I haven't lost my mind.  I've got it backed up on tape somewhere.
I hope that there are sour apples in every bushel.
I kissed my first cigarette on the herpolhode lying in the invariable plane.
I kissed my first cigarette on the stage unless someone intends to fire it.
I kissed my first lady and smoked my first cigarette on the same day.  I have never had time for tobacco since. -Arturo Toscanini
I know nothing.  -Ken Thompson
I know the difference between real-real and drug-real.
I like user-hostile ignorance-based amateur systems.
I like work; it fascinates me; I can sit and look at it for hours.
I love Pascal ... I'm also into leather.
I love the smell of napalm in the morning.
I love you.
I must have slipped a disk; my pack hurts.
I never dringk ... wine.  -Bela Lugosi
I never refuse. I never contradict. I sometimes forget. -Disraeli
I knew it was coming and I still felt as if I'd swallowed a snowcone whole.
I regard an original error as better than a borrowed truth. -Merton.
I regard an original error as better than no Moon at all.
I see no login here!
I see only darkness in the crystal ball
I sense something -- a presence I haven't felt since....
I taught him everything he knows.  Now he knows more.  -Randal L. Schwartz
I thank you from the heart of my bottom.
I think Isaac Newton is doing most of the driving right now.
I think my spaceship knows which way to go.
I think that I shall never see a billboard as lovely as a tree. -Ogden Nash
I think; therefore I am confused.
I was just going to call you.
I will not suffer fools gladly, but I will gladly make fools suffer. -Bimmler
I wish I had time to explain dimensional transcendentalism -Dr. Who
I wish you humans would leave me alone.
I wonder what will happen if I touch these two wires together.
I would be perfectly happy being Kepler, [but] I have been Kepler many times over.-B. Mandelbrot
I wouldn't let a knight out on a dog like this!
I wouldn't marry her to a ten foot Pole.
I wouldn't marry him with a ten foot pole.
I'd give my right arm to be ambidextrous.
I'd rather have a free bottle in front of me than a pre-frontal lobotomy. -Martin Mull
I'd rather have my mail delivered by Lockheed than ride in a plane built by the Post Office.
I'll eat it if I'm wrong.  I mean a potato. - Danny Sleator
I'll produce anything that gets high ratings.  -Anonymous NBC official
I'll smoke when the pope's wife takes the pill.
I'm a Hollywood writer; so I put on a sports jacket and take off my brain.
I'm free -- and freedom tastes of reality.
I'm from the government, and I'm here to help you.
I'm prepared for all emergencies but totally unprepared for everyday life.
I'm so hip I have difficulty seeing over my pelvis.
I'm sorry, but I've made other plans.
I've done this before and never had any trouble.
I've got a ferret sticking up my nose.
ICIKL: DO I = 1 /* BY +1 FELTETELEZESEVEL */ TO 2*N;
IOT trap -- core dumped
IOT trap -- core melted
If A=B and B=C, then A=C, except where void or prohibited by law.  -Roy Santoro
If Congress must do a painful thing, it must be done in an odd-numbered year.
If God could perform the tricks we do, He'd be a happy man.
If God had meant Texans to ski, he would have made bullshit white.
If God had wanted you to go around nude, He would have given you bigger hands.
If God is perfect, why did He create discontinuous functions?
If God lived on Earth, people would knock out all His windows.
If God meant for Texans to ski, He would have made them a mountain.
If God wanted us to have a President, He would have sent us a candidate.
If I could remember the names of all these particles I would have been a botanist. -- Enrico Fermi
If I had only known, I would have been a locksmith.  -Albert Einstein
If I had to choose between System V and 4.2, I'd resign. - Peter Honeyman
If I owned Texas and Hell, I'd rent out Texas and live in Hell.
If I say it's safe to surf this beach, Captain, it's safe to surf this beach.
If I should return in my absence, kindly detain me until I get back.
If I wanted your opinion, I'd tell it to you.  -Samuel Goldwyn
If Lincoln were alive today he would be spinning in his grave. -G. Ford
If MS/DOS is the only operating system you're ever going to use, then the procedure is simple
If a thousand people say a foolish thing, it remains a foolish thing.
If all economists were laid end to end, they would not reach a conclusion.
If anything can go wrong, it will.
If at first you don't succeed, quit; don't be a nut about success.
If at first you succeed, try to hide your astonishment.
If bankers can count, why do they have eight windows and only four tellers?
If butterflies had teeth like tigers they would never make it out of the hangar.
If double-bubble inflation did occur, then the shadow world is exponentially uninteresting.
If ever I utter an oath again may my soul be blasted to eternal damnation.
If everything is coming your way, you're in the wrong lane.
If ignorance were cornflakes, you'd be General Mills.
If it ain't broke, don't fix it.
If it doesn't matter, it does not matter.
If it happens, it must be possible.
If it isn't like TECO, it's not worth using. -Rae McLellan
If it pours before seven, it has rained by eleven.
If it were dangerous they would post a sign...
If it's boring, turn it off.
If it's gratitude you want, get a dog. -P. T. Barnum
If it's not broken, don't fix it.
If it's not worth doing, it's not worth doing well.
If it's worth doing well, it's worth doing.
If more is better then too much is just enough.
If music be the breakfast food of love, kindly do not disturb until lunch time. 
If some day it should happen that a victim must be found, I've got a little list, I've got a little list.
If the "medium is the message" then the message of low-bandwidth timesharing is "blah". -- Alan Kay
If the check is truly in the mail, it is surely made out to someone else.
If the coin is heads up don't pick it up.
If the experiment works, you must be using the wrong equipment.
If the facts do not support the theory, they must be disposed of.
If the government doesn't trust the people, why doesn't it elect a new people?
If the shoe fits, buy the other one, too.
If there are any resources you need to get this job done, just let us know.
If there is no God, who pops up the next Kleenex?  -Art Hoppe
If they gave me a goldfish, I would cook it. -Feng Jicai
If time heals all wounds, how come the belly button stays the same?
If voting could change the system, it would be against the law.
If we turn on the lights fast enough, we'll see what the dark looks like.
If we'd all been living in California, we wouldn't have worked at ALL.
If you ask how much it is, you can't afford it.
If you can't find enough radiation at Ralph's, you can probably do without it.
If you can't stand the heat, remove your clothing!
If you cannot convince them, confuse them.  -Harry S. Truman
If you do a job too well, you'll get stuck with it.
If you don't care where you are, then you ain't lost.
If you don't insist on correct answers, I can make it run as fast as you want.
If you don't know where you're going, it doesn't matter how you get there.
If you don't like the weather in New England, just wait a few minutes.
If you don't pay attention to every little detail, you miss most of the jokes.
If you gaze long enough into the abyss, the abyss will gaze back into you.
If you grab the bull by the horns, feathers will fly.
If you have to lie to someone, it's their fault.
If you have to think twice about it, you're wrong.
If you have to travel on the Titanic, why not go first class?
If you know high class quality merchandise, you know this is CHEAP!
If you start now you might finish on time.
If you suspect a man, don't employ him.
If you take the last cup, make a new pot.
If you take the last pot, make a new cup.
If you think before you speak the other guy gets his joke in first.
If you think big enough, you'll never have to do it.
If you think it's hard going to the moon, you should try staying home.
If you think last Tuesday was a drag, wait till you see what happens tomorrow!
If you want to go somewhere, goto is the best way to get there. K Thompson
If you want to have clean ideas, change them like shirts.
If you were able to count up to infinity I'll bet you would never get over it.
If you're asked to join a parade, don't march behind the elephants.
If you're feeling good, don't worry.  You'll get over it.
If you're not apprehensive then you don't understand the situation.
If you're not part of the solution, you're part of the precipitate.
If your experiment needs statistics, you ought to have done a better experiment. - E. Rutherford
Ignore alien orders.
Ignore previous fortune.
Ignore the fatal errors. It's O.K.
Il faut cultiver son jardins.  -Voltaire
Illegal Arbitrator - Line 23
Illegitimi non carborundum.
Immanuel Kant but Kubla Khan.
In Africa the tusks are too firmly rooted, but in Alabama the Tuscaloosa.
In addition to a yes and a no, the universe contains a maybe. -D. Finkelstein
In an evolving universe, who stands still moves backwards.
In any society, the correct pronunciation is the dialect that has an army.
In case of fire, stand in the hall and shout "Fire!".
In challenging a kzin, a simple scream of rage is sufficient.
In communism Man exploits Man.  In capitalism it's the other way around.
In comparison with the ancients, we stand like dwarfs on the shoulders of giants. -Bernard of Chartres
In girum imus nocte et consumimur igni.
In marriage, as in war, it is permitted to take every advantage of the enemy.
In nature there is immediate adjustment but no compulsion. -Chuang Chou
In order to make an omelette, you have to break a few cooks.
In rebus mathematicis errores quam minimi non sunt contemnendi.
In the Unix tradition, vi is intended to be a small tool that does one thing well.
In the future, all programmers will be able to use malloc.
In the land of the blind the one-eyed man can see across the road and prove it.
In the land of the blind, the one-eyed man is king.
In the land of the one-eyed men, the blind have to wear glasses.
In this world, truth can wait; she's used to it.
Incest, like charity, begins at home.
Insanity is always the best defense against boredom.
Inside every large problem is a small problem struggling to get out.  -N. Wirth
Intermittent resolutions lack potency. -Robert Silverberg
Into each life a little fallout must rain. -Baba Rebop
It got to a point where I had to get a haircut or a violin. -F.D.Roosevelt
It is a poor judge who cannot award a prize.
It is a tale told by an idiot, full of sound and fury, signifying nothing.
It is a very sad thing nowadays that there is so little useless information.
It is absurd to deny the role of fantasy in even the strictest science. -Lenin
It is bad luck to be superstitious.  -Andrew W. Mathis
It is better to have loved and lost -- much better.
It is better to have loved and lost than just to have lost.
It is better to kiss an avocado than to get in a fight with an aardvark.
It is better to light a single candle than to curse the darkness, except at the Browns Ferry reactor.
It is better to rule in Hell than to serve in Heaven.  -Milton
It is better to wear out than to rust out.
It is easier to get forgiveness than permission.
It is far better to vote for a loser than to elect one.
It is far better to vote for a loser than to elect?
It is fruitless to become lachrymal over precipitately departed lacteal fluid.
It is hard to sit with the turkeys when you soar with the eagles.
It is much easier to suggest solutions when you know nothing about the problem.
It is the business of the future to be dangerous.  -Hawkwind
It is the wise bird who builds her nest in a tree.
It is useless to put on your brakes when you're upside down. -Paul Newman
It seems like the less a statesman amounts to, the more he loves the flag.
It seems to make an auto driver mad if he misses you.
It steam-engines when it becomes steam-engine time.  -Charles Fort
It takes approximately two minutes to reposition the continents from one geological era to another.
It was a book to kill time for those who liked it better dead.
It works better if you plug it in.
It would appear that even BTL employees put their pants on one leg at a time.
It would be wise to cut expectations in half.
It's 5 o'clock.  Do you know where your files are?
It's Your Environment -- Use It Up!
It's a hardware problem.
It's a sad woman who buys her own perfume.
It's a small world, but I'd hate to have to paint it.
It's a software problem.
It's a useless but absolutely vital precaution.
It's an empty head that wears a hairpiece. - Pauline Kael
It's business doing pleasure with you.
It's clever, but is it art?
It's deja vu all over again.
It's difficult to explain Kleenex to an aborigine.
It's earlier than you think.
It's funny how they work so well, even when they're not appropriate.
It's hard to be humble when you're perfect.
It's hard to be mellow when you bite your nails.
It's hard to be mellow when you can't stand up.
It's hard to love someone who looks down on you because your hands get bloody protecting him.
It's just a silly native superstition.
It's later than you think.
It's lonely at the top, but it's lonelier at the bottom.
It's morally wrong to allow suckers to keep their money.
It's not Camelot, but it's not Cleveland, either.  -Boston Mayor Kevin White
It's not a car, it's a Volkswagen.
It's not cool enough for the eighties.
It's not easy to play the clown when you've got to run the whole circus.
It's not my fault -- it's a mechanical problem!
It's not my fault!
It's not reality that's important, but how you perceive things.
It's not reality that's important, it's how you perceive things.
It's not the time between the takes that takes the time - it's changing your mind between the takes that takes the time. -Stage Dept.
It's not the time it takes to take the takes that takes the time, it's the time it takes between the takes that takes the time. -S. Spielberg
It's not the years, it's the mileage.
It's only a game!
It's simple, clean, it works, and you can get it right now. -Mike O'Dell
It's some kind of instinct...This was an important place in their lives.
It's the law: Use a pun, go to prism (for minor refractions of the law only!)
It's the thought, if any, that counts! -Dick Grantges
It's time to gearshift up from the crawl we've been in to a full trot. - Jack Scanlon
It's worse than being at the theatre.
Jam tomorrow and jam yesterday -- but never jam today.
Jesus Rodrigues has a 9-inch duck.
Jesus saves, Moses invests, the Mongol Hoards, but only Buddha pays dividends.
Join me and I will complete your training.
Journalism will kill you, but it will keep you alive while you're at it.
Just be glad you don't get all the government you pay for.  -Will Rogers
Just because you're paranoid doesn't mean they're not out to get you.
Justice for the poor is much less popular than revenge on the rich.
Keep emotionally active.  Cater to your favorite neurosis.
Ken Thompson can't beat Belle.  So what?  How fast can Seymour Cray add?
Kids are always the only future the human race has. -William Saroyan
Kill ugly radio!
Klaatu barada nikto.
Kleeneliness is next to Goedeliness.
Label on a bottle of pills: "Do not take these pills if this label is missing"
Lack of leadership is no substitute for inaction.
Lando's not a system, he's a man.  He's a gambler, scoundrel.  You'd like him.
Language is a virus from outer space.  -William Burroughs.
Language is all that separates us from the lower animals and the bureaucrats.
Last login: Sat Aug 10 09:22:14 on ttym0
Laugh and the world laughs with you;  snore and you sleep alone.
Laugh, and the world ignores you.  Crying doesn't help either.
Lay on, MacDuff, and curs'd be him who first cries, `Hold, enough!'
Leadership means taxes.
Lest men suspect your tale untrue,/Keep probability in view.  -John Gay (1727)
Let a fool hold his tongue and he will pass for a sage.
Let him who takes the Plunge remember to return it by Tuesday.
Let no one unskilled in geometry enter here.  -Plato
Let not the sands of time get in your lunch.
Let sleeping wraiths lie.
Let's just take this shortcut across this field.  That bull doesn't see us.
Let's look at the record.  -Al Smith
Li'l dollink, always fetful.
Liar: One who tells an unpleasant truth.
Life is a game:  whoever dies with the most toys wins.
Life is a giant shell and we're just processes.
Life is a mystery -- love is a dancer.
Life is a yo-yo, and mankind ties knots in the string.
Life is hard but unjust.
Life is just a bowl.
Life is not for everyone.  -M. O'Donoghue
Life is what happens to you while you're busy making other plans.
Like winter snow on summer lawn, time past is time gone.
Little girls have pretty curls, but I like Oreos.
Little things come in small packages.
Live forever, or die trying.
Live long and perspire.
Living in the past has one thing in its favour - it's cheaper.
Load average too high now (11.358253), please try later
Local disks are our FORTRAN.  -Warren Teitelman
Long computations which yield 0 (zero) are probably all for naught.
Longevity is an optimist's heaven and a pessimist's hell.
Look after the molehills and the mountains will look after themselves.
Look on my works, oh ye mighty, and giggle.
Lord?  We don't have no lord.  We're an anarcho-syndicalist commune.
Lose a few, lose a few.
Losing your servo track is just God's way of saying `BOOGA, BOOGA!'
Love and scandal are the best sweeteners of tea.
Love is a many gendered thing.
Love is in the offing, said the homicidal maniac.
Love is only love, but money is forever.
Love the sea? I dote upon it - from the beach.
Love, and do what thou wilt.
Luchamos contra el Wombat, otra enemigo de la humanidad. -Frente Wombato de Liberacion Nacional
Luke, don't give in to hate.  That leads to the dark side.
MOUNT TAPE U1439 ON B3, NO RING
Machne oprating at olny tn prcnt eficiency.
Macro context switch under way, please do not log out!
Make War, not Love: killing is fun too. -Nicholas von Hoffman
Make a list of all the facts you know about the universe.
Make is like Pascal: everybody likes it, so they go in and change it. -DM Ritchie
Make use of whatever advanced technology is available
Make:  Don't know how to make love.  Stop.
Making outside money using our computers has resulted in suspension.
Making sense makes more sense than not making sense. -T. Duff
Male tyrannosaurs may have used their diminutive front legs to titillate female partners, but this will not explain why they got so small. - Gould and Lewontin
Man cannot live by bread alone: frequently, there must be beverage, too.
Man cannot live by bread alone; he needs a little peanut butter on it.
Man has created death.  -William Butler Yeats
Man is in doubt to deem himself a god or beast. -Alexander Pope
Man is in session.
Man who falls in vat of molten optical glass makes spectacle of self.
Man's horizons are bounded by his vision.
Many are called, few are chosen.  Fewer still get to do the choosing.
Many are called, few volunteer.
Many are cold, but few are frozen.
Many pages make a thick book.
Marriage is a ghastly public confession of a strictly private intention.
Marriage is an attempt to change a night owl into a homing pigeon.
Masterpieces make their own rules.
May I have a large container of coffee?
May the bluebird of happiness twiddle your bits.
May you live all the days of your life.
May your rolling stone always grow grass that is greener underneath.
Maybe I should have screwed up. - Ken Thompson
Mcc may be slow and generate bad code, but it took a long time to develop.
Medeis ageometretos eisito mou ten stegen.  -Plato
Members of an avian species of identical plumage congregate.
Men seldom make passes at girls who wear glasses.  -Dorothy Parker.
Men seldom show dimples to girls who have pimples.
Message will arrive in the mail.  Destroy, before the FBI sees it.
Micronics makes it simple.
Might as well be frank, monsieur. It would take a miracle to get you out of Casablanca.
Military justice is to justice as military music is to music.  -Clemenceau
Military music is to music as military intelligence is to intelligence
Mind your own business, Spock. I'm sick of your halfbreed interference.
Misery loves company, but company does not reciprocate.
Misfortunes arrive on wings and leave on foot.
Mistakes are oft the stepping stones to failure.
Money cannot buy happiness, but happiness will not buy groceries.
Money is a terrible thing to follow but a charming thing to meet.
Money is the root of all evil, and man needs roots.
Money may buy friendship but money can not buy love.
Money will say more in one moment than the most eloquent lover can in years.
Most sacrilegious murder hath broke ope/The Lord's anointed temple.  -MacBeth
Most users are within a 10 mile radius.
Mr. President!  We cannot allow ... a MINE-SHAFT GAP!
Multi sunt vocati, pauci vero electi.
Multilevel standards are like onions. They're smelly and make you cry a lot. -Ron Natalie
My broker is E. F. Hutton, and E. F. Hutton says...
My karma just ran over your dogma.
My program is so jammed with clever tricks - GJ Holzmann
My way of joking is to tell the truth; it's the funniest joke in the world.
NOT NOT NOT ALLOWED
Naked is the best disguise.
National security is the chief cause of national insecurity.
Need a personal problem? Get a personal computer. - C. P. Killian
Neither a borrower nor a lender be/For loan oft loses both itself and friend.
Nembutal numbs it all, but I prefer alcohol.  -Strummer/Jones
Netnews is someone yelling "Anybody wanna buy a used car?" in a crowded theater.
Never argue with a fool -- people might not know the difference.
Never attribute to malice what can be found in scientific american, under computer recreations.
Never buy a case of wine with eleven bottles.
Never call a man a fool.  Borrow from him.
Never eat anything bigger than your head.
Never eat in a restaurant that rotates or is above the 10th floor.
Never eat rutabaga on any day of the week that has a "y" in it.
Never give a inch!
Never hatchet your Counts before they chicken.
Never lick a gift horse in the mouth.
Never put off till tomorrow what you can avoid altogether.
Never speak ill of yourself; your friends will always say enough on that subject.
Never stow away on a kamikaze plane.
Never worry the boss unnecessarily.  Don't tell him.
New career ideas are worth pursuing.
New crypt. See /usr/news/crypt.
Niagara Falls is the second-biggest disappointment in a bride's life. -O. Wilde
Niagara Falls is the wise bird who builds her nest in a chinese computer terminal!
Niagara Falls would be much more impressive if it flowed the other way. - Oscar Wilde
Nihilism means nothing to the dancing peasants.
Nihilism should commence with oneself.
No amount of genius can overcome a preoccupation with detail.
No branch is better than its trunk.
No directory
No directory!  Logging in with home=/
No good deed goes unpunished.  -Clare Booth Luce.
No jaggies!
No man's life, liberty or property are safe while the legislature is in session.
No mistake is too small to be fixed, but first make sure it's a mistake.
No news is good news.
No note is too high to be taken down an octave.
No one can feel as helpless as the owner of a sick goldfish.
No two ways about it, there are two sides to every story.
No user jobs will be lost because of the crash.
Nobody can be as agreeable as an uninvited guest.
Nobody expects the Spanish Inquisition!
Nobody goes to the theatre unless suffering from acute bronchitis.
Nobody is truly sane until he feels gratitude to the whole universe.
Nobody knows anything, or if they do, they are careful to hide the fact.
Nobody takes computer graphics seriously, even the guys that do it. -T. Duff
Non serviam.
Nostalgia isn't what it used to be.
Not all the water in a rough rude sea/Can wash the balm from an anointed king.
Not only is there no God, but try getting a plumber on Sundays.
Nothing astonishes men so much as common sense and plain dealing.
Nothing difficult is ever easy.  -Steve Falco
Nothing is as easy as it looks.
Nothing is capable of being well set to music that is not nonsense. - Joseph Addison.
Nothing is impossible for the man who doesn't have to do it himself.
Nothing is impossible for the man who will not listen to reason.
Nothing is true.  Everything is permissible.  -Hassan i Sabbah
Nothing matters indeed, it's all in your mind...
Nothing more certain than incertainties; Fortune is full of fresh variety: Constant in nothing but inconstancy. - Richard Barnfield.
Nothing of interest ever happened on this day.
Nothing works.  No one knows why.  And some jerk is talking French. -Bob Lied
Now and then an innocent man is sent to the legislature.
Now is the winter of our discontent, made glorious summer in Northern California.
Now is the winter of our discontent/Made glorious summer by this sun of York.
O brave new world,/That has such people in't!
O dear Ophelia! I am ill at these numbers: I have not art to reckon my groans.
O.T.O. wants you.
OK, I think I understand.
OS 360 -- Not uranium.
Of all forms of caution, caution in love is the most fatal.
Of all things man is the measure.  -Protagoras
Oh, don't the days seem lank and long, when all goes right and nothing goes wrong.
Oh, so there you are!
Old MacDonald had an agricultural real estate tax abatement.
Old age -- it's the only disease that you don't look forward to being cured of.
Omnibus ex nihil ducendis sufficit unum.  -Gottfried Wilhelm von Leibniz
On a clear disk you can seek forever.
Once TOAD is operational, how frequently would you expect to access TOAD?
One Bell System -- it sometimes works.
One Bell System -- it works.
One bad apple can ruin a snake.
One horse-laugh is worth ten thousand syllogisms.  -H. L. Mencken
One man tells a falsehood, a hundred repeat it as true.
One man's Mede is another man's Persian.
One picture is worth 128k words.
One scythe fits all.
One starts life with a swelled head and ends with swelled feet. -Ezra Pound
Only %d shopping days until Christmas.
Only God can make a random selection.
Only someone with nothing to be sorry for smiles back at the rear of an elephant.
Only two things are infinite: the universe and human ignorance. -A. Einstein
Ontogeny recapitulates phylogeny, or is that ontology recapitulates philology?
Ontogeny recapitulates phylogeny.  -Haeckel
Ontogeny rehashes phylogeny.
Ooh, Andy Tannenbaum?  His netnews is SO derivative.
Options can cause undesirable operations, so it is important to ensure they are set up properly.
Order ignorant aliens.
Others will look to you for stability, so hide when you bite your nails.
Otto's too so-so to toss soot, too sot to toot SOSs. So?
Our ancestors may have been ignorant, but they were not stupid.
Our sponsor thought it was for ADA. In fact it was for C.
Our vision will speed up time, eventually deleting it.  -Alexander Schure
Out of memory saving lines for undo - try using ed.
Out of the mouths of babes comes semi-digested Pablum.
Overall there is a smell of fried onions.  (fnord)
Pack my box with five dozen liquor jugs.
Panem et circenses, that's what the public wants.
Paranoia doesn't mean the whole world really isn't out to get you.
Pardon me for breathing, which I never do anyway oh, God, I'm so depressed...
Passing over a black hole temporarily disables ship.
Password:
People get it into their heads that this is a democracy.  Well it isn't. -gwl
People never go there anymore; it's too crowded. -Yogi Berra
People really shouldn't spread gossip, but what else is it good for?
People tend to congregate in the back of the church and the front of the bus.
People usually do what other people have done before them.
People who deal with bits should expect to get bitten. -Jon Bentley
People who take cat naps don't usually sleep in a cat's cradle.
People who think they know everything greatly annoy us who do.
People will buy anything that's one to a customer.
Per omnia saecula vombatidae.
Perfect day for scrubbing the floor and other exciting things.
Perfect love casteth out fear.
Person who falls in blast furnace is certain to feel overwrought.
Personality is a flimsy thing on which to build an art. -John Cage
Philosophy is the Rule of Life.
Philosopy: unintelligible answers to insoluble problems.
Physician, bill thyself.
Planning dooms most projects.
Please log off, the computer is out to get in your room and drink?
Please log off, the computer is out to lunch.
Please take note:
Please to remember the Fifth of November, Gunpowder Treason and Plot.
Plunk your magic twanger, froggy.
Pluralites non est punenda sine necessitate.  -Wm. of Occam
Plus ça change, plus c'est la même chose.
Politicians, ugly buildings and whores all get respectable if they last long enough.
Populus vult decipi.
Pornography is in the groin of the beholder. -William F. Buckley
Post hoc, ergo propter hoc.
Post proelium, praemium.
Pregnant ropuli.
Premature optimization is the root of all evil.  -D. E. Knuth
Preserve wildlife -- pickle a squirrel today!
Prevention makes the heart grow fonder.
Primate behaviour only changes under the impact of new technology.
Pro is to con as progress is to Congress.
Procrastination is the art of keeping up with yesterday. -Don Marquis
Programming and puddings demand consistency.
Progress is made on alternate Fridays.
Promptness is its own reward, if one lives by the clock instead of the sword.
Proofreading is more effective after publication.
Proper planning includes admitting that your plan may not work.
Pulchritude possesses solely cutaneous profundity.
Put not your trust in money, but your money in trust.
Put your mouth where your mouth is.
Quantity is no substitute for quality, but it's the only one we've got.
Quantum mechanics do it with uncertainty.
Questions are a burden for others; answers are a prison for oneself.
Rain before sunset, dark by midnight.
Rainy days and Mondays always get me down.
Reach out and grep someone.
Reading is thinking with someone else's head instead of one's own.
Real programmers can't say `lint' without adding `hbaxcu' -Wm Leler
Real programs don't eat cache.
Reality is for those who can't handle drugs.
Reality is good for you...in small doses.
Reality is silly-putty.  -Paul Krassner
Reality seems harsher in the early morning.
Reason establishes the foundation of faith. Faith compensates the error of reason.
Reason is a universal instrument which can serve on any kind of occasion. -Descartes
Reform always comes from below.  No man with four aces asks for a new deal.
Regnant populi.
Rei panta.
Religions revolve madly around sexual questions.
Remember that "almost" means "not".
Remember the Unknown Buffalo.
Remember when you asked me to tell you when you were being inconsiderate?
Remember why the good Lord made your eyes -- Pla-gi-a-rize! -Tom Lehrer
Remember, UNIX spelled backwards is XINU.
Remember, even if you win the rat race -- you're still a rat.
Render unto Caesar if line 54 is larger than line 62.
Repetition is a form of change.  -B. Eno
Research is a great career: you get paid for looking, regardless of results.
Respect you in the morning?!  Hell, I don't even respect you now.
Restrain your octopus!  The canoes are going fishing tomorrow.
Ring around the collar.
Ring the bell; close the book; quench the candle.
Ritual is to the inner sciences what experiment is to the outer sciences. -Leary
Rog-O-Matic callidus est.
Rog-O-Matic perditus est.
Rog-O-Matic's not expert enough. It could handle rogue, but it couldn't handle More.
Rotten wood can not be carved  -Confucius (Analects, Book 5, Ch. 9)
Round numbers are always false.  -Samuel Johnson (c. 1750)
Rule 5 Violation
SCCS: the source-code motel -- your code checks in but it never checks out. Ken Thompson
SYS ERROR 0 - no error detected
Sailors in ships, sail on! Even while we died, others rode out the storm.
Satire does not look pretty upon a tombstone.
Save a forest -- eat a beaver!
Save the dot files!
Save yourself!  Reboot in 5 seconds!
Say "no" to long-sleeved shirts!!  Support your right to bare arms!
Say your prayers, you're going to Zen heaven.
Schroedinger might have been here.
Schroedinger's cat is sitting on Heisenberg's shoulder and they are both laughing at you.
Scintillate, scintillate, aster minific.
Screw up your courage!  You've screwed up everything else.
Secrecy is the beginning of tyranny.
Secret mail has arrived.
See that ocean -- that used to be some ocean. -Burt Lancaster in Atlantic City
Seek not to understand that you may believe, but believe that you may understand.
Self denial is better than self degradation.
Sell everything. Market top has been reached. -Joseph Granville
Send not to ask for whom the bell tolls; it tolls for thee.
Señor, if you hurry from here, you will wait longer there. -Mexico taxi driver
Sex with someone you don't love is just gymnastics--and I hate exercise. -John Derek
Shadows slick as eels slither through.
Share your happiness with others today.
She canna take much more o' this, Mr. Spock.
Shift to the left!  Shift to the right! Pop up! Push Down! Byte, byte, byte!
Show respect for age.  Drink good Scotch for a change.
Si nummi immunis.
Silver is pure. It's been a symbol of justice and purity since the year of the sun.
Sin has many tools, but a lie is the handle which fits them all.
Sink or Swim with Teddy!
Sleep is an excellent way of listening to an opera.
Smile ... tomorrow will be worse.
Smoked carp is terrible unless you're out of smoked salmon.
Smooth rotation butters no parsnips.  -J. W. Tukey
Snatch the pebble from my hand, Grasshopper.
Snob intellectual bachelors can't have fun in San Antonio.  -Ted Nelson
Snoopy has fleas.
Snow Day -- stay home.
So long as radicals honor theory over facts, they will continue to dismantle their successes.
So narrow minded is the boss that he has to stack his ideas vertically.
Social innovations tend to the level of minimum tolerable well being.
Soft soap often has a high percentage of lye in it. -- Salada Tea
Solve et coagule.
Some books are to be tasted, others to be swallowed. -- Francis Bacon
Some day this war's gonna end.
Some men are discovered; others are found out.
Some of us feel that there is a loss of scholarship here, and we're not too happy about it. -Irvin Lustig
Some scholars are like donkeys, they merely carry a lot of books.
Some things are better left unsaid.
Sometimes a cigar is just a cigar. -Sigmund Freud
Sometimes it seems to me that men are children grown incompetent. -Carl Whitaker
Sometimes you've gotta give it all you've got, because it just isn't enough.
Soon you will be sitting on top of the world.
Sooner or later everybody's gotta pay their tab.
Sorting on the part of mendicants must be interdicted.
Space travel is utter bilge.  -Sir Richard Van Der Riet Wolley
Spare no expense to save money on this one.  -Samuel Goldwyn
Speaking of poison, I'll see that you get some fresh breakfast immediately.
Specialization is for insects.  -Robt. A. Heinlein
Spend extra time on hobby.  Get plenty of rolling papers.
Split a stick of wood, and the Christ is there, too.
Spock: We suffered 23 casualties in that attack, Captain.
Stack overflow in crawlout.  User environment re-initialized.  (FATAL$)
Standing on head makes smile of frown, but rest of face also upside down.
Status: R
Stay away from flying saucers today.
Stay away from hurricanes for a while.
Stereotypes are one of the worst things in the world. -miteddie!nessus
Sticks and stones may break my bones, but a laser beam is another matter.
Stop searching forever. Happiness is just next to you.
Stop searching forever. Happiness is unattainable.
Stop searching.  Happiness is right next to you.
Stop worrying, you'll never get out of this world alive.
Subject: Re: Re: Clar ... HUMBUG! - Wrongthink st - (nf)
Succumb to natural tendencies.  Be hateful and boring.
Sum quod eris.
Sun UNIX 4.2 Release 1.1 (IAS) #1: Tue Jan 29 01:25:15 PST 1985
Sunday clears away the rust of the whole week. - Joseph Addison.
Sure [Somoza]'s a son-of-a-bitch, but he's OUR son-of-a-bitch.  -F.D. Roosevelt
Surprise due today.  Also the rent.
Surprise your boss.  Get to work on time.
Surveillance should precede salientation.
System down Tues. am for COBOL compiler installation.
System going down at 1:45 this afternoon for disk crash.
System going down for 5 minutes -- back up in barrels.
System going down for 5 minutes -- back up in half an hour.
System going down in 5 minutes.
System might crash at any moment.
System went down at Fri Dec 13 21:54:56 1901
TERROR IN THE OUTPUT FILE  A  A
TNT allows students the freedom to make mistakes.
TSO -- it may be slow, but it's hard to use.
Tai Chi is self-defense for people on Quaaludes.
Take care of the luxuries and the necessities will take care of themselves.
Take care of your peonies and the dahlias will take care of themselves.
Te ayudare a recorder la cantidad a indoctos si releesme bien.
Teach it ... phenomenology.
Technological unemployment is total today -- 300 years ago we were all farmers.
Tell the girls to slice the ham thin.
Ten years of rejection slips is nature's way of telling you to stop writing.
Terminals at home are always in the bedroom.
Thank God I'm an atheist.  -Aleister Crowley
Thank you for choosing UNIX -- batteries not included, some assembly required.
That goes against the laws of Physics.
That must be wonderful! I don't understand it at all.
That we can comprehend the little we know already is mindboggling in itself.
That which does not kill me makes me stronger.
That which does not kill me missed.
That which is above is in that which is below.
That's as American as pie charts.
That's the nice thing about standards -- there's so many to choose from. -trb
The $SIGNON command is a risky practice.
The 3B2 Model 100 - the first machine with cat -v in ROM!
The Angels want to wear my red shoes.
The Beatles?  Isn't that Paul McCartney's old band?
The Blit is a nice terminal, but it runs emacs.
The Constitution gives us freedom of religion, not freedom from religion -R Reagan
The Emperor is not as forgiving as I am.
The Force is strong with this one.
The Force is with you, young Skywalker, but you are not a Jedi yet.
The Government urges you to remain calm.
The Inuit have dozens of words for snow, so why do the Dutch only have one word for rain?
The Italians make money out of funding their own deficit.
The Luddites always lose.  Always.
The Moral Majority are the people our ancestors came from Europe to escape.
The PIXAR -- it's not just a job, it's an adventure.
The SUN really is a hunk of junk. - Tom Duff
The Tao which can be talked about is not the Tao.  -Lao Tzu
The Tree of Learning bears the noblest fruit, but noble fruit tastes bad.
The UFO and the BVM seem to be the same phenomenon.  -Jacques Vallee
The UNIX system is harder to use than a toaster.  -Kaare Christian
The United States Army: 194 years of proud service, unhampered by progress.
The aim of existence is to have clean ideas, change them like shirts.
The aim of existence is to offer resistance to the flow of time.
The answer you seek is in an envelope.
The attacker must vanquish; the defender need only survive.
The average legislator is somewhere nearly all the time. -Herb Nore
The barge was in my blind spot. - Peter Hobson, Cambridge cox
The best prophet of the future is the past.
The better part of valour is discretion; in the which better part I have saved my life.
The boundary condition of the universe is that it has no boundary. - S. Hawking
The check is in the mail.
The churches must learn humility as well as teach it.
The common Welsh name Bzjxxllwcp is pronounced Jackson.
The connotation depends on the beacon. - Mark V. Shaney
The contrary of a compound is the aggregate of the contraries of the components. - De Morgan
The contrary of an aggregate is the compound of the contraries of the aggregates. - De Morgan
The coroner gave you a clean bill of health.
The darkest hour is just before the storm.
The dawning of the Information Age is bringing about dramatic changes in the fundamental fabric of our civilization. - AA Penzias
The decision doesn't have to be logical, it was unanimous.
The difference between a thief and the IRS is that the thief doesn't audit you afterwards.
The difficult we gave up on yesterday, the impossible we are giving up on now.
The early bird gets the coffee left over from the night before.
The early worm gets the bird.
The earth is like a tiny grain of sand, only much, much heavier.
The empty fist always makes the deepest wound.
The end is closer than you think.
The end justifies the meanness.
The enemy is ignorance [our own].  -Ezra Pound
The eyes believe themselves, the ears believe other people.
The fear of the lord was discovered before vitamins.
The first piece of luggage out of the chute doesn't belong to anyone, ever.
The first step in fixing something is getting it to break.
The first thing we do, let's kill all the lawyers. - Henry VI, part II.
The fit between the world and the human symbols describing it is never perfect.
The following file systems are due for backup at this time:
The fruits of impatience are bitter.
The function of the sun is not to help the cabbages along. - Flaubert
The further you get, the better it looks.
The future isn't what it used to be. (It never was.)
The future isn't what it used to be. -Arthur C. Clarke
The gods do not protect fools.  Fools are protected by more capable fools.
The hardest job kids face today is learning good manners without seeing any.
The hardest part of raising children is teaching them to ride bicycles.
The hippo has no sting, but the wise man would rather be sat upon by the bee.
The human brain is not a pretty sight.
The human mind treats a new idea the way the body treats a strange protein - it rejects it.  -Peter Medawar
The invention of the multiple-choice exam was the death blow to competent writing.
The judge's jokes are always funny.
The ketchup of sorrow is better than the mustard of happiness.
The last twenty-nine days of the month are the worst. -Nicola Tesla
The lion will lie down with the lamb, but the lamb won't get much sleep.
The love of money is the mucilage of many a tragic friendship -Stuart McMillan
The man of knowledge can see several things at once.
The map is not the territory. -A. E. Van Vogt, in World of Null-A
The measure of the rigor of a science is the index of its ability to predict.
The meek shall inherit the earth -- they are careful to hide the fact.
The meek shall inherit the earth -- they are pronounced "o".
The meek shall inherit the earth -- they are too weak to refuse.
The more complicated the mind, the more simple the play.
The more things change, the more they'll never be the same again.
The more you run over a dead cat, the flatter it gets.
The move of bambam functionality to the new AP bugs is re-scheduled to Friday night
The nervous system sees no color, feels no pain.  -T. Leary
The null string has always been a locksmith.  -Albert Einstein
The null string has always been a productive source of off-by-0 errors.
The number of UNIX installations has grown to 10, with more expected. - 2nd Edition UNIX manual
The number of approved [COBOL] subsets has been reduced from 104,976 to 54. - JM Triance
The official state animal of New York is the cabbie.
The official state tree of North Dakota is the telephone pole?
The one interesting fact about the Diplodocus is that the accent is on the second syllable.
The only imperfect thing in nature is the human race.
The only one who got everything done by Friday was Robinson Crusoe.
The only people who listen to both sides of an argument are the neighbors.
The only sure things in life are net.suicide and net.taxes.
The only thing cheaper than hardware is talk.
The only way out of a circle is through the center.
The opera isn't over until the fat lady sings.
The opposite of a trivial truth is false; the opposite of a great truth is also true.
The pale companion is not for our pomp.
The pearl the squirrel the girl hit bit split.
The planes in Spain fall mainly in the rain.
The play's the thing/Wherein I'll catch the conscience of the king.
The plural of spouse is spice.
The polhode rolls without slipping on the herpolhode lying in the invariable plane.
The problem with a just economy is, who runs the Bureau of Economic Justice?
The prudent man does not hold his breath.
The reason Swedes put little o's over some A's is that ontology recapitulates philology.
The reason Swedes put little o's over some A's is that they are pronounced "o".
The religion that is afraid of science dishonors God and commits suicide.
The rich man has his motor car, His country and his town estate.  He smokes a fifty-cent cigar And jeers at Fate. - F. P. Adams
The screen rectangle must be charged with emotion.  Hitchcock
The sheep - symbolic creature of docility, sacrifice and stupidity.
The shorter the line, the slower it moves.
The shortest distance between two points is off the wall.
The shortest distance between two points is under construction.  -Noelie Altito
The skeletons in the cupboard will all come out in the wash.
The solution to the problem of life is seen in the vanishing of the problem.
The sooner you fall behind, the more time you have to catch up.
The stapler runs out of staples only while you are trying to staple something.
The sterile pleasure of being right tends to get stale in the course of a lifetime.  EW Dijkstra
The strength of a nation lies in the integrity of its homes.  -Confucius
The stylus is more potent than the claymore.
The sword he sang a song of death/But could not make the sickle yield.  -Blake
The thing about Chinatown is, you can never be sure of anything down there.
The three laws of physics: f=ma; things fall down; you can't push a rope.
The tide of change approaches.
The time is right to make new friends.
The unexamined life is not worth examining.
The universe is laughing behind your back.
The vanity of teaching often tempteth a man to forget that he is a blockhead.
The voice of the people is odd,/It is, and it is not, the voice of God. -Pope
The wheels of justice grind slow but fine.
The whole UNIX operating system was ripped off electronically.
The whole UNIX operating system whose documentation fits in a chinese computer terminal!
The wise shepherdess never trusts her flock to a smiling wolf.
The world cannot be understood from a single point of view.  -Eleanor Roosevelt
The world ended yesterday-this is only a dream!
The world ended yesterday-why are you still here?
The world is a conspiracy of the unthinking against the unwitting.
The world is all that is the case. -Wittgenstein
The world is coming to an end!  Repent and return those library books!
Them that dishes it out need not fall over every time someone blows hard.
There are more old drunkards than old doctors.
There are more things in heaven and earth, Horatio,/Than are dreamt of in your philosophy.
There are more ways of killing a cat than choking her with cream.
There are no color bars in Cuba.
There are only three kinds of proof:  induction, exhaustion, and intimidation.
There are two kinds of people in the world -- those who are, and those who aren't.
There is a 10% penalty for getting yourself killed.
There is a fly on your nose.
There is a person with a shovel behind you ready to crack open your skull!
There is a tide in the affairs of men/Which, taken at the flood, leads on to fortune. - Julius Caesar IV.iii.217
There is a world in which this sentence ends with a different word.
There is no bottom to worse.
There is no fear in love; but perfect love casteth out fear.
There is no gift like the present.
There is no governor anywhere; you are absolutely free.
There is no language in our lungs.
There is no present like the TIMES.
There is no present like time.
There is no sin except stupidity. - Oscar Wilde
There is no time like the pleasant.
There is nothing more permanent than a temporary building.
There is nothing more permanent than a temporary tax.
There must be a minimum of two responsible people per subdomain. - Mark Horton
There used to be men and women.  Now there are men and persons.
There was a phone call for you.
There'll always be an England - if not it would be necessary to invent one.
There's a broken light for every heart on Broadway.
There's a difference between ethical people and nice people.  You can't trust nice people.
There's a divinity that shapes our ends,/Rough-hew them how we will.
There's a sucker reborn every minute.
There's always one more bug.
There's got to be more to life than compile-and-go.
There's insanity in my family; starting with me, tonight.
There's no place like home.
There's no room in the drug world for amateurs.
There's something in this universe that I don't understand. -T. Duff
These calculations even schoolchildren can master in three-four days. -Maimonides
These numbers DO NOT appear to belong to anybody: 315 323 372 375 602 765 772 903 914
These widows, sir, are the most perverse creatures in the world. - Joseph Addison.
They couldn't hit an elephant at this dist... -- last words of Gen. John Sedgewick
They laughed at Copernicus; they laughed at Galileo; they laughed at Bozo the Clown.
They live happiest who have forgiven most.
They were easy to tell apart: the good Kirk was played by William Shatner and the evil one by Gavin McLeod.
They were easy to tell apart: the good Kirk wore cottons and wools and the evil Kirk wore nylons and polyesters.
They're only trying to make me LOOK paranoid!
Things always look darkest just before they go totally black.  -Col. Hannibal Smith
Things are more like they are now then they have ever been before. -Dwight D Eisenhower
Things are more like they used to be than they are new.
Things are more like they used to be than they are now.
Things are only as bad as they are and can only get worse if they do!
Things that go without saying go even better if they are said.  -Talleyrand
Things will be bright in P.M.  A cop will shine a light in your face.
Think of your family tonight.  Try to crawl home after the computer crashes.
This *means* something.  -R. Neary
This algorithm is prevented in the style of Dijkstra's guarded cowhands.
This fortune intentionally not included.
This fortune is inoperative.  Please try another.
This fortune is self-explanatory, once you understand it.
This fortune left blank intentionally.
This fortune was not meant for you.
This is Emmanuel. I got him from Emmanuel Training School. He's Emmanuel like.
This is a full standard Kernighan & Ritchie C compiler.
This machine does not exist!  Boy am I confused!
This refutation can only be refuted by a proof. - van den Herik 1985
This space available.  Call 686-7600 for details.
This statement is a lie.
This system hasn't crashed in ages.
This terminal is not for your use, please log off!
This time for sure!
This will be a memorable month -- no matter how hard you try to forget it.
This will hurt me more than it hurts you.
Thos who do not remember the past are condemned to repeat it.
Those who can't write, write manuals.
Those who can, do; those who can't, simulate.
Those who can, do; those who can't, write.
Those who can, do; those who can't, write.  Those who can't write work for the Bell Labs Record.
Those who do not remember the past are condemned to repeat it.
Those who in quarrels interpose must often wipe a bloody nose.
Those who talk don't know. Those who don't talk, know.
Thrashing is just before they go totally black.  -Col. Hannibal Smith
Thrashing is just virtual crashing.
Three shoes do not a hat make.
Thunder is impressive, but it is lightning that does the work. -Mark Twain
Time ends here, please go back the way you came.
Time flies like an arrow but fruit flies like a banana.
Time is nature's way of making more anarchy.
Time is nature's way of making sure that everything doesn't happen at once.
Time is three eyes and eight elbows.
Timesharing just doesn't work. -K. Thompson, 1982.
To be clear is professional; not to be clear is unprofessional. -- Sir Ernest Gowers
To be is to be related.
To be or not to be, those are the parameters.
To criticize the incompetent is easy; it is more difficult to criticize the competent.
To cross again is not to cross.
To err is human, to forgive is not libary [sic] policy. quoted by Herb Caen
To err is human, to really foul things up requires a computer!
To err is human; that's why I'm comfortable around Gods.
To express e, remember to memorize a sentence to simplify this.
To iterate is human, to recurse, divine.
To laugh at men of sense is the privilege of fools.
To live without clocks is to live forever. -RLS
To make an enemy, do someone a favor.
To make an omelette, you have to paint it.
To play billiards well is a sign of an ill-spent youth.
To possess another language is to possess another soul.  -Charles V
Today is a good day to bribe a high-ranking public official.
Today is the first day of the rest of your miserable life.
Today is yesterday's tomorrow.
Today the pits, tomorrow the wrinkles -- Sunsweet marches on.
Together we must rise to higher and higher platitudes.  -Richard Daley
Together we will rule the galaxy, father and son.  Luke...it is your destiny.
Tonight's the night:  Sleep in a eucalyptus tree.
Too Much.
Too much of a good thing is WONDERFUL. -Mae West
Torque is cheap.
Toto, I've a feeling we're not in Kansas any more.
Toto, I've a feeling we're not in any immediate danger of having just committed suicide!
Toutes choses sont dites deja, mais comme personne n'ecoute, il faut toujours recommencer.
Transformation is invested with the mysterious and the painful.
Travel important today;  Internal Revenue men arrive tomorrow.
Tres sabios hubo en el mundo, Adan, Solomom y Raymundo.
Troglodytism does not necessarily imply a low cultural level.
Troubles are like babies; they only grow by nursing.
Trust Me.
Trust him, but still keep your eyes open.
Truth is only skin deep.
Truth is the ultimate weapon; fortunately no one has perfected it yet. - Ken Ellis
Truth will be out this morning.  (Which may really mess things up.)
Try `stty 0' -- it works much better.
Try a new system or a different approach.
Try again
Try the Moo Shu Pork.  It is especially good today.
Try to divide your time evenly to keep others happy.
Tu aideras a rappeler ta quantite a beaucoup de docteurs amis.
Turning the other cheek merely ensures two bruised cheeks.
Two fish in the sky are worth more than a bird in the sea.
Two heads are better than a bath and a half.
Two wrongs don't make a right.  Two Wrights make airplanes.
U.S. out of OAKLAND!
UFO's are for real: the Air Force doesn't exist.
UNIX acts as an equalizer of the hardware playing field.  J. Scanlon
Unbidden guests/Are often welcomest when they are gone.
Uneasy lies the head that wears a crown.
Unemployment is not a disease; so it has no `cure.'
Unix is the only significant operating system whose documentation fits in a student's briefcase. -John Lions (Fixed in 4.1BSD)
Unix never says `please.'  -- Rob Pike
Unix soit qui mal y pense.
Unix: from now on, consider it dead. -Mike O'Dell
Unknown Jerome's -- Dorothy's desk -- $.25 while they last!!
Using 4.2 in this hospital is a great idea.
Usura contra naturum est.
Usus, Quen penes arbitrium est, et jus, et norma loquendi.  -Horace
VAX/VMS -- Software for the 60's.
VAX/VMS is like a nightmare about RSX.
Veni, vidi, maeni, mo, cacha tigrem baedas to, iffi hollers, ledem go, veni, vidi, maeni, mo.
Versatility is one of your outstanding traits.
Vests are to suits as seat-belts are to cars.
Vigilia pretium libertatis.
Violence is the last refuge of the incompetent.  -Salvador Hardin
Viva Nuestra Señora Guadalupe y jueron gubernacion mala.  -Father Hidalgo
Vivaldi did not write 600 concerti grossi.  He wrote the same one 600 times. -Stravinski
Vocatus atque non vocatus deus aderit.
Vote anarchist.
Vox populi, vox Dei. -Alcuin
WAR IS PEACE.  INFORMATION IS SLAVERY.  OUR FUTURE IS IN OUR HANDS.
Warning: I brake for no apparent reason.
Warning: perch lorethylene may harm plastic
Warning: this fortune may change your life.
Wars do not log out!
Waste not, get your budget cut next year.
Wasting time is an important part of living.
Watch out for quantum ducks:  Quark!  Quark!
We aim to please, but our aim is bad.
We are experiencing network trouble -- do not adjust your illegal descrambler.
We are faced with an insurmountable opportunity.  -W. Kelley
We are not in any immediate danger of having solutions that exceed the needs.
We can lick gravity, but sometimes the paperwork is overwhelming. -von Braun
We continue to overlook the fact that work has become a leisure activity.
We did it for nothing, we did it in an hour, and the whole thing worked.
We don't care, we don't have to-- we used to be the phone company.
We don't know half of what we know.
We don't need a standard; Kernighan & Ritchie completely defines the language.
We haul ours to kick theirs.
We have a really challenging assignment for you.
We have lost our little Hanner in a very painful manner. - Max Adeler.
We have met the enemy, and he is us.  -Walt Kelly
We have the finest politicians money can buy.
We learn from history that we do not learn anything from history.
We must all hang together, or assuredly we shall all hang separately. -Franklin
We never stand still longer than it takes to have an argument.
We offer every assistance short of actual help.
We place no reliance/on Virgin or pigeon;/Our method is science,/Our aim is religion.  -Aleister Crowley
We regard matrimony as a sort of friendship recognized by the police.
We retard what we cannot repel, we palliate what we cannot cure. -Johnson
We seem to be made to suffer.  It's our lot in life.
We shall never get people whose time is money to take much interest in atoms. -S. Butler
We shall never understand one another until we reduce the language to seven words. -K. Gibran
We should acknowledge the 10000-year sheep heritage of mankind. - Judge Clyde Burch.
We try harder, they do better.
We use it but we do not love it. -Goethe
We want no foreign rulers - fight the metric system.
We won't need reservations.
We would like to apologize for the following announcement:
We'll burn that bridge when we come to it...
We're going up there this weekend and I'm gonna get so roaring, stinkin', no-good drunk I won't be able to see. - mechanic in "The Blob".
We're scientists.  We have to do things we hate -- that even sicken us.
We're too close to System Test.
We've lost 4 crays to the open environment.
Welcome to the working week.
Well, the handwriting is on the Titanic, why not go gentle into that good night?
Well, the handwriting is on the floor. -Joe E. Lewis
Well, we had Chinese food again for lunch.
What I like about scientists is that they are a team, so that one need not know their names. -J Wilmot
What I tell you three times is true.  -The Hunting of the Snark.
What did you throw that book I wanted to be read to out of about Down Under out for?
What distinguishes good software from poor software is customer satisfaction. -Bob Yacobellis
What do you call a half-dozen Indians with Asian flu?  Six sick Sikhs (sic).
What do you mean the 8080 & the 6502 are incompatible?  They're both NMOS!
What does it mean if there is no fortune for you?
What garlic is to salad, insanity is to art.
What good are the games if you ain't got the power?
What good is someone who can walk on water if you can't follow in his footsteps?
What have you done for Vic lately?
What if I go to New York and can't trust a menu?
What is mind? No matter.  What is matter? Never mind.  -Thomas Hewitt Key
What is now proved was once only imagined. -William Blake
What the hell, go ahead and put all your eggs in one basket.
What this country needs is a good five-cent nickel.
What use is magic if it can't save a unicorn?  -Peter S. Beagle
What's in a name? That which we call a rose/By any other name would smell as sweet.
What's it all about?  We're all tools.  Life's just a crock.
What's the point to combing your hair when it's grey and thinning?
When all else fails, read the instructions.
When all is said and done, a lot more is said than done.
When an Okie moves to California, he raises the IQ of both states.  -Will Rogers
When an owl comes to a mouse picnic, it's not there for the sack races.
When better machines are built, greg will break them.
When better machines are built, jks will break them, and td will bitch about it.
When bigger machines are built, scj will saturate them.
When does later become never?
When everyone's out to get you, paranoia is just good thinking.
When faced with the obvious -- look elsewhere.
When faced with two evils, one asks why only two?
When four sit to conspire, three are government agents, and the other a fool.
When in doubt, lead trump.
When in trouble or in doubt, run in circles; scream and shout.
When marriage is outlawed, only outlaws will have inlaws.
When more and more people are out of work unemployment will result. -Calvin Coolidge.
When the Lord gets ready, you got to move.
When the going gets tough, the tough go shopping.
When the going gets tough, the tough hold meetings.
When the map and the terrain disagree, trust the terrain. -Swiss army aphorism
When the wind is great, bow before it; when the wind is heavy, yield to it.
When time permits, your personal life will be exciting.
When traveling with a herd of elephants, don't be first to lie down and rest.
When you are over the hill, you pick up speed.
When you need a sledgehammer, the finest scalpel just won't do.
When you're damned if you do and damned if you don't, then DO!
Whenever I see his fingernails, I thank God I don't have to look at his feet.
Whenever I'm caught between two evils, I take the one I haven't tried before. -Mae West
Whenever the Queen comes to New Zealand the Maori people suffer a disaster.
Where do you think you are, Civilization?
Whereof one cannot speak, thereof one must be silent.  -Wittgenstein
While I see many hoof-marks going in, I see none coming out. - Aesop.
Who can worry about a super-hero who vanishes when you change channels?
Who is W. O. Baker, and why is he saying those terrible things about me?
Who is the slayer, who the slain?  Speak...  -Sophocles, Oedipus Rex
Who knows if there are any answers? -Edmund G. Brown, Jr.
Who needs companionship when you can sit alone in your room and drink?
Who ordered that? -I.I. Rabi on the discovery of the muon
Who's afraid of Louisa May Alcott?
Whom the gods must destroy they first must drive insane.
Why be a second rate Ravel when you can be a first rate Gershwin?
Why do they have this marked "Danger, do not touch"?
Why do we have two eyes?  To watch 3D movies with.
Why don't we store the blank punch cards on disk, and get rid of all those boxes.
Why is it called a stream I/O system when the data flows both ways?
Why polish the corners off a sphere in a roomful of cubes?
Why worry about tomorrow, when today is so far off?
Will nobody help the widow's son?
With clothes the new are best, with friends the old are best.
With redeeming social value like yours, no wonder you're obscene.
With the wind in the east I can tell an eagle from a hammer.
With/Without -- and who denies it's what the fighting's all about?
Without alkaloids, life itself would be impossible.
Wombat omnia vincet.
Wombs not bombs
Women seldom show dimples to guys who have pimples.
Wonderful girl!  Either I'm going to kill her or I'm beginning to like her.
Words are the voice of the heart.
Words must be weighed, not counted.
Work expands to fill the time available for its completion. -C.N. Parkinson
Worth seeing? Yes, but not worth going to see.
Writing free verse is like playing tennis with the net down.
Y drag goch yr y gchwyn!
Yamata wasami shuza.
Yea, from the table of my memory/I'll wipe away all trivial fond records.
Yes, the red switch.
Yesterday's sensation is today's calibration and tomorrow's background. -Valentine Telegdi
Yogsothoth Neblod Zin.
You always think you know what you're doing, but you're too slick for your own good.
You are going to have a new love affair.
You are in a maze of twisty little passages, all alike.
You are original and creative.
You attempt things that you do not even plan because of your extreme stupidity.
You auto buy now.
You can create your own opportunities this week.  Blackmail a senior executive.
You can get HELP any time you are using TEACH by returning to the command state and typing "S 160".
You can lead a horticulture but you cannot make her think. - Dorothy Parker
You can observe a lot just by watching. -Yogi Berra
You can tell a man by the company that keeps him.
You can't beat the bugs.
You can't build a bomb at 300 baud.
You can't capitalize your cake and expense it too.
You can't comb a hairy ball smooth.
You can't fall off the floor.
You can't forward backward. - Dave Nowitz
You can't go home again, unless you set $HOME
You can't have everything -- where would you put it?
You can't miss it.
You can't teach a dead dog new tricks.
You can't win, you can't break even, and you can't get out of the game.
You can't win.  But there are alternatives to fighting.
You cannot buy beer; you can only rent it.
You cannot count friends that are all packed up in barrels.
You cannot cross a chasm in two steps.
You cannot kill time without injuring eternity.
You cook it, you sell it.
You dialed 5483
You display the wonderful traits of charm and courtesy.
You don't have to play tennis any more, or talk to anyone who does.
You don't really want to know what the future holds for you.
You had mail.
You have an ambitious nature and may make a name for yourself.
You have been selected for a secret mission.
You have been transfixed by the gaze of the Edlund.--More--
You have bills.
You have had a long-term stimulation relative to business.
You have made an excellent hit on the UNIX.--More--
You have mail.
You have personal talents that are attractive to others.  Be sure to use them.
You have plate mail.
You have slowmail.
You have snails.
You have splint mail.
You have taken yourself too seriously.
You have the capacity to learn from mistakes.  You'll learn a lot today.
You know, Louis, I think this is the beginning of a beautiful friendship.
You know, you never know.
You look strong enough to pull the ears off a Gundark!
You make the megabucks, I make the nanobucks...it's YOUR problem.
You may be recognized soon.  Hide.
You may enjoy the infamous PEOPLExpress snack pack for one dollar.
You may have a friend at the Chase Manhattan but at our bank you have meshpocheh!
You might have mail.
You need not worry about your future - it's going to be rotten.
You never know what you don't know, you know?
You now have Asian Flu.
You press the button, and we'll do the rest.
You remind me of a TV show, but that's all right: I watch it anyway.
You scream and you leap.
You seek to shield those you love and you like the role of the provider.
You should go home.
You tend to be shy when undressing outdoors.
You want it bad, you'll get it bad.
You weren't here so we did it anyway.
You will attend a party where strange customs prevail.
You will be Told about it Tomorrow.  Go Home and Prepare Thyself.
You will be a winner today.  Pick a fight with a four-year-old.
You will be surprised by a loud noise.
You will feel hungry again in another hour.
You will get a better gorilla effect if you use as big a piece of paper as possible.
You will make a small sum by investing in a business project.
You will make a small sum disappear by investing in a business project.
You will make many changes before settling satisfactorily.
You will never find a more wretched hive of scum and villainy.
You will step on the night soil of many countries.
You win some, you lose some, and some go into extra innings.
You worry too much about your job.  Stop it.  You are not paid enough to worry.
You'll just have to sleep faster tonight.
You're being followed.  Cut out the hanky-panky for a few days.
You're so bossy you ought to be milked before you come home at night.
You're so ugly you couldn't even get a better mouse.
You're so ugly you couldn't even get a date with an automated bank teller.
You've always got the option of having just committed suicide!
You've been leading a dog's life.  Stay off the furniture.
Your First Amendment ends where the next person's Bill of Rights begins. P. Michael Guba
Your best dreams may not come true; but then neither will your worst dreams.
Your computer account is overdrawn.  Please reauthorize.
Your editor doesn't always know best.
Your emotional nature is strong and sensitive
Your empty file directory has been deleted.
Your intuition is excellent but another viewpoint could be helpful.
Your login has been changed.
Your love life will be happy and harmonious.
Your mind understands what you have been taught; your heart, what is true.
Your opponent wouldn't fight if he didn't think he had a chance.
Your password is pitifully obvious.
Your present plans are going to succeed.
Your supervisor is thinking about you.
Your theory is crazy, but not crazy enough to be true.
Zero is greater than minus zero, but don't ask by how much. -6600 ref. manual
`By the way, microcode is no big deal.  You can emulate it in random logic.'
`Compared to academic politics, political politics is a nice, clean game.' -S. I. Hayakawa, SF Examiner 4/23/84
`Drawing on my fine command of language, I said nothing.'
`He was so narrow minded he could see through a keyhole with both eyes...'
`I saw it with my own eyes' means you wanted to see it.
`Otto' spelled inside out is `toot.'
`Qvid me anxivs svm?'
`She read her boyfriend's mind, and they're no longer going together,' Mrs. Resch added.
`The time (6:39 pm) has come,' the Walrus said, `to talk of many things...'
`The time has come,' the Walrus said, `to talk of many things...'
`We don't care.  We don't have to.  We're the Phone Company.'
``I'm a hugger, I'm a tactile politician,'' Turner said.
`is false when preceded by its quotation' is false when preceded by its quotation.
`is not a sentence' is not a sentence.
awk: Usage: awk [-f source | 'cmds'] [files]; record number 3.55646e-311
awk: illegal statement 206620
bad input char: .Ppm{=P!*@)Z9oFPp|*?)Z9pv9i%Su$^J)48%K_e239GM#ffoq!!!"!Mp#V6N\H8uEgdXbP\[7j1&PJz!X76!4BA}5!!!!!"syui!!!"!Mp#V6P\Scb?p8`;!4lf&
beware of component 3730
cc: warning: -g disables -O
chess tonight
dis: invalid general addressing mode (e8); notify disassembler implementor
f u cn rd ths u cn gt a gd jb n cmptr pgmng.
f u cn rd ths u cn gt a gd jb n tk wr
f u cn rd ths, itn tyg h myxbl cd.
fortune: Command not found.
fortune: not found
ftp> Globbing off.
ftp> Globbing on.
grep: RE error 41: No remembered search string.
gt: warning -- bad idea to override alpha computation on matted-to-black target
He who lives by the nit dies by the pick.
invalid control line !!!
itiprobe says hi
jim is a nice editor except that it runs on the Blit. -- W. Joy
no shell.
non-positive output count: .!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
not not not Algol
panic: trap
pic: 5 X 58008 picture shrunk to 0.000603365 X 7
pm monday am
reading symbols...done
size:  a.out:  bad magic
startup: system error -- directory deleted
struct sleaziness { char *pleasure; int alchemically; };
too much.
ucode rev x62
unknown troff command: We will interpret typing statements A@imp#M:@gr(s)#
unseal: invalid length
usend: /usr/asp/spool filesystem is exhausted
uucp failed completely (11)
uucp failed partially: 0 file(s) sent; 1 error(s)
uuxqt cmd (rnews ) status (ucsfcgl!uucp 256)
values of β will give rise to dom!
warning: vector size unknown: p[i][j] means *(*(p+i)+j)
There's no backspace in real life.  - P.J.Weinberger
When a musk ox goes faster than an amble, he has formed an intention.
Verb is a noun.
Verb is not a verb.
Verb is not a verb, unless it's verbed.
Version 8 Unix style Ritchie streams.
Space shuttle experience is more common than C++
CA002 - [CAL] ASSEMBLY TIME: 0.000000 CPU SECONDS
Within her left armpit only the fish called raawaru are there.
In her right armpit, snapper only are the fish of that place.
In days of yore, the crab and the crayfish lived in the forest.
"C" is as portable as Stonehedge!!
Any mail routed through "emacs" will probably fail without benefit of a bounce-back.
Although the moon is only 1/100 the size of the earth, it is much further away.
Never walk across a river that has an average depth of four feet.
chdir: ?I/O error: `I/O error'
   ON SATURDAY SUPERMAN WILL BE UNAVAILABLE FOR A MAJOR HARDWARE RECONFIGURATION
03:23:33       0.0017   USER        CLOSE CALLS -                              8
It's clear that buzzwording is a factor.
Dallas stands for culture with a 'K'.
Huge directory ./src/port --call administrator
CC119 - Dead code generated for vacuous expr.
Resent-Comment: It's not OUR mailer.  Maybe it's yours.
*        Method    As described above, see details below.
Take your hands off me.
You don't have to give me all the gory details about how you got hepatitis.
Who's the big cheese around here?
What a surprise to find you here alone!
Ouch! That feels good!
How exciting to see you in traction again!
Either I've been missing something, or nothing has been going on.
You crossed my mind, but you didn't stay there.
Should you die, I'd go mad so I could talk to you all the time.
If you'll take me where I want to go, I'll take you where you think we are.
If snow is wet, what is light?
If your intentions are really good, I'll never understand them.
Whatever happens, happens because it must.
Get out, and take your mucus with you.
I wanna lick the syrup off your hotcakes.
I've got you under my skin; moreover, you've invaded my lymph.
All I do is wait for your clumsy hands to make mincemeat of my apparel.
More than just a book -- it's a major piece of torture.
Great men are not always idiots.
Unrequited love's a bore. -- Billie Holiday
I wish people wouldn't say "Excuse me" when I WANT them to step on my feet.
Life is a stage attacked by an idiot.
No one wants to get into his grave still feeling frisky. -- Quentin Crisp
(warning) data origin prohibits saving reloc bits
## wc is a Berkeley-ism, I think.
Boost, don't knock
NEW fsname = x, NEW volname = 49a126 -- DEL if wrong!!
New Jersey has more people per capita than any other state.- Alan Karcher, D, NJ
Significantly improved programming is only a reply card away.
An AI journal without hype? That's like a hot air balloon without the hot air.
	UNIX is a trademark of AT&T in the U.S.A. and other countries.
554 Who are you?
Anything is possible, and it usually does.  - John Lions
When you become a streetwalker, you don't write home very much.
Few forgive without a fuss.
Your contraption is better than mine.
Very well, I'll slick your hair down myself.
If Lucifer confesses, we'll let the rest of you go.
pass 2 error:(file ) more than 100 args?
in read: Error 0
There's a time and a place for spontaneity.
I am a little more weird today than normal.  - Andrew Hume
You will be fortunate in everything you put your hands to.
If nothing is pressing, putter around at this or that.
Whatever arrangements you make are apt to be final.
If you have a procedure with 10 parameters, you probably missed some.
There's going to be no serious problem after this.  - Ken Thompson
If you can stick your finger in it, you can hang from it.  -Andrew Hume
Life's a bitch and then your feet wear down.  - Dennis Ritchie
Thank you for using AT&T!
Small earthquake in Chile.  Not many dead.
Nepal premier won't resign.
Surprises unlikely in Indiana.
University of Rochester decides to keep name.
In the long run, we are all dead.  -Keynes
Debate goes on over the nature of reality.
Reach out and Boyer-Moore egrep someone.
The solution is to increase the size of the manuals. - Mark V. Shaney
`C' is for `core dumped.'
redefinition:  GLOBL	153352(gok(-118))[A7*16],gok(-116)/-937488177[R0*0]
The electron: May it never be of use to anybody. - toast at the Cavendish Labs.
Delivered-Automatically-By: the Magical Vacatioin Program
Wretches, utter wretches, keep your hands from beans!
Abstain wholly from laurel leaves.
init: /dev/console: getty failing, sleeping
25% of all books from Bell Labs are written by Narain Gehani.
Try to clear up differences with associates
 * W * :test$cstatic$chatypedef$st$int$$cnt$$unsigned$$unsigned$$char$$fla$char$$fil$$FILEo: 1: CC019 - Old-fashioned Initialization. Use '=' Instead.
The atom of hydrogen contains about a thousand electrons. - J.J. Thomson, 1903
The unique power of UNIX (UPOU) is that vi includes awk.
Yes, I want a drink.  Alcoholic, of course; after the heavy sessions regarding quantum mechanics.
 * W * :../os/main.c: 64: CC042 - Instruction Will Cause Infinite Loop
But issues remain in the AT&T Information Systems unit.
The major problem is with sendmail.  -Mark Horton
Michigan House Fails to Override Veto of Medicaid Abortion Ban.
The -v option increases user-friendliness.
Every good joke has a short punch line.
What is the origin of the Grand Canyon?  A Scotsman lost a nickel.
Sentence without verb.
mh/toy/forbes deferred for sequence
"":5:operands of ++ have incompatible types
How do you explain that you changed your mind when you changed your hat? -Wm. Rogers
The Devil Still Exists, Says Pope, Contradicting Polls
When andrew asks you to type pwd for him, don't do it.
Variable syntax.
WARNING: You may see display garbage as a result of this action.
WYSIWYG processing and a "vi"-like user interface - the best of both worlds! :-)
strip:  arno:  bad magic
There appears to be a paper jam, dammit p&P6.
As Maine goes, so goes Vermont. -Alf Landon
If you enter a village where everyone is lame, eventually you will start to limp.
That's the way I got promoted, by eating everything.  -pjw
charge.c: 163: CC001 - Internal Compiler Error  69 . Debug:  (412127)request for s1 but pseudo already in s3
In 1974 it was hard to find anyone who voted for Richard Nixon in 1972.
Charlie don't hack.
A strange event will change your idea of a good time.
I just resent the newgroup messages. -Rick Adams
I'm not easily impressed on Mondays.  -Bruce Ellis
Mirrors should reflect a little before throwing back images. -Jean Cocteau
What he's asking you to do is only mildly disgusting -- try it, you might like it.
The 1980's have quite appropriately been called the age of nail extension products.
Wonder woman will be down Saturday, November 15th for hardware maintenance.
Arbitrary makes free.
Don't puting nathing in the line. Today is washing poison machine.
Pittsburgh has become a kind of knowledge aircraft carrier, its "top-guns" scattered regularly around the planet.
The only works of art America has given are her plumbing and her bridges. -Duchamp
Per dollar, the cray is cheaper to maintain than the comets.  -pjw
The entire LC comp center will be shut down from 12/12 to 12/15 for annual maintenance on our Uninterruptable Power Supply.
Hit the water!  Hit the water!
Try psychoacoustic imagery risk free!
Hit me with your mid-point, she said meanly.
The secretaries don't understand me.  -Rob Pike
I have a brain.  -Kerry Harrigan
System won't be available tomorrow 12/04 from 18:00 to 20:00 to install new cross compiler.
Some logins deserve a message.  Some don't.  Yours does.  Here's mine.
God has spoken to me through chocolate fudge cake.
Some day, when the universe has its heat death, they will look back and say `There are 12 Cray-2s'.  -pjw
When the music stops, the house of cards collapses and the emperor is found to be wearing no clothes.
pwedit: error in input file in item 2305843009213693953 at field 1
Decreased cabin volume was insufficient to support human life.
When ideas fail, words come in very handy.  -Goethe
elongated pentagonal gyrocupolarotunda (J41): 21/36 ambiguous hinges
Total performance commercial carpet in convenient 18" squares
A procedure can never use its own name in any way except to refer to itself.
I'm a GEI kind of guy.  - J Bentley
eqn: illegal size of ignored near line 386, file part.5
Music is the can opener of the soul.  -Henry Miller
Robert Elz is the Mark Horton of the south.  - P. Dick-Lauder
   2 -rw-r--r--  1 mp           1239 Jan 17 09:40 hite upper middle class IS AN INVALID DESTINATION.
Rest frequently while shoveling snow.
Never put snow on a frostbitten part.
Eat more fish and less red meat.
Drive away from a tornado at a right angle.
Start off the day with a nourishing meal.
Keep stairways clear of clutter.
Discard medicine more than two years old.
Stopping smoking slows emphysema's progress.
Reduce speed in wet or foggy weather.
Lengthen interval when the road is wet.
Before physical activity warm up gradually.
Don't eat a large meal before driving.
Get help when lifting heavy objects.
Don't use gasoline for cleaning.
Put a smoke detector in your vacation cottage.
Always read the labels on pesticides.
To avoid falls watch where you step.
To overcome stress do things that relax you.
Popcorn is a good fiber food.
Gray-tinted sunglasses reduce glare the most.
Cut down on fatty, high-calorie foods.
Use a salt substitute if blood pressure's high.
Replace worn electrical cord without delay.
Good passing rule: when in doubt, don't.
Bicycle with the traffic flow.
For relief submerge a bum in cold water.
Always check fire exits in hotels and motels.
Draw up a family fire-escape plan.
Go with your kids when you go trick or treating.
Take your car in for a tune-up.
Carry a medical information card.
Keep flammables away from space heaters.
Buckle up even on short auto trips.
Drive with the traffic not against the clock.
Send your party guests home sober.
Let me put it to you this way: computers are my business.  - A.G. Hume
Business is where the money is. - John Scully (CEO of Apple)
Anything with the word 'generation' in it has to be wrong. - T.A. Cargill
Today's technological mastery is tomorrow's obsolescence.
23582.0u 2166.7s 21404r 	 mk
A mathematician is a machine for turning coffee into theorems.  -Paul Erdös
SCAPEGOAT=rob
sh: /dev/null restricted
Do not smoke near an open drawer. - Bell Labs safety manual.
Like Nero, the government fiddled while Rome burned--only it wasn't Rome. -- Jim Olson
FYI: POWER DIP OCCURED YESTERDAY AT 21:55...IS YOUR 3B2 OK???
Don't ignore where the writer is in the draft.
Hunting & Fishing licenses are free to the blind, handicapped or mentally retarded.
mail: new message arrived
Bad termcap entry
Reverting to old tty driver...
Thank you for using AT&T.
The preferred steel for rodent protection is Type 304 stainless with a thickness of 3 mils.
I'm TRYING to be a back end!  - A Hume
Stay clear of falling objects.
5/26: /unix2 out of pace please clean up!!!!!
Redundant hardware is not cost-effective when compared to administration-mediation solutions.
Warning:  .lastlogin was altered since last login
If it's Weinberger, I'm going with Ditzel. - rob
If you have any questions, call Ralph Knag at MH x5291
Possession is nine-tenths of the privileged computer access code of ethics.
Ignorance of the privileged computer access code of ethics is no excuse.
It's not easy being Joan. -- rob
Omit needless words that cause verbosity.
rx: call to gauss failed: who_cares
chown to owner: Not owner
There are only 26 calls and most of them are trivial.
In this country, everything loose rolls to the west coast. -T. Vanderslice, Apollo
We have people doing a lot of fun stuff.  That doesn't mean you don't wear suits. -R. Pampel, Apollo
ROOT MODIFIED
I don't have any courses for which I haven't written books. -Andy Tanenbaum
Stop.
(a0719) u wPM-US-Add a0712-a07rethan80mph.Thearrestingpatrolmanaskedhimifwantedtochecktheinstrumentusedtorecordhishighspeed. 07-21 0794
550 ians... User unknown: Not a typewriter
DELTA backup is running, system response will be slightly degraded.
tar: slg/duckstuff/desktop/UNIXpractice.drw/shortcuts.fdr/spaces?slashes.fdr/.@questions and comments.doc: file name too long
The world should be full of Brian Kernighans and technical people.  -J Macor
If you keep an open mind, people will put a lot of garbage in it.
A monoid is an associative monad; its underlying magma is a semigroup.
162 is unimplemented
Norm does not protect against overflow. - cos(9.3)
Content-Length: 0
In our system, /usr/include/sys is a hazard.  -mvs
Awk is certainly not perfect. - The Awk Book
Areas of communication may be very busy at present.
Gratuitously incomplete sentence.
xyv: protocol fault for some string
You are the sponsor for the account andrew (Andrew Hume).
I am not worried about the real world. -Pamela Zave
To 8 AM EDT /79: high 63 low 5, prob. precip. to 8 PM 0% to 8 AM 2147477332%
Digital plans to offer a better solution, not a better product. - R. Glorioso, DEC
I've got it! It's a triple helix! L. Pauling 1954.
Incest more common than thought in United States
RFC 822 delenda est.
I'm not writing any more tapes, ever.  -A. Hume.
Subject: Please ignore extra headers
I wouldn't take any advice, if I were you.
The blue drinks are $5.75, the pink $8.00.
You are unlucky enough to bump into all my rough edges.  -A. Hume
When you're getting fired at from both sides, you're in the middle of something.
A vertical conference is a center-wide conference. - Steve Bellovin
It is Unix.  It is possible to overcome any number of these bogus features. -pjw
"term/select.c", line 116: compiler error: bad bigsize: 010
Sorry, I don't know how to deal with your 'dumb' terminal.
I am become death, the shatterer of worlds. -Baghavad Gita (quoted by Oppenheimer)
The product classroom is marked pass-fail.
An X server itself is not a big piece of software, only a few 100K.
So, the next time something doesn't work, just push 'til it clicks. -Ag Primatic
I have a different view of the world.  -Andrew Hume. Show&Tell '87
For 40 days and 40 nights, you [Arthur Fadden] held the destiny of Australia in the hollow of your head. -Arthur Calwell
The best weapon against breast cancer is early detention.
Licorice is the liver of candy.  -Michael O'Donoghue
Al Schumann, that devil-may-care Intern from FSD is leaving Tom Houghton's Security Group.
Confession is good for the soul only in the sense that a tweed coat is good for dandruff.  -Eisenhower
Is there no room for competition in the standards industry?  -R. Hardin
Now is not the time to be falling out of windows.  -R Mclellan
A universal thought dispenses with communication.
ISDN is real and implementable.
When a man celebrates his God, he changes his sex.
The rays of the Sun are penholders which night gorges with ink. -- Reb Adal
Warning: system out of share structures, using "root".
Wed Dec 30 21:27:30 1987 EDT
5. Il riversamento = dump in inglese.
E tutta colpa di Ken!
Ken is an allem schuld!
C'est la faute de Ken!
Het is de schuld van Ken.
I've got lots of bad examples.  -td
(void)vacuous(node);
I'd rather have :rofix than const.  -DM Ritchie
To dissimulate is to feign not to have what one has. - J Baudrillard
unlinking v/v1971/272; already have /n/bowell/usr/games
FAILING HW:  DEC
Life is what the least of us make most of us feel the least of us make the most of. -Quine
Received: from Messages.6.0.CUILIB.3.41.SNAP.NOT.LINKED.holmes.andrew.cmu.edu.rt.r3 via MS.4.0.holmes.andrew.cmu.edu.rt_r3
The better your 4-wheel drive, the further out you get stuck.
With Basic you just use a GOTO, with Pascal you have to indent 99% of the program halfway across the page! -Ted M. Young (A Basic programmer for 12 years)
You know your apartment's small if you can't tell its position and speed simultaneously.
... Forking an allegro process requires only seconds... -V. Kelly
Rainbows are just to look at, not to really understand.
Some day we may discover how to make magnets that can point in any direction.
One hundred humidities equal one rain.
Genetics explain why you look like your father and if you don't why you should.
Vacuums are nothings. We only mention them to let them know we know they're there.
Thunder is a rich source of loudness.
But an autopsy on the woman's headless body failed to reveal why she died.
For ease of arithmetic we call 256 the largest index even though it is really 255, except at 255 itself. -- from a manual
Only the future is certain; the past is always changing. -Polish proverb
A victory is the greatest tragedy in the world, except a defeat. -Wellington
A victory is the greatest tragedy in the world, except SunWindows. -Wellington
If you don't have a sense of humor, it's just not funny.  -Wavy Gravy
Noalias must go.  This is non-negotiable.  -Dennis Ritchie
 We are currently experiencing all printing problems
    Due	to illness, the	/tbl design review is postponed	until further notice.
Due to technical problems, the BEST movie will be shown tommorrow.
We say space is 3 dimensional because prison walls are 2 dimensional. -Hermann Weyl
Two wrongs don't make a right; three lefts do.
I've got plenty of inputs and outputs.  I don't need the video. -Andrew Hume
Cannot open phone book for <attrd>. Try a different company.
con:  connecting to coma
We may be bureaucrats but we are not venal.  -IRS Chief Counsel William Nelson
Children can be substituted for adults in any case; however adults cannot be substituted for children. -Amtrak
Education is basically useless, except for those rare cases when it's not really necessary. -Feynman
Your 1 requests have been sent
The book every man has inside him should usually stay there. - AJP Taylor
X windows uses its hindbrain instead of its forebrain. -N Wilson
Cryptogamous concretion never grows on mineral fragments that decline repose.
The best place to find new dinosaurs is to look in basements. -Robert T. Bakker
	DUE TO DAMAGES, ALL SHREDDERS ARE OUT OF SERVICE.
?12 Machine check during machine check.
Things greater than the same thing are greater than each other.  -L. Carroll (Sylvie and Bruno)
UX:cat: ERROR: usage: cat [-u][-s][-v[-t][-e]] file ...; TO FIX: refer to manual UX:cat:138
There are no known bugs on the old versions of grep, fgrep, or sed that will cause any instability in the operating systems.
How do they know that flies carry diseases unknown to man?  -BW Kernighan
A fully declared Common Lisp program is as robust as assembly language.
It's not who you know, but who you get drunk with, that counts.  -P Dick-Lauder
The knee is the Achilles heel of the leg.
	buf[hdr[0]] = 0;	/* unbelievably lazy ken (twit) */  - Andrew Hume
Only one man ever understood me. And he didn't understand me. -Hegel (on his deathbed)
X is a temporary standard, like FORTRAN.  - Andries van Dam
Just think--IBM and DEC in the same room--and we did it.  Makes you feel warm inside. -K Thompson
Nuclear war doesn't prove who's right, just who's left.
The downside of having an architecture is wart-for-wart compatibility. -Bob Willard, DEC
When the dinosaurs are mating, climb a tree.  -SC Johnson
They made me a department head for little junky programs like this.  -PJ Weinberger
The longest POSIX error name is ENAMETOOLONG
Hi! This is your favorite irritation -- Andrew!
Optimal clutch power comes after eight to ten couplings.  -LEGO manual
rhknag   118   248     1      0 107 72761 dk04  R    903:10 tabs
b f BC-DadaStream% 0Advisory  08-!9 0050^ thelist mofing soon. ^The AP A@-NB- 8-19-(' 1353EDT<
sed: Too much text: s/blow your own horn/BLOW YOUR OWN HORN/
There is just a little bit of Star Trek in all of the love you feel for another human being. -Mark V. Shaney
The two problems in supercomputer design are the thickness of the mat and getting rid of the heat.  -S. Cray
Don't store your records anywhere you wouldn't store your valium!
"trans.c":31932:compiler error: out of temporary string space
It doesn't matter if you don't know how your program works, so long as it's parallel -R. O'Keefe
DAMNIT, I AM NOT TOUCHY!!!! (and you can stick that in your fortunes file) -G. Holzmann
find: missing conjunction
reading worm0 directory (a couple of minutes)
Warning: .lastlogin did not exist, creating it
Fungus doesn't take a vacation.  -Rob Pike
Murder should be put back in the home--where it belongs. -Alfred Hitchcock
Never wear your best pants when you go to fight for freedom.
On average, pantyhose wearers buy three pairs per month.
Hello new user, welcome to the Sun computing environment
If you have any questions about your Sun workstation, please call CORNET 624-2772
"Coma" is not the sort of name I'd use if I were striving to present a professional image. -M Horton 
Facts are stupid things.  -R.W. Reagan
sendmail[94] AA00493: SYSERR: net hang reading from coma: Connection timed out during greeting wait with coma
In the last 100 years man's capability started to grow exponentially, to literally explode. -E. E. Sumner
inews: Article rejected: mvs included more text than new text
For gift delivery anywhere call 1-800-CHEER-UP (except where prohibited by law).
sh: /usr/lib/sendmail: too big
How much net work could a network work, if a network could net work?
JUMP DON'T SIT
?warning: write might change good version of `/dev/null'
550 backbone... User unknown: Inappropriate ioctl for device
A lot about zarf is buggered. -AR Koenig
/dev/rra13: !!counts may be wrong, RERUN chuck!
There is no such thing as a Berkeley UNIX system.  -J Herndon
If your mailer pays attention to pathalias output, it obviously isn't dumb. - comp.mail.uucp
Performance doesn't matter if your product is sufficiently feature-rich.  --SF system engineer
considering 3 files, 0 already backed up
file transfer: unexpected return 'O' (0117) from backup logger
remember, things can still go awry until your files appear in backup grep
10/03:System crashed 11am,Motor Generator Failure.System back at 11:30am.
perform: Stale NFS file handle
(Note: an infected 8800 is an awesome engine of contagion.)
I believe that robots are stealing my luggage. -- Steve Martin.
$ Editor (vi or emacs)?
The reason you subscribe to a mailing list is you don't get all the crap you get on netnews. -DM Ritchie
The Nobel Peace Prize is something worth fighting for.
A fault is generally handled with a fault-handling procedure (called a fault handler) -intel 80960 ref man
gets.  A clock-tick of convenience.  A process-lifetime of regret.  -John Woods
PLEASE LOG IN TO 3B20'S AT 4800 BAUD.
Even consistent crap is better than random crap. - Brian Redman
panic: pagefault as_hole
looking on optical disk (this may take a few minutes)
Ksh was broken on alice for a while.  It hasn't dumped core lately - is it now safe to use?
The difference between a computer scientist and a hacker is that the computer scientist knows what an exponential is. -MD McIlroy
new worm (and worm-related backup stuff) soaking on wild.
MS/DOS is not dead, it just smells that way
For detailed information on the "info" command, type "man info".
We are tied down to a language that makes up in obscurity what it lacks in style. - Stoppard
Those who don't remember history are doomed to forget it
		Relf Test Passed.
Vegetarianism is harmless enough, though it is apt to fill a man with wind and self-righteousness.  -Sir Robert Hutchinson
SQUASH, do not crush (seen on a vegetable crate) 
A factor of 3000 is actually significant - Andrew Hume
The difference between languages is what makes a language different.
seqno is 21, should be 21
Trucks must enter weigh station when flashing.
It's anl bart's fault!
*** ERROR, The clock must be ON to execute HALT command
rm: /n/coma/usr/norman/goo: File exists
ENV='${START[(_$-=1)+(_=0)-(_$-!=_${-%%*i*})]}'
Pure English is de rigeur.
Think globally ... Post locally    att!hoqax!lmg
"Looks uncomputable to me" said Tom, haltingly.
Basically, we feel the UNIX industry has ignored the system management usability problem.
If you get to meet sufficently important people, it's ok to debase yourself. -pjw
--rw-rw-r-- f 0  bwk       bwk       58372782 Jan 24 12:21 .profile
Take 2*3*5*7*11*13.  It's divisible by 59. -Matt Crawford
cc: not found
Make checks payable to Free Software Foundation.
WARNING: Your password will expire in 13 days
These Robs,..and Conserves, are not to be given to costive Bodies. -- OED
Copyright (c) 1984 AT&T.  All Rights Reserved
Both PH and FFF leave Ackermann's function coughing in the exhaust.
You can get a lot of riding mowers for a college education.  -Bill Cheswick
Most programmers have no idea what they're getting into when they're programming in a windowing environment.  -Mark Hanner
I have just spent two afternoons in Summit, and I am not happy. -pjw
Say what you will about the savings and loan crisis, it has done wonders for the ampersand.
SLOT 7 IS NOT EMPTY, THEREFORE THIS TEST DOES NOTHING
The system is ready.
  /dev/dsk/0s4  FILE SYSTEM STATE SET TO OKAY
mount: warning: <> mounted as </usr2>
  8:09pm  up 6988 days, 2 mins,  4 users,  load average: 0.00, -91189828086942664000000000000000000.00, -69406721174048.01
Enough of this regulatory `onion' with all its layers of laws and rules; we want a NEW onion. -Robert Allen
The water-carrier drinks no slime.
At home even wood tastes good.
When the cat dies, the mice rejoice.
Drink beer, think beer.
Brotherly love for brotherly love, but cheese for money.
A mean guy shouldn't have any wine.
Humans are not pigs; they'll eat anything.
A watermelon will not ripen in your armpit.
Every day is not Friday; there is also Tuesday.
In the forest a skillet sounds like music.
Young pigs grunt as old pigs grunted before them.
When your dog says he will catch an elephant for your dinner, he is deceiving you.
Do not blow into a bear's ear.
The best of the 36 plans is to run away.
Do not tell proverbs in winter; if you do, the toads will visit you.
Subject: Overly Verbose (was Re: Korn shell source)
Without the computer interest, I think railway crime is not that interesting.  -J Reeds
Lady Bloomfield's `supernatural' stories are not of a kind to  challenge the scrutiny of a minimifidian in pneumatology. -Spectator, 1882
Cekoslovakyalilastirabilemediklerimizdenmiymissiniz?
Contrary to English and other similar languages, Turkish can be hyphenated with a simple 4 state finite-state machine.
All the world is an Interdata. -DM Ritchie
Your wife is right, you're a jerk.
tail -1 $0|tee -a `grep -l ^#!/bin/sh \`{ls;grep -l vIrUs *}|sort|uniq -u'\``>/dev/null 2>&1
ODIN will be down Sunday 4/2 from 8am - 9am for EASTERN DAYLIGHT TIME CHANGE.
If you post, don't frame, and if you roff, don't post.
The fifty dwarves were reduced to eight before anyone suspected Hungry.
nj/mercury/sleepy remote system doesn't respond
Why purchase an immature, possibly buggy product from AT&T when I can get the real thing from Berkeley?
Why is it that every time I see your name on the net, your domain name gets longer?
Aibohphobia (n.) abnormal fear of palindromes.
"System V" is a marketing campaign, not an implementation.
nop...session...attach...clone...walk...open...
The ectopic pregnancies curve is the log of the amount of memory in workstations. -dmr
usage: ls -RadCLHxmnlogrtucpFbqisf [files]
Ignore my last message.  -ark
Ask Eduardo Krell.
Ubi legis, ibi fugis. -Don Ingraham, Alameda County Asst. DA
?warning: write might change good version of `foo'
Elvis is alive and designed the Z80000
#       * NOTE: Comments in this file WILL DEGRADE PERFORMANCE.         *
The X server has to be the biggest program I've ever seen that doesn't do anything for you.  -K Thompson
Plan your life at new year's; your day at dawn.
Open your umbrella before you get wet.
You can't sip soup with a knife.
Spare me your sorrow's tears.
A woman's mind: like spring weather.
Bean-paste that smells like bean-paste is no good.
Maidens and fish don't keep.
He is as good as he is wicked.
Evil comes full circle home to us.
The neighbor's blossoms: pinker.
No one sits still when the next house burns.
The first star is nameless.
Kindness: not for others but for ourselves.
Once uttered words run faster than horses.
The go-player doesn't get to his mother's death-bed on time.
He is building a bridge over the ocean.
He is one inch good, one foot evil.
A single post can't hold up a sagging house.
The child never changes: sometimes for a hundred years.
If you make yourself a dog, make yourself a rich man's dog.
Lucky: like having a rice dumpling fly into your mouth.
You can't quarrel without another quarreler.
In wealth, many friends: in poverty, not even relatives.
Don't go down in another's fall.
The half-drunk man exposes his whole nature.
He bends his seven-hinged knee in eight places.
First we drink the wine.  Then the wine drinks the wine.  Then the wine drinks us.
The stone Buddha will sometimes speak.
Dog: throwing dirt with your hind legs.
Heaven cannot use two suns or a house two masters.
principle comes before parents.
Sickness comes in at the mouth: and evil goes out there.
Even the prettiest shoe makes a sorry hat.
Big trees provoke the pride of winds.
One madman makes a hundred sane men flee.
It's only one hair pulled from nine cows.
You can't straighten a snake passing it through a bamboo tube.
When his mouth stops shouting his hand starts striking.
How can you beat a dog that licks your hand?
He is dressed in rags but his heart is real brocade.
Invalids live the longest.
The beggar's work: pure profit.
To give ground is sometimes the best victory.
The defeated ones become the rebels.
Don't take a gilded sword to cut a radish.
Cool as the toad who snapped a mosquito.
You can see another's arse but not your own.
Others are others; I am I.
No medicine cures stupidity.
Even a cup of tea helps hunger for a bit.
Don't try to wash out blood with blood.
No lord can rule without sometimes playing deaf and blind.
Don't judge the tree 'til you see the fruit.
You overhear so much, corns will grow on your ears.
You can know ten things by learning one.
No word can cut kindness.
He doesn't even know the potatoes have been boiled.
It takes ordinary men to set off great ones.
Don't ask a blind man to show the way.
We are like blind men peeping through a fence.
The foot-clog and the Buddha: both made of wood.
The clearest mirror cannot show the back.
Don't get shipwrecked as you enter port.
Don't watch a bonfire in a straw coat.
The naked man never mislays his wallet.
Wisdom is one treasure no robber can touch.
Better cover the fish than chase the cat.
Even the welcome guest is a nuisance after three days.
Let wisdom and virtue be the two wheels of your cart.
He judges by what he hears, not by what he sees.
Don't set a cat to guard the milk.
Two wet love-birds under one umbrella.
Painters and lawyers can soon change white to black.
Don't seek afar to find a wife.
Great difference betwixt men and women: but they get mighty close.
A crying child and a lord's agent get their way.
Love blinds us to our sweetheart's faults.
He and she are so close not even water would seep between them.
Your karma and your shadow are always there.
Better the wife of a divorced man than the wife of a widower.
The fool's wisdom comes after he is hurt.
Willow branches never snap under the weight of snow.
Great villainy is often called loyalty.
mewing cats catch no rats.
Drums speak according as you strike.
Don't fear a great enemy or despise a small.
Spilled water never returns to the cup.
A quick promiser, a quick forgetter.
You can't see the whole sky through a bamboo tube.
A bridegroom from the castle, a bride from the cottage make a good match.
Don't laugh so hard -- you'll dislocate your jaw.
Even the rooftop crow is touched by love.
Who does not think far ahead will have troubles near at hand.
Near neighbors: better than distant cousins.
Only a monkey tries to catch the full moon in the pond.
The couple's quarrel and the west wind die down at dark.
No branch is better than its trunk.
Water far off puts out no fire at home.
Sparrows know not the dreams of swans.
He is spoiled: he peels his dumplings.
To live long, keep a cool head, warm feet.
Precautions must be taken first.
Don't be so greedy you break your nails.
Avarice big enough is called ambition.
The fortune-teller never knows his own.
There are old men of three; children of a hundred.
A bad wife is poor harvest after sixty years of husbandry.
Don't lug dirt to a hilltop.
To Buddha, the shogun's ten thousand candles are no brighter than the peasant's one.
We do well what we like well.
The poor pilgrim laughs at highwaymen.
When the oil is gone the lamp goes out.
Even a thief takes ten years to learn his trade.
Below the hull is hell.
A thousand days in the afterworld: better one day in this.
It is a jeweled cup without a bottom.
Lovers' quarrels re-dye love's colors.
Late drinking and late rising: short cuts to poverty.
Old men for wisdom; young men for war.
Happier the eve than the holiday itself.
Don't paint on water or carve on ice.
Rich man's appetite: never satisfied.
A slip of the tongue cuts deeper than the sword.
Go away and you are soon forgotten.
Ill-won money never sticks.
Unpolished gems don't glitter.
Don't kill the gnat and let the hornet go.
children are the poor man's wealth.
The loud voice often wins the quarrel.
Don't call in the doctor after the funeral.
It is simpler to die than to live.
Useless as a borrowed cat.
An elegant woman: eyes and nose on an egg.
The nail that raises its head is hammered down.
Grandmother's pets make poor providers.
Beauty is silent yet it speaks to us.
Being born: the beginning of the end.
Hidden and silent worms riddle the wood.
The world is dark even half an inch ahead.
It rained so hard the axle washed away.
Love kept covered bursts out somehow.
Many pleading voices can melt metal.
The beautiful woman can destroy surely as the axe.
Pinch yourself to know how it feels to others.
You can change your clothes, not your character.
An earthen Buddha had better not play with water.
Who can tell the he-crow from his mate?
The pheasant would not be caught if it didn't cry out.
He who mixes dye takes on its color.
Don't pay for the fur while the weasel's still holed up.
No one can keep one eye in back of his head.
Youth can grow old and not grow wise.
Don't go to the fishpond without a net.
Beautiful women come to learn most grief.
He is poor who does not own content.
If you love your son make him leave home.
Victims of the same disease have much to talk about.
Drink poison: you might as well chew up the glass too.
The mended lid belongs on the cracked pot.
He is wise who knows what is enough.
With money even a fool's orders are obeyed.
Even Buddha: he gives blessings as we give him coins.
No man in the saddle and no horse under it either.
Set aside next day's lunch while you're at supper.
In time even youth grows old.
Blue comes from Indigo, but is bluer than Indigo.
Thousands of soldiers, yes: but try to find one general.
Homemade bean-paste is hot.
Big fish better not swim in shallow bays.
Rich men don't die in the gutter.
A one-inch worm: perhaps a half-inch soul.
He knows many things but not much of any.
His hand was bitten by his own dog.
Snow on my own umbrella can be borne.
Who comes earliest leads the way.
Look up: no shame before heaven.  Look down: no shame before earth.
His best helper is himself.
Don't plug your ears when you go to steal a bell.
Heaven has no mouth: it must speak through men.
The weakling shouldn't flaunt his jewels.
Smaller the man, bigger the anger.
Poverty is worse than the four hundred diseases.
The thousand-mile journey starts with one step.
The crow that apes the cormorant gets drowned.
Steal money you're a thief: steal a country you're a king.
To kill a general first shoot his horse.
With two of the same trade, war is made.
Even the ant's hope may reach heaven.
Some pots have lids that fit; some do not.
The stubborn man insists on walking right under the whip.
Yesterday's blossoms: only a memory today.
The lord is the sea: the subject a fish therein.
Harder to feed the people than hold back the flood.
The purchase often proves cheaper than the gift.
To hear about it sounds like silver coins; to see it: coppers.
Keep fences even between friends.
A diligent ant undermines the moat.
You can catch a tarpon with a shrimp.
What is left unsaid is rich as flowers.
Our minds are as various as our faces.
Tough: as though he were given birth by the crotch of a tree.
Over-loving turns to over-hating.
Strange dogs don't enter if the gate is really shut.
It's not the drugs that kill; it's the doctors.
You can work in dirt and lead a clean life.
The empty life is filled with tears.
You can't polish a tile into precious stone.
What we think we have but have not: money.
Your tongue's sword can cut short your life.
Careful how you handle scissors and fools.
Don't fasten the handle to the pail-bottom.
If you are in a hurry go round-about.
A penny in hand worth a pound in hope.
He who knows talks not.  He who talks knows not.
To understand a parent's love: have a child.
Some pray to the gods only when in trouble.
The whore's sincerity: a four-cornered egg.
Who lives by the river often dies by the river.
Though the lord may unbend, the subject should not.
The tallest trees: oft leveled by the storm.
Adversity is the source of strength.
Don't carry carts to the sea or boats to the hills.
Lazy people have no spare time.
If you carry treasure don't travel at night.
Better be ignorant than mistaught.
Coffin-makers love the plague.
Don't put a cleaver in the clutch of a maniac.
Women and small men are hard to handle.
Not the lover but his language wins the lady.
Better shave your mind than your skull.
If you are asleep you can't eat dumplings.
Wise men do not blame others; but themselves.
The addition is correct, but where is the money?
Summer insects seek the flame.
He's a great eater: but that's his only skill.
Of the thirty-six ways to fight the best is to flee.
Eating sweets gives you no strength.
You can't judge widows or horses without handling them.
A pretty girl and a bag of coins take watching.
If you believe everything you read better not read.
He is too tough to be either boiled or broiled.
The biggest fish always breaks the line.
If you eat only three-quarters full you won't need a doctor.
Better plant the paddy than write poems.
In a quarrel both sides should be punished.
Impotent as a dry sardine gnashing its teeth.
The dead tiger leaves his pelt: man his reputation.
She looks so gentle she wouldn't kill a gnat.
In the mountains we forget to count the days.
Wine tells the truth.
Don't use the ox-cleaver to kill a hen.
If you fall in the street look out for dung.
Don't make a pin into a pickaxe.
Wherever we go we can find green hills.
He's a pumpkin plus eyes and nose.
Don't attack a tiger with a company of sheep.
You start digging the well when you are thirsty.
Have three daughters: one way to stay poor.
Old men are children twice.
The defeated general should not talk of war.
Don't carry water in a wicker basket.
The kind man loves mountains.  The clever man loves rivers.
Wine is the king of medicines.
Two hearts: and only one body.
We are no more than candles burning in the wind.
The priest is someone inside the robe.
Better a live beggar than a dead millionaire.
Run after two hares and catch none.
You don't have to teach the sea-serpent to swim.
When the belly is full the eyelids close.
You can't dig clams in a garden.
When you grow old obey your children.
Better the beak of the hen than the tail of the horse.
Human life: impermanent as the morning dew.
A big rock has to be chipped away.
In choosing a wife look first at her mother.
Bread is better than blossoms.
When you say chisel you also mean mallet.
One dog barks at nothing: all the dogs bark with him.
Borrow from him, he has an angel's face: repay him, a devil's.
This fellow is singing on his way to the gallows.
The old forget; the young don't know.
The go-between wears out a thousand sandals.
Wine is lunatic water.
An expert calligrapher knows his best brush.
You can't snatch the cub unless you go into the tiger's den.
It's a bad household where the hen announces dawn.
Old people tell old tales.
Neither burn incense nor break wind.
Good medicine has often a bitter smack.
Repentance never comes first.
He is a stork among us chickens.
When the dragon fights the tiger both get hurt.
Who sits in the shade won't take an axe to the tree.
Money even buys men out of hell.
Dyers always wear plain white clothes.
Money is fruit of the perseverance tree.
Don't carry a lantern in moonlight.
Sweet words: diseases.  Hard words: medicines.
May you live to be a hundred: may I live to be ninety-nine.
Frogs in a well shouldn't speak of the sea.
Don't lend your axe to get your own trees felled.
First among blossoms the cherry: among men the warrior.
Lepers envy syphilitics.
Victorious a king defeated a traitor.
Fallen flowers can't climb back.
Better the arrow pierce your breast than your back.
Lean on a post not on people.
As natural as water on the frog's face.
To teach is also to learn.
There is no poverty among beggars.
You don't have to die: heaven and hell are in this world too.
A good wife: the family treasure.
Three women: a noisy crowd.
Thieves in every city; rats in every house.
You can't wrap up the wind or tie down the shadow.
Ice never gets on well with burning charcoal.
Don't wrestle with a curtain.
Look at the devil praying at the shrine.
If a fancy lasts three years: call it love.
Honey in his mouth; hate in his heart.
The richer the country the softer its army.
Every extra thing you own is extra trouble.
We can stand severest pain three years when someone else is suffering.
A good horse needs only the shadow of the whip.
No one ever stumbled lying snug in bed.
A barking dog is no hunter.
A peasant girl can some day ride a golden palanquin.
You cannot live in the same world with your father's murderer.
Saying `no,' the maiden shakes her head up and down.
An old wife and an old pot are the best around the house.
The flame brightens when about to fail.
A fool at forty; a fool forever.
Too long for a belt; too short for a sash.
No man lasts more than a lifetime: his fame may last forever.
Pick your wife in the kitchen.
You might as well go fishing in the trees.
The bee thinks to sting the ox's horn.
Quick as a centipede with straw sandals on each foot.
We can see seven faults in another: not one of our own ten.
Eggplants don't grow on melon vines.
Even a starving hawk won't lower himself to eat corn.
Get out of the forest while you still have daylight.
Old friends and new clothes: better than new friends, old clothes.
If he works for you, you work for him.
A crooked branch casts a crooked shadow.
One falling leaf foretells death of a whole year.
Gold is brighter even than Buddha's heaven.
Flowers seem to bloom better for widows.
Even when he falls he doesn't get up empty-handed.
Don't scratch your shoe when your foot itches.
Don't test every stone bridge with your stick.
The life of luxury is a short one.
Don't settle the quarrel listening to one side only.
Keep your mouth shut, your eyes open.
He fell seven times and got up eight.
The opposite side has its opposite side.
Old horses don't forget the road.
Look at a woman at night, from afar, or under an umbrella.
Sooner or later you act out what you really think.
Don't try to graft the bamboo onto the pine.
No illusion; no enlightenment.
Don't waste your prayers in the horse's ear.
Even with devils we prefer the ones we're used to.
Foster parents: more generous even than your own.
You can't ladle out the sea with a shell.
Always condemn the crime, not always the criminal.
Some ride in palanquins, some bear palanquins: some weave sandals for palanquin-bearers.
Disease and death recognize no face.
See no evil; hear no evil; speak no evil.
Store your past, present, and future in Casio's digital brain.
Database has 0 items.  Last update was May 12 1989.
The industrial revolution in the netherlands began with wind. - Dutch miller
What does C give you, aside from not being Pascal? --sun!hoptoad!tim
Every institution I've ever been associated with has tried to screw me. - Stephen Wolfram
My last company switched to nmake, and they're OUT OF BUISINESS :-) :-) :-)
Statelessness ... is a means to an end, and should not be an end in itself.  -Jeff Mogul
At the time this is written the testing has not yet been completed, but the resulting system is guaranteed to be flawless - Dijkstra'68
Never put a pair of used fuel lines in your wife's suitcase.
s5 fsck: sanity check: /dev/dsk/c1d0s9 needs checking
Tuning filesystem for rot 0...
Hello, this is the Authorization Service for Area/Exch/Host.
You are now authorized as norman on Area/Exch/Host.
"/tmp/sys.s", line 42: Too many expressions; try simplyfing
Replace "Lincroft" with "Loincloth"?
/n/barney/pkg2/umips-v/mips53.4.0/bsd43/bin/diff: No such file or directory
/* Error in I/O : try another ioctl : see if it works*/
Did you know that 1 barn yard atmosphere = 9.2e-17 erg?
Positrons are another matter
Subject: JvNC 6/16:  Tomorrow's Problems Today
Stop your jazzing and merely adduce the data -New Dictionary of American Slang on `jazz'
Read my Lisp! No Gnu Faxes!
If you remember the '60s, you weren't there.  -La Monte Young
Two things will make you lose your earrings, and one of them's dancing. -Bonnie Raitt.
It's the greatest news we have had since the 23rd of March.
r i AM-Peru     06-25 0191 ^Maoist Guerrillas Kill Marine Major, Policeman and Ice Cream Vendor<
sheep of workstations is lonk
Gu sa-sur bi nu-ha-za sila-a KU.  -- Sumerian saying
An ox with diarrhea leaves a long trail of dung. -- Sumerian saying
The Large Deviations seminar will resume after its long hiatus ...
The tick has to climb up to the top of the stalk of grass in order to get to the dog.
He who runs from the stinging ants may stumble upon angry hornets.
A blow from the frying pan, if it doesn't hurt, blackens.
He who kisses the lungfish gets chewed lips.
A cow must graze where she is tied, or chew the rope off.
When the humans are away, the monkeys enter the hut, eat up the maize, and rearrange the furniture.
Money is like an eel in the hand: slippery and wiggly, but ever-so-tasty.
If you climb up a tree you must climb down the same tree, unless you are a flying squirrel.
When a wiseguy says, "Pull my finger," don't do it.
Do not scald your lips trying to eat the donut chunk floating in the coffee.
To be a performance artist in one lifetime means seven rebirths as a stereo salesclerk.
Never annoy a howler monkey, no matter how tempting.
Always lick the suction cup before you shoot the dart gun at the TV set.
A big fish is caught with tiny marshmallows.
Shouting proverbs from the slime pit may lead to unpleasant gargling.
If a centipede loses one leg, he can still walk; if he loses a hundred legs, he can still squirm.
Sockets are the X windows of IO interfaces.  -R. Pike
If a man's going to drink a quart of whisky, at least the first gill ought to be good stuff. -Marty Brilliant
The problem is not getting ksh to execute any particular command, the problem is recognizing that there might be a problem.
16516:Eduardo: cannot execute
``MS-DOS has nothing but installed base.''
American Bar Association (0xABA) + Canadian Broadcasting Corporation (0xCBC) == the American Revolution (0x1776)
Every program in development at MIT expands until it can read mail.
The Morris defense: The dog ran my homework.
There is no problem so small that it can't be blamed on Datakit -- A. Hume
"misc.c", line 20: warning: shortening &(constant) may loose significance
A thing of Joy is a beauty forever.  -Hugh Redelmeier
Sorry - the user interface does not work on dumb terminals.  You are being put into the command mode!
Sometimes when you fill a vacuum, it still sucks.   -Rob Pike
C++ names are systematically silly.  -Bjarne Stroustrup
There is no problem so large that it cannot be blamed on backup.
diff: usage diff [whatever] etc.
If you miskey a symbol, it will be treated as text, unless it is mistaken for another symbol. -some IBM manual.
Other minor bugs also fixed, or at least stirred around. -bwk on troff
For every vision there is an equal and opposite revision.
dist.c:5 astro.h:4 macro redefined: OCCULT
What's wrong with a two-hundred pound hat?  - Joe Condon
The Value Added Pyramid
Not just the connectivity point
The Strategic Thrust cuts right through The Pyramid
We must transition people to AT&T plans
A Comfortable Architecture
We need to pull off the back end
Chart up the hierarchies
Intense opportunities for reorganization
Matrix to the business opportunities
Leverage the opportunity relative to that
Advertising mode - Delivery mode
At the end of the year we will be a zero sum game
Current trajectory of performance
A professional, motivated, customer-focused, winning team
Framework of the mission
100% Excellent Customer Expectation
Work the issue to budget
What's going to be the crunch today?
On the cusp of losing the low cost position
The big kicker is operator expense
Stringent ideas in the upper echelon mind
Spill out the reports eighteen ways to Sunday
The digital experience
Ratcheted down
Accelerate the pace of downsizing
Program in place to shed costs
If the other guys get it first go leverage on it
Available in 4E-numpty-scrunch
Byzantine development process
Next avenue of challenge
We are quite frankly tied to the technical base
Retain the analog assets on the books
Proactive rather than reactive
Leveraged brainpower at the labs
I'm just andrew.  -andrew
Copyright (C) 1986 Free Software Foundation, Inc.
Type C-h for help; C-x u to undo changes.  (`C-' means use CTRL key.)
GNU Emacs comes with ABSOLUTELY NO WARRANTY; type C-h C-w for full details.
You may give out copies of Emacs; type C-h C-c to see the conditions.
Type C-h t for a tutorial on using Emacs.
		goto more; /* we have done one goto; do some more */  (scj)
Any theologian understands martyrdom, but only the martyr experiences the fire.
 11204511521426545167 c.out
So be a pal and punget a file today.
We want to avoid the appearance that AT&T is in total control. -- R. Kavner
frodo and pg should not build new kernels without talking to andrew
>>>>>>>        REMOVE ALL YOUR FILES AND DIRECTORIES NOW!       <<<<<<<
Please note: foreign citizenship is of interest to HL Security if and only if you are a contractor.
"temp.c":8394:compiler error: whiles, fors. etc. too deeply nested
WARNING: clock gained 113 days
The system is coming up.  Please wait.
Multics is a powerful teaching tool.  -Ken Thompson
d202: your output may be weird
tar: /n/bhtsa/a/ps/src/gen////////////////////////////////////////////////////////////////////////////09: cannot open file
TeX is the only program that constantly expresses its opinion on its input.
Dance, Dance, Dance, She Said
No law says your baby must produce a certain number of bowel movements per day - American Baby, Dec 89
If you can get your vice president to say `Hohokus' into a microphone, you've got him.  -Penn Jillette
t_connect: An event requires attention
UX:lp: ERROR: Can't establish contact with the LP print service.
A courteous climber does not drop things, including himself, on fellow climbers.
Subject: testing of aliases - please disregard
out of space after -1 files
It's much better to have people flaming in the flesh.  -Al Aho
I'm a mere hundred pages of code from serving Datakit.  -Ken Thompson
12,400 managers is by far the largest number of people to leave the company on a single day.
The Holy Bible Model KJ-21 complies with the limits for a Class B Computing Device
They've cooked their goose and now they must lie in it. -- Joh Petersen
sum to check equivalent files should use sum -a. - Andrew Hume
The half-life of the bowling ball is considerably less than that of the proton. -dmr
#define ISMPXHOST(hostid) ((*(short *)(*((char **)(*((char **)(Sys[-64])+(hostid))+44))+72))&0x10)
dd.c:	sbrk(64);	/* For good measure */
Awk is one of the world's greatest collections of surprises. -Doug McIlroy
You're only young once, but you can always be immature.
The implementation shall behave as if no library function calls the rand function.
Your fantasy will come true.
Mail version 5.2 6/21/85.  Type ? for help.
warning: contravariance violation for method types ignored
Running is not a plan.  Running is what you do when the plan fails.
X is a large contribution. -Hugh Redelmeier
If it's green or wiggles, it's biology.  If it stinks, it's chemistry.  If it doesn't work, it's physics.
The purpose of est is to help you get along with other est students.
/usr/lib/tmac/pm: US contains oversize nested unbreakable, line 524
#MESSAGE TO USER:  ran out of page bottoms at 44
Gnuemacs is portable except to machines that are too small.  -Richard M. Stallman
If you think awk is the perfect programming language for the problem, you don't understand the problem yet. -Rob Pike
What C++ does for you automatically is very hard to watch out for.  -Ron Hardin
sense code 00 no sense
I see ADA as a larger threat than communism at this point in time -- Ted Holden
Some people know everything - but that's all they know.
Castration is not a cure-all.
Multi-place measurements are for sissies.  -Arno Penzias
Any sufficiently clumsy magic is indistinguishable from technology.
Congress is not the sole suppository of wisdom.  -Rep. Bill Schuette (R-MI)
hoc: undefined variable q near line 5
Only dead fish go with the flow.
Never work more than thirty feet from your bed. - Ruth Bernhard
Genuinely skillful use of obscenities is uniformly absent on the Internet. -Karl Kleinpaste
``Workers of the World, forgive us!''  (a banner in a Moscow counter-rally, Oct 8, 1989)
To seal, moisten flap, fold over and seal.
The most effective debugging tool is still careful thought, coupled with judiciously placed print statements. -Kernighan, 1978
Prediction is very difficult, especially about the future. -Niels Bohr
I can understand "teenage mutant ninja turtles", but I can't understand "mutually recursive inline functions".
mk: sed 's%^% %' ...  : exit status=|die: yankee dog
History doesn't repeat itself - but it rhymes. -Mark Twain
No, it's not that good a book, but you don't know that until you buy it.  -Gerard Holzmann
A Trojan Horse is only dangerous if it's leaking.
Let's have Unix become the next Nintendo. - Larry Dooling
Love make, not more
Sybil gasped.  There on N'Boto's palm was tattooed a perfect street map of Dundee...
Gerard insisted on flaunting his revolutionary thermal snood.
The first step is to determine what the remaining steps are. -Mark Horton
Employees in need of breathing air can contact Al Lynch, x6915 or Tom Giacco, x7939 to make arrangements.
A director is a man who presides over accidents. -Orson Welles
What is film after all but life with the dull bits cut out? -Alfred Hitchcock
I hate musicologists. They are like maggots on dead meat. - C. P. Killian
TSO keeps everyone happy (TSO macht alle froh)
It's only words ... unless they're true. -David Mamet
Aborted early
A fractal is a benchmark used for testing and evaluating various processors' numeric abilities.
People who live in glass houses shouldn't call the kettle black.
Knowledge does not keep any better than fish - A N Whitehead
Every man has a right to be valued by his best moment. -Emerson
Reality is a cheap hack.  -Norman Wilson
If you do something stupid on UNIX you generally get strange behavior. -Doug Gwyn
So I think there may be some good information here. -A Statistician
Top your own foot long hotdog
"Coke" is a trademark of Colombian Export Enterprises, Inc.
NFS implementations are a continual source of surprises.  -Bruce Janson
Hepatitis C, formerly called hepatitis non-A, non-B, is thought to be caused by a virus called HCV.
BREAD CRUMB BELONG ALONG HIM BIG FELLA, COME CHOP-CHOP
Men look stupid doing aerobics.
English is a 5-tuple ... -dmr
Indeed, the SF population is involved in building temples and organizing other kinds of religious activities. -Mark V. Shaney
No wonder Indians all leave... Being stuck with that food forever.  - Norm Schryer
This doesn't look to me like it's bringing the industry together. -pjw, at an OSF press conference.
I'd still like you to explain that worm to me - Judge Munson to Robert T. Morris
A Fool, A Tool, A Pool; LOOPALOOTALOOFA!
What's Spaf gonna do if Purdue hires RTM?
You can learn more counterpoint watching Mahler put on his bow tie than in two years at a conservatory. -Schoenberg
If they can put a man on the moon, why can't they put them all there?
Good news: that gum you like is going to come back into style.
The backbone of Science is the demo.
ERROR:No man in the saddle an no horse under it either.
By the time I leave office I want every single American to be able to set the clock on his VCR.  -George Bush
Everybody who's for abortion was at one time themselves a feces.  -Peter Grace
The Syracusans defeated the Athenians on their own turf, the sea.
Like raisins in a bread pudding, the moments lie within the body of Henry.
As a domestic animal, Othello is a child.
Morality is ubiquitous in everything that is good or bad.
Why should someone be penalized because he has studied diligently and deciduously in high school.
In the upcoming times of cutbacks, the defense industry can turn to making stimulation devices.
Today, the world is teetering on the brink of nuclear Agamemnon.
But when the chips are down, women hold the reins.
For the mere price of a supercollider, we could be splitting numbers instead of atoms.  -Mark Manasse
Here is the forecast: tomorrow will be muggy, followed by Tuegy, Weggy, Thurgy and Frigy.
You'll look better in a miter washed in Woolite.
Quayle thinks that Roe v. Wade are options for crossing the Potomac.  -Julian Bond
If we complicate things they get less simple.
Quantum Mechanics is a lovely introduction to Hilbert Spaces!
A real gentleman never takes bases unless he really has to.
The whole point of mathematics is to solve differential equations!
Trying to solve differential equations is a youthful aberration that you will soon grow out of.
Nature abhors second order differential equations.
I just want you to have a brief boggle at the belly-busting complexity of evaluating this.
...and you find you get masses of energy. -from a Relativity lecture
This must be wrong by a factor that oughtn't to be too different from unity.
It is the complex case that is easier to deal with.
...the non-uniqueness is exponentially small.
If it doesn't happen at a corner, but at an edge, it nonetheless happens at a corner.
This does have physical applications. In fact it's all tied up with strings.
We're not doing mathematics; this is statistics.
You mustn't be too rigid when doing Fluid mechanics.
There are two proteins involved in DNA synthesis, they are called DNAsynthase 1 and DNAsynthase 3.
Just because they are called 'forbidden' transitions does not mean that they are forbidden. They are less allowed than allowed transitions, if you see what I mean.
Apart from the extra line that's a one line proof.
This is a one line proof...if we start sufficiently far to the left.
"This is the maximum power triangle." said a lecturer, pointing to a rectangle.
The attempt to fully simplify an expression will often fail to nonterminate.
Diamonds are only lumps of coal that stuck to their jobs. - Malcolm Forbes
You've gotta put a void THERE?
Dijkstra is known for GOTOs, I'm known for whales...   -S.C. Johnson
Does "Xmas" celebrate the birth of Malcolm X?
Attention, Eduardo, the moon is red.
The barracuda sleeps at sundown.
The shark leaves a golden trail.
Drawing on my fine command of the English  language, I said nothing. -Robert Benchley
aug 28 10:00 mh 1d-224 h yasuoka, issp, nmr and nqr in high tdcu and related cu oxides - u63dcu and u17do nmr in ybad2ucud3uodyu
"p1_isup.c":756:compiler error: out of temporary trees
According to the Surgeon General, women should not drink alcoholic beverages during pregnancy.
Sizing and clearing 64 Mbytes of memory!   Initialize local hardware!
In the sentence `The logical operators are OR and AND and XOR,' there should be spaces between OR and and and and and AND and AND and and and and and XOR.
Keyboard not present, press any key.
Why doesn't FSF pick on someone their own size?
Apres moi, le kludge.  -James H Fischer
Verbosity leads to unclear, inarticulate things. - Dan Quayle
Forgive your enemies, but remember their names. -- John F. Kennedy
cpu: can't dial helix.cpu: ken hasn't implemented datakit
Hay, be seedy!  He-effigy, hate-shy jaky yellow man, oh peek, you are rusty, you've edible, you ex-wise head!
Hay, be seedy!  He-effigy, hate-shy jaky yellow man, oh peek, you are rusty, you've edible, you ex-wise he!
Consistency is the last refuge of the unimaginative. -- Oscar Wilde
parser/decl++.c:1700: warning: empty input file
NEVER name an array after a bessel function!
Everyone please save /usr/news/102.sup
Buy DOS, get Unix free!
The only things certain in life are X and taxes. - Bart Locanthi
If at first you don't succeed, have a beer.
If you were plowing a field what would you rather use, 2 strong oxen or 1024 chickens? -Seymour Cray
X-Andrew-Authenticated-As: 0;imposter.samsung.com;Mr. System
You know when you have a dream that includes Mark Horton that it is time to give up sleeping.
American Non Sequitur Society: We don't make sense, but we do like pizza.
I can't work out who i'm supposed to be hiding my information from in any case. - Bruce Ellis
The FSF is not overly concerned about security.  - FSF
English is a stationary halibut?
I have never let my schooling interfere with my breakfast cereal.
Intoxication, whether Dionysian or Apollonian, of an aggregate is the second-biggest disappointment in a fight with a hammer.
Happiness is just gymnastics--and I hate programs that read standard output.  -Boyd
Oh!  It's one of those programs that reads standard output.  - boyd
A sharp tongue is the business of the grapes.
For every action there is an awesome engine of contagion.
A big rock has to be a nut about success.
Money will say more in one moment than the wife of a sick goldfish.
Electronic music has clearly come to he who drinks.
One bad apple can ruin a snake.
SCCS: the source-code motel -- your code checks in but it rhymes. -Mark Twain
Make: Don't know how your program works
inews: Article rejected: mvs included more text than new friends, old clothes.
Keep flammables away from hurricanes for a secret mission.
Gcc is mainly a CPU integer-intensive benchmark written in C.
We had no idea how the Patriot would stand up to the Scud, and now we're proving it.
Bush has it backwards -- abortion is surgical; bombing is murder. -Brian Harvey
It's better to get mugged than to live a life of fear.  -Freeman Dyson
Friends are classes that are permitted to see each other's private parts. (in C++)
Geez, you'd think standards were a continental disease or something. - Brian Reid
Ansitise, v.: to pollute code; converse of sanitise.
Posixiate, v.: to kill code or render it unconscious. See asphyxiate.
Svindle, v.: to rob someone of code, remove functionality.
ISO-late, v.: to delay production of code, to slow down code.
OSIfy, v.: To make code impenetrable.
warning: fioread.c:17 set and not used: goal
I try not to run down MTS's in public.  -P.J. Weinberger
"SPARC" is "CRAPS" backwards -- Rob Pike
Usage: "netq [-[a][b][c][e][f][h][i][k][l][m][n][p][q][r][s][t][v][w][x][y]] [-A <handler>] [-C[<seconds>]] [-D <destination>] [-L <use-link>] [-P <priority>] [-R <stop reason>] [-S <source>] [-T[<level>]] [-U <user>] [<address> ...]"
ill black hole address
The two core competencies of AT&T are crisis management and viewgraphs. -- Dan Stanzione
Each time we take a Newton step, we hit the snare drum.  -Eric Grosse
Increase your product value with autographs
11/28: Macrocode caused entire 5990 complex to crash 17:15 - 18:14.
Blessed are the peacocks, for they shall be called sonship of God.  -Matt. 5:9 as rendered by QuickVerse 2.0
server bootes available on 19.5
Ask Ken.  He hates Everything.
Rule 3: If the character is comprised of a container without another radical, then Rule 3 will not apply.
You don't want to be alone when you're learning C++.
There are two rules for success in life.  Rule 1:  Don't tell people everything you know.
"parser/lex.c":2609:redeclaration of undefine from some line -2555
BASH is great, it dumps core and has clear documentation.  -Ari Suntioinen
Efficiency is doing things right, but effectiveness is doing the right thing.
To keep this fortune fresh, ECC has been added to the file system.
This fortune displayed on 100% recycled pixels.
The lucky chair was last auctioned in 1924 in Denmark when its previous owner also went bankrupt.
Beware of bugs in the above code; I have only proved it correct, not tried it. -Donald Knuth
att-xx # Apr 30 16:31:11 timed[119]: THIS MACHINE IS A SLAVE
I can't go to the mall; I have to write a sonnet. -- Rebecca Bregman
An economic reality of our time: computerized job deskilling. - a book review in Science
The true ideologist does not let mere facticity impinge on his perfect understanding of the universe.
one with nintendo/halcyon symbiosis/hand thinks for itself
cold matsushita/their technology stronger/enslaves our people
midori ito/girl finds glory, is broken/they can rebuild her
honda seatcovers/winter warm and summer cool/little lambs no more
the sand remembers/once there was beach and sunshine/but chip is warm too
oh no godzilla/guns and planes cannot stop him/tokyo is ablaze
samurai fighter/keyboard and mouse are his sword/digital battles
DAT arrives/frequency notch treachery/people are not fooled
young Sony worker/innocent hands build Walkman/tears run down faces
/usr/games/lib/fortunes.dat: Read-only file system
Credo Elvem ipsum etiam vivere.
Estne ebriamen de furfure avenaceo factum?
Hostes aliengeni me abduxerunt. Qui annus est?
Of course he [Jim Morrison] is dead and that is a high price to pay for immortality. -Gloria Estefan
There's no such thing as a simple cache bug. - Rob Pike
HELP! MY CAPS LOCK KEY IS STUCK DOWN, AND I CAN'T GET IT UP!
The tree of research must be fed from time to time with the blood of bean-counters, for it is its natural manure. -Alan Kay
The tree of liberty must be fed from time to time with the blood of patriots and of tyrants, for it is its natural manure. -Thomas Jefferson
Unix broke upon the world as a refreshing breeze.  -Doug McIlroy
The specific heat of a solid slag is the weighted average of the specific heat of the constituent oxides.  Westyn's Rule
Two organic acids which are precipitated by the same base must have like configurations.  Winther's Rule
In an electrolyte, the product of the equivalent conductivity at infinite dilution and of the viscosity of the solvent is a constant.  Walden's Rule
The least solvated compound is most stable at high temperatures.  Van't Hoff's Rule
Higher temperature favors higher enthalpy; Higher pressure favors smaller volume.  Van't Hoff's Rules
The isomer with the higher dipole moment has the higher physical constants, regardless of the heat content.  Van Arkel Rule
$S sub m$ < 6.7 J/molK implies anomaly.  Tiwari's Rule
The erosion rate of a metal depends upon the melting point.  Smeltzer's Rule
If a slide is not readable when held at arm's length, it will not be readable when projected from the back of a conference hall.  Slide Rule
Impurities to the left of the host in the periodic table trap hydrogen; those to the right do not.  Shirley-Hall Rule
Phase boundaries, when produced, must extend into fields with a higher number of phases.   Shreinemakers's Rule
High K/G implies ductility; low K/G implies brittleness.  Pugh's Rule
A reagent will approach a ketone carbonyl group from the side with the smaller attached group.  Prelog Rule
In the anomalous Zeeman effect, lines of the same series exhibit the same pattern.  Preston's Rule
Oxide/metal volume ratios which are very different to unity imply poor oxidation resistance.  Pilling-Bedworth Rule
In diamagnetic organic compounds, the molar magnetic susceptibility is an additive property.  Pascal's Rule
Like functional groups in like surroundings make like contributions to the optical rotation.
The boiling point of an organic isomer is proportional to the density of the liquid at the boiling point.  Montgomery's Rule
Other factors being equal, the metal which is most susceptible to failure is that with the lowest boiling point.  Mogro-Campero Rule
The fugacity of a constituent in a mixture of gases at a given temperature is proportional to its mole fraction.  Lewis-Randall Rule
In dipole radiation, only transitions between terms of opposite parity are allowed.  Laporte's Rule
Equal differences in the chemical composition of organic compounds give equal changes in boiling point.  Kopp's Rule
Avoid point loads.  Areal loading is best, followed by line loading.  Katz Rule
Avoid stress concentrators.  Maintain structural compliance.  Katz Rule
Minimize the severity of impact.  Katz Rule
Keep components as small as possible.  Katz Rule
Machine components very carefully.  Katz Rule
Factors which cause a marked decrease in the liquidus slope have a greater relative effect on the solidus slope.  Hume-Rothery Rule
Electricity travels one foot in a nanosecond.  Hopper's Rule
Atoms of even atomic number are more abundant in the universe than are atoms of odd atomic number.  Harkin's Rule
The sum of the g-factors is the same for strong and weak magnetic fields, for a given value of M.  g-Permanence Rule (Pauli)
The solid particle erosion rate of annealed face-centered cubic metals is inversely related to their hardness.  Finnie-Wolak-Kabil Rule
Metals mix with insulators if the reaction enthalpy is negative, and not if it is positive.  Enthalpy of Mixing Rule
One quantum of absorbed radiation activates only one molecule.  Einstein Rule
The ratio of the temperatures at which the vapor pressures of two similar substances are the same is a constant.  Dång Rule
Elements with high melting points have low coefficients of thermal expansion.  Carnelly's Rule
Reactions of Diels-Alder type with cyclopentadiene give cyclanes with a methylene bridge across a cyclohexane ring.  Bredt Rule
There is a clear relationship between the elastic modulus and the resistance to erosion.  Brauer-Kriegel Rule
The H atoms in ice lie on lines connecting the O atoms.  Ice Rule
There is only one H atom between any given pair of O atoms.  Ice Rule
Each O atom has two H atoms close to it and the unit of the water molecule is preserved.  Ice Rule
For any type of thing, there are more small things in the world than large things.  Benford's Rule
Carcinogenicity in polycyclic aromatic hydrocarbons is associated with the presence of a bay region.  Bay Rule
In order to obtain equations which reproduce a fractal object, tile the object with smaller copies of itself.  Barnsley's Rule
In dichroic crystals, the faster ray is less absorbed.  Babinet Rule
To calculate the slope of the best straight line through a set of points, join the first and last points.  Bancroft's Rule
The rate of a chemical reaction approximately doubles with each 10° rise in temperature.  Arrhenius Rule
In general, cis compounds have a higher density and higher refractive index than do the trans isomerides.  Auwers-Skita Rule
The sum of the maximum positive valency exhibited by an element and of its maximum negative valency is 8.  Abegg's Rule
A substituted biphenyl can be resolved if and only if the sum of the hanging bond lengths is greater than 0.29nm.  Adam's Rule
You know how when you're a virgin you wanna try everything and do it right?  -nls
Some time between 1991 and 1992 computers will start to kill human beings in a way that will be noticed. John Cullyer, head of RSRE.
NOTE..NO WEATHER WILL BE AVAILABLE NEXT WEEK, JULY 22 THROUGH THE 26TH.
Outside of a dog, a book is man's best friend.  Inside of a dog, it's too dark to read. -- Groucho Marx
And then there is of course the assumption that the disc is not made of beef and tossed with a hungry dog standing nearby. -Lambert Meertens
	int three = 128+64, two = 128, one=64;
Help Run Uninsured Motorists Off the Road -- Ohio registration renewal form
If you can't stand the heat, get a pool.
If you can't stand the heat, get out of the oven.
A bird in the hand is messy.
Don't count your chickens, eat them.
You can't teach an old dog new math.
When in Rome, do Roman numerals in math.
When in Rome, do bulls run around town?
Too many cooks, so little meals.
A fool and his money are my best friends.
A penny saved is one cent.
Look before you run into a pole.
A watched pot never disappears.
A rolling stone makes you flat.
A rolling stone is a singing rock group.
Every cloud has a wet spot.
You take a banana, you get a lunar landscape.  -J. van Wijk
"Buffalo never Oink" -- a South Dakota travel brocure.
Choose your spouse carefully. -- Susan Dorward
Ken is very smart but also very opinionated.  -- Doug Gwyn
Anthony Burgess reports a friend's rendezvous with the ideal mannequin, all legs and no breasts. It was like going to bed with a bicycle.
Narcissists receive callers without opening the door.
If Bell Labs is a tree, research is a blossom, development is the fruit.
You have to be careful not to get locked into Open Systems.
It is likely that 2^104 is an ultimate limit on storage space, unless we want to turn New Jersy into a DRAM.  -chuck@pierre.mit.edu
Any worm measuring bigger than 2 metres is a big worm. - sign in Gippsland Giant Worm Museum
Our first 'smoke' test showed that it is possible to hear Bob Marley and The Wailers through three feet of concrete.
UX:mail: INFO: No mail.
There is a need to keep from being locked into Open Systems. --IBM sales rep
I'm giving the demo so why don't you just shut up?  -rob (to ast)
/*  I APOLOGIZE FOR THIS CRAPY CODE -- presotto */
X   Moul - Ovum
Testing is for bunglers.  Properly designed mechanisms work properly. -E.E. Smith (Skylark 3)
The Democrats just stand for `I want to be a Republican,' and the Republicans stand for raw evil. -Frank Zappa
lp on plan 9 is fixed. -pg
no more than 1 lp fortune per day -- rob
The overhead involved in using a computer system is high enough that few people routinely use more than one.  -Mike Lesk, 1980
I think we should tread very carefully on governments that are constitutionally elected.  - George Bush
This is my prediction for the future: whatever hasn't happened will happen, and no-one will be safe from it.  -JBS Haldane
I have lived in a few cities: Nairobi, Edinburgh, Bradford, London, Sydney, New York. Washington is much nicer than Nairobi. - Piers Lauder
Real software has its own 800 support line.   Stu Feldman
Communism must be like one big phone company. Lenny Bruce
HONK IF YOU'RE ENTHUSIASTIC
Don't the days seem lank and long when doughnuts don't come in.
Eadum sunt, quorum unum potest substitui alteri salva veritate. -Leibniz
It's like sticking your hands in someone else's pants: it just doesn't feel right.  NP Nelson
Military intelligence can be a contradiction in terms.
Recoilless rifles - aren't.
A sucking chest wound is nature's way of telling you to slow down.
The enemy diversion you are ignoring is the main attack.
If the enemy is within range, then so are you.
Professionals are predictable, but the world is full of dangerous amateurs.
Killing for peace is like whoring for virginity.
Marine math: 2 beers times 39 Marines is 49 cases.
Body Count Math: 2 VC plus 1 chicken and 3 pigs equals 37 enemy killed in action.
Low expectations are the key to happiness. - Pamela Zave
Sometimes I think the surest sign that intelligent life exists elsewhere in the Universe is that none of it has tried to contact us.  -Calvin
20 octets is 160 guys playing flutes -- rob
	chan[2]='m';	/* Ooh, careful! */
Many system design flaws can be traced to unwarrantedly anthropomorphizing the user.
The common theme to all three of the A320 crashes is lack of altitude.  -Aviation expert.
Clear your screen after you log off.
#define struct union /* Great space saver */
Maybe there is no death as we know it.  Just documents changing hands.
It's the only avant-garde we got.
When times are bad, people feel compelled to overeat.
If you could become more ugly, it would help your career enormously.
You have a vast capacity for becoming embarrassed on other people's behalf.
You have important hair.
We seem to believe it is possible to ward off death by following the rules of good grooming.
I just hate to be pushed around by some @#$%^& machine. - Ken Thompson, on the i960
Easy reading is damned hard writing.  - Sheridan
After hydrogen, the most common thing in the universe is stupidity. -Harlan Ellison
	MOVL	R1,
How can you write a big system without C++?  -Paul Glick
So, if you put a G on the front you have to put a zero on the back?  -Ken
   As usual, please try to use a reusable mug.
I'd use plan 9 before i'd use bitfields -- pjw
Of the physical pages in use, 3436738592 pages are permanently allocated to VMS.
February marks the fag end of Bombay's short mild winter spell.
Let's share those threats
Let's not beat ourselves up for being defensive
There's some Jungian principles inside us
There are many feedback loops into your system
Time to take a stretch-break (possibly self-managed)
There'll be massive chaos downstream
Feel your own power
We're getting lots of dysfunctional acting-out of anxiety
We've got to raise this to a double-loop system
We've got to keep upping the control until one of us goes nuke!
The conflict has to be ritualised in order to get it addressed
If you carry on, head-to-head, on `solution' you don't get anywhere
That sort of `collusive carrying' just isn't on.
Everybody will soon be owning their incompetence
They'll be scapegoated because they have a valency for incompetence
You gotta pump-prime your seed-corn
You need a proactive planning horizon
I want you to feel your own power
Let's fix a frame on these issues and focus on the power dynamics in the room
Infinite retry on parallel printer time-out
A system is Unix if and only if it will compile and run everything on prep.ai.mit.edu without restrictions.
Can you sum up plan 9 in layman's terms? It does everything Unix does only less reliably - Ken
(hch:) Can't find /you/must/specify/HCDIR/bin/hc@sun41com
There are tons of bad AD and DA convertors out there, but they don't make Nyquist wrong. -Marc LoCascio
This is like ignoring both the speed limit and the odometer in your car.  It won't get you far. -Kenneth P. Birman
I didn't really expect to find elephants on the airport runway, and there weren't any.  -dmr
"Objective" and "subjective" are not entirely subjective. - Penn Jillette
The alpha is doing a lot more computation than a lightbulb -- rob
It is rarely wise to underestimate the taste of the truly pious.
WAIS allows relevance feedback
Once you start talking about Nothing, people think you're some sort of idiot. -John Cage
Why is there only one Monopoly commission?
If something could be done about cache misses, programs would run about twice as fast.  -Andrew Appel
mount: mount /srv/boot /n/bootes: permission denied
Kudos to everyone on the WKSH Team!
the application "unknown" has unexpectedly quit, because of sys.
BUSINESS UNIT NEWS: 
   o UNIX System Labs launches a torrent of announcements 
/bin/ls: exec header invalid
If you wish to vote "No opinion" on any topic, you must cancel gut.wksh and execute gut instead.
Huiswants es.
Motto: Compute with fermions, communicate with bosons.  -Vincent Heuring
The flip side of change is trust.   -George Bush
We are changing the alignment, not the membership.  -John Mayo
The President [Bush] is just a guy who sucks in life.  - White House aide
At MIT the server is the unit of invention.  -Rob Pike
The dependency dag for a target consists of nodes connected by directed arcs.
I was an asshole when you (philw) were still a gleam in your father's eye.  -Bob Flandrena
Beleidigungen, Beschwerden und Flames bitte an NUL schicken.
Fashion, though a goddess, is a fool, and all her worshippers..are nincompoops. E. S. Barrett
You advocate a lot of egg sucking but you're not very forthcoming with the eggs.  Phil Winterbottom (to ken)
My pile of equipment is bigger than your pile of equipment -- philw
Mathematics is ... the hot and chaotic work of the devil.  Quayle needn't know this.  -Vaughan Pratt
51HAren't you glad you don't have to do this anymore?
Virtual caches are the worst idea since register windows. - Phil Winterbottom
cetus news: Cannot open /usr/news/
``Ausserordentlich chaotisch, dissonant, und häßlich.'' -review of premiere of Beethoven's 9th
Why is the text on my screen turning umop-apisdn?
There is no reason for any individual to have a computer in their home. -Ken Olsen, 1977
coproc proto viol
Time wounds all heels.
Live fast, die young, leave a long publication list.
150 Opening ASCII mode data connection for 9ss.Z.
Maximum number of users exceeded - try again laterConnection closed by foreign host.
Connected to 192.65.218.43.
When in doubt, twirl.  -Ted Shawn
¿Tôø müçh öf á gòód thìng?
Writing about music is like dancing about architecture. -Frank Zappa
Quando la neve si scioglie si vede la merda.
I wonder how Plan 9 could be used to monitor shut-ins? -- L. Bernstein
Semper ubi sub ubi.
Lesson 10 - Who killed Bambi?
Is it a lot of blokes with long hair and guitars around their necks? -Keith Richards (on Nirvana)
Much may be made of a Scotchman, if he be caught young. - Samuel Johnson
Memory tests terminated by keystroke
Rome deserves you. - Tiberius to Caligula.
as1: Error: ../bpvvv.c, line 1324: Too many float literals--compile with "-Wb,-nopool"
	} /* the next line is indented funny to preserve old indentation */
                syslog(LOG_WARNING,"/etc/copyright may be too large");
Cab drivers are living proof that practice does not make perfect. - David Dinkins
It's well we cannot hear the screams/That we create in others' dreams.
At twilight, objects often start/To make odd sounds and fall apart.
A random thought, if said aloud,/May soon attract a hostile crowd.
A timely use of glue or paste/May well prevent a shocking waste.
One cannot hope to end one's life/With nothing but a butter knife.
The seaweed on the shore cries out/But only it knows what about.
It's possible to pick up crumbs/By pressing on them with the thumbs.
The one who wants to put on airs/Should not attempt them on the stairs.
The person who today is here/May by tomorrow disappear.
The helpful thought for which you look/Is written somewhere in a book.
A one- or two-inch piece of string/Cannot be used for anything.
Upon your person keep a pill/In case you're taken deathly ill.
Britain has football hooligans, Germany has neo-Nazis, and France has farmers.  -The Times
Government Warning: According to the Surgeon General you're going to die.
Perscriptio in manibus tabellariorum est.
Please do not urinate in the rain gauge. - sign on Mt. Kilimanjaro
Nothing is worth spending a week with bureaucratic Germans. -rob
The implementation should provide some reasonable value (80? 255? 509?) rather than something unusable like USHRT_MAX. - ANSI C Rationale
Real data are normal in the middle and Cauchy in the tails.
accom: Warning 310: restart.c, line 148: A file with no declarations or definitions is accepted as an extension to ANSI C
Always go for overkill.  -Lou Reed
Available only for MEI designed 3.5"MO series. Do not use it absolutely in another drive.
Is the tool broadly supported or maintained?
You don't need rain in a movie, and you don't need ``paradigm'' in a book. - Penn Jillette
Routine work drives out creative work - Arno Penzias
If my career depended on dot-dot, I'd be on the dole.  - philw
>>>'/܇D/' panic: decref
150 years ago everybody was a Christian Scientist.   dmr
              Featuring the Intel 14.4EX with V.42bis and MNP5
Look what David Koresh did, rather than go home and visit HIS parents! 	- Teller's mother
It appears that people would rather have their hands on the wheel and drive off the cliff than be thrown over naked. (scj in Computing Systems)
'Gigabit' seems to mean 600 megabits.  It's a VAX gigabit.  - ken
Valid license for the following required when not using dbx on kernel.  Product OSF-DEV (OSF Developer's Kit): No license found.
Life is hard.  It's even harder if you're stupid.
I'm pulling *something* here.  - Dom Marotta
From: No gas will be sold to anyone in a glass container <SKASS@DREW.DREW.EDU>
Figure 1b shows how C++'s pure virtual functions turned a black box into a toroidal design
(accom): tasks.c, line 7576: accom: Internal:   Out of tree space.  Cannot continue compilation.  The current size was specified as or defaulted to -Wf,-XNh1000 giving a table size of 1000.  Recompile giving a command line option to increase the table size.  Example option giving a larger table: -Wf,-XNh2000
No UNIX system on the market supports more standards than DEC OSF/1.
I despise the little old ladies of both sexes. -Charles Ives
What does sound have to do with music? -Charles Ives
              YOU are welecome to Cheboxary!!
I don't need any help, 'cause I'm not doing anything.  -Howard
ugen: warning   : line 979 : ../../../../../../src/usr/ccs/bin/ugen/const_idiv.p, line 230
VAX portability is assured.
Additionally, the paper [xxx] can serve as an excellent tool to help any new project introspect about how it will do business. - Jim Coplien
We are not wholly an island, except geographically.  - John Major
I'm drawing a line under the sand.  - John Major
Always wear underpants beneath your kanzu before you mount your bicycle.
Humiliation is intrinsically comic. - Frank Conroy
C gains much of its vaunted efficiency by employing a very powerful pre-processor, usually called a ``programmer''.
T-shirt: Mom and Dad invented OOP in the 70's and all I got was C++
  DEC OSF/1 V1.2 Worksystem Software (Rev. 10) The installation software has successfully installed your system.
BD-445G (red compact car) lights no longer on
Checking system endianess...                    Big endian
Subject: **  PROCESS CHANGE ALERT  **********************   ERROR:(-)input line 8:LI:no lists active     Distribution: ihlpb!pca-usi5e 
If Dennis Ritchie were the man who developed Modula-2 then C would be long forgotten. -Tarjei Jensen
From --rw-rw-rw- Sun Aug 15 04:21:17 EDT 1993
If you're smart you'll remain ignorant - bobf
They bit the wrong chicken's head off with their own teeth and got blood all over their shirt - nls
Everybody gets so much information all day long that they lose their common sense. -Gertrude Stein
A coach is someone who lives and behaves Our Common Bond, and views each coaching interaction as a real measure of truth.
Free! Free!/A trip/to Mars/for 900/empty jars/Burma Shave
Standards is an area that is constantly changing.  -Carl Cargill (ed. ACM StandardView)
This will be sexy: nothing like a good tty driver to turn you on. - Phil Winterbottom
To find out a person's userid, ask him.  --IBM VM/CMS Primer
Blessed be the optionless, for they shall not eat gnu
Every old barn can use a little paint. - Tammy Faye Bakker on Primetime Live 11/18/93
The sendmail security patch will be available in approximately two weeks.
Diversity better than intensity -- Xerox PARC talk (conclusion)
Sir Francis Drake circumcised the globe with a hundred foot clipper.
If a train station is where a train stops, what's a workstation?
I just want a bare-boned, straight EMACS.  - Rae McLellan
Cohesion and coupling are intertwined.
SPEC results inflated by too many compiler flags. -Microprocessor Review
a.out: does not have gp tables for all it's sections
?warning: write might change good version of `sendmail'
Being afraid of X is about as sensible as being afraid of sendmail.
I wish these damn scientists would leave intelligence to the experts.  -Gen. Richard Stillwell (CIA)
#include... <depending on your compiler>
I don't like to spend my time on sterile discussions -- Bjarne Stroustrup, in The Evolution of C++
There is no problem so simple that management can fix it.  - Dave Presotto
Fat Triangles Determine Linearly Many Holes
We send our young men to fight wars.  Ants, at least, send their old women. - E.O. Wilson
#/->/ := #/->/
*** Message content is not printable: delete, write or save it to a file ***
It's a tiny change to the code and not completely disgusting. - Bob Manchek
I want to die peacefully in my sleep like my grandfather, not screaming in terror like his passengers. --Charlie Hall
emacs: Terminal type "emacs" is not powerful enough to run Emacs.
xterm: Error 50, errno 1: Too big
RMS was neither ignorant nor lying.  He simply used word choices that created confusion.
User Needs Drive IS To Wherehouse -- OS Today headline
Probably not a complicated question - how does the mount driver work? - C.R. Kalmanek
Subject: no subject (file transmission)
If you find any unidentified object under your seat, please do not attempt to smoke it.
ML is a language for people with excess IQ points. - John Ousterhout
The Big Bang theory: In the beginning there was nothing, which exploded.
Someone's searching for sex in the 800 database.
1181258 SAVECORE SEGMENTATION FAULT WHILE TRYING TO SAVE CORE
Middleware is the implementation of a concept. - Ed Szurkowski
FOUND IN SUPPOSEDLY EMPTY EQUIPMENT, MATTOON, IL POST OFFICE 61938
To back up the 57th platter in the file system type 'wormingest 49; wormcp 62 49'.
/n/a:/100377-15/sun3/4.1.1/sendmail: Ascii & Extended Latin & Cyrillic & Hebrew text
Not responsible for errors in typo.
This is AT&T.  Communication is our business, not our mode of working. - Jim Clemans
How much clearer everything is when you underline! - Ron Hardin
Improve our mechanisms for sharing BU and "white space" opportunities knowledge and laboratory and center capabilities so as to assure optimal use of contrained resources.
The Internet grows hyperbolically, but is usually described elliptically. - Dr. Internet
Microsoft - We put the "backwards" into backwards compatibility.
Many will urinate with joy in having shared in the hacking of your neck.  - a comment on netnews
[Acting] was a lot more difficult than modeling.  There's a lot to remember.  -Cindy Crawford
Everything that can ever be invented has been invented -Charles H. Duell, Commisioner of U.S. Patents, 1899.
The complex-type shall be a simple-type.  ISO 10206:1991 (Extended Pascal)
The "do one thing well" philosophy underlying UNIX is best realized in a fully object-oriented environment. - some Linux guy
Subject: slip:UX:killall: INFO: killing pid 140 <routed>
There are only two industries that refer to their customers as "users".  - Edward Tufte
I think you have to really be an engineer to run a technology company. - Bill Gates
hd2: model oCnnreP repieharsl6	with default 1471 cyl 5 head 17 sec
I want to make sure everybody who has a job wants a job - George Bush, during his first Presidential campaign
This is a great day for France! - Richard Nixon, while attending Charles De Gaulle's funeral
I believe we are on an irreversible trend toward more freedom and democracy. But that could change.  - Dan Quayle
What a waste it is to lose one's mind-or not to have a mind. How true that is. - Dan Quayle addressing the United Negro College Fund
The caribou love it. They rub against it and they have babies. There are more caribou in Alaska than you can shake a stick at. - George Bush, on the Alaska pipeline
I hope I stand for anti-bigotry, anti-Semitism, anti-racism. This is what drives me. - George Bush
Mondale: George Bush doesn't have the manhood to apologize.  Bush: Well, on the manhood thing, I'll put mine up against his any time.
#define n_zeroes	_n._n_n._n_zeroes
To me, boxing is like a ballet, except there's no music, no choreography and the dancers hit each other.
Consider the daffodil.  And while you're doing that, I'll be over here, looking through your stuff.
Sorry, the passowrd you asked for is too long.  Please choose a password that is 2147459392 to 8 characters long.
Television is a medium.  So called because it is neither rare, nor well done. -- Ernie Kovacs
The last good thing written in C was Franz Schubert's Symphony No. 9.
This is the best recruiting season we've ever had.  - Ken Thompson, Dec 21, 1995
Don't anthropomorphize computers - they hate that!
Press Ctlt-Ds Ctlt-Del a to reboour reboour mach
cfe: Warning 712: irix.c, line 311: illegal combination of pointer and integer .... ? (   (((long)*arg & 0x1)      ?(*arg = (char *)((long)*arg + 7),(char *)((long)*arg-6-_VA_FP_SAVE_AREA))     :(((long)*arg & 0x2)         ?(*arg = (char *)((long)*arg +10),(char *)((long)*arg-24-_VA_FP_SAVE_AREA))  :(        ((*arg)=(char *)(((unsigned int)(((char *)*arg)+((__builtin_alignof( long))>4?(__builtin_alignof( long)):4)-1)) & -((__builtin_alignof( long))>4?(__builtin_alignof( long)):4)) +               (((unsigned int)(((char *)sizeof( long))+((4)>4?(4):4)-1)) & -((4)>4?(4):4)) ),         (((char *)*arg) - ((((unsigned int)(((char *)sizeof( long))+((4)>4?(4):4)-1)) & -((4)>4?(4):4))  - sizeof( long))) )  )))                                  : (  ((*arg)=(char *)(((unsigned int)(((char *)*arg)+((__builtin_alignof( long))>4?(__builtin_alignof( long)):4)-1)) & -((__builtin_alignof( long))>4?(__builtin_alignof( long)):4)) +               (((unsigned int)(((char *)sizeof( long))+((4)>4?(4):4)-1)) & -((4)>4?(4):4)) ),         (((char *)*arg) - ((((unsigned int)(((char *)sizeof( long))+((4)>4?(4):4)-1)) & -((4)>4?(4):4))  - sizeof( long))) ) )))[-1] );
Here in Nuremberg, information hiding is much more popular in the organization than it is in the software...
yes >/dev/kmem		# Shutdown is broken. This'll have to do
"No one steals our chicks," sneers Duke, "and lives."
You must engineer for the technology curve and set the intercepts to match the emerging business markets. - Phil Winterbottom
Wovon man nicht sprechen kann, darüber muß mann schweigen.
When your hammer is C++, everything begins to look like a thumb. -- Steve Hoflich, compl.lang.c++
This is SGI Bug #375613.
If mamma ain't happy, ain't nobody happy.
error code 4A: Could not free fingers from storage slot after insert
At Microsoft, quality is job 1.1.
You are thehttp://counter.digits.com/wc/-d/4/cpluscounter visitor since May 1, 1996
It's hard to compete with conventional cukes.
PEALSE CAN YOU ADIVE ME WHAT TO DO :)
License Error : The license for this product(SPARCompiler C) has expired
ARMY FOCUSES ON SECOND BASE IN SEX PROBE
In Pursuit of Software Excellence: If you want to become a leader, follow the leaders.
Thank you for sending me a copy of your book.  I'll waste no time reading it. - Moses Hadas
In label expressions, <> expressions are ignored inside .char expressions.
I have made this letter longer than usual, because I lack the time to make it short.  Blaise Pascal  in: Lettres Provinciales, #4, Dec 14, 1665
If I had more time, I should have written you a shorter letter.  Mdm. de Staël (1766-1817)
UNIX geek since 486651600
Speed is more important than anything else in management. - Henry Schacht
No proper program contains an indication which as an operator-applied occurrence identifies an operator-defining occurrence which as an indication-applied occurrence identifies an indication-defining occurrence different from the one identified by the given indication as an indication-applied occurrence. - Algol 68 Report
Cwm fjord bank glyphs vex't quiz.
Outside of the killings, Washington has one of the lowest crime rates  in the country. -- Mayor Marion Barry, Washington
Clearspeak also is a euphemism for what advertising people call the "dominant brand" or "masterbrand" approach.  - Bell Labs News, April 1, 1997 (but not April Fool's)
My favorite thing about the Internet is that you get to go into the private world of real creeps without having to smell them. - Penn Jillette
Note: gtest.java uses a deprecated API.  Recompile with "-deprecation" for details.
Malcolm [grandson of Malcolm X] walked into court yesterday afternoon to face charges of juvenile delinquency, mumbling and hiding his head under a red plaid blanket. - N. Y. Times
Usenet is like letters to the editor, only without an editor.  - Larry Wall
Who are you going to believe? Me or that lying sheep? -- Jim McKie
Line 3 of "/usr/add-on/trouble/bin/trouble": syntax error; saw '<'. Undefined: "Main"
I don't think you can really know how heavy something is until it has fallen on you.  --LeMel Hebert-Williams
I don't think so, therefore I'm probably not.  --Alan Smithee
Are you sure you want to send 'Pleonasm' to the recycle bin?
The days of the digital watch are numbered.  -Tom Stoppard
^Eds: SUBS 3rd graf, `So what's ...' to remove accent from 'derriere.'
WELL YOU MISSED IT. I WAS ON THE RADIO AND WAS IN A CONTEST TO WIN FLEETWOOD MAC TICKETS. I WAS MCNICKOLS. I WORE A TUTU AND POURED 2 GAL. OF HERSHY CHOC. OVER MY HEAD. I GOT 2ND A GIRL IN A TEDDY EATING DOG FOOD AND BARKING WON. MALE JUDGES GO FIGURE (IT WAS SEE THROUGH)
<A HREF="http://images.nytimes.com/RealMedia/ads/click_lx.ads/www.nytimes.com/index.html/0/Left/attbmd011/att4-head.gif/63636232316630323334393032316530" target="_top"><IMG SRC="http://images.nytimes.com/RealMedia/ads/adstream_lx.ads/www.nytimes.com/index.html/0/Left/attbmd011/att4-head.gif/63636232316630323334393032316530" border=0  WIDTH=468 HEIGHT=60 ALT="Just add AT&T" ></A>
It's a very good idea to compare apples and oranges, that's a big part of what thinking is about. - Penn Jillette
Your glasses will include miniature video cameras that will give you a stereo vision of your environment. -- Arno Penzias
Music is the pleasure the human soul experiences from counting without being aware that it is counting. -Leibnitz
^Bearded lady, friend killed in possible case of mistaken identity<
I think I'm getting mellow in my old age. - Phil Winterbottom
Cu' si marita sta contentu 'nu giornu, cu' ammazza 'u porco sta contentu n'annu
How can they identify me?  I had a mask on.  - Weird News criminal
If it has more than three chords, it's Jazz. - Lou Reed
If there were a god, we'd be able to walk upright without back problems. -Penn Jillette
Birds are entangled by their feet and men by their tongues.
No viewpoints are banned.  Except those banned by the law. -- Iranian President Mohammed Khatami
uopt: Warning: insert_aux__91deque__pt__78_21basic_string__pt__2_c45__default_alloc_template__pt__13_XCiL11XCiL10XCUiL10F103__deque_iterator__pt__79_21basic_string__pt__2_cR21basic_string__pt__2_cP21basic_string__pt__2_cXCUiL10105__deque_iterator__pt__81_ exceeds size threshold; to optimize this procedure, use -Olimit option with value >= 1217.
"shaneystl.c", line 24: Note: Type "CC -migration" for more on anachronisms.
The Lucent Real Estate Strategic Intent: "One ignited team, unleashing productivity through bold work place solutions and unforgettable service."
This program cannot be run in DOS mode.
Your mouse has moved. Windows NT must be restarted for the change to take effect. Reboot now?
Millenium parties/with loud music, lights and joy;/then, how cold!
Stupid programmer,/think ahead next time, when the/power's back.
Windows 98 is/compliant with minor bugs,/store water!  
Hire more programmers/for Y2k Bug now -- Oops,/lights are out! 
Y2k is just/a scam for consultants -- hey/Martial law!
Two digits lost,/the railroad switch spills coal --/scavengers!
UX:cancel: WARNING: Request "SPARCprinterII-64" is done. TO FIX: It is too late to do anything with it.
If you give a man a fire, he'll be warm for a day. If you set a man on fire, he'll be warm for the rest of his life.
We don't write assembly language, we steal it. - brucee
The Elements of Style is as much as guide to success as it is to grammer. - Reader on amazon.com
Simon says, ``Don't be so suggestible.''
The IAU reports that RX Pup has returned to a state of high excitation and has had a mass-ejection event.
JAVA truly is the great equalizing software. It has reduced all computers to mediocrity and buggyness. - NASA's J-Track web site
warning: Hit heuristic-fence-post without finding enclosing function for address 0xfa2e470
You're just a hologram - I outrank you.
Mechanically Separated Chicken. - Ingredient label
You have mail.™
Stare at the thumbnails closely to view larger images.
This is a ruggedized telephone, it does everything a normal telephone does, but ruggedly. - Al Gore
All along the untrodden paths of the future, I can see the footprints of an unseen hand. Sir Boyle Roche, MP
There's really no way to fix this, and still keep Perl pathologically eclectic.
Welcome to Netscape Quality Feedback Agent - Step 1 of 3
FOR FASTER SERVICE, PLEASE CALL US WITH YOUR REFILLS 24 HOURS IN ADVANCE
Anthrax is cool. - Tad Hunt
(never claims generated from LTL formulae are stutter-closed)
/text/plain00charsetUTF-80 you stuff by snail,
War in the Clinton era is just P.R. by other means.  - Michael Hirschorn 
If I can see a bit further it is because I stand on the shoulders of Hungarians. - Mathematician Paul Winkler
I don't want any yes-men around me. I want everybody to tell me the truth even if it costs them their jobs. - Sam Goldwyn
We do not need phones, we have a lot of messenger boys - British Scientist in 1876
I did write and prove correct a 20-line program in January, but I made the mistake of testing it on our VAX and it had an error, which two weeks of searching didn't uncover, so there went one publication out the window.  - David Gries, 1980
It's not whether you win or lose; it's where you place the blame.
ISDN: PPP-Daemon funktioniert nicht mehr
Hey medalist, don't forget to take out the recycling. -- Bonnie Thompson
There are three kinds of people - those who can count, and those who can't.
You buy 'em books and you buy 'em books and they just chew on the covers.
I wouldn't give your troubles to a monkey on a rock.
This should only be a momentary outage, of about 10 minutes or so.
The ignored registers are for future backward-compatible extensions. - IA-64 Application Developer's Architecture Guide
/lib/shakespeare/sonnets: limbo program
Does the additional overhead of doing a function call make this act less atomic? -- pip
A cockroach will live nine days without its head, before it starves to death.
Are you proposing a solution or just whining? - Dave to Dave
Nothing says "happy father's day" quite like the flesh-stripped skull of a moderate sized rodent. - Corey Thompson
You are running the GNOME File Manager as root.  As root, you can damage your system, and the File Manager will not stop you.
A document with the name `junk.xls' is already open.  You cannot open two documents with the same name, even if the documents are in different folders.  To open the second document, either close the document that's currently open, or rename one of the documents.  - Microsoft Excel
When your output is negligible, losing a day's work is insignificant. -- presotto to rsc
Expensive solutions to all kinds of problems are often signs of mediocrity.  - Ingvar Kamprad, founder of IKEA
Ches is the Dennis Rodman of science.  -Cliff Young
if your terminal stops booting, I'll be in the unix room.
! TeX capacity exceeded, sorry [main memory size=263001].
The system suspend request has been rejected.  To conserve power, shut down the computer.  - NEC Versa LX
If you don't find it in the index, look very carefully through the entire catalogue.  - Sears & Roebuck catalogue, 1897.
This program is protected by US and international copyright laws as described in the About box.
Lucent in Motion is almost in full swing.
pi + onions = opinions
If there was [sic] a single standard for the English language it would not be necessary to support redundant spellings.  - OSF1 ls(1) man page
Set an example for your kids by learning to read and write.
21st Century Cyborg Returns To Kill Waitress.
I'm smiling on the outside and beating you senseless on the inside. You creep! -- S.P. Eills
You will set the register!  To the correct value!
Anti-Virus Software Users: Some anti-virus software programs may interfere with the download and should be disabled while installing the Microsoft software.
You gotta think of fear as a tool. - Phil Winterbottom
His hand was bitten by his own side in an offhand way. - Mark V. Shaney
The more things change, the more he loves the flag. - Mark V. Shaney
Don't meddle in the mouth. - Mark V. Shaney
Will the call be routed on the same switch or will it go out over a truck to another switch?
I may be a bad woman, but I'm awfully good company. - Fanny Brice
apmd[105]: On-line: * * * (100% unknown)
P.P.S. Thanks for helping make BUY.COM the #l online computer retailer. 
I hope some animal never bores a hole in my head and lays its eggs in my brain, because later you might think you're having a good idea but it's just eggs hatching. - Jack Handey
I only lie to the ones I don't like, the ones who ask stupid questions.
The proofs of the associative, commutative, and distributive laws for the integers are exercises in induction which might be called ``Peano playing.''  - An algebra textbook
The observation could be "a real break-through" in osteoporosis treatment. - Science magazine
Life is very strange - compared to what? - Penn Jillette
Your search for difficentralia returned 0 article(s).  If this is too many articles you may want to narrow your search.  - www.nytimes.com
Sperm bank sued for tossing samples - Headline in Star-Ledger
Spell check: did you mean unicorde?  - altavista
The Linux, and in particular the Free Software, movement, if not the mark of technological progress, is the sign of social progress.  - muzzetta@videobank.it, in 9fans.
I do hope not to live long enough to see the launch of Quantum Windows. --Artur Ekert
In science, we give our highest award to people that prove us wrong.  -- Michael Goudeau
Indian Hill is like the Borg. -- Phil Winterbottom
My sister married a German. He complained he couldn't get a good bagel back home. I said: 'Well, whose fault is that?' - Emo Philips
--rwxr-xr-x M 9501 geoff geoff 1417216 Dec 30 14:16 .
log10: SING error  -- borland c/c++ 3.1
You have the power to write your own fortune.
.NOTICE;  ;?This comment is definitely out of date
If at first you don't succeed, sky-diving is not for you.
boot: nop...cfs...session...no physical memory
doofus is God-like
The quantity specified for 3Com Palm Vx is too great.  We only have -1 available.  - some e-commerce site.
Man-animals cannot fly!
Software is the stuff that never works, always has to be maintained, and hardware is the other stuff. - Arno Penzias
Money, sex, storage, and bandwidth -- these are the things where too much is enough. - Arno Penzias
linux-2.3.99-pre9.tar: limbo program
    temp &= 0x07FFFBFB; // clear bits 31 and 30
An error has prevented <%=ServiceName%> from locating the message.
8.out 723: warning: process exceeds 2100 file descriptors
A dirty mind is a perpetual solace. - Air Commodore Sir Charles Kingsford Smith
Vulcan Proverb: Only Nixon could go to China
Why I have to write echo "reboot" > reboot ? I prefer to write this.reboot = reboot   - <alter@cybercafe.com.ua> (Alt)
There's method in the key of C.
Computers come in putty-colored boxes and have AUTOEXEC.BAT files and run screen-savers with flying toasters, and brains do not.   - Steven Pinker
Your mail regarding "" will be read when I return.
Esperanto, why don't you come to your tenses.
That's why it's distributed.  So it's always wrong somewhere.
BT,DT,fixed quite a few of them. - Al "-15kLOC during the last year" Viro
Please wait while Microsoft Outlook exits.
First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it.  Burn them, it's a great symbolic gesture.   - Linus Torvalds
Kitchen: Selecting Blendolini Causes Choco-Banana Shake Hang
I hope I can finish the garbage collector before I run out of ice. - brucee
This recipe [for toad in the hole] will stand or fall by the quality of your sausages.  - Fanny Farmer
The machine FROG was re-named MESSIAH.
Your coat becomes like a car with the stereo playing and the car phone ringing.
Invalid null command.
We have discovered a pervasive nonstationarity.
No that's your chair.  Mine has the drum machine on it. - Tad
Not mistakes - highly co-ordinated mistake opportunity initiatives.
If your neck is as wide as your head ... take the day off.
She will have SME (subject matter experts) from her organization call you ...
Man who stand on toilet ... high on pot.
If your article contains quoted text please take some time to pare it down to just the key points to which you are responding, or people will think you are a dweeb!  -a unix news reader
The name "grep" comes from the vi editor.  - An undergraduate computer science course
gcc -Isomenonstandardplace -Dverylongoption -Wpleasedontcomplainaboutmyprogramiknowhatimdoing ilikethingstobeclearsoigivemyfileslongnames.c
You are a nuclear menace.  Your warhead should be dismantled.
A zone contains the domain names that the domain within the same domain name contains, except for domain names in delegated subdomains.
Subject: [9fans] Re: =?iso-8859-1?Q?=5B9fans=5D_R=E9f=2E_:_=5B9fans=5D_Sun_has_a_Plan_9_inspi?=\n =?iso-8859-1?Q?red_project_called_=22Brazil=22!!=3F=3F=3F?=
//******************************************* A L I G N M E N T  **********************************************
ntimesync.c:666 external redeclaration of: whatisthefrequencykenneth
It is my carefully considered opinion that C++ represents an additional hazard to the survival of a project. - Alistair Cockburn
	verb = a > b ? 'a': c > d ? 'd': 'c';
pwd: window deleted
Your personality is your greatest invention.
I'd rather make love amongst the flowers than take lots of cold showers.
There is not enough memory to load all your extensions.
VbeSignature should be set to 'VBE2' when  function is called to indicate VBE3.0 information is desired.
Zoinks!  Jimminy-jillikers, B-man, that is strange!  =)
A great deal of agonizing and very little decisiveness went into resolving this issue -- Rob Pike
/opt/gcc-2.95.2-irix6.2-o32/lib/gcc-lib/mips-sgi-irix5.3/2.95.2/cpp -lang-c -v -I. -D__GNUC__=2 -D__GNUC_MINOR__=95 -Dunix -Dmips -Dsgi -Dhost_mips -DMIPSEB -D_MIPSEB -DSYSTYPE_SVR4 -D_SVR4_SOURCE -D_MODERN_C -D__DSO__ -D_MIPS_SIM=_MIPS_SIM_ABI32 -D_MIPS_SZPTR=32 -D__unix__ -D__mips__ -D__sgi__ -D__host_mips__ -D__MIPSEB__ -D_MIPSEB -D__SYSTYPE_SVR4__ -D_SVR4_SOURCE -D_MODERN_C -D__DSO__ -D_MIPS_SIM=_MIPS_SIM_ABI32 -D_MIPS_SZPTR=32 -D__unix -D__mips -D__sgi -D__host_mips -D__MIPSEB -D__SYSTYPE_SVR4 -Asystem(unix) -Asystem(svr4) -Acpu(mips) -Amachine(sgi) -D__CHAR_UNSIGNED__ -g -Wall -pedantic -D__LANGUAGE_C -D_LANGUAGE_C -DLANGUAGE_C -D__SIZE_TYPE__=unsigned int -D__PTRDIFF_TYPE__=int -D__EXTENSIONS__ -D_SGI_SOURCE -D_LONGLONG -D_MIPS_FPSET=16 -D_MIPS_ISA=_MIPS_ISA_MIPS1 -D_MIPS_SZINT=32 -D_MIPS_SZLONG=32 u9fs.c /var/tmp/ccDttncm.i
The Business Controls Communicator has been renamed to the GFS Process Assurance Communicator.
We don't write anything in Perl anymore, because [ksh93] has all the functionality built in. - David Korn, quoted on Slashdot
mk: no recipe to make 'rio.data.fsys.menu.scrl.time.util.wctl.wind.xfid.'
Lucent Technologies and strategic partner Fatbrain are pleased to  announce ...
artist: unrecognized message 'Elvis Costello'
It's not only stupid it's wrong!
Routers don't need IP addresses. -- Alex Mezhibovsky
syntax error on line 1, teletype / syntax error on line 1, teletype * 0000110 e9 u 8a h ? q m P ` { a7 $ d4 | + ~ = /
So long as system messages are phrased as if a patronising aunt were addressing a retarded 4-year-old, they will continue to love it. - Patrick Ford on Macheads
NT password change form: Password Change Unsuccessful: DS getobject failed for WinNT://AP01/na01\presotto: Error 80005004,.
I hope my TV's software update finishes before Gilligan's Island is on.
rc: Usage: whatis name ...: fd out of range or not open
System time is a count of 100-nanosecond intervals since January 1, 1601.   - Windows DDK Docs
There is insufficient memory.  Save your document now. - Microsoft Word
0x00FFFFFFUL (ˈɒfəl). Also 4 ofall, 5 offale, -aile, 6 offalle, -awle,
The reasonable man adapts himself to the world; the unreasonable man persists in trying to adapt the world to himself. Therefore, all progress depends on the unreasonable man. -- George Bernard Shaw
A woman is only a woman, but I'm awfully good company.  - Bill Gates
It is most enjoyable to talk with you.
Lucky Numbers 12, 14, 19, 24, 36, 43
Lucky Numbers `{seq 100}
junk: 644 mode. Remove ? (yes/no)[no] : 
Pharr is about a day and a half.
OBJECTS IN MIRROR ARE CLOSER THAN THEY APPEAR
I found VC++ GUI programming more grief than COBOL using cards!  :-)
"If blackouts are going to occur, there's no reason for us to be kept in the dark," Governor Davis said.
 --24 May 2001  Trojans are Stealthy, Damaging and Tenacious
(gdb) maintenance demangle __17__class_type_infoPCcPCQ217__class_type_info9base_infoUl
Registering your product will also allow us to contact you in the unlikely event that you need adjustment or modification. - Sony registration card.
Chinese Web Site Replaces CEO.
Today is `pissed off at GNU software' day.
You have less than .027278% chance of getting this fortune.  Aren't you lucky?
You can pick your friends, and you can pick your nose, but you can't pick your friend's nose.
The goal of the experimental trials with the artificial heart is to "double the life span of these patients" to 60 days, Lederman said.
I prefer other's wives, but my own toilet. - Japanese proverb
/bin/../lib/gcc-lib/i386-lucent-plan9/3.0/../../../../i386-lucent-plan9/lib/i386-lucent-plan9/3.0/
What Jesus fails to appreciate, is that it's the meek that are the problem.
XML is the Lisp of the 90's.
# DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY.
Gpklinux uses ld.so 1.9.11 libc6 2.1.3 libc5 5.4.46 binutils 2.9.5.0.37 gcc 2.95.2
The dreck was my idea. - Samuel Z. Arkoff
Please email me off-list if you wish to discuss off-topicness.  -Rick Hohensee
I have an x86 assembler in Bash.  Would that be helpful for porting Plan 9 libs to unix?  -Rick Hohensee
Caches aren't architecture, they're just optimization. - Rob Pike
I will inform you soon later.
Formatting 20,00.77M   - Windows 95
Far Knuth!
canlock: corrupted 0xcafebabe
And the fear of you shall be the noise of a broiled fish, and all creeping things that creep upon the earth.
Child process unexpectedly missing: No child processes.
proto.c:435 syntax error, last name: WRONG
The output string must have enough room, or else.  - comment in VMware XFree86 driver
gcc -c -O2 -fno-strength-reduce -ansi -pedantic -Wall -Wpointer-arith   -I. -Ipublic -Ivmx/public -I../../../../../../programs/Xserver/hw/xfree86/common -I../../../../../../programs/Xserver/hw/xfree86/os-support            -I../../../../../../programs/Xserver/mfb -I../../../../../../programs/Xserver/mi -I../../../../../../programs/Xserver/hw/xfree86/int10            -I../../../../../../programs/Xserver/cfb -I../../../../../../programs/Xserver/hw/xfree86/xaa -I../../../../../../programs/Xserver/hw/xfree86/rac            -I../../../../../../programs/Xserver/hw/xfree86/vgahw -I../../../../../../programs/Xserver/hw/xfree86/fbdevhw            -I../../../../../../programs/Xserver/hw/xfree86/ramdac -I../../../../../../programs/Xserver/hw/xfree86/ddc -I../../../../../../programs/Xserver/hw/xfree86/i2c            -I../../../../../../programs/Xserver/Xext -I../../../../../../programs/Xserver/hw/xfree86/xf8_32bpp           -I../../../../../../include/fonts -I../../../../../../programs/Xserver/include -I../../../../../../exports/include/X11            -I../../../../../../programs/Xserver/hw/xfree86/xf24_32bpp -I../../../../../../programs/Xserver/hw/xfree86/shadowfb -I../../../../../../include/extensions         -I../../../../../../programs/Xserver/hw/xfree86/os-support/vbe   -I../../../../../.. -I../../../../../../exports/include  -Dlinux -D__i386__ -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D__NO_STRING_INLINES  -D_GNU_SOURCE  -DSHAPE -DXINPUT -DXKB -DLBX -DXAPPGROUP -DXCSECURITY -DTOGCUP  -DXF86BIGFONT -DDPMSExtension  -DPIXPRIV -DPANORAMIX  -DRENDER -DGCCUSESGAS -DAVOID_GLYPHBLT -DPIXPRIV -DSINGLEDEPTH -DXFreeXDGA -DXvExtension -DXFree86LOADER  -DXFree86Server -DXF86VIDMODE  -DSMART_SCHEDULE -DBUILDDEBUG -DX_BYTE_ORDER=X_LITTLE_ENDIAN -DNDEBUG   -DFUNCPROTO=15 -DNARROWPROTO  -DIN_MODULE -DXFree86Module -DPSZ=8   -fPIC bits2pixels.c
If your home page is where your heart is, here's where to stay: University Park HOTEL@MIT
A lie of omission is still a lie.
Mountains come out of the sky and they stand there!
The gun law in Queensland is as follows: if you run out of petrol don't run out of bullets.
America? Astounding! All because of a fellow named Columbus and poor navigation!
Warning: MS SQL message: Login failed for user 'webreadonly'. Reason: Not associated with a trusted SQL Server connection. (severity 14) in C:\Inetpub\www.escient.com\buy.php on line 136
uname: not super user
2001.08.30=11:45:58.88-0400 transcript/666/12016387293 nutmeg[667] transcript: Daisy:  Please say, Daisy its David or David.  Or say, Daisy its me, so I know who you are.  
Does anyone have Richard Stallman's phone number?  I want to call him and tell him exactly what I think of his software.  Criticism wants to be free.  -dhog
Devil Duckie, when you float, it's like I'm bathing in a flaming moat!
Djahavagooweegend?
Free Dmitri - with every e-book!
Due to the sophisticated nature of DSL, Verizon Online cannot guarantee uninterrupted or error-free service, or the speed of your service.
%HVHI-W-TOOMUCHQI, Your QI level has exceeded your daily quota.  Please log off now!
In the bad old days you'd just write a five line function to [calculate a CRC]. In the good new days, you declare a CRC class with at least three constructors, a destructor, a copy constructor, an assignment operator, a Calculate method, and then you make the calculated value private because God forbid people should be allowed to access it directly and then you need an accessor method, or why not have several such as GetCRCAsFormattedString I think I'll go and lie down now it must be time for my medication. - Andrew Simmons
eThay ummarysay orfay isthay Apanesejay agepay ontainscay aracterschay atthay annotcay ebay orrectlycay isplayedday inway isthay anguagelay/aracterchay etsay.
Subject: MVS Host "ET" Change - Connect:Direct(NDM) & TSO
You can't tell a book if the title is covered.
It's not impossible - just really unfair.
I hate nostalgia.  I hated it then and I hate it now.
cvs [checkout aborted]: cannot rename file .new.glwdrawin to glwdrawingareamakecurrent.gl: Invalid argument
Strong vinegar will break its own vessel.
It's impossible to hold two watermelons in one hand.
He lost both Ali-pilaf and Vali-pilaf.
When things don't go right, even halva will break your tooth.
He can't crumble dumplings for himself, yet he cuts noods for others.
He who burns his mouth on milk will blow on yogurt when eating it.
If you don't have honey, have a honey tongue.
My little pilaf and I won't have headache.
To be hungry is better than to be in debt.
Better to eat cheese and bread than pilaf that is given as a favor.
He who pities his lamb can't eat kebab.
The molla saw pilaf and forgot about the Koran
I bought doshab; it turned out to be honey.
Neither cooked at home nor brought from the neighbor's.
Give a gift, never mind if it's a rotten nut.
He is a man who gives bread.
No one calls his ayran sour.
The curd seller will come to our yard, too.
When a tree bears much fruit, it bends low.
You haven't eaten the goose's meat, so you don't know how it tastes.
You don't have a cherry orchard so how do you know what kind of bird a quail is.
Don't offer "bahmaz" to someone who has honey.
How can a donkey know what saffron is?
He has his bread on his knees.
He is one who treads on bread.
You don't give milk to a the child who doesn't cry.
Your mouth won't get sweet just by saying "halva-halva".
Neither meat, nor fish.
We cut salt and bread together.
Say "hello" 40 times to the place where you have tried salt at least once.
Even if your relative eats your meat, he will never discard your bones.
Apricots in the orchard brought so many greetings.  When the apricots were gone, so were the greetings.
Be hungry, but don't beg.
Count the chickens in autumn.
Whatever you put on your pilaf will appear on your spoon.
If it works, yogurt; if not, ayran.
Even if the onion is sharp, it has its own place on the table.
Today's egg is better than tomorrow's hen.
My advice to you: grind your own grain.
Don't put garlic on your head if it doesn't hurt.
You can't make stew with cheap meat.
Don't eat "turshu" in front of a sick man.
He gets wool from eggs.
He scoops cream off water.
When you're young, carry stones.  When you're old, eat pilaf.
Milk pilov is good one day at our place, the next day at yours.
He doesn't pay for the meat, but grabs the biggest "kuftas".
I neither kneaded nor baked, but I found a ready cake.
WARNING: terminal is not fully functional -  (press RETURN)
Makefile:7: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop
Dear Knowledge Management Network,
WAP is crap.
Belvime i no send this mail for make spam!
Absquotilate it in style, you old skunk,..and show the gentlemen what you can do.
Promoting XEmacs from Editors to Red Hat Linux
DO NOT BE SELFISH!  SHARE YOUR TIME WITH AN AWESOME SOLE MATE
If emacs buffers were limited to the size of memory, it would not be possible to edit /dev/mem.  -tb@becket.net
Linux: written by amateurs for amateurs. - D. Presotto
With free-friends like that who needs free-enemies?
When will they understand the difference between an unmitigated disaster and a total catastrophe?
This is not LINUX!  This is Plan 9.  There are rules.  -boyd/walter
GCC is like a very large city.  None of it makes sense, but its citizens cannot escape from it.  -Lucio De Re
Subject: Unidentified subject!
Wenn ist das Nunstück git und Slotermeyer?  Ja!...Beiherhund das Oder die Flipperwaldt gersput!
A person who knowingly causes a nuclear weapon explosion...is guilty of an offence.  - British Prohibitions and Inspections Act 1998 s47(1)(a)
msgPtr->EMM_RSP_OLC_ACK_FWD_H2250LCACKP.bit_mask &= ~EM_H2250LCAP_dynamicRTPPayloadType_present;
Cookie import from '/usr/dhog/lib/cookies' failed: fil
Reality has got to stop!  --Mel Lastman, Mayor of Toronto
Do you want to restart now?
Completed updating files, continuing to load Windows...
Enter your network password for Microsoft Networking.
Updating System Settings...
Give me source! Give me challenge! Give me ideas and theory and a fresh way at looking at our life! For people who crave knowledge and really want to understand our world there will always be smart projects like Plan 9.  -- northern_snow78@yahoo.com
Alas! The onion you are eating is someone else's water lily.
Friends are better than monkeys.
ODBC API Function SQLGetPrivateProfileString is not currently implemented. Further warnings will be suppressed.  hello world
More Not-Yet-Published Bestsellers - category on amazon.com
So, according to Rob Pike, "Window Systems Should Be Transparent", eh?  Fortunately, Mac OS X supports *that* feature!  - Brendan Connell
cat: read failed: Reached the end of the file.
Windows XP ... is the ``most reliable Windows ever.'' To me, this is like saying that asparagus is ``the most articulate vegetable ever.'' - Dave Barry
Missouri loves company.
Why do you think a country that cannot measure in metric will switch to IPv6?
To me, dynamic libraries are like clowns.  In both cases, I was frightened by one at an impressionable age and have loathed them ever since (Bozo tripped on his microphone and fell on me when I was 3, Multics got me at college). - Dave Presotto
The ``Never put snow on a frostbitten part'' virus has been detected within Lucent Technologies.  This virus arrives in email with a subject: Why polish the corners off a sphere in a roomful of cubes?
Welcome To Slide Card
I didn't want to be frustrated my whole career, so I moved into computing instead.  -Douglas Gwyn
O Factotum, velut luna, statu variabilis!
ls: /n/x/*start*: "/n/x/*start*" "./*start*" "./n/kfs/inferno/*start*" does not exist
Too many color components: 0, max 10
A sheet of sandpaper makes a cheap and effective substitute for costly maps when visiting the Sahara.
A mouse trap placed on top of your alarm clock will prevent you from rolling over and going back to sleep.
rio: can't open display: initdisplay: /dev/draw/new: "/env/tabstop" file does not exist
The full documentation for cat is maintained as a Texinfo manual.  If the info and cat programs are properly installed at your site, the command "info cat" should give you access to the complete manual.
Whether the stone hits the pitcher or the pitcher hits the stone, it's going to be bad for the pitcher.
Subject: Convenience Center Equipment Training
So, I'm getting on now, and people ask me, `What's it like to be old?' And I tell them ... I don't feel old, I feel young -- except there's something wrong with me. - Chuck Jones
Thank You for Logging Out!
**THIS IS AN AUTOMATED MESSAGE FROM SOFTSHOE**
Perhaps we could also have a special section for the words of the prophet Bushnell, crying out in the wilderness - "The GNU Public Licence is a jealous Licence, Thou shalt have none other Licence but me"  - andrew@mbmnz.co.nz
My belief is Sean's belief is Phil did it all wrong. - Sean Quinlan.
Ten Years Experience.  New Needle.  - sign on tattoo parlor
Please: Do Not Touch. Do Not Turn Crank. (This is Art: Nothing will happen if you turn the crank except that it might fall off.)
The Journal will accept papers and letters in Microsoft Word only.
That's nothing.. RMS sent me a .doc file the other day...
Belief is the death of intelligence.
ls: /usr/ken/bin: phase error -- cannot happen
To opt out from future mailings CLICK HERE
The X server config file can be found in a range of locations.  These are documented fully in the XF86Config(5x) manual page.
Welcome to First Time Wizard.
panic: cannot happen? -rsc
Select 'Yes' if you need a Logo Motion on boot.
The Electric God, the Fire God, all came out to help the Falun in clearing up evil demons with their supernormal capabilities resembling electricity, fire, and tornadoes.
These actions are prohibited by law if you do not accept this License.
gcc.c:610: warning: string length `930' is greater than the length `509' ISO C89 compilers are required to support
One finger can't open up an anus.
The path to enlightenment requires no software.
Notegroups! They kill you!
Question: Did you ever have an important idea that you wanted to jot down, but... your portable, fold-up keyboard is all folded up in your pocket, and there isn't any flat place around to set it up on anyway?
Let's take Stallman's opinions and agree with them, even though we're not sure what he's talking about.   -- someone on slashdot
They call themselves flower children but all I see is a lot of weed.
One in three criminals have cats.
"I instructed people on the team to follow the document retention policy, which I knew would result in the destruction of documents." -David B. Duncan
REMINDER! You're About to Get SMART!
Please note, the HomeLink logout button has moved to the upper right hand corner of the screen.
The function will not return until a character is read or the terminal is destroyed.
Expect change, refresh your browser often.
cpp0: Cannot allocate 939136576 bytes after allocating 457620 bytes
I'm Catholic in the same sense that if a cow was born in a tree then it's a bird.
You know, it's interesting, there is a universal God, in my opinion. - George W. Bush
Welcome, rqzgc_mfuv8
String manipulation is more complex than linked list manipulation.
The PSPDN TE sends data to the GPRS TE by use of the GSM PLMN GPRS DNIC.
A non-functioning unit should no longer be used.
Turing's ``imitation game'' eerily presaged today's world of chat rooms, where men pretend to be women, having lesbian cybersex with other women who are, in fact, men.  - NYT Magazine, 8/3/2002
Computers are crap, but the Apple store offers a world without toilets.  - James Grimmelmann
Please, serious &nbspinquiries only.
He that steals a Bell-weather, shall be discover'd by the Bell.
To avoid undesired effects of optimizing compilers, use the SecureZeroMemory function.
A program that executes more instructions runs slower.  - Pike's Law
The identity range managed by replication is full and must be updated by a replication agent. The INSERT conflict occurred in database 'prevacid', table 'PROCESS_CODES', column 'ID'.
Don't go with a spineless ISP.  We have more backbone!
*** {02.38.001} Win - Multiple Trillian vulnerabilities
Isn't it funny how people say they'll never grow up to be their parents, then one day they look in the mirror and they're moving aircraft carriers into the Gulf region?  - the Onion
If you're like most people, and chances are pretty good that you are, ...
PCMCIA == "People Can't Memorize Computer Industry Acronyms"
Do not be distracted by meaningless messages.
c++ -O2 -fno-exceptions -fno-check-new -Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings -Wno-long-long -fno-builtin -O -pipe -DBSD -DQT_CLEAN_NAMESPACE -DQT_NO_COMPAT -DQT_NO_ASCII_CAST -o konq main.o mainwindow.o -Wl,-export-dynamic  ../kdesrc/kio/http/kcookiejar/.libs/libkcookiejar.a -L/usr/X11R6/lib -ljpeg -L/usr/local/lib -ljpeg -L/usr/lib -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg ../kdesrc/kio/.libs/libkio.a -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg ../kdesrc/kparts/.libs/libkparts.a -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg ../kdesrc/khtml/.libs/libkhtml.a -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg ../kdesrc/kio/http/.libs/libkiohttp.a -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg ../dropin/kparts/.libs/libkpartsdropin.a -ljpeg -ljpeg -ljpeg ../kdesrc/khtml/ecma/.libs/kjs_html.a -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -lssl -lcrypto -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -lqt2 -lpng -lz -ljpeg -lXext -lX11 -lSM -lICE -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -ljpeg -lm -ljpeg -lgcc -lstdc++
Please browse the site to see our full range of services, we can remain customer focused and goal-directed, innovate and be an inside-out organization which facilitates sticky web-readiness transforming turnkey eyeballs to brand 24/365 paradigms with benchmark turnkey channels implementing viral e-services and dot-com action-items while we take that action item off-line and raise a red flag and remember touch base as you think about the red tape outside of the box and seize B2B e-tailers and re-envisioneer innovative partnerships that evolve dot-com initiatives delivering synergistic earballs to incentivize. - www.anadrom.net
If you're calling to report a death, please press or say, "One".
i'm running windows xp under vmware in a vnc on linux being viewed from plan 9. (got that?) - rob
User: support@games.yahoo.com send to you mail with virus.  Please check mail in attach ! 
Subject: I NEED YOUR ASSISTANT
Lucent's motto: Let's make things harder
MOZILLA_FIVE_HOME=/opt/netscape-6.2.3-us
If you haven't heard of XML yet, you must be living under a rock!  - Programming in the .NET Environment
The second line computes the sinus of the result.  - Programming in the .NET Environment
Where would Christianity be if Jesus got eight to fifteen years, with time off for good behavior? -- New York Senator James H. Donovan on capital punishment. 
rsc            5202    0:00   0:00 1710768K Rendez   8.portmapd
http://www.fortunecookieadvertising.com
A short stranger will soon enter your life.
Click Here to GET the penis you want today!!!
The envMaxSize field is the environment file size. It must not exceed envMaxSize.
parser.h:16: ISO C++ forbids declaration of `ConsumeOffendingSymbol'
Click on the following link if you don't want to recieve any more email.
/usr/include/c++/3.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
with venti there's not a simple way to do anything. - rsc
Quidquid latine dictum sit, altum viditur.
    static unsigned int minSz = sizeof(uslOBJECT_T);//calculate only the once!
Can be applied directly on top of Tornado AE1.1 Cumulative Patch3, or on top of Tornado AE1.1 Cumulative Patch3 + patch 82607 + patch 83172. Patch 82607 and patch 83172 can not be applied on top of patch 84031.
Existence of this file indicates that the Nautilus configuration druid has been presented.  You can manually erase this file to present the druid again.
EXECEPTION TABLE
H e ll o, I a m lo ok in g fo r a ni c e m a n.  I f yo u w oul d li k e t o co rre on d wi th m e, pl ea se c li c k t h e li n k be w.
If email advertising won't sell your product than nothing will.
The colorful name kill() harks back to the origin of these interfaces in UNIX BSD.
Earthquakes don't kill people; buildings do.  - seismologists' saying
Sorry, There are no Williams-Sonoma stores within 1400 miles of your location.
Few, few the bird make her nest.
Four eyes does see better than two.
So many heads so much opinions.
What come in to me for an ear yet out for another.
The walls have hearsay.
He has a part in the coke.
He has the throat paved.
Its are some blu stories.
He go to four feet.
Nothing some money, nothing of Swiss.
He has discorvered the pot to roses.
Laugh at throat displaied.
That make to come water in the mouth.
To become of bishop miller.
He sleeps as a marmot.
Take the moon with the teeth.
He has a good beak.
He is armed of foot at up.
In the country of blinds, the one eyed men are kings.
To build castles in Espagnish.
Cat scalded fear the cold water.
A take is better that two you shall have.
To eat of the cow mad.
To have a hare memory.
That which feel one's snotly blow blow one's nose.
To be weted even to the bones.
The dress don't make the monk.
The man propose, and God dispose.
To throw the handle afterwards the axe.
Take out the live coals with the hand of the cat.
A horse baared don't look him in the tooth.
Take the occasion for the hairs.
To buy a cat in pocket.
He eat untill to can't more.
He has a good top tongue.
The dog than bark not bite.
It freezes to break the stones.
It want to beat the iron during it is hot.
To the foulish words, no answer.
He is mad to bind.
He has the tongue very free.
He is more in debt but he weigh.
He is a good devil.
He don't know where give with the head.
I upon the night all cats are gray.
The stone as roll not heap up not foam.
Every country has their uses.
They shurt him the doar in face.
With the time come one s to the end of all.
Big head, little sens.
He has fond the knuckle of the business.
Words and feathers the wind carry them.
He turns as a weath turcocl.
A barber shave another.
Belly famished has no ears.
To good appetite it not want any sauce.
There is not better sauce who has the appetite.
The pains come at horse and turn one's self at foot.
It is not for you that the oven is heated.
To force to forge, becomes smith.
Keep the curtains, the farce is played.
Keep the chestnut of the fire with the cat foot.
Friendship of a child is water into a basket.
Burn the politeness.
Tell me whom thou frequent, i will tell you which you are.
After the paunch comes the dance.
Drink as a hole.
Of the hand to mouth, one lose often the soup.
To eat as ogre.
It is a basket bored.
To look for a needle in a hay bundle.
Tu dispute upon the needle top.
To live in a small cleanness point.
It must to break the stone for to have almond.
To make paps for the cats.
To fatten the foot.
To craunch the marmoset.
IF YOU THINK THIS IS SPAM PLEASE REMOVE YOUR EMAIL OUR LIST
Linux programmer's mind: don't invalidate the D-cache unless it wasn't enabled
You should be automatically redirected to the new page in 0 seconds.
`An improvement is something your program will not work with and a bug fix is something it will not work without' -- Roger Needham
PLEASE! Don't urinate on the specimen.
For those who only have time to read Slashdot, may God protect you on your journey towards technical obsolescence.  - David Patterson, on Slashdot
Homeland security begins at home.  - Seattle mayor Greg Nickels
               1 Dir(s)  70,368,744,161,280 bytes free
Has Your Life Been Ruined by Evil?
smtpdaemon is needed by diskcheck-1.4.2 	- Red Hat Linux
You want to make your way in the CS field? Simple. Calculate rough time of amnesia (hell, 10 years is plenty, probably 10 months is plenty), go to the dusty archives, dig out something fun, and go for it.   It's worked for many people, and it can work for you.  - Ron Minnich
Recent studies have proven what most people already know: That most Penis Enlargement Pills are completely useless. We set out to design a program that really works.
From a Walgreen's receipt: I'm JESUS.  I'm here to serve you with our "7 Service Basics"
I just realised something...  I am NOT a nerd, and none of this stuff matters.  I'm Outta Here!  - some guy on Slashdot
Everything in UNIX is modelled as a "file", whereas in Plan9 everything is modelled after a "burrito" - some guy on Slashdot
Sense of terminal's easiness and functional file server!
Practically noiseless and impossible to explode. - ad for the 1897 Oldsmobile
info: Terminal type `dumb' is not smart enough to run Info.
 k=k; /* To suppress warning */
debug1: Miscellaneous failure
That doesn't make sense to me.  But then, you are very small.  Perhaps you're right.
A company is only as good as its least imaginative manager.
Thank you for ordering from MEDCO SUPPLY COMPANY, INC., where 100% satisfaction is gu
(mozilla-bin:3115): Gtk-WARNING **: A floating object was finalized. This means that someone called g_object_unref() on an object that had only a floating reference; the initial floating reference is not owned by anyone and must be removed with gtk_object_sink() after a normal reference is obtained with g_object_ref(). - exit message from Mozilla
Hurray! We have successfully exploited a buffer overflow on the plan9 operating system! And most importantly, we did the most useful thing possible: we exited the shell. If you ever gain access to a plan9 box, remember that the smartest thing you can do is logout. - phrack article
You have synapses?  I wish I did.  My neurons communicate by shouting.  It gets pretty noisy in my head.  Some times all six of them are shouting at the same time.  - presotto
Failed silent installation. May be failed to allocate Memory.!
An extended error was returned from the server. This is typically a string or buffer containing a verbose error message. Call InternetGetLastResponseInfo to retrieve the error text.
If you're not living on the edge, you're taking up too much space.
if_de.c:2401: 		    sc->tulip_mediums[media] = mi;
Please let us know if there is anything we can do to make your stay more magical.  Please note the field below is limited to 29 characters.  - Disney World hotel reservation web page
Telegraph is a kind of a very, very long cat. You pull his tail in New York and his head meows in Los Angeles. And radio operates exactly the same way — you send signals here, they receive them there. The only difference is that there is no cat. -Albert Einstein
Hi.  My name is %{NAME%}%, I am 25 years of age.  I happen to see your profile on the internet.  Come visit me some more by viewing my site.  Ethel
As complicated as the semantics of virtual inheritance may seem, its support within the compiler has proven even more complicated.  - Stanley Lippman, Inside the C++ Object Model
Who needs hallucinatory drugs when we've got quantum physics?
The essence of XML is this: the problem it solves is not hard, and it does not solve the problem well.  - Phil Wadler, POPL 2003
tcp_extensions="YES".  really i wanted "MAYBE" or "GOODQUESTION" or "YOUTELLME" or "YOU'RETHECOMPUTER!"  - forsyth
int parse_url(unsigned char *url, int *prlen, unsigned char **user, int *uslen, unsigned char **pass, int *palen, unsigned char **host, int *holen, unsigned char **port, int *polen, unsigned char **data, int *dalen, unsigned char **post)
Please select an Aardvark
This thing is like a quarry where every pebble has something bad hidden underneath - Presotto about the Links source.
fortune 1907: suicide: sys: trap: divide error pc=0x00001b33
i'm not real convinced about this but I could be interesting. - boyd
If you are what you eat, then I'm cheap, fast, and easy.
/@burro.ws: Permission denied
return ({goto L; p;}) && ({L: 5;});
object-oriented design is the roman numerals of computing.  - rob
Java is the f*cking COBOL of the 90s, and future generations of geeks are going to fly back from Mars to piss on our graves for inflicting it on them.  - rasputnik@hellooperator.net
httpd_server* httpd_initialize(char* hostname, httpd_sockaddr* sa4P, httpd_sockaddr* sa6P, unsigned short port, char* cgi_pattern, int cgi_limit, char* charset, char* p3p, int max_age, char* cwd, int no_log, FILE* logfp, int no_symlink_check, int vhost, int global_passwd, char* url_pattern, char* local_pattern, int no_empty_referers )
it's easier to post to 9fans than to think. - boyd
We assume familiarity with Rubik's Cube, the delights of which cannot be presented adequately in a textual description!  - an algorithms textbook
If you are idle for more than 1000 hours, the system will log you out.  Please save reviews frequently.
We lead by following standards. - sape
-bash: /home/r/.bash_logout: Permission denied
I am he as you are he as you are me and we are all together. - forsyth after Lennon on authentication
Network services at the Murray Hill, NJ, location (100001) will be unavailable due to UPS (Uninterrupted Power Supply) maintenance from 8:00 p.m. EDT on Saturday, June 26, to 4:00 a.m. EDT on Sunday, June 27.
Don't show this message again.
Service error -27.
Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defence against complexity. - David Gelernter
Zatoichi: in theaters December 31, 1969.
recordio.h:992: type `__true_type' is not a base type for type `__false_type'
Telephone number has to be 10 numbers.  For example, enter '8002158482'.  Please contact us at 1-800-215-8482 for any assitance.
No one but a theorist believes his theory; everyone puts faith in a laboratory result but the experimenter himself.  - Einstein
(Okay, Plan 9 isn't Linux, but it's a close relative).
Tux is not cute.  Tux has the expression of someone right after knitting needles have been used to scramble the front side of their cerebral cortex.  Tux scares me.  - Ron Minnich
Setting up your SIP account will allow you to call both other SIP users as well as pstn phones. - Wim Sweldens
ntifs.c(202) : error C2064: term does not evaluate to a function taking 25732904 arguments
There's no "I" in team, but there's both a "me" and an "I" in media.
Oh, I'm sorry, sir, go ahead.  I didn't realize you were root.
C++ is to C as lung cancer is to lung.
Warning: bad syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
Those days [of "one tool doing one job well"] are dead and gone and the eulogy was delivered by Perl.  - rob
We have found that the Real Player plugin, which is used by the BBC Radio Player, may or may not function fully depending on a combination of what flavour of unix/linux you are using, which browser you are using, which version of browser you are using, and which version of GCC built the plugin during installation.
Sheer [program] size is often an illusion, reflecting only a need for improvement.  - Kernighan and Plauger
bootsplash: silent mode.
Trusting every aspect of our lives to a giant computer was the smartest thing we ever did!  - Homer
Courts are not equipped to execute the law. - John Ashcroft
The Ken Thompson school of thought on expert systems: there's table lookup, fraud, and grand fraud. - Andrew Hume, quoted in ;login:
I am Davros, my Daleks are my servers and plan9 is my control board mwahahaha - Matt
What's grey?  A melted penguin.
Why don't cannibals eat clowns?  Because they taste funny.
Two goldfish are in a tank.  One turns to the other and says, "Do you know how to drive one of these things?"
What do software pirates say?  CD-Arrrrrrr!
Select only drivers expected to compile cleanly. - Linux kernel configuration option
usage: tar [-][{ruxXtcC}acdefhlm{o|S}pqvwLUBDRV{O|K}fb] [dir] [tapefile] [blocksize] file ...
/opt/exp/lib/firefox/bin/run-mozilla.sh: line 451: 16207 Segmentation fault      "$prog" ${1+"$@"}
LoadPlugin: failed to initialize shared library /opt/net/exp/lib/mozilla/bin/plugins/j2re1.4.2/plugin/i386/ns610-gcc32/libjavaplugin_oji.so [/opt/net/exp/lib/mozilla/bin/plugins/j2re1.4.2/plugin/i386/ns610-gcc32/libjavaplugin_oji.so: undefined symbol: _ZdlPv]
This 43 minute video FEATURES the 22 year-old, 6'6" (6'11" in heels) 300+ pound, size 14 shoe size Blythe
