GNU's Not Unix

View Counter

I wanted a view counter for my site that displayed as nixie tubes, but I couldn't find any that worked without javascript. I adapted this php script, and wrote a loop to print nixie tube digits that I found and cropped from here. I also print the view count in the footer, and that's what I have increment the count.

// path of view count file
$path = 'XXX';

// Opens countlog.txt to read the number of hits.
$file  = fopen( $path, 'r' );
$count = fgets( $file, 1000 );
fclose( $file );

// Update the count.
$count = abs( intval( $count ) ) + 1;

// Opens countlog.txt to change new hit number.
$file = fopen( $path, 'w' );
fwrite( $file, $count );
fclose( $file );

// format number
$fcount = number_format($count);

// convert hits to array
$numbers = str_split($count);

// increment through array, print numbers to page as nixie tube pictures
$i = 0;
while ($i < sizeof($numbers)){
// print first line with alt text for screen readers/text browsers
if($i==0){
echo '<img class="nixie" title="Site viewed '.$fcount.' times." alt="Site viewed '.$fcount.' times." src="/img/numbers/'.$numbers[$i].'.gif"//>';
} else {
echo '<img class="nixie" title="Site viewed '.$fcount.' times." alt="" src="/img/numbers/'.$numbers[$i].'.gif"//>';
}
$i++;
}
Site viewed 134,653 times.

Snow

I set up a PHP script to query Open Weather Map and adjust the theme of this site based on local weather. It caches the results to a file, and tracks how long it has been since it last snowed.

// check recent snow flag
$snowedrecently = 0;
if (time()-filemtime($path3) < 7 * 24 * 3600) {$snowedrecently = 1;}

// check age of file, poll weather api if stale
if (time()-filemtime($path) > 4 * 3600) {

    // openweathermap api key and cityid
    $apiKey = "XXX";
    $cityId = "XXX";

    // get current weather
    $apiUrl = "http://api.openweathermap.org/data/2.5/weather?id=".$cityId."&lang=en&units=metric&APPID=".$apiKey;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
    curl_close($ch);

    // cache response to file
    $file = fopen( $path, 'w' );
    fwrite( $file, $response );
    fclose( $file );

    // pull location from response
    $data = json_decode($response);
    $lat = ucwords($data->coord->lat);
    $lon = ucwords($data->coord->lon);

    // get weather forecast
    $apiUrl = "http://api.openweathermap.org/data/2.5/onecall?lat=".$lat."&lon=".$lon."&APPID=" . $apiKey;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $apiUrl);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_VERBOSE, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response2 = curl_exec($ch);
    curl_close($ch);

    // cache forecast to file
    $file = fopen( $path2, 'w' );
    fwrite( $file, $response2 );
    fclose( $file );

} else {
    // read cached api response
    $response = file_get_contents("$path");
    $response2 = file_get_contents("$path2");
}

// pull weather data from response
$data = json_decode($response);
$data2 = json_decode($response2);
$currentTime = time();
$weather = ucwords($data->weather[0]->main);
$weatherdetails = ucwords($data->weather[0]->description);
$weatherdaily = ucwords($data2->daily[0]->weather[0]->main);

// set recent snow flag
if((strpos($weather, 'Snow') !== false) or (strpos($weatherdaily, 'Snow') !== false)){
    $file = fopen( $path3, 'w' );
    fwrite( $file, $response );
    fclose( $file );
}

$lastsnowday = date("m-d", filemtime($path3));

$month=date("n");
$day=date("d");

$snowing = ((strpos($weather, 'Snow') !== false) or (strpos($weatherdaily, 'Snow') !== false) or ($month==12 && $day > 20) or ($snowedrecently == 1)) && (strpos($weather, 'Rain') == false);
The snow theme active on the recipes page.

Banners

I also set up PHP scripts to randomize banners on this site. Some of the banners were found on old sites using the Internet Archive, some are from The 88x31 GIF Collection, Slackware Propaganda, and some I made myself. Each banner has the location of the image, the site that it links to, the alt text/hover title, and a spot for CSS classes for custom mouse cursors/formatting.

