|
|
Slechte verliezers
Reactie van Gemeentebelangen Epe op de politieke webtest...
In de politiek heb je winnaars en verliezers. Je kunt niet alleen debatten en verkiezingen winnen of verliezen, maar je kunt ook een test van je website winnen of verliezen. En nog erger… je kunt je geloofwaardigheid verliezen als je een slechte verliezer bent. Melkert en Dijkstal kunnen daarover meepraten na hun optreden in het lijsttrekkersdebat na afloop van de gemeenteraadsverkiezingen vier jaar geleden.
De reacties op onze politieke webtest 2006 waren positief. Van veel kanten kregen Maurice en ik complimenten voor het initiatief en de wijze waarop we het hebben aangepakt. Dat geldt niet alleen voor de winnaars, maar ook voor de verliezers. Er is echter één uitzondering: Gemeentebelangen Epe. Die partij reageert met een persbericht op de webtest ( klik hier om de tekst van het persbericht te lezen).
Het persbericht begint als volgt: “ Als we de computeraars van geo.nl op het eerste gezicht moeten geloven zijn er goede en slechte politieke partijen in Epe. De beste zou zelfs 9 maal beter zijn dan de partij die in hun ogen de slechtste is.” En daar slaan ze de plank al volledig mis. Maurice en ik hebben de websites van de politieke partijen getest. Bovendien zijn die websites getest op basis van politiek onafhankelijke criteria. Zelfs de vormgeving en uitstraling van de site hebben wij niet meegenomen in het onderzoek omdat dergelijke zaken vatbaar zijn voor smaak en discussie.
"Als jonge ondernemers hun product via de pers onder de aandacht willen brengen, verdient dat waardering." Een mooie opmerking die ik geheel langs mij heen laat glijden, want ik verdien helemaal geen geld met het bouwen van websites. Ik bouw slechts sporadisch eens een website en doe dat dan uitsluitend als vriendendienst. Voor Maurice ligt dat iets genuanceerder, maar het idee en de uitwerking van de webtest komen volledig voor mijn rekening.
En dan maakt Gemeentebelangen Epe het nog bonter: “ Met een quasi onderzoek en discutabele score zijn de websites van de politieke partijen in Epe beoordeeld. Met het resultaat willen zij de kiezer helpen of beïnvloeden bij zijn keuze.” Ik wil wel eens van de gemeentebelangen dames en heren horen wat er quasi is aan het onderzoek en – nog merkwaardiger – wat er discutabel is aan de score. Om over de laatste zin maar helemaal niet te spreken. Waarom en hoe zouden wij met een onderzoek op basis van onafhankelijke criteria de kiezer willen en kunnen beïnvloeden? Een uitermate dubieuze en suggestieve reactie van Gemeentebelangen Epe.
Maar we lezen verder: “ De onderzoekers zeggen niet gebonden te zijn aan een politieke partij. Wie hun columns leest kan daar wel snel een bepaalde kleur in ontdekken. De door hun zelf gebouwde sites scoren in het onderzoek technisch beter, toeval of niet, dan die van de landelijke partijen die dat centraal laten doen.” Dat is interessant. Ten eerste ben ik de enige van ‘hun’ die columns schrijft en verder zou ik graag van Gemeentebelangen Epe horen op welke partij ik ga stemmen. Op mijn website heb ik onderhand bijna alle politieke partijen wel eens de oren gewassen en dat zal ik ook blijven doen. Als Gemeentebelangen Epe op basis van die teksten kan doordringen tot mijn politieke voorkeur, zouden ze stil moeten zijn, want zij is zo’n beetje de enige partij waar ik nog nooit iets negatiefs over heb geschreven… sterker nog... ik heb er nog helemaal nooit over Gemeentebelangen Epe geschreven.
En dan die laatste zin over het bevoordelen van bepaalde websites. Als wij de door ons gebouwde websites zouden voortrekken dan zou Gemeentebelangen Epe hoog scoren want die site is destijds door Maurice gebouwd. Noch met de site van de VVD noch met die van de PvdA hebben wij ook maar iets van doen gehad. Een dwaze ongefundeerde en wederom suggestieve opmerking dus.
“ Het is onjuist dat de site van Gemeentebelangen niet actueel zou zijn, er staat alleen geen overbodige informatie op.” Ze hebben het dus echt niet begrepen. Hoe kun je dat definiëren, dus hoe moet je dat objectief vaststellen? Wij hebben niet de inhoud van de website beoordeeld, dus wij hebben bij geen enkele partij een mening gehad over ‘overbodige’ informatie. Vast staat dat – behoudens het partijprogramma en de kandidatenlijst – de inhoud van de site niet meer is bijgewerkt sinds april vorig jaar.
“ Het onderzoek acht men zo gewichtig dat er tot 1 maart een embargo op wordt gezet. Dat geldt jammer genoeg niet voor een blad waar men zelf ook aan meewerkt.” Als Gemeentebelangen de e-mails opent die wij toesturen dan had ze kunnen lezen dat het embargo was vervroegd naar dinsdagochtend omdat De Schaapskooi aangaf het artikel al deze week te willen plaatsen.
Maar met het lezen en beantwoorden van e-mails gaat het ook in het onderzoek helemaal mis bij die partij. Ze reageerde op geen enkele van de drie testmailtjes die wij onder pseudoniem naar de partij stuurden. In het persbericht merkt de partij daarover het volgende op “ Gemeentebelangen heeft juist bewust niet aan hun verzoek voldaan om te reageren op de islamkwestie (één van de onderwerpen van de testmailtjes HM). Het heeft niets met gemeentelijk beleid te maken. Gemeentebelangen respecteert alle burgers, ook die in Oene en wil zeker niet opruien omdat dit onderwerp daar misschien iets gevoeliger licht dan elders.” Dat mag je als partij uiteraard vinden, maar dan laat je dat toch even weten aan een potentiële kiezer die de moeite heeft genomen om je partij te benaderen? En heeft de partij dan ook geen standpunt over de verhuizing van dierentuin Wissel naar Vemde en over de bouw van de Formido bij ’t Hemeltjen? Daar gingen de andere twee e-mailtjes in de test over en daar lees ik niets over terug in het persbericht. Als een burger een partij een vraag stelt per e-mail – hoe onbenullig die vraag ook is – behoor je daar normaal antwoord op te geven. De PvdA en Nieuwe Lijn bijvoorbeeld begrepen dat door in hun antwoord fijntjes te wijzen op teksten op de website waar het antwoord al klip en klaar stond.
Met het persbericht geeft Gemeentebelangen aan dat ze het onderzoek helemaal niet heeft begrepen. In een telefoongesprek maakte Cees Elenbaas van de partij het er niet beter op door te stellen dat “ het er niet om gaat wat jullie bedoelen… de burgers zullen het opvatten als een stemadvies. De burgers begrijpen helemaal niet dat het om een websitetest gaat.” Daarmee diskwalificeert hij de burgers en kiezers in Epe. De burgers die de berichten over de test lezen, begrijpen wel degelijk dat het om een test van de website gaat. En diezelfde burgers die het persbericht van Gemeentebelangen Epe lezen, begrijpen ook heel goed dat die partij een heel slechte verliezer is.
© Harold Makaske 1 maart 2006
/*
History:
v1.1
- add getTableList
v1.2
- use sql_table
- Added silent mode (configure via option) to support NP_MostViews
- Added Cleanup upon uninstall option
- Added "just number" minimalist mode
- Added supportsFeature
V1.2a
- Added min version support
V1.3
- Replaced doSkinVar with DoTemplateVar
V1.3a
- Added repeat views ignore function aka repeat F5s from those bored and lonely one
V1.3b
- Fixed counting off by 1 bug
V1.3c
- Added <%Views(skipCount)%> 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
|