<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FinalFrag.be &#187; statistieken</title>
	<atom:link href="http://finalfrag.be/blog/tag/statistieken/feed/" rel="self" type="application/rss+xml" />
	<link>http://finalfrag.be/blog</link>
	<description>De persoonlijke website van Massimo 'FinalFrag' Mertens</description>
	<lastBuildDate>Tue, 04 Aug 2009 07:08:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Data Type Usage Profiler&#160;(DTUP)</title>
		<link>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/</link>
		<comments>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:00:14 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[datamodel]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[statistieken]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=479</guid>
		<description><![CDATA[Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van Spacetarion, namelijk het in de gaten houden van de bevolking van je database.
Het probleem
Bij het creeëren van je datamodel heb je wellicht rekening gehouden met [...]]]></description>
			<content:encoded><![CDATA[<p>Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van <a target="_blank" href="http://www.spacetarion.com" title="Spacetarion" >Spacetarion</a>, namelijk het in de gaten houden van de bevolking van je database.</p>
<h3>Het probleem</h3>
<p>Bij het creeëren van je datamodel heb je wellicht rekening gehouden met het optimaal gebruiken van de datatypes die MySQL aanreikt. Een voorbeeld is het verschil tussen de tinyint en de smallint, een tinyint kan maximum waarde 255 bevatten en een smallint maximum 65 535 (wanneer ze worden ingesteld als unsigned). In een optimale database is er goed afgewogen welke datatypes er gebruikt worden voor welk veld. De unieke sleutel van je gebruikerstabel zal waarschijnlijk geen tinyint zijn, tenzij je maar 255 leden verwacht. Maar hoeveel leden verwachten je dan wel?<span id="more-479"></span> Omdat dit moeilijk in te schatten is, hebben <a target="_blank" href="http://www.twitter.com/MassimoMertens" title="Massimo" >Massimo</a> en <a target="_blank" href="http://www.twitter.com/geertsmichael" title="Michaël" >ikzelf</a> een tool geschreven die ons toont hoe ver de tabelvelden &#8216;bevolkt&#8217; zijn. Met de <strong>Data Type Usage Profiler (DTUP)</strong> kan een volledige database beheerd worden en kunnen de volgende datatypes gecontroleerd worden op hun bevolkingsgraad:</p>
<ul>
<li>alle integers (tinyint, smallint, mediumint, int en bigint)</li>
<li>alle teksten (tinytext, text, mediumtext en longtext)</li>
<li>varchar (met eigen ingestelde lengte)</li>
</ul>
<p>In de DTUP zijn er 4 niveaus of zones waarin een datatype zich kan bevinden. Elke zone heeft een kleuraanduiding die terugkomen in de tabelweergave van de databasetabel en in de grafische weergave. De mogelijke zones zijn:</p>
<ol>
<li>&gt; 90% &#8211; Rood</li>
<li>&gt; 75% &#8211; Licht rood</li>
<li>&gt; 50% &#8211; Oranje</li>
<li>&lt; 50% &#8211; Groen</li>
</ol>
<p>Als een datatype zich in de groene of oranje zone bevindt, is er nog geen reden tot het doorvoeren van database aanpassingen. Als echter de het bezettingspercentage &gt; 75% is, dan kan misschien geopteerd worden om een datatype hoger te nemen of de lengte aan te passen. De test op de datatypes uit de reeks van integer gaat kijken naar de hoogste waarde in de tabel. De varchar en text reeks gaat rekening houden met de lengte die het aantal karakters in beslag neemt.</p>
<p>DTUP is gemaakt met het vertrouwde <a target="_blank" href="http://www.codeigniter.com" title="CodeIgniter" >CodeIgniter</a> en <a target="_blank" href="http://www.smarty.net" title="Smarty" >Smarty</a>. De pagina die getoond wordt door de controller te bezoeken, bestaat uit 3 delen.</p>
<ol>
<li>Overzicht: geeft het aantal gevallen weer die voorkomen in elke zone op een pie chart;</li>
<li>Tabellenlijst: alle tabellen die voorkomen in de gebruikte database;</li>
<li>Databasetabellen: bevat een tabel die weergeeft hoeveel waarden er in gebruik zijn en hoeveel er maximum gebruikt mogen worden met als laatste kolom in de tabel de procentuele verhouding tussen aantal gebruikte en maximum te gebruiken. Een bar chart vervolledigt de tabel door op een grafische manier de verhouding nogmaals weer te geven. Zowel de tabel als de grafiek maken gebruik van de kleuren die bij de zones horen.</li>
</ol>
<h3>Waar jullie allemaal op wachten, screenshots</h3>
<p><img class="alignnone wp-smiley wp-image-513 left" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen0.png" alt="dtup_screen0" width="300" height="200" /></p>
<p>Deze pie chart toont de beknopt overzicht van alle velden uit de database. Het grootste deel in de voorbeeld database is gezond (groen) en enkele velden bevinden zich in de kritische zone. De velden die vooral in die rode zone liggen zijn velden waarvan we op voorhand de maximale lengte kennen, bijvoorbeeld omdat we een MD5 hash gebruiken.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen2.png" alt="dtup" width="526" height="268" /></p>
<p>Bovenstaande schermafbeelding geeft duidelijk weer waar dit artikel en DTUP eigenlijk om draait. Alle velden van een bepaalde tabel worden getoond met informatie zoals aantal gebruikt, maximum te gebruiken en de procentuele verhouding. Ook het datatype is weergegeven zodat er van hieruit beslist kan worden welk datatype misschien de opvolger kan worden van het huidige, te kleine, datatype.</p>
<p>Bovenstaand voorbeeld kan een deel zijn van een gebruikerstabel. Zoals al gezegd, wisten we op voorhand dat het wachtwoord 32 tekens lang ging zijn, dus dat rode veld is geen verrassing. Het veld waarin de gebruikersnaam wordt bijgehouden is ook volledig gebruikt. Er heeft zich namelijk een gebruiker geregistreerd met een gebruikersnaam die net 32 karakters is. Nu is de vraag, houden we de beperking op die 32 tekens, of breiden we het veld uit? Dat hangt natuurlijk af van het doel. In ons voorbeeld stellen we dat er van hogerhand beslist is dat een gebruikersnaam nooit langer mag zijn dan 32 tekens.</p>
<p>Dit voorbeeldje ging over een varchar veld. Het is een heel ander verhaal wanneer het gaat om een unieke sleutel die automatisch verhoogd wordt met AUTO_INCREMENT.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup1.png" alt="dtup" width="526" /></p>
<p>In onze instellingen tabel is er gekozen om met een tinyint te werken als unieke sleutel die maximum 255 records toelaat. Zoals te zien is in bovenstaande figuur is ondertussen waarde 240 bereikt. Als er nog meer instellingen bijkomen, is het misschien niet onbelangrijk om op dit moment het datatype tinyint op te krikken naar een smallint die tot waarde 65 535 aankan. Voor deze tabel is het natuurlijk geen probleem als de unieke sleutels op zijn. Voor een gebruikerstabel, waarvan de ID zichzelf verhoogt, kan dit veel kritischer zijn omdat, eenmaal de grens bereikt is, er geen leden meer kunnen registreren en dat wil je natuurlijk niet.</p>
<h3>Voila</h3>
<p>Ik hoop dat ik jullie een nieuwe kijk heb kunnen geven op de manier waarop Massimo en ikzelf <a target="_blank" href="http://www.twitter.com/Spacetarion" title="Spacetarion" >Spacetarion</a> onderhouden.</p>
<p>Dit zelfgeschreven profiler tooltje met behulp van CodeIgniter, Smarty en een MySQL database laat ons toe nauwgezet de bevolking van onze datatypes te monitoren. Deze pagina is toegankelijk vanuit het beheerpaneel van Spacetarion dat opgebouwd is met <a target="_blank" href="http://www.extjs.com" title="ExtJS" >ExtJS</a>. Binnenkort zullen onze trouwe volgers ook een blik kunnen werpen op de adminkant van Spacetarion. Zo weten jullie des te meer waar wij mee bezig zijn. Met dat paneel en deze DTUP kunnen wij ons uitgebreid systeem opvolgen om het zo stabiel mogelijk te presenteren aan de spelers, hopelijk aan jou dus.</p>
<h3>Verbeteringen? Altijd mogelijk&#8230;</h3>
<p>Mogelijke verbeteringen zijn er altijd, zo zou ik nog kunnen voorzien dat het datatype vanuit de DTUP gewijzigd kan worden. Een tweede verbetering die ik nog zou kunnen doorvoeren, is alle autonummeringvelden als speciaal veld behandelen waarbij een verhouding van &gt; 75% echt kritiek is. In het geval van kritieke autonumeringvelden kan ik via een cronjob mezelf via mail op de hoogte houden en direct ingrijpen. Een stap verder is dat het systeem zichzelf kan verbeteren door automatisch zijn datatype te verhogen en me via mail op de hoogte stellen dat deze actie ondernomen werd.</p>
<p>De DTUP staat nog maar in z&#8217;n kinderschoenen en kan dus nog verder uitgebreid worden. Misschien heb jij wel een suggestie die DTUP kan omvormen tot een mooi product dat voor iedereen te downloaden zal zijn in de toekomst? Laat het ons zeker weten!</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Google&#160;Analytics</title>
		<link>http://finalfrag.be/blog/2009/05/google-analytics/</link>
		<comments>http://finalfrag.be/blog/2009/05/google-analytics/#comments</comments>
		<pubDate>Tue, 19 May 2009 18:15:01 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[statistieken]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=197</guid>
		<description><![CDATA[De meest onder jullie zullen Google Analytics wel kennen. Het is een tool die web ontwikkelaars toelaat om meer info te vergaren over een website. Zo biedt het onder andere informatie over het aantal bezoekers per tijdseenheid, de afkomst van die bezoekers, welke browsers die bezoekers gebruiken, hun gemiddelde tijd op de website, etc. Je [...]]]></description>
			<content:encoded><![CDATA[<p>De meest onder jullie zullen <a target="_blank" href="http://www.google.com/analytics"  title="Google Analytics">Google Analytics</a> wel kennen. Het is een tool die web ontwikkelaars toelaat om meer info te vergaren over een website. Zo biedt het onder andere informatie over het aantal bezoekers per tijdseenheid, de afkomst van die bezoekers, welke browsers die bezoekers gebruiken, hun gemiddelde tijd op de website, etc. Je kan het zo gek niet bedenken of Google Analytics meet het.<span id="more-197"></span></p>
<h3>Hoe gebruik ik het?</h3>
<p>Het enige dat je moet doen, is een klein stukje JavaScript op de website te plaatsen. Dit stukje JavaScript code wordt ook wel de &#8216;tracker&#8217; genoemd. Op de Google Analytics website staan twee versies van deze tracker, urchin.js en ga.js. ga.js is de laatste nieuwe versie. Het is dus aangeraden om die te gebruiken.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #003366; font-weight: bold;">var</span> gaJsHost <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;https:&quot;</span> <span style="color: #339933;">==</span> document.<span style="color: #660066;">location</span>.<span style="color: #660066;">protocol</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;https://ssl.&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;http://www.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>unescape<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;%3Cscript src='&quot;</span> <span style="color: #339933;">+</span> gaJsHost <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    <span style="color: #000066; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> pageTracker <span style="color: #339933;">=</span> _gat._getTracker<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;___je_tracker_code___&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        pageTracker._trackPageview<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000066; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span>err<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></div></div>

<h3>Het probleem</h3>
<p>Wanneer ik iets programmeer, wil ik altijd dat de code zo proper en duidelijk mogelijk is. Wat mij dus meteen opviel was dat de tracker uit twee aparte stukken javascript bestaat. Op al mijn websites combineerde ik dus meteen de twee delen tot 1 geheel. Enkele dagen later begonnen de geavanceerde statistieken binnen te lopen, so far so good.</p>
<p>Enkele dagen later bleken de statistieken echter altijd hetzelfde te blijven. Ik had na een paar dagen een 7-tal bezoekers, en dat aantal veranderde niet meer. Zelfs na een volledige week had ik zogezegd nog altijd maar 7 bezoekers gehad, wat uiteraard niet kon.</p>
<h3>De oplossing</h3>
<p>Op een dag kwam Michaël, die regelmatig van zich laat horen in de reacties hieronder, met een oplossing. Blijkt dat je de tracker code niet mag combineren tot één stuk code. Waarom blijft voorlopig echter nog een groot vraagteken, althans voor mij. Wie hier een licht op kan werpen mag dat gerust doen in een reactie.</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/google-analytics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