function thinBanner(){

    $ban = array();

    $ban[] = array("/img/eff.gif", "https://eff.org/", "Electronic Frontier Foundation", "");
    $ban[] = array("/img/internet-study-1998-fix.gif", "https://www.webdesignmuseum.org/exhibitions/web-banners-in-the-90s", "Click Here to participate in the 1998 internet users study", "");
    $ban[] = array("/img/divineSW.gif", "https://slackware.com/", "Slackware: Simplicity is Divine", "");
    $ban[] = array("/img/powered-by-debian.gif", "https://debian.org/", "This server is powered by Debian", "");
    $ban[] = array("/img/sci-hub.gif", "https://sci-hub.se/", "Sci-Hub: To remove all barriers on the way of science", "");
    $ban[] = array("/img/slack.bobs.banner.jpeg", "https://slackware.com/", "Slackware", "");
    $ban[] = array("/img/slack.fnuh.banner.jpeg", "https://slackware.com/", "Slackware", "");
    $ban[] = array("/img/libgen.gif", "https://libgen.is/", "Library Genesis", "");
    $ban[] = array("/img/tux/linux-online.gif", "http://linux.org/", "Linux Online", "");
    $ban[] = array("/img/tux/linuxisobanner.gif", "https://web.archive.org/web/20091027110215/http://www.geocities.com/Area51/Cavern/8445/linux.html", "Linux ISO", "");
    $ban[] = array("/img/tux/linuxmandrakebanner.gif", "https://archive.org/details/mandrakelinux-10.1-official", "Mandrake Linux", "");
    $ban[] = array("/img/tux/linuxbanner2.gif", "https://web.archive.org/web/20091027023408/http://uk.geocities.com/tomasdore/lk/linuxlks.htm", "Try Linux", "");
    $ban[] = array("/img/tux/linuxad.gif", "http://linux.org/", "Got Linux?", "");
    $ban[] = array("/img/promote.gif", "https://www.webdesignmuseum.org/exhibitions/web-banners-in-the-90s", "Register your Website to over 750+ directories 100% FREE", "");
    $ban[] = array("/img/freshmeat.gif", "https://web.archive.org/web/20091027123158/http://geocities.com/amirimran/linux.html", "Freshmeat Newsletter", "");
    $ban[] = array("/img/geocitiesbanner.gif", "https://web.archive.org/web/20090804153206/http://geocities.com/SunsetStrip/Venue/7357/dave/yieldsong.html", "Join Geocities!", "");
    $ban[] = array("/img/trackballworld.gif", "http://trackballworld.com/", "TrackballWorld: Your Best Source for Trackball Products", " ball");
    $ban[] = array("/img/at-t-the-first-banner-1994.png", "https://www.webdesignmuseum.org/exhibitions/web-banners-in-the-90s/", "Have you ever clicked your mouse right HERE? YOU WILL", "");	
    $ban[] = array("/img/doom/banner2.gif", "", "Doom Legacy: New Look! same great TASTE", " doom");
    $ban[] = array("/img/pentium-1999.gif", "https://www.webdesignmuseum.org/exhibitions/web-banners-in-the-90s/", "Pentium III - Intel Inside - More power, More internet", "");
    $ban[] = array("/img/enlarge-orb.gif", "/trackball/", "ENLARGE YOUR ORB", " ball ");        
    
    shuffle($ban);
    echo '<a href="'.$ban[0][1].'"><img class="bottomimg'.$ban[0][3].'" src="'.$ban[0][0].'" title="'.$ban[0][2].'" alt="'.$ban[0][2].'"/></a>'."\xA";
    echo '<a href="'.$ban[1][1].'"><img class="bottomimg'.$ban[1][3].'" src="'.$ban[1][0].'" title="'.$ban[1][2].'" alt="'.$ban[1][2].'"/></a>'."\xA";
    
}

