Weer een gefrustreerde boebrief

van de rechtse beeldschermkijkert...

Kom je thuis van een veredeld kopje koffie drinken bij vrienden ligt er weer een brief in de bus. Wederom van Bouwmeester. Geen voorletters, geen adres: alleen de vette ondertekening 'BOUWMEESTER'.

Dit keer zet ik de tekst van de brief niet op het Internet. Niet omdat ik de schrijver een podium wil ontnemen, maar omdat ik het weinig sportief vind dat de brief semi-anoniem (in een envelop van het College van Kerkvoogden der Hervormde gemeente Epe "Grote Kerk") bij mij in de brievenbus is gestopt. Als de auteur mij blijkbaar iets wil melden en/of met mij in discussie wil gaan, is dat prima! Maar dan wel met open vizier. Ik zou het op prijs stellen als de volgende keer het fatsoen wordt opgebracht om adresgegevens te vermelden zodat ik weet met wie ik het genoegen heb.

Dan over de inhoud.

Dit keer is het een lang epistel over Crimineel Epe. Een heel verhaal dat begint in 1973 met de moord op Roosje Muller en eindigt met de vernielingen tijdens oudejaarsnacht. Wat moet ik van deze brief leren? Epe is een super criminele gemeente!

Wat ik verder met die kennis moet, weet ik eerlijk gezegd niet, want dat vermeldt Bouwmeester nergens. Het is één grote opsomming van ellende binnen onze gemeente. Als ik het echter lees, vind ik het over een periode van bijna 35 jaar eigenlijk allemaal reuze meevallen. Ik heb twee jaar aan de rand van de Schilderswijk in Den Haag gewoond en daar heb ik in die korte periode meer meegemaakt dan de volledige lijst waar Bouwmeester blijkbaar mee wil zeggen hoe verloederd onze gemeente wel niet is en hoe ernstig de bewoners gevaar lopen. Ik ben niet erg onder de indruk van de suggestie dat er van achter achter elke boom in de gemeente op ieder moment van de dag een schurk kan springen en ga zeker geen vuurwapen of honkbalknuppel meenemen als ik de straat op ga.

Volgens Bouwmeester is Nederland veel te vol en staat Epe in de top 5 van meest misdadige plattelandsgemeenten van Nederland. Je moet wel een pathetische claustrofoob zijn, wil je iets van het volle Nederland merken hier in Epe en met die criminaliteit loopt het ook wel los. Natuurlijk gebeurt er wel eens wat en is er wel eens overlast, maar waar hebben we het in vredesnaam over? Het is veel te eenvoudig om iedere rode bosmier om te toveren tot een heuse Veluwse poema.

Beste Bouwmeester! De dorpen binnen de gemeente Epe vormen een rimpeloze archipel in een ontstuimige oceaan. Stap eens uit de Eper kaboutermaatschappij en kijk eens rond in de echte wereld. We hebben hier bijzonder weinig te klagen over onze veiligheid en de criminaliteit. Enkele jaren geleden had de Eper politie het blijkbaar zoooo druk met de criminaliteit in onze gemeente dat ze zelfs werk voor zichzelf moest creëren.

In uw vorige brief verweet u mij een zuur links mens te zijn. Gelet op de rancuneuze toon van uw pennenvruchten lijkt het mij niet onverstandig als u ook eens een ietsiepietsie aan zelfreflectie doet. Blijf vooral schrijven, want ik weet uit ervaring dat het lekker oplucht, maar wees dan wel zo sportief om uw adresgegevens te vermelden.


Meer boebrieven van Bouwmeester:
- over zure linkse mensen

© Harold Makaske 10 februari 2007 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: 10. Epe