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.
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
Linux is good if you want to run Apache or compile the kernel.  Every other application is suspect.  - Andrew Hume
/etc/bash.bashrc:	alias unmount='echo "Error: Try the command: umount" 1>&2; false'
Book-burning is such an ugly phrase.  I prefer to think of it as "English lit".  - Larry Hollister
panic: bad rob
	ulong	when;			/* may underflow in clock(); must be signed */ 
There is no interest in a WWW browser.  This fad is clearly not going to have any staying power.  - plan.9@research.att.com, Oct 22 1994
the representation of characters, but not the character set itself, was changed this weekend.  we believe that the representation we are using now will become the one used by unix-like systems everywhere.  - rob's news about utf-8, sep 6 1992
Linux: the world's best text adventure game.
MessageSocket::setHostname(): gethostbyname() failed: Success
/* This variable is here only because of a historical reason.  */
It's almost as though someone is creating billboards that read, ``If you can#t splel VaigrA, you cn mkae big $M$O$N$E$Y$ wtih b.ul.k adtervising on teh I*N*T*R*E*N*E*T.''  - Rob Kolstad
And, as you read, please forgive the necessary typos - I'm going for rock-solid facts, rather than spelling.
mp3riot -  Directory search utility
val.h:152: class `FloatVal' is implicitly friends with itself
The MOV mnemonic, which stands for `move', is a misnomer.  A copy function is actually performed instead of a move. - AMD64 Architecture Programmer's Manual Volume 1
It's not foolproof, but maybe if we don't act like fools, it will work.  - Sara O'Brien
May God forgive you for what you have done!  - Pope John Paul I, to the Cardinals who elected him
  hb = 0x80;  hb = hb << 24;   /* hb = 0x80000000UL */
setenv I_WANT_A_BROKEN_PS
It's the ship that made the Kessel run in less than twelve parsecs.
CPU0 states:   0.0% user, 150.0% system,   0.0%nice,   0.0% idle
i know what jmk did.  he added reentrancy for threads.  - boyd, about uintptr
i hate all sorts of zealots  - boyd
/* Watch the brackets - even Ken and Dennis get some language design wrong */
Not related to the portable reciprocating power saw trademark of the Milwaukee Electric Tool Corporation.
GNU C++ does not support old-style function definitions, so this extension is irrelevant.
Here we have twenty-eight letters.
Here we have twenty-six letters.
Even if you could revive someone who has died, you haven't really done anything that deals with that person's central problem, which is sin.
Being really good at C++ is like being really good at using rocks to sharpen sticks.  - Thant Tessman
A computer is like an Old Testament god, with a lot of rules and no mercy.  - Joseph Campbell
Arguing that Java is better than C++ is like arguing that grasshoppers taste better than tree bark.  - Thant Tessman
(Of course SML does have its weaknesses, but by comparison, a discussion of C++'s strengths and flaws always sounds like an argument about whether one should face north or east when one is sacrificing one's goat to the rain god.)  - Thant Tessman
C++ is history repeated as tragedy.  Java is history repeated as farce.  - Scott McKay
Applicants must also have extensive knowledge of UNIX, although they should have sufficiently good programming taste to not consider this an achievement.  - Hal Abelson, MIT AI Lab job ad
I recently visited plan9.bell-labs.com/wiki/plan9 and I would like to offer my web design services.  I can help you with your Plan 9 website.  - spam
There are no network problems with scone, hale and poptart. IT support is working these issues and we will notify you when the problem is resolved.
A C, an E-flat, and a G walk into a bar.  The bartender says, "Sorry, but we don't serve minors."
		exhausted("sleep");
/// The ForTo class avoids confusing syntax of "for (int i=1;i<=4;i++) {...}". This can be replaced with "foreach (int i in new ForTo(1,4)) {...}".
Linux is for people who hate Windows.  BSD is for people who love UNIX.
If plan9 was a village then I'd probably be the village idiot, but it would still be better than living in the city.  - Dave Lukes
Software has gotten too fat and unreliable, so we started with Linux.  - Nicholas Negroponte
Forgive my ignorance, I am a layman and nowadays get my schooling through search engine results.  - Vester Thacker
By tradition, the return value of functions report what they did, not what they considered doing.  - rob
If the restaurant serves poor beer, don't switch to wine. - sape
There is nothing quite like looking up and seeing YOUR star.  Order now for FREE SHIPPING.
gcc is the holy cow of compilers, not the holy grail.  - forsyth
NOTE 3: Each bit has the value either ZERO or ONE.  - ECMA-035 spec
cpu90112: exiting
cpu0: existing
The operation timed out while trying to contact void.
On the Internet nobody knows you're running Plan 9. - Jim McKie
Deleted code is debugged code.  - Jeff Sickel
DEAR ALL, I am newbie!  pls guide me,
Google does not appear to be in the kludge-making business ...  - Ashlee Vance, The Register
		  ** the "time" argument is mandatory! (try "now") **
Revision control is like any other form of accountancy -- worthy but dull. -forsyth
There are but 10 types of people in the world. Those who understand the binary numbering system and those who don't.
we live in a world of dogmas, probably trying to fight it with a stronger dogma is a bad idea, but trying to fight it with preumpted objectivism clearly doesn't work.  - uriel
Equations are the devil's sentences.  - Stephen Colbert
cpu: can't dial: plan9.lanl.gov: The operation completed successfully.
A kiss without a beard is like an egg without salt.  - Dutch proverb
Nothing is good enough for the fortune file! - Dan Cross
Tried to read 71776119061217303 bytes. Read only 23
/dev/shm/root has gone 49710 days without being checked, check forced.
x11 code is just so bad. by which i mean bad of course, and not good.  - forsyth
Peter Seebach is not POSIX compliant but runs most UNIX applications.
Glyph 390 is called ".notdef", a singularly inept choice of name.
Well, I have tried to learn as much as possible from prior attempts.  If nothing else, we are committed to failing in a new way :)  - Elon Musk, SpaceX founder
You've got a syntax error somewhere in your code.  It could be around line 15.  Good luck finding it.  - the Mini-C compiler
Lucent is the best place 4 me to work. (Please keep confidential)
It might be comfortable, but so is lounging in a big enough pile of shite.  - jmk, about ioctl
i'm sure ken said we had persistant objects: ''they're called files''  - boyd
But macros are like having these high-powered band-aids, when what you want is not to be wounded in the first place.  - Steve Yegge
You’ve followed a link to a topic that doesn’t exist yet.
Metaphors about deck chairs abound.
After you have rotated your monitor, you need to complete the procedure below to rotate your operating system.
The human genome is about 3 gigabases long, which boils down to 750 megabytes. Depressingly enough, this is only 2.8 Mozilla browsers.  - Bert Hubert
cc: The parameter is incorrect.	- cygwin cc
Some people are like slinkies.  They don't really have a purpose, but they still bring a smile to your face when you push them down the stairs.
/* Not static, because we don't want the compiler removing it */
It appears that you are accessing Myspace.com from a location that is not authorized to view our licensed videos.  Please go to the United States or its territories and try again.
Subject: There's More to Nevada Than You Think
The user of distributed operating systems will know a new kind of reliability.  - MIT video about computer networks, 1972
I don't think there's a support group for people who don't have cancer - Fiona McKie
vi vi vi - the roman number of the beast
VFS: Busy inodes after unmount. Self-destruct in 5 seconds.  Have a nice day...  - Linux
One of the silliest things you can do with a modern Unix machine is run the Eliza mode of Emacs against random quotes from Zippy the Pinhead.  - Eric Raymond
* Description:  WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE DESCRIBE IT HERE!
Never smack a Bulgarian. - Ron Minnich
The Adobe Updater must update itself before it can check for updates.  Would you like to update the Adobe Updater now?
I'm not sure if that's true or not, I got that from an Internet web page:... -  Lluís Batlle
We're sorry, the page you're looking for is no longer here.
We've recently reorganized our site and streamlined some of our content. You can look for content using the search box at the top of each page.
/* keep the code below somewhat more readonable; not used elsewhere */
When we order T-Shirts to give away at conferences (like OSCON), we always order "Medium", "Large", "Extra-Large", and "Programmer" sizes.  _ Randal Schwartz
THANK YOU FOR AN INTERESTING GAME.
main: 7,913,578,496 used + 35,178,551,926,784 free = 2,093,416,448 (378% used)
Bitfield endianness not defined! Check your byteorder.h
All I know about print is that you can do it too soon. - Ron Minnich
acid: <stdin>:82: (error) 82: <eof> eating symbols
1         2034   9/01 17:54 god@bell-labs.com            bye
Girija pointed out a couple of bugs (I think of them as typos myself :-)   -Sape
Plan 9 makes BeOS look like a market leader.
I'm doing it very slowly, so results will be as soon as possible...
GTK+ is written in high quality object-orientated C.  - Programming with gtkmm
swapon: /dev/disk/by-uuid/928aaabd-5744-4f0a-b9ef-aa101f286514: Invalid argument  - Linux
We apologize for any inconvenience this causes  - Lucent Convenience Centers
Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems.  - Jamie Zawinski
[Perl] combines the power of C with the readability of PostScript.  - Jamie Zawinski
Subclass code (assigned by the USB-IF).  Indicates which industry standard command block definition to use.
Globus is an unstoppable monster - rminnich; No, Globus is an unstartable monster - ericvh.
Multithreading is just one damn thing after, before, or simultaneous with another.  - Andrei Alexandrescu
ArrayList of int / my list of int, equals new / ArrayList of int  - Steve Yegge
In the land of the clueless, the man with half an idea is king.  - Todd Robbins
Chebyshev said it, and I say it again / There is always a prime between n and 2n.  - Paul Erdös
Using Linux is like rediscovering your childhood and realising it really was pretty miserable.  - jmk
remove is identical to install except that packages are removed instead of installed. If a plus sign is appended to the package name (with no intervening space), the identified package will be installed instead of removed.  - apt-get(8)
I guess the idea is that ... even though the structures are all different. Everythings fine, dont worry, lie back and think of England. ... I think we can call it Pollyanna-morphism. -- Ron Minnich on Python libraries.
Can't get device information: Success -- Linux Bluetooth discovery.
Linux is neither Unix nor Windows — it's the worst of both worlds -- jmk
Did you ever try to write poetry in a committee meeting? It's like a bunch of fat construction guys trying to write an opera while sitting on the couch watching Baywatch. The more fat construction guys you add to the couch, the less likely you are to get opera out of it.  - Joel Spolsky
Don't interrupt!  Let me finish! - Rae McLellan
bool x = "false";  // valid C++ [sets x to true]
# The below line not be changed otherwise we refuse to work
having read AF_UNIX(7) i'm still don't see the point.  portable programs should not do this.  portable programs should not do that.  the details of this varies from implementation to implementation.  none of the following socket things ... are implemented.  the name is limited to 107 bytes.   - forsyth
Please wait. This can take some time.
I love troff. It reminds me of runoff, which reminds me of my youth, when VMS was in flower and knowledge of EDT and runoff was all a lad needed to make a good living as a tech writer.  - Frank Willison
General Internet error has occurred. - [OpenOffice.org 2.0]
Remember to drink responsibly during this St. Patrick's Day season.
File under POPULAR: Male Vocal - Syd Barrett LP sleeve
N = C + {fb (cm) . fb (tc)} + fb (Ts) + fc . ta, where N=force in Newtons required to break the cooked bacon, fb=function of the bacon type, fc=function of the condiment/filling effect, Ts=serving temperature, tc=cooking time, ta=time or duration of application of condiment/filling, cm=cooking method, C=Newtons required to break uncooked bacon
#define v6addrcurr(lifc) (( (lifc)->origint + (lifc)->preflt >= (NOW/10^3) ) || ( (lifc)->preflt == 0xffffffff ))
It seems that subjective C is more popular than objective C - brucee
Eta aquarid  meeteeor shouwer - astro -k
The program 'apt-get' is currently not installed.  You can install it by typing: apt-get install apt  - ubuntu linux
Subject: Re: [9fans] speaking of kenc... can you imagine a c compiler that does not translate to asm first? or can you imagine porting a c compiler when you dont have an assembler? -- Rogelio Serrano
I expect to be quite wealthy once the dust from the Linux IPOs has settled.  - Eric Raymond, "Doing It For the Cause", December 1999
A handful of characteristics of Unix are responsible for its resilience. First, Unix is simple: whereas some operating systems implement thousands of system calls and have unclear design goals, Unix systems typically implement only hundreds of system calls and have a very clear design. -- Linux Kernel Development, 2nd Ed. by Robert Love
IF YOU CAN HEAR THUNDER...YOU ARE CLOSE ENOUGH TO BE STRUCK BY LIGHTNING.
If you go and talk to our people and ask why they are doing something, they will give you a good reason why they are doing it.  - Ravi Sethi, President, Avaya Labs Research
hi uriel!
Gianfranco Luigi per tutti bezahlen.
Science is what we understand well enough to explain to a computer.  Art is everything else we do.  - Donald Knuth
process `sysctl' is using deprecated sysctl (syscall) net.ipv6.neigh.eth1.base_reachable_time; Use net.ipv6.neigh.eth1.base_reachable_time_ms instead.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
Th' canny man keeps his money in sheep - or he keeps it in th' First Presbyterian Bank o' Scotland
ttcp-r: 3689238521928343900000000000000 bytes in 41.02 real seconds = 87829643931512629000000000.00 KB/sec +++
By the time you finish reading this article, you will be able to take advantage of the coolest file system feature to be implemented since the symbolic link.  - CLI Magic: Use Extended Attributes for better file management By Ryan Paul
Intel Pentium 4 2.0Hz processor - TigerDirect catalogue
You are roughly 2^90 times more likely to win a U.S. state lottery *and* be struck by lightning simultaneously than you are to encounter [an accidental SHA1 collision] in your file system.  - J. Black
prelink - prelink ELF shared libraries and binaries to speed up startup time
	schedule(); // XXX poll? waitqueues?
gsoc | doc archive | uriel | harmful | 9P | cat-v.org
/*FIXME: what about parameter checking: context, etc? have a macro too? */
Results 1 - 10 of about 34,900,000 for all else is the work of God.
This is Radio Clash on pirate satellite.
We already agreed on a solution. Nobody is interested in implementing it.  - Lucho
This resource fork intentionally left blank
checking size of char... 1  - gnu configure
Nobody wants to argue with Knuth – it is the equivalent of arguing against the second law of thermodynamics.  - Mick West
Customer stickiness reduces churn making it a valuable benefit.
SIP is the Linux of telephony. - Sape
There was an error during the CUPS operation: 'client-error-not-possible'.
The following recipient(s) could not be reached: OpenView Service Desk on 11/7/2007 4:24 PM  The message could not be delivered because the recipient's mailbox is full.  - automated response to mail complaining that limits on mailbox size are too low
Dear Valued Customer #88143191!
rusty: kernel pseudo files are not the place for chit-chat
I define UNIX as ``30 definitions of regular expressions living under one roof.''  - Don Knuth
ADDITIONAL METAPHOR SPOILER ALERT: ``The Old Man and the Sea'' is not just about an old man and the sea.
2008-06-18 00:00:37: [650] DEBUG: msg 5 not interesting
Your IP address is: <? echo getenv('REMOTE_ADDR'); ?>. By continuing to browse this website, you agree to the following terms.
/*	dummy = malloc(0);  *//* prepare for garbage-collection */
You chose to apply Shadow Ram extend feature, while you knew it was risky. If the system hangs during boot, please restart the system and come here to change the setting.
An amateur thinks it's really funny if you dress a man up as an old lady, put him in a wheelchair, and give the wheelchair a push that sends it spinning down a slope towards a stone wall. For a pro, it's got to be a real old lady. - Groucho Marx.
Error Code: -2147483648
Pardon the abruptness of this letter; it is due to its exigency. 
The source of the money is legal and authoritative.
Please note that I do not intend to waste my time and yours.
The Internet is still a fascination to me.
Sometimes one needs to take chances.
#define MIG_ARRAY_TOO_LARGE     -307    /* array not large enough */
If you cannot read this, reply. Otherwise, disregard. - Pietro Gagliardi
"Come _on_. I'm not that subtle a 'baiter,' or... am I?" - Eris Discordia:  "You're a master baiter." - Skip Tavakkolian
Your Real Estate Building Service request has been completed.  Your service request  number 110738516 - DEAD MOUSE IN GLUE TRAP - 2C501 was completed on 10/07/2008.
Your Real Estate Building Service request has been completed.  Your service request  number 110740079 - Remove Squirrel - 2C-516 was completed on 10/21/2008.
Sorry but there is no description for this item ... (less)
Sorry but there is no description for this item ... (more)
                         NOTHING FOLLOWS
The problem is there's no data to fake yet. - Noah Evans
`You could pound nails with [the Motorola StarTAC] and it still worked.  This phone is like that: you could set it on fire, and you'd still get your e-mail.'
Cookies! Thanks NFS Anonymous Access User!
Closing this window will terminate the running processes: login, bash, acme, acme, devdraw, 9pserve, win, win, win, win, win, win, win, win, win, win, win, win, win, win, win, win.
"Transitive trust is metastable." - Brucee on the banking crisis in 2008
Your Real Estate Building Service request has been completed.  Your service request  number 110746368 - 2C523, BIRD FLYING AROUND IN CORRIDOR,MH was completed on 12/22/2008.
There is no organization (dept/cost center) in Lucent Technologies whose name matches "convenience"!
	buf[0] = '\0';		/* make sure it's empty (silly 3b2) */
  #ifndef bool /* Linux 2.6.19 C++ nightmare */
slashdot: the consensus of the ill-informed  - brucee
"People aren't wearing enough hats" - Truism from brucee
to kill the postman that delivered this email to you press here
A Man is rich in proportion to the number of things he can afford to let alone. -Thoreau
Just getting something to happen might be training, but it sure isn't education. -Brian L Stuart
This page has an unspecified potential security flaw.  Would you like to continue?
Comeau C/C++ 4.3.10.1 beta:  Now in our 22nd year!
size: q.out not an a.out
Sharing your DNA hasn't been this exciting since the good old days. - Genealogy.com
*WASH_Eyes_outWith_soap*
-rwxr-xr-x  1 rae rae 141307906 Nov 10 16:55 arm-2009q3-67-arm-none-linux-gnueabi.bin  # shell script
Beam to 1.04TeV... Lost due to tune drifting [sh*t!]... Tunes for beam 1 were different when we returned to injection energy (no precycle)... Trimmed and incorporated... Ramped 2 beams, all the way to 1.18TeV !!
anguish up -1 days, 00:00:01
People admire complexity. - Rob Pike
Due to a technical error with the distribution of Ottawa Newsbreak, you may have received the newsletter this morning.  Please accept our apologies.
DON'T throw lefts of coffee, tea or chocolate milk into this recipient! Thank you.
You tried to access the address opera:crossdomainerror, which is currently unavailable. Please make sure that the Web address (URL) is correctly spelled and punctuated, then try reloading the page.
Mandatory options:  - xen-create-image(8)
We are unable to complete the check-in process at this time. Please proceed to the airport for assistance.
As low as possible isn't a number yet - Ron Minnich
Tip: Save time by hitting the return key instead of clicking on "search".
./home/gri/go1/doc/test.go:3:1: expected declaration, found 'IDENT' notwithstanding
rm: remove write-protected regular empty file `some_random_file'?
!factotum protocol botch 0 ok bad authentication failed
exception: <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'exception'
what bug does this fix that you think you've fixed that addresses this particular bug?  - erik quanstrom
With functional programming languages, you can never make small mistakes, only very large ones. - Kedar Namjoshi
Subject: Departs: 7:00 PM Thu Dec 02 2010 Washington, DC - Union Station (WAS) Station News Arrives: 9:16 PM Thu Dec 02 2010 Metropark- Iselin, NJ  (MET) Metropark-Iselin, NJ Metropark-Iselin (MET) Station News PT2H16M Duration: 2 hr, 16 min (Internal Document ITD-10-49997V)
complete SoC on a chip  - Tilera
There is no application installed for executable files. Do you want to search for an application to open this file?
There's no 'I' in team, but there's a 'u' in suck.
Mandatory post fields are username,password,backto
Spa Rood, met toegevoegd koolzuur -> Shovel red, with added cabbage heartburn. - Yahoo! Babel Fish
Everything happens automatically and there is nothing new to learn. - Steve Jobs
wrong malign list
Sorry you try to use the function during a critical time. Out of technical reasons between 3:30 and 5:00 WET and 15:30 and 17:00 WET activations may be lost.
Major funding for The Fabric of the Cosmos is provided by the National Science Foundation and the Alfred P. Sloan Foundation.
i dont understand the physical processes that will produce a 40 year fifo.  -ken, after receiving the Japan Prize in 2011
Polydactyly mutations relax control of sonic hedgehog. - Armand Marie Leroi
Your 20333x1 screen size is bogus. Expect trouble. - Linux ps
Bonjour &FIRSTNAME;
We are experiencing some technical difficulty.  Please contact our support team and provide them the reference number below. Error Reference: $referenceNumber
User Modification Interface: UIM is currently down for maintenance.
people who program actually have a lot to learn from the fashion industry. -someone on hacker news
runtime: out of memory: cannot allocate 70367670501376-byte block (1048576 in use)