function thiccBanner(){

    $ban = array();

    $ban[] = array("/img/compmon.gif", "https://anybrowser.org/campaign/", "This site best viewed with a computer and monitor", "");
    $ban[] = array("/img/itar.gif", "http://www.cypherspace.org/adam/shirt/", "CAUTION!!! ITAR CONTROLLED MUNITION", "");
    $ban[] = array("/img/normalSW.jpg", "http://slackware.com/", "Slackware: Those penguins... They sure 'aint normal...", "");
    $ban[] = array("/img/superhighway.gif", "https://eff.org/", "EFF: Protecting the Information Superhighway since 1990", "");
    $ban[] = array("/img/cypherspace.gif", "http://cypherspace.org/", "cypherspace: Cypherpunks Distributed Data-haven", " doot"); 
    $ban[] = array("/img/cst.gif", "https://xkeys.com/xkeys/trackballs.html", "Clearly Superior Technologies, Inc.: Your choice for high resolution laser trackballs", " ball");
    $ban[] = array("/img/doom/ACTQUAKE.GIF", "", "Quake Mission Pack NO.1", " doom"); 
    $ban[] = array("/img/seti128x.gif", "", "Search the stars with seti@home", "");
    $ban[] = array("/img/internet-archive.gif", "https://archive.org/", "Internet Archive", "");
    $ban[] = array("/img/wayback.gif", "https://web.archive.org/", "Wayback Machine", "");    
    
    shuffle($ban);
    echo '<a href="'.$ban[0][1].'"><img class="bottomimg'.$ban[0][3].'" src="'.$ban[0][0].'" title="'.$ban[0][2].'" alt="'.$ban[0][2].'"/></a>'."\xA";
    echo '<a href="'.$ban[1][1].'"><img class="bottomimg'.$ban[1][3].'" src="'.$ban[1][0].'" title="'.$ban[1][2].'" alt="'.$ban[1][2].'"/></a>'."\xA";
    
}

function twoBanners(){

    if((bool)rand(0,1)){
        thinBanner();
    } else {
        thiccBanner();
    }
}

function fullwidth($num){

    $button = array();

    $button[] = array("/img/tea/alc_tea_for_two.gif", "/tea/", "Tea for two", " tea");
    $button[] = array("/img/tea/lcpteabreak.gif", "/tea/", "I need a tea break", " tea");
    $button[] = array("/img/tea/teasolveseverything.gif", "/tea/", "tea solves everything", " tea");
    $button[] = array("/img/tea/teatwoa.gif", "/tea/", "Tea for two", " tea");
    $button[] = array("/img/debian.gif", "https://debian.org", "Debian Linux User", "");
    $button[] = array("/img/welcome.gif", "", "Welcome", "");
    $button[] = array("/img/undercon.gif", "", "Under Construction", "");
    $button[] = array("/img/seti128x.gif", "", "Search the stars with seti@home", "");
    $button[] = array("/img/download_tor.png", "https://torproject.org", "Download TOR", " shrek");
    $button[] = array("/img/tea/teatonite.gif          ", "/tea/", "Tea tonite", " tea");
    $button[] = array("/img/tea/teacookieblink.gif     ", "/tea/", "Tea + Cookie Addict", " tea");
    $button[] = array("/img/tea/tea_addict.gif         ", "/tea/", "Tea Addict", " tea");
    // $button[] = array("/img/tea/coffeetea.gif          ", "/tea/", "", " tea");
    $button[] = array("/img/tea/teabanner.gif          ", "/tea/", "???", " tea");
    $button[] = array("/img/tea/teablink.gif           ", "/tea/", "Tea Lover", " tea");

    // $button[] = array("/img/doom/banner2.gif", "", "Doom Legacy: New Look! same great TASTE", " doom");
    // $button[] = array("/img/doom/ACTQUAKE.GIF", "", "Quake Mission Pack NO.1", " doom");
    $button[] = array("/img/sidebar/joineff.gif", "https://eff.org/joineff", "Join EFF", "");

    shuffle($button);
    for ($x=0; $x < $num; $x++){
        echo '<a href="'.$button[$x][1].'"><img class="sideban'.$button[$x][3].'" src="'.$button[$x][0].'" title="'.$button[$x][2].'" alt="'.$button[$x][2].'"/></a>'."\xA";
    }

}		       

function sideBanner($num){

    $button = array();

    $button[] = array("/img/AMD_Athlon_Rockets_to_1GHZ.gif", "#", "AMD Athlon Rockets to 1GHz", "");
    $button[] = array("/img/wintrac.jpg", "/trackball/", "WinTrac Trackball: The Superior Windows Mouse", " ball");    
    $button[] = array("/img/pc-trac.jpeg", "/trackball/", "Two High Performance Mouse Alternatives", " ball"); 
    $button[] = array("/img/microspeed-maxtrac.jpeg", "/trackball/", "MicroSpeed", " ball");
    $button[] = array("/img/fasttrap.jpeg", "/trackball/", "MicroSpeed FastTRAP", " ball");
    $button[] = array("/img/cst-side.gif", "/trackball/", "Clearly Superior Technologies", " ball");
    $button[] = array("/img/microspeed-fasttrap.jpeg", "/trackball/", "MicroSpeed FastTRAP: Now You have a New Alternative to Mice!", " ball");
    $button[] = array("/img/fasttrap2.jpeg", "/trackball/", "The Three Axis Pointing Device of the Future", " ball");
    $button[] = array("/img/turbomouse.gif", "/trackball/", "TurboMouse Trackball", " ball");
    $button[] = array("/img/tux/linux05.gif", "#", "Linux", "");
    $button[] = array("/img/tux/TuxTech.gif", "#", "TuxTech", "");
    $button[] = array("/img/take-back-internet.png", "https://blog.torproject.org/take-back-internet-us", "Take Back the Internet with TOR", " shrek");
    $button[] = array("/img/trackball-gang.jpg", "/trackball/", "Imagine having to move your whole mouse to move your cursor", " ball");
    $button[] = array("/img/display.gif", "#", "", "");
    $button[] = array("/img/nocloud.png", "#", "There is no cloud, just other people's computers", "");
    $button[] = array("/img/doom/intel_quakeadd.gif", "#", "Experience the Intel Pentium 4 Processor", " doom");
    $button[] = array("/img/image001.gif", "#", "Under Construction", "");
    $button[] = array("/img/dead-kennedys.png", "#", "Home taping is killing record industry profits! We left this side blank so you can help", "");
    $button[] = array("/img/pi-eng.png", "https://xkeys.com/xkeys/trackballs.html", "PI Engineering", " ball");    
    $button[] = array("/img/your-key-to-the-dark-web.png", "#", "", "");
    // $button[] = array("/img/tea/project_tea.gif", "/tea/", "", " tea");
    
    shuffle($button);
    for ($x=0; $x < $num; $x++){
        echo '<a href="'.$button[$x][1].'"><img class="sideban'.$button[$x][3].'" src="'.$button[$x][0].'" title="'.$button[$x][2].'" alt="'.$button[$x][2].'"/></a>'."\xA";
    }

}

function randButton(int $num){

    $button = array();
    
    $button[] = array( "/img/sidebar/y2k.gif", "https://cyber.dabamos.de/88x31/index.html", "Y2K", "");
    $button[] = array( "/img/sidebar/chrmevil.gif", "https://www.mozilla.org/en-US/firefox/new/", "Google Chrome is EVIL!", "");
    $button[] = array( "/img/sidebar/copy_floppy.gif", "https://openbehavioralscience.org/manifesto/", "Copy that Floppy!", "");
    $button[] = array( "/img/sidebar/debian-powered.gif", "https://debian.org/", "Debian Powered", "");
    $button[] = array( "/img/sidebar/debian.gif", "https://debian.org/", "Powered by Debian", "");
    $button[] = array( "/img/sidebar/emacs3.gif", "https://www.gnu.org/software/emacs/", "Site Created with Emacs", "");
    $button[] = array( "/img/sidebar/emacsnow.gif", "https://www.gnu.org/software/emacs/", "emacs Now!", ""); 
    $button[] = array( "/img/sidebar/firefox.gif", "https://www.mozilla.org/en-US/firefox/new/", "Get Firefox", ""); 
    $button[] = array( "/img/sidebar/firefox2.gif", "https://www.mozilla.org/en-US/firefox/new/", "Firefox", ""); 
    $button[] = array( "/img/sidebar/firefox3.gif", "https://www.mozilla.org/en-US/firefox/new/", "Firefox", ""); 
    $button[] = array( "/img/sidebar/firefoxnow.gif", "https://www.mozilla.org/en-US/firefox/new/", "Firefox Now!", ""); 
    $button[] = array( "/img/sidebar/futurama.gif", "https://cyber.dabamos.de/88x31/index.html", "The Futurama Outlet", ""); 
    $button[] = array( "/img/sidebar/futurama_archive.gif", "https://cyber.dabamos.de/88x31/index.html", "The Futurama Archive", ""); 
    $button[] = array( "/img/sidebar/futuramadb.gif", "https://cyber.dabamos.de/88x31/index.html", "The Futurama Database", ""); 
    $button[] = array( "/img/sidebar/getfirefox.gif", "https://www.mozilla.org/en-US/firefox/new/", "Get Firefox: The browser you can trust", "");
    $button[] = array( "/img/sidebar/getq2.gif", "https://github.com/Novum/vkQuake", "Get Quake II", " doom"); 
    $button[] = array( "/img/sidebar/getquake.gif", "https://github.com/Novum/vkQuake", "Get Quake Now!", " doom"); 
    $button[] = array( "/img/sidebar/gimp.gif", "https://www.gimp.org/", "Graphics by Gimp", ""); 
    $button[] = array( "/img/sidebar/gnu-fdl.gif", "http://www.gnu.org/licenses/fdl-1.3.html", "GNU Free Documentation License", ""); 
    $button[] = array( "/img/sidebar/gnu-linux.gif", "https://gnu.org", "Made on GNU/Linux", ""); 
    $button[] = array( "/img/sidebar/gplv3.gif", "https://www.gnu.org/licenses/gpl-3.0.en.html", "GNU General Public License", ""); 
    $button[] = array( "/img/sidebar/id.gif", "https://github.com/Novum/vkQuake", "ID Software", " doom"); 
    $button[] = array( "/img/sidebar/internetarchive.gif", "https://archive.org/", "Internet Archive", ""); 
    $button[] = array( "/img/sidebar/linux-directory.gif", "https://www.kernel.org/", "Linux Directory", ""); 
    $button[] = array( "/img/sidebar/linux-p.gif", "https://www.kernel.org/", "Linux Powered", ""); 
    $button[] = array( "/img/sidebar/linux.gif", "https://www.kernel.org/", "Linux 2.0", ""); 
    $button[] = array( "/img/sidebar/linux_powered.gif", "https://www.kernel.org/", "Linux Powered", ""); 
    $button[] = array( "/img/sidebar/linuxnow2.gif", "https://www.kernel.org/", "Linux Now!", ""); 
    $button[] = array( "/img/sidebar/moz2.gif", "https://www.mozilla.org/en-US/firefox/new/", "Mozilla", ""); 
    $button[] = array( "/img/sidebar/mozbutd1.gif", "https://www.mozilla.org/en-US/firefox/new/", "Choose Mozilla", ""); 
    $button[] = array( "/img/sidebar/mozilla2.gif", "https://www.mozilla.org/en-US/firefox/new/", "Mozilla", ""); 
    $button[] = array( "/img/sidebar/powered-by-debian.gif", "https://debian.org/", "Powered by Debian", ""); 
    $button[] = array( "/img/sidebar/sun.gif", "https://cyber.dabamos.de/88x31/index.html", "Sun Microsystems", ""); 
    $button[] = array( "/img/sidebar/tor.gif", "https://torproject.org", "TOR", " shrek"); 
    $button[] = array( "/img/emacs2.png", "https://www.gnu.org/software/emacs/", "Created with Emacs", ""); 
    $button[] = array( "/img/made-with-emacs.png", "https://www.gnu.org/software/emacs/", "Made with GNU Emacs the right way", ""); 
    $button[] = array( "/img/tilttuxSW.jpg", "http://slackware.com/", "Slackware Linux", ""); 
    $button[] = array( "/img/debian_logo_02.gif", "https://debian.org/", "debian GNU/Linux Powered", ""); 
    $button[] = array( "/img/duck.gif", "https://en.wikipedia.org/wiki/Duck", "Quack", ""); 
    $button[] = array( "/img/accursed-farms.gif", "https://www.accursedfarms.com/", "Accursed Farms", ""); 
    $button[] = array( "/img/accursed-farms-alien-blink.gif", "https://www.accursedfarms.com/", "Accursed Farms", ""); 
    $button[] = array( "/img/sidebar/gc_icon.gif", "https://neocities.org/", "GeoCities", ""); 
    $button[] = array( "/img/libreboot.gif", "https://libreboot.org/", "Libreboot", ""); 
    $button[] = array( "/img/coreboot.gif", "https://coreboot.org/", "Coreboot", ""); 
    $button[] = array( "/img/gc_icon.gif", "https://neocities.org/", "Geocities", ""); 
    $button[] = array( "/img/doom/gettf.gif", "/img/doom/gettf.gif", "Get Team Fortress", ""); 
    $button[] = array( "/img/doom/quakelogo.gif", "/img/doom/quakelogo.gif", "Quake", " doom"); 
    $button[] = array( "/img/doom/quakenow.gif", "/img/doom/quakenow.gif", "Quake II Now!", " doom"); 
    $button[] = array( "/img/doom/quakeon.gif", "/img/doom/quakeon.gif", "QuakeOn Now!", " doom"); 
    $button[] = array( "/img/sidebar/minifree.gif", "https://minifree.org", "Ministry of Freedom", "");
    $button[] = array( "/img/xah-lee.gif", "http://xahlee.info/kbd/trackball_index.html", "Xah Lee Web", " ball");
    $button[] = array( "/img/ergo-emacs.gif", "http://ergoemacs.org", "Ergo Emacs", ""); 

    if(date("n") == 10){
        $button[] = array( "/img/sidebar/halloween1.gif", "https://cyber.dabamos.de/88x31/index.html", "Boo! Happy Halloween", " doot"); 
        $button[] = array( "/img/sidebar/halloween2.gif", "https://cyber.dabamos.de/88x31/index.html", "trick or treat", " doot"); 
        $button[] = array( "/img/sidebar/halloween1.gif", "https://cyber.dabamos.de/88x31/index.html", "Boo! Happy Halloween", " doot"); 
        $button[] = array( "/img/sidebar/halloween2.gif", "https://cyber.dabamos.de/88x31/index.html", "trick or treat", " doot"); 
        $button[] = array( "/img/sidebar/halloween1.gif", "https://cyber.dabamos.de/88x31/index.html", "Boo! Happy Halloween", " doot"); 
        $button[] = array( "/img/sidebar/halloween2.gif", "https://cyber.dabamos.de/88x31/index.html", "trick or treat", " doot"); 
        $button[] = array( "/img/sidebar/halloween1.gif", "https://cyber.dabamos.de/88x31/index.html", "Boo! Happy Halloween", " doot"); 
        $button[] = array( "/img/sidebar/halloween2.gif", "https://cyber.dabamos.de/88x31/index.html", "trick or treat", " doot"); 
    }

    shuffle($button);
    for ($x=0; $x < $num; $x++){
        echo '<a href="'.$button[$x][1].'"><img class="sidebutton'.$button[$x][3].'" src="'.$button[$x][0].'" title="'.$button[$x][2].'" alt="'.$button[$x][2].'"/></a>'."\xA";
    }
}

function holidaySidebar(){
    $month=date("n");
    if($month == 10){
        echo <<< EOT
         <a href="#"><img src="/img/skeleton-dance.gif" alt="dancing skeleton" title="dancing skeleton" class="sidegif doot"/></a>
         <a href="#"><img src="/img/skeleton-trumpet.gif" alt="trumpet skeleton" title="Doot Doot" class="sidegif doot"/></a>
         <a href="https://web.archive.org/web/20090724040931/http://geocities.com/therunescapevirtualmarines/"><img src="/img/skeletonanim.gif" alt="runescape skeleton" title="runescape skeleton" class="sidegif doot"/></a>
EOT;
    } elseif($month == 12){
                		     
    } else {
        echo <<< EOT
         <a href="#"><img src="/img/tux/linux05.gif" alt="Free GNU/Linux" title="Free GNU/Linux" class="sidegif" /></a>
         <a href="#"><img src="/img/tux/TuxTech.gif" alt="TuxTech" title="TuxTech" class="sidegif" /></a>
	 <a href="#"><img src="/img/tux/giflungua.gif" alt="Tux Tongue" title="Tux Tongue" class="sidegif" /></a>
EOT;
    }
}
Random banners at bottom of page.
2600 - The Hacker Quarterly - NOW ON STANDS! Internet Archive