Dikke darm

ziekenhuishumor...

Momenteel kwakkel ik met mijn gezondheid. Daarom is het wat stil hier op het weblog. De afgelopen week lag ik in het ziekenhuis. De laatste dagen op een grote zaal met maar liefst acht bedden. Niet meer van deze tijd, maar daar wordt aan gebouwd in Zwolle.

Ik ben niet de sociaalste als ik in het ziekenhuis lig. Wat mij betreft mogen al mijn collegapatiënten hun mond houden en mij volledig negeren. Ik doe er dan ook niet veel aan om een gezellige rol op zaal te spelen. Het geklets en geouwehoer over elkaars ellende komt mij de keel uit. Waarom moet ik tegen wildvreemden over mezelf of allerlei andere onderwerpen gaan praten. Niks voor mij.

Maar één uitzondering. Een oud baasje van 82 dat tegenover mij lag. Een klein mannetje van 1,65 meter. Gezet, kaal en gekleed in een ouderwetse streeppyama. Kortom… een gezellige opa met de uitstraling van een vrolijke dwerg. De man liep altijd opgewekt rond en maakte met iedereen een praatje in plat dialect uit de omgeving van Zwolle. Gesprekjes over de oorlog, zwijnen, de strijd in Indonesië en over de middenstand en notabelen van de dorpen in zuidelijk Overijssel.

De man lag met een vermeend probleem in de dikke darm en om dat te constateren moest hij een vervelend onderzoek ondergaan met een slang door de darm. Eerst stonden er echter twee grote kannen met een moderne variant van wonderolie op zijn kastje. De oude baas pendelde twee dagen tussen de glazen laxeermiddel en de wc. Zijn humeur leed er niet onder.

Direct na het onderzoek lag hij alweer te kletsen in zijn bed. Nee, het onderzoek was niet leuk, maar daar moet je niet te lang bij stilstaan. En toen kwam de dokter met de uitslag. De arts legt geduldig uit – leve de privacy op zaal – dat zijn dikke darm door zijn leeftijd veel uitstulpsles bevat, maar dat er geen ernstige dingen zijn ontdekt in het deel dat ze konden zien. Zonder pardon onderbreekt de man de zaalarts en zegt: "Oe dokter… vroggâh slachtten wullie varkens. Toen zag’n wie ook altied de meest roare ding’n in die dikke darm. Dus ik begriep wel dat mien darm ook niet moeders meuiste meer is. Moar… ie mot wel wêtt’n dat de leverworst in een dikke darm veul beter smaakt dan in bieveurbeeld de dun’ne darm. Ie môt um dan wel goed spoel’n en umdrèh’n." *)

De hele zaal lag in een deuk en de arts hoorde het verhaal met een stoïcijns gezicht aan. Die heeft zeker weer een goed verhaal bij de koffie.

Binnen en buiten smolt het ijs. Ik heb een aantal leuke gesprekken met hem gevoerd. Op zo'n moment is een zaal toch helemaal niet zo erg.



*) dialect is niet mijn sterkste kant, dus neem de spelling met een korrel zout.

© Harold Makaske 14 januari 2009 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