Klaar met het jaar

De terugblik…

2006 was een mooi jaar voor het weblog. Met net geen half miljoen bezoekers lijkt het in een behoefte te voorzien. Daar doe ik het voor. Natuurlijk schrijf ik om gelezen te worden. Webloggers, schrijvers, fotografen en anderen die in de openbaarheid treden die beweren dat ze niet ijdel zijn, moeten direct worden gewantrouwd!

Wat waren voor mij zo´n beetje de weblog hoogtepunten van het jaar?

Het grootste hoogtepunt voor mij was het succes van de actie om Ursula de fondsen te geven de Engelse school te beginnen op Oost Timor. Geweldig dat we zo´n groot bedrag bij elkaar hebben gebracht!

Het bezoek aan Indonesië in januari leverde een indrukwekkende reportage op over de bewoners langs het spoor in Jakarta. Het werk dat de Stichting (Yayasan) Aulia (zie: www.aulia-kids.org en de Stichting Lestari) daar doen is heel bijzonder.

Politiek, politieke partijen en politici zijn een dankbaar onderwerp om over te schrijven. De gemeenteraadsverkiezingen in maart leverden de zoveelste lokale partij op. Het was een genot om de lokale Wisselse partij LPB te dollen. Hetzelfde geldt overigens voor andere politici.

In April stelde ik onder andere de misselijk makende hypocrisie van de Postcodeloterij en haar goede doelen aan de orde. Milieubewegingen vreten uit de ruif waar zestig BMW-s worden weggegeven.

Mei is voorjaar en in het voorjaar worden er jonge beestjes geboren. Dat levert leuke foto´s op: bijvoorbeeld veulens, boomklevers en boerenzwaluwen.

In juni was het snikheet. De hitte werd niet alleen veroorzaakt door het weer, maar ook door het wereldkampioenschap voetbal. Gelukkig duurde die gekte niet lang.

Een marktkoopman dacht in juli de nationaal-socialistische revolutie in Epe te ontkenen door Mein Kampf op de markt te gaan verkopen. Na een artikel in De Stentor koos hij het hazenpad.

In Augustus maakte ik mijn laatste reportage voor het kwartaalblad Vorm en Leegte. Bij de Nederlandse Stichting ter bevordering van de Tibetaanse Geneeskunde maakte ik een fotoreportage over de Amchi aan het werk.

In september kregen de publieke televisiezenders een nieuwe indeling. Ik voorspelde toen dat Netwerk met de programmering om half acht het onderspit ging delven. Vanaf januari is het weer terug op de oude tijd.

Natuurlijk was het verschijnen van het fotoboek Epe! Een fotodocumentaire over het dagelijks leven op 12 oktober ook een absoluut hoogtepunt van het jaar. Het geeft echt een kick om je eigen foto´s in zo´n mooi vormgegeven boek (BeCo bedankt!) in de winkel te zien liggen. De reacties waren ook erg leuk! Alle kopers van het boek bedankt, maar kijk je exemplaar wel even na!

Vanaf juni zijn we bezig geweest om over te stappen naar Internet plus Bellen van KPN. Het leverde een hele serie met bizarre ervaringen met KPN en Planet op. Pas in december is het uiteindelijk allemaal goed gekomen. Nou ja goed… er zal nog wel wat gesteggel plaatsvinden over de rekeningen die gaan komen.

En daarmee is 2006 tot een eind gekomen. Ik wens alle beeldbuislezers een goede jaarwisseling toe!

En mijn goede weblogvoornemens voor 2007? Gewoon doorgaan met wat ik in 2006 ook al deed: hypocrisie in de politiek en andere geledingen binnen de maatschappij aan de orde stellen, mij soms opwinden over de voorgeprogrameerde managerscultuur in ons land (ook in Epe en omstreken) en vooral veel foto´s blijven maken.

Kortom... ik wil het wereld wijde web blijven vullen. Vaak bloedserieus en vanuit mijn eigen gevoel, maar vaak ook vanuit het perspectief van de dorpsgek die vroeger bij de pomp stond te roepen, gecombineerd met het beschouwende cynisme van de oude mannetjes uit de Muppets Shows en de harde rechtlijnige analyticus die de vinger op de zere wonden legt. Kijk zelf maar of je in 2007 terugkomt. Ik ben er klaar voor!

© Harold Makaske 31 december 2006 to allow skipping count when used in template (ie to not count on click in main page) V1.4 - Fixed ignoe same IP count problem V1.5 - Added views_log table and changed plugin performance to check for unique visits by IP address. [gRegor] - Added option to set the length of time before re-counting hits from the same IP address (default: 2 hours) [gRegor] V1.6 - Added plugin menu to display all view count, w/ counter reset function - Delete view counter and log for deleted item V1.7 - use sql_query V1.8 - Admin page enhancement to preserve order and sort info v1.9 - Added item title in admin menu v1.9.1 - ignore draft in admin menu */ class NP_Views extends NucleusPlugin { // Note: I never run this plugin on 2.0 and have no idea whether it // wil work on <2.5. A user can simply chnage it to return // '200' and see if it works (likely will). I will gladly // change the min version to 2.0 and add the sql_table fix // upon such report. 8) function getMinNucleusVersion() { return '250'; } function getName() { return 'Views'; } function getAuthor() { return 'Rodrigo Moraes | Edmond Hui (admun) | gRegor Morrill'; } function getURL() { return 'http://www.tipos.com.br'; } function getVersion() { return '1.9.1'; } function getDescription() { return 'This plugin counts how many times an entry has been displayed.'; } function getEventList() { return array('PostAddItem', 'QuickMenu', 'PostDeleteItem'); } function supportsFeature($what) { switch($what) { case 'SqlTablePrefix': return 1; default: return 0; } } function getTableList() { return array( sql_table('plugin_views'), sql_table('plugin_views_log') ); } function install() { sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views') . ' (id int(11) NOT NULL default "0", views int(15) NOT NULL default "0")'); sql_query('CREATE TABLE IF NOT EXISTS ' . sql_table('plugin_views_log') . ' (id int(11) NOT NULL auto_increment, ip varchar(20) NOT NULL default "", itemid int(11) NOT NULL default "0", viewtime varchar(32) NOT NULL default "", PRIMARY KEY (id) )'); $this->createOption('silent','Silent mode - No #Display shown in Item (still need to add the skinVar, for use with MostViewed)','yesno','no'); $this->createOption('deletetables','Delete this plugin\'s table and data when uninstalling?','yesno','yes'); $this->createOption('timespan', 'Hours to wait before re-counting visitors', 'text', '2'); } function unInstall() { if ($this->getOption('deletetables') == 'yes') { sql_query('DROP TABLE ' . sql_table('plugin_views') ); sql_query('DROP TABLE ' . sql_table('plugin_views_log') ); } } function hasAdminArea() { return 1; } /** * Adds an entry to the 'Quick Menu' on the Nucleus administration pages. * The entry will link to the commentcontrol admin page */ function event_QuickMenu(&$data) { global $member; if (!($member->isLoggedIn() && $member->isAdmin())) return; array_push( $data['options'], array( 'title' => 'View Counts', 'url' => $this->getAdminURL(), 'tooltip' => 'See the view count of all items' ) ); } function doTemplateVar(&$item, $input) { $itemid = $item->itemid; $remote_ip = ServerVar('REMOTE_ADDR'); $timespan = $this->getOption('timespan') * 3600; $now = time(); // get the current Views count $query = "SELECT views FROM " . sql_table('plugin_views') . " WHERE id=" . $itemid; $result = sql_query($query); $row = mysql_fetch_object($result); $views = intval($row->views); // Only do count updates if "skipcount" is not set if ($input != 'skipcount') { // This takes care of previous items if (mysql_num_rows($result) == 0) { $query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '1')"; sql_query($query); //$views = 0; } // end if // Check the views_log table to see if this IP has a viewtime for this item $query = "SELECT viewtime FROM " . sql_table('plugin_views_log') . " WHERE ip='" . $remote_ip . "' AND itemid=" . $itemid; $result = sql_query($query); // No views from this IP in the past X hours, so update the Views count if (mysql_num_rows($result) == 0) { $views++; $this->_updateViewsCount($itemid, $views); $this->_addViewsLog($itemid, $remote_ip, $now); } // end if else { $viewtime = mysql_result($result, 0, 'viewtime'); // It's been longer than X hours, so recount if (($now - $timespan) > $viewtime) { $views++; $this->_updateViewsCount($itemid, $views); $this->_updateViewsLog($itemid, $remote_ip, $now); } } // end else } // end if // Clear logs that are more than X hours old $time = $now - $timespan; $query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE (viewtime < $time)"; sql_query($query); if ($this->getOption('silent') == 'no') { echo $views; } // end if } function event_PostAddItem($data) { $itemid = $data['itemid']; $query = "INSERT INTO " . sql_table('plugin_views') . " (id, views) VALUES('$itemid', '0')"; sql_query($query); } function event_PostDeleteItem($data) { $itemid = $data['itemid']; $query = "DELETE FROM " . sql_table('plugin_views') . " WHERE id=". $itemid; sql_query($query); $query = "DELETE FROM " . sql_table('plugin_views_log') . " WHERE itemid=". $itemid; sql_query($query); } function _updateViewsCount($itemid, $views) { // update the Views table with the new count $query = "UPDATE " . sql_table('plugin_views') . " SET views='$views' WHERE id=$itemid"; sql_query($query); } function _addViewsLog($itemid, $ip, $time) { // add IP and itemid to views_log table so it won't be recounted for X hours $query = "INSERT INTO " . sql_table('plugin_views_log') . " (ip, itemid, viewtime) VALUES ('$ip', '$itemid', '$time')"; sql_query($query); } function _updateViewsLog($itemid, $ip, $time) { // update the views_log viewtime so it won't be recounted for X hours $query = "UPDATE " . sql_table('plugin_views_log') . " SET viewtime='$time' WHERE ip='$ip'"; sql_query($query); } function doAction($actionType) { global $CONF, $member; if (!($member->isLoggedIn() && $member->isAdmin())) return 'Sorry. not allowed'; if ($actionType == 'resetview'){ $id = requestVar('id'); $query = "UPDATE " . sql_table('plugin_views') . " SET views=0 WHERE id=$id"; sql_query($query); } else if ($actionType == 'resetallview') { $query = "UPDATE " . sql_table('plugin_views') . " SET views=0"; sql_query($query); } $order = requestVar('order'); $sort = requestVar('sort'); header('Location: ' . $CONF['PluginURL'] . 'views/index.php?sort=' . $sort . '&order='.$order); } } ?> - Hoofdstuk: 5. Losse gedachten