• Maar eerst: Idool 2003! Disco

    Maar eerst: Idool 2003! Disco en Soul (spijtig dat die Soul er ook bijzit, dat maakt het veel te gemakkelijk vind ik). Ik denk dat Wim eruit zal liggen.

  • Ik moet een TabletPC hebben.

    Ik moet een TabletPC hebben. En ik weet niet dewelke. Ik ben doodsbenauwd om iets verkeerd te kopen, ’t is verdorie niet gemakkelijk.

    Op een rij wat ik wil:


    • minstens 512 MB geheugen
    • een comfortabele harddisk, 20 GB of zo
    • als het zou kunnen een scherm dat groter is dan 1024×768
    • een pressure sensitive pendinges
    • een snelle processor
    • zes uur autonomie
    • een DVD-dinges
    • een ingebouwd keyboard
    • wireless natuurlijk, genoeg (minstens drie of vier) usb-dinges, en een modem, en een netwerkpoort en een monitoruitgang en een video uit en een firewire en vanalles
    • moet bruikbaar zijn op mijn schoot in de zetel

    Ik ga eens zoeken op tinternet.

  • Ik heb nu dus deze

    Ik heb nu dus deze query staan om te hoeveel pagina’s iemand bezoekt op een site tijdens een session:

    SELECT log_remotehost, COUNT(log_id) AS path
    FROM   tblLog
    WHERE  log_sessionID IS NOT NULL and log_remotehost!=”
    GROUP BY log_remotehost, log_sessionID
    HAVING COUNT(log_id) > 1
    ORDER BY path DESC, log_remotehost, log_sessionID

    De simpelste vorm daarvan is iets als dit:

    SELECT log_remotehost, COUNT(log_id) AS path
    FROM   tblLog
    GROUP BY log_remotehost

    En dat geeft mij dus per sessie van een remotehost het aantal log_id’s. Om de zaken een beetje proper te houden heb ik er het volgende nog bijgezet:


    • WHERE  log_sessionID IS NOT NULL and log_remotehost!=”
      alleen dingen tonen waar er ook effektief een sessionID is ingevuld, en waar de remotehost bekend is
    • HAVING COUNT(log_id) > 1
      alleen die sessies tonen waar er meer dan één log-entry is
    • ORDER BY path DESC, log_remotehost
      de hele zooi sorteren: de langste sessies bovenaan, en daarbinnen gesorteerd op host

    De vraag is of dat eenvoudiger kan met een subquery. Laurens zegt:

    Volgens mij is die group by onnodig, en als je die weglaat kun je er dan geen correlated subselect insteken die zoekt of eenzelfde log_remotehost bestaat? iets van:

    SELECT L1.log_remotehost, L1.log_useragent, COUNT(L1.log_id) AS path
    FROM   tblLog L1,tblLog L2
    WHERE  (L1.log_sessionID IS NOT NULL AND COUNT(L1.log_id) > 1) OR
           L1.log_remotehost IN (SELECT DISTINCT L2.log_remotehost FROM tblLog) ORDER BY path DESC, log_useragent, log_remotehost, log_sessionID DESC

    Even mijn hoofd errond draaien. Wacht hé. Wat doet de query hierboven? Zoals hij er nu staat in ieder geval niet veel:

    Server: Msg 147, Level 15, State 1, Line 3
    An aggregate may not appear in the WHERE clause unless it is in a subquery contained in a HAVING clause or a select list, and the column being aggregated is an outer reference.

    Gr. Eerst eens kijken wat er eigenlijk uit mag. Useragent is niet nodig, en pak nu nog dat alle sessionID’s ingevuld zijn. Dan mag log_useragent weg, en één van die voorwaarden in de WHERE. En in de ORDER BY mag path ook zeker weg. Dat geeft dus:

    SELECT L1.log_remotehost, COUNT(L1.log_id) AS path
    FROM   tblLog L1,tblLog L2
    WHERE  (COUNT(L1.log_id) > 1) OR
           L1.log_remotehost IN (SELECT DISTINCT L2.log_remotehost FROM tblLog) ORDER BY log_remotehost, log_sessionID DESC

    Er is niets wezenlijks aan veranderd, en het geeft nog altijd dezelfde foutboodschap, da’s dus wel goed. En nu eens zien wat er precies aan de hand is. Wat doet die query eigenlijk?


    • selecteer dingen uit de logtabel (1x als L1, 1x als L2)

    • selecteer hostnaam uit L1, en tel het aantal ID’s in L1

    • waar


      • het aantal ID’s in L1 > 1

      • of de hostnaam uit L1 is te vinden in de lijst van hostnamen uit L2

    • sorteer dat allemaal op hotnaam en sessionID

    Ofwel is het te laat, ofwel begrijp ik er niets van, ofwel is er ergens iets fout: is het niet zo dat die FROM tblLog L1, tblLog L2 een cross join doet? En als er ergens count(ding) staat, moet dan niet aangegeven worden per wat er gecount moet worden? En is die subclause niet per definitie altijd waar (select x FROM tbl AS A WHERE x in (select distinct x from tbl as B))?

    I dunno. Ik weet niet hoe veel dat van mij nog kan vereenvoudigd worden:


    • selecteer hostname, tel aantal ID’s (per host en per session)

    • uit tblLog

    • gegroepeerd op host en session

    • waar session en host ingevuld zijn

    • toon enkel die waar een session meer dan één ID bevat

    • en sorteer dat aflopens op aantal ID’s per sessie

    Misschien weet één van mijn fijne collega’s of het echt nog eenvoudiger kan?

  • It’s all in the timing

    It’s all in the timing

    Hong Kong advert

    Hong Kong isn’t too proud of the latest advertising campaign to draw tourists to the city. Being short of breath is one of the symptoms of SARS, which people are pretty likely to associate with the city now.

    [Secular Blasphemy]

  • Nog iets dat we nu

    Nog iets dat we nu weten: een <cfchart> mag niet meer dan 16 <cfchartseries> hebben, of de server ontploft.

  • ’t Is waar wat ze

    ’t Is waar wat ze zeggen: Mozilla is een gemak om mee te ontwikkelen. Vooral voor histories als http headers en javascriptmiserie. Ze zouden al die dingen ook in Internet Explorer moeten steken!

  • Verdomme, er ligt een server

    Verdomme, er ligt een server uit, en ik krijg hem van hier niet herstart. Damned. Damned damned damned. Nog goed dat ik toevallig de stats aan het bekijken was. De java-applicatieserver ligt op zijn gat.

    Alla. Wachten tot ER gedaan is, en dan aanzetten naar ’t werk zeker? Bah.

  • Bruce Campbell speelt mee in

    Bruce Campbell speelt mee in Charmed!! Akkoord, Charmed sucked redelijk ass, maar Bruce Campbell rulet dan wel wel zwaar.

  • Stephen Malkmus & the Jicks:

    Stephen Malkmus & the Jicks: “Pig Lib”. After a sub-par solo debut, Malkmus the Irreverent returns to form, effortlessly spanning the gap between quirky pop and hard rock. [Salon.com]

  • “Ik geef mijn bloed voor

    “Ik geef mijn bloed voor Ayatollah Hakim,” het begint al in Irak. Cripes.

    Of nog:

    1452: Iraqi Shia Muslim leader Abdul Majid al-Khoei and another cleric are murdered in the central Iraqi town of Najaf. Mr al-Khoei – who returned to Iraq from exile earlier this week – was stabbed to death inside the Imam Ali mosque.

  • Bah. Het is inderdaad niet

    Bah. Het is inderdaad niet zo simpel.

    Ik kan geen cookie zetten als ik niet meer dan een beeld smijt naar de gebruiker blijkbaar. Of ik zou de headers allemaal zelf moeten gaan maken misschien.

    Bon, voorlopig lukt het wel om sessions en clients weg te schrijven, maar dan wel door ze in de url-variabelen van het beeld mee te geven.

    En dus kan ik nu weten hoeveel pagina’s de mensen in sites bekijken:

    SELECT log_remotehost, log_useragent, COUNT(log_id) AS path
    FROM  tblLog tblLog
    WHERE log_sessionID IS NOT NULL
    GROUP BY log_useragent, log_remotehost, log_sessionID
    HAVING COUNT(log_id) > 1
    ORDER BY path DESC, log_useragent, log_remotehost, log_sessionID DESC

    Dat geeft voor één van onze sites op een paar minuten dit:














































































    ncgent03.telenet-ops.be Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705) 14
    MVUIJLST3 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3); .NET CLR 1.1.4322) 9
    218.14-200-80.adsl.skynet.be Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) 7
    114.39-200-80.adsl.skynet.be Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) 5
    LBLANCQU1 Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; (R1 1.3); .NET CLR 1.1.4322) 5
    olympic1.axone.fr Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; Hotbar 4.2.8.0) 4
    Candice-PP.cphs.wayne.edu Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) 3
    PROXY Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt) 3
    dialin-246.dialin.unibas.ch Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt) 3
    TPALKA.cphs.wayne.edu Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) 3
    node06ea.vpt.adsl.euronet.nl Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0) 3
    www-cache1.unn.ac.uk Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 3
    cim-18.medicina.ufmg.br Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 4.0) 3
    khjivosa.vxu.se Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) 3
    khjivosa.vxu.se Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0) 3
    pool-141-156-141-39.res.east.verizon.net Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Hotbar 4.2.8.0; MSN 8.0; MSNbMSNI; MSNmen-us; MSNcIA) 3
    ncgent03.telenet-ops.be Mozilla/4.0 (compatible; MSIE 5.5; Windows 98) 2
    pion.ext.extranet.xerox.com Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 4.0; H010818) 2
    ns1.prenhall.com Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:1.0.2) Gecko/20030208 Netscape/7.02 2

    Dus niet helemaal sluitend: die khjivosa.vxu.se staat er twee keer in, en ikzelf (MVUIJLST3) ook twee keer. Grmbl.

  • En nu nog van die

    En nu nog van die sessies en clients erin krijgen… Eigenlijk zou dat moeten eenvoudig zijn, maar ik heb zo’n gevoel dat het niet zo gemakkelijk is als het eruit ziet.

    Tja, en als het er in zit, dan moet er nog eens duchtig gekeken worden naar de time-outs op al die dingen. En misschien houden we dan wel best één server dedicated voor alle statistieken, zo’n ding met genoeg geheugen en alles.

  • Proper schone, al zeg ik

    Proper schone, al zeg ik het zelf. Een klein statistiekprogrammaatje geschreven, het werkt gelijk een lierken.

  • Daarjuist een bijzonder vieze bug

    Daarjuist een bijzonder vieze bug tegengekomen in ColdFusion. Tenminste, ik vind dat het een bug is.

    <cfswitch expression=“#a#”>
        <cfcase value=“a”></cfcase>
        <cfcase value=“u”><cfset test=1></cfcase>
        <cfcase value=“v”><cfset test=2></cfcase>
        <cfcase value=“w”><cfset test=3></cfcase>
        <cfcase value=“x”><cfset test=4></cfcase>
        <cfcase value=“y”><cfset test=5></cfcase>
    </cfswitch>

    Dat geeft een null pointer exception op de case met “w”. Ook als die verschoven wordt. Oplossing (na drie kwartier zoeken): de eerste case mag niet leeg zijn. Daar moet minstens een commentaar in staan. Zucht.

  • Extra nieuwsuitzending op bbc! De

    Extra nieuwsuitzending op bbc! De oorlog loopt op zijn laatste poten!

    Rumsfeld spreekt Ceausescu uit als Totsjestoe. Den aap.

    “Saddam Hussein is now taking his rightful place alongside Hitler, Stalin, Lenin, Ceausescu in the pantheon of failed brutal dictators and the Iraqi people are well on their way to freedom,” jaja. Stalin? Lenin? Zijn die niet in the saddle gestorven?