################## # home.cgimp # # perl script to generate home web page for "Computer Science @ Marlboro" # Jim Mahoney, mahoney@marlboro.edu # # code version history (the content changes more often) # 3.2 Sep 2006 - changed float to position:absolute to handle IE bug # 3.1 Aug 2006 - floated top right with embedded CSS # 2.0 Mar 2006 - one liners http://www.ohek.co.uk/funnies/fun-quotes.htm # 1.9 Sep 2005 - added more jokes # 1.8 Apr 2005 - added link to nook # 1.7 Jan 2005 - changed top-left logo to an image # 1.6 Sep 2004 - went through W3 HTML Validator, just for kicks. # 1.5 Aug 2004 - added $ENV{HTTPS} to SSL_logo_html for new server # removed #!/usr/bin/perl - running in mod_perl # 1.4 Jan 2004 - added a few more jokes and link to source # 1.3 Oct 2003 - put html in its own subroutine # 1.2 Jan 2003 - cleaned up joke generation # < 1.1 - prehistory ############ use strict; use CGI qw(param header start_html end_html); my $thisfile = '/var/www/cs/htdocs/home/home.cgimp'; print header(); print start_html( -title => "computer science \@ marlboro.edu", -alink => "#000066", -vlink => "#000066", -link => "#000066", -bgcolor => "#FFFFFF", -style => "/home/home_style.css", # -meta => {'google-site-verification' => "fMStMgKhiN8dl0OSuuS_cbIDyKgQl3d_c9IkSwOnfqM"}, ); print page_html(get_joke(), get_next_joke_link(), get_lastmodified($thisfile), SSL_logo_html()); print end_html(); print "\n"; exit; # ======================================================== # Usage: $lastmodifiedstring = lastmodified($filename); sub get_lastmodified { my ($file) = @_; my @months = qw( Jan Feb Mar Apr May Jun July Aug Sep Oct Nov Dec ); my ($day,$month,$year) = (localtime((stat($file))[9]))[3,4,5]; my $text = 'last modified ' . sprintf("%s %02d %04d", $months[$month], $day, $year+1900 ); $text =~ s/ / /g; return $text; } # ======================================================== # The following are from various online sources, most without attributions # (eg Google "computer jokes one liners"). # See the files in the jokes/ directory for some of the sources. # # To see the N'th joke, visit this page with the URL index.cgimp?joke=N sub get_joke { # / or /index.cgimp is a random joke; # index.cgimp?joke=1 is the first joke; # index.cgimp?joke=-1 is the last my @jokes = ( q{Weeks of coding can save you hours of planning. -<i>Dave Newman</i>}, q{Error: 132 - Windows not found: (C)heer (P)arty (D)ance}, q{Pieces of seven! Pieces of seven! Grawk! (Parroty error)}, q{Any sufficiently complicated C or Fortran program contains an ad-hoc,<br/> informally-specified bug-ridden slow implementation of half of Common Lisp.<br/><i>Philip Greenspun</i>}, q{There's no place like 127.0.0.1.}, q{SELECT * FROM users WHERE clue >0.<br/> Uh oh, zero rows returned.}, q{If TCP/IP handshaking was less formal,<br/> perhaps SYN/ACK would be YO!/SUP!}, q{/* No Comment */}, q{How many people can read hex<br/>if only you and dead people can?<br/><i>A ThinkGeek T-shirt</i><br/>(57006)}, q{Is the glass half empty, half full, or twice as large as it needs to be?}, q{Never attribute to malice what can be adequately explained by stupidity.}, q{No one expects the Spammish repetition! Spam, spam, spam, spam, spam, spam... }, q{That's OK. I don't remember my name either.}, q{The number you have dialed is imaginary.<br/>Please rotate your phone 90 degrees and try again.}, q{Time flies like an arrow. Fruit flies like a banana.}, q{Why didn't you bring that book I wanted to be read to out of up for?<br/>a.k.a. a preposition is a fine thing to end a sentence with)}, q{When John Glenn returns to earth, everybody dress like apes.}, q{Women who seek to be equal with men lack ambition.<br/> - <i>Timothy Leary</i>}, q{-0.017641668 - the sine of the beast}, q{29A - the hexadecimal of the beast}, q{Abandon hope, all yet who press "ENTER" here.}, q{All those who believe in psychokinesis, raise my hand. }, q{American Non-Sequitur Society -- We don't make sense but we do like pizza!}, q{Artificial intelligence is no match for natural stupidity.}, q{As a computer, I find your faith in technology amusing.}, q{Beware of geeks bearing grifts.}, q{Does the noise in my head bother you?<br/> - <i>woman in "The Gods Must Be Crazy"</i>}, q{No matter where you go, there you are.<br/> - <i>Buckaroo Banzai<i/>}, q{I just became one with my browser software.<br/> - <i>Zippy the Pinhead</i>}, q{Scientists abandon AI project after seing <i>The Matrix</i>.<br/> - <i>headline from <a href="http://www.theonion.com">the ONION</a>, Jan 21 2004</i>}, q{You can only be young once. But you can always be immature.<br /> - <i>Dave Barry</i>}, q{Everything should be made as simple as possible, but not simpler.<br /> - <i>A. Einstein</i>}, q{Nobody cares if you can't dance well. Just get up and dance.<br /> - <i>Dave Barry</i>}, q{I am not the only person who uses his computer mainly for the purpose of diddling with his computer. <br /> - <i>Dave Barry</i>}, q{Buying the right computer and getting it to work properly is no more complicated than building a nuclear reactor from wristwatch parts in a darkened room using only your teeth. <br /> - <i>Dave Barry</i>}, q{Computer Science is no more about computers<br />than astronomy is about telescopes.<br /> - <i>Edsger Dijkstra</i>}, q{Documentation is like sex -<br />when it's good, it's very good,<br />and when it's bad, it's still better than nothing.}, q{Daddy, what does FORMATTING DRIVE C mean?}, q{Plagiarism is the sincerest form of flattery. <br /> - <i>Anon</i>}, q{Enter any 11-digit prime number to continue.}, q{No keyboard present.<br />Hit F1 to continue.<br />Zen engineering?}, q{The Tao that is seen<br />is not the true Tao, until<br />you bring fresh toner.}, q{Computers are not intelligent. They only think they are.}, q{I haven't lost my mind. It's backed up on tape somewhere.}, q{Failure is not an option. It comes bundled with the software.}, q{It said "Insert disk 3." But only two fit.}, q{Math problems? Call 1-800-[(10x)(ln(0.1))]-[sin(xy)/2.362x] }, q{Press any key...no, no, NOT THAT ONE!}, q{...File not found. Should I fake it? (Y/N) }, q{My sister opened a computer store in Hawaii. She sells C shells by the seashore.}, q{To define recursion, we must first define recursion.}, q{Emacs is a nice operating system, but I prefer UNIX. <br /> - <i>Tom Christiansen</i>}, q{My computer NEVER cras}, q{My Go this amn keyboar oesn't have any 's.}, q{Backups? We don't *NEED* no steenking baX%^~,VbKx NO CARRIER}, q{The determined programmer can write a FORTRAN program in any language.}, q{What do computerists use for birth control? Their personalities.}, q{AAAAAA - American Association Against Acronym Abuse Anonymous.}, q{You have junk mail.}, q{Asking whether machines can think is like asking whether submarines can swim. <br /> - <i>E.W. Dijkstra</i>}, q{Ethernet (n): something used to catch the etherbunny.}, q{Access denied - nah nah na nah nah...}, q{Your password is pitifully obvious.}, q{I suppose when it gets to that point, we shan't know how it does it. <br /> - <i>Turing</i>}, q{Never underestimate the bandwidth of a station wagon full of tapes. <br /> - <i>Jackson</i>}, q{Base 8 is just like base 10, really .. if you're missing two fingers. <br /> - <i>Tom Lehrer</i>}, q{The number of UNIX installations has grown to 10, with more expected. (6/72)}, q{#define QUESTION ((bb) || !(bb)) - <i>W. Shakespeare</i>}, q{C:\DOS C:\DOS\RUN RUN\DOS\RUN}, q{May the bugs of many programs find a home on your hard drive.}, q{This message transmitted with 100% recycled electrons.}, q{Email from a friend: "CanYouFixTheSpaceBarOnMyKeyboard?"}, q{Nice computers don't go down.}, q{Use the source, Luke.}, q{Windows 95: n.<br />32 bit extensions and a graphical shell<br />for a 16 bit patch to an 8 bit operating system<br />originally coded for a 4 bit microprocessor<br />written by a 2 bit company that can't stand 1 bit of competition.}, q{If a packet hits a pocket on a socket on a port,<br />And the bus is interrupted as a very last resort,<br />And the address of the memory makes your DVD abort,<br />Then the socket packet pocket has an error to report.}, q{A life? Cool! Where can I download one of those?}, q{Bad or missing mouse driver. Spank the cat? [Y/N]?}, q{Email returned to sender - insufficient voltage.}, q{5975702c206974277320415343494920656e636f64696e672e}, # perl -e"print pack('H*','5975702c206974277320415343494920656e636f64696e672e').$/" q{There are only 10 types of people in this world: <br /> those who understand binary, and those who don't.}, q{When in doubt, use brute force. <br /> - <i>Ken Thompson</i>}, q{The fastest algorithm can frequently be replaced <br /> by one that is almost as fast and much easier to understand. <br /> - <i>Douglas W. Jones</i>}, q{Furious activity is no substitute for understanding. <br /> - <i>H.H.Williams</i>}, q{Plagiarism is the sincerest form of flattery. <br /> - <i>Anon</i>}, q[perl -e'while($.++<99){$_.=1;print$..$/if!/^1?$|^(11+?)\1+$/}' <br /> <i> - Abigail</i>], q[ruby -e'99.times{|_|/^_?$|^(__+?)\1+$/=~"_"*_ or p _}' <br /> <i> - Sam (eight strokes shorter then <a href="?joke=85">Abigail's</a> in ruby)</i>], q{Cogito cogito, ergo cogito sum.<br />(I think I think, therefore I think I am.) }, q{<table><tr><td align='left'>Top 10 reasons to procrastinate:<br />1.<br /></td></tr></table>}, q{If Bill Gates had a nickel for every time Windows crashed...<br /> Oh wait, he does.}, q{More good code has been written in languages denounced as "bad"<br /> than in languages proclaimed "wonderful" -- much more.<br /> -- Bjarne Stroustrup, "The Design and Evolution of C++"}, q{<code>double value; /* or your money back! */ <br/>short changed; /* so triple your money back! */</code><br/> -- Larry Wall in cons.c from the perl source code}, q{Designing pages in HTML is like having sex in a bathtub.<br/> If you don't know anything about sex,<br/> it won't do you any good to know a lot about bathtubs.<br /> -- vagabond@mcgurkus.circus.com}, q{<code>echo "Your stdio isn't very std."</code><br/> -- Larry Wall in Configure from the perl distribution}, q{I have yet to see any problem, however complicated,<br/> which, when you looked at it in the right way,<br/> did not become still more complicated.<br/> -- Paul Anderson}, q{Sentences long extremely and notation Polish reverse<br/>in writing about wrong is what? -- Jarkko Hietaniemi}, q{The lyf so short, the craft so long to lerne.<br/> -- Geoffrey Chaucer}, ); #); # make the syntax checker happy. my $which = defined(param('joke')) ? param('joke') % scalar(@jokes) : rand(@jokes); return $jokes[$which]; } sub get_next_joke_link { return '' } # sub get_next_joke_link { # return '' unless defined(param('next')); # my $joke_number = defined(param('joke')) ? param('joke') : 0; # my $n_jokes = scalar(@jokes); # my $next_number = ($joke_number+1) % $how_many; # return qq(joke $joke_number of $n_jokes) . # qq(<a href="?next=1&joke=$next_number">next</a><p> </p>); # } # ======================================================== sub SSL_logo_html { if ($ENV{HTTPS} or $ENV{SSL_SESSION_ID}){ return q{<br/><small>ssl</small>} # return q{ # <p /><a href="http://certs.ipsca.com/"> # <img border=0 src="/images/ipsCASecuredLogoSmallLock.gif" alt="ipsCS" /> # </a> # } # -- more detailed version with clickable cs.marlboro.edu verification link. # return q{ #<p /> #<a href="https://certs.ipsca.com/sslcheck/servidorseguro.asp?numeroserie=46:51:04:33:48:1D:9E:8C:7F:F2:CE:4E:18:5D:E5:9C:73:0F:15:48"> # <img border=0 src="/images/ipsCASecuredLogoSmallLock.gif"> #</a><br /> #<small><b> #<a href="http://certs.ipsca.com">http://certs.ipsca.com</a> #</b></small> # } } else { return '' } } # ======================================================== sub page_html { my ($joke, $next_joke_link, $lastmodified, $ipsCA_stuff) = @_; return <<"END_QUOTE"; <div style="min-width:600px"> <div style="position:absolute; left:510px; top:20px;"><a href="http://www.marlboro.edu/" ><img src="/images/mc-logo.gif" border="0" alt="Marlboro College" /></a></div> <div style="display:inline"><table width="100%"> <tr><td colspan="2"> <a href="/"><img src="/images/cs_m_edu.png" alt="computer science @ marlboro" border="0" /></a> <ul> <li><b>Courses</b> <ul> <li><a href="/courses/spring2013/"><b>Spring 2013</b></a><br/> <ul> <li><a href="/courses/spring2013/algorithms/home" >Algorithms</a></li> <li><a href="/courses/spring2013/systems/home" >Computer Systems</li> <li><a href="/courses/spring2013/tango/home" >Argentine Tango</a></li> <li><a href="/courses/spring2013/jims_tutorials/home" >Jim's Tutorials</a></li> <li><a href="/courses/spring2013/dedhour/home" >Dedicated Hour</a></li> </ul></li> <li><a href="/term/previous.html">Previous semesters</a></li> <li><a href="/term/next.html">Next semesters</a></li> <li><small><a href="http://www.marlboro.edu/academics/courses"> All college courses </a></small></li> </ul><p></p></li> <li><b>People</b> <form method="get" target="_other" action="/on-campus/people/lookup.cgi"> <ul> <li><a href="mailto:mahoney\@marlboro.edu" >Jim Mahoney</a> | computer science faculty | <a href="courses/spring2013/jims_schedule.html">schedule</a> | <a href="http://www.marlboro.edu/academics/faculty/mahoney_jim">bio</a> </li> <li><small> <a href="/on-campus/people/students.html">students</a> | <a href="http://www.marlboro.edu/resources/directory/faculty">faculty</a> | <a href="http://www.marlboro.edu/resources/directory/staff">staff</a> | <a href="http://www.marlboro.edu/offices">offices</a> | <a href="/on-campus/people/lookup.cgi">search</a> : <input type="text" name="users" value="" size="12" maxlength="48" /> </small></li> </ul></form><p></p></li> <li><b>Resources</b> <ul style="list-style-type:none"> <li><small> <a href="http://www.marlboro.edu/academics/study/computer_science/"> About Computer Science @ Marlboro</a> | <a href="/home/studentwork.html">student work</a> | <a href="/courses/marlboro_wiki/tools">tools</a> | <a href="/courses/marlboro_wiki/rights">plagiarism</a> </small></li> <li><small> recent work: <a href="http://pivotstep.org">pivotstep.org</a> (dance scripting) | <a href="/wikiacademia">wikiacademia</a> (course software) </small></li> <li><small> MC <a href="http://www.marlboro.edu/resources/handbook/">handbook</a> | <a href="http://www.marlboro.edu/resources/handbook/constitution" >constitution</a> | <a href="http://www.marlboro.edu/resources/info/campus_forms/" >forms</a> | <a href="http://www.marlboro.edu/resources/calendars/">calendars</a> | <a href="http://www.marlboro.edu/resources/library/">library</a> <!-- <a href="http://docs.marlboro.edu">docs.m'boro</a> | <a href="http://www.marlboro.edu/communities/staff/records">records</a> --> </small></li> <li><small> <a href="/on-campus/">on-campus</a> | <!-- <a href="/on-campus/Arabic_English_News">Arabic/English News</a> | --> <!-- <a href="wiki">wiki</a> | --> <a href="http://courses.marlboro.edu">courses.m'boro</a> | <a href="/docs/">docs</a> | <a href="/code/">code</a> | <!-- <a href="https://cs.marlboro.edu/green-river/">green-river</a> | --> <!-- <a href="http://bob.marlboro.edu/wiki08">MSIE '08</a> | --> <a href="/courses/marlboro_wiki/home">m'boro wiki</a> | <!-- <a href="/home/links.html">links</a> | --> <a href="http://nook.marlboro.edu">nook</a> </small></li> <!-- <li><small> wikipedia : <a href="http://en.wikipedia.org/wiki/Portal:Computer_science" >Computer_science</a> | <a href="http://en.wikipedia.org/wiki/Portal:Information_technology" >Information_technology</a> </small></li> --> <li><small> <a href="/tools/baseConvert.cgi">base convert</a> | <a href="/calc/plan_calculator.html">plan calculator</a> </small></li> </ul></li> </ul> </td> </tr> <tr><td colspan="2" align="right"> <font color="#660000" face="arial,helvetica"><small> $next_joke_link $joke </small></font> </td></tr> <tr> <td colspan="2"> <hr style="height:1px; border:0; margin:0; color:darkgreen; background-color:darkgreen" /> </td></tr> <tr> <td> <!-- <form method="get" action="http://www.google.com/search" name="goofoo" target="_blank"> <a href="http://www.google.com/"> <img border="0" align="middle" alt="Google" src="/images/google25.gif" /> </a> <input name="q" size="24" maxlength="800" value="" /> <input style="border:0;margin:0;padding:0;" type="image" src="/images/lucky.gif" name="btnI" value="I'm Feeling Lucky" /> </form> --> </td> <td align="right" valign="top"> <small>$lastmodified<br /> <a href="index.cgimp_html">source</a></small> $ipsCA_stuff </td></tr> </table></div> </div> END_QUOTE }
syntax highlighted by Perl::Tidy 20060719