• Belachelijk!! Zo’n Portégé in de

    Belachelijk!! Zo’n Portégé in de VS kost $1999, en in België 3751 ?. Aaargh.

  • Lenny Henry op bbc1! Leve

    Lenny Henry op bbc1! Leve Lenny Henry! Lenny als Yoda: Loréal swear by do I. Why? Because worth it I am!

  • Voor zover ik zie, zou

    Voor zover ik zie, zou het een Toshiba Portégé kunnen worden.

  • I heard it through the

    I heard it through the grapevine, Marvin Gaye, door Wim. Conventioneel, maaaaarrrr: goed. Hij zingt heel heel goed.

    Eens benieuwd wat de jury er nu van maakt. Jaja, Jean Blaute vindt het “goed” zonder meer, Nina De Man vond dat hij goed had geoefend op zijn Engels, Bart is wel echt positief is, en Jan Leyers vond het een “goede, degelijke prestatie”.

    Pffff. Voorsbelbaar.

  • Brahim zal zingen Sexual Healing

    Brahim zal zingen Sexual Healing Machine, Sex Machine samen met Sexual Healing.

    Naaaaahhhh, niet zo goed. De muziek laat de mensen weer in de steek. En het is rap, geen soul of disco. En het is te hoog gegrepen, de stukjes Sexual Healing doet hij wél goed.

    Maar weeral: de jury is niet eerlijk, want het was niét goed. Hij heeft de opdracht, disco of soul doen, niét uitgevoerd. Bah.

  • Peter aan de beurt. Don’t

    Peter aan de beurt. Don’t Walk Away van The Four Tops.

    Tja. Niet zijn ding hé. De eerste keer dat ik het echt niet goed vind van Peter. Neen, pech deze week. Hij zal geluk hebben als hij erin blijft.

    Bàh! De jury is gewoon oneerlijk: deze week hebben ze Chris afgemaakt terwijl hij het goed deed, en blijven ze Peter ophemelen terwijl het objectief gezien slecht was.

    Niet eerlijk.

  • Chris gaat Easy zingen van

    Chris gaat Easy zingen van The Commodores. En daar is het backstreetboyshandje weer, verdorie toch!

    Hij maakt er wel een eigen versie van, da’s positief. Niet echt krachtig van bravourestukjes met zijn stem of zo, maar dat hij kan zingen heeft hij al bewezen dus dat hoeft niet meer.

    Tiens, de jury maakt het hem wel lastig met zijn vocale prestatie.

  • Natalia gaat doen van Blame

    Natalia gaat doen van Blame it on the Boogie! The Jacksons!

    Mhhmm… Niet echt overtuigd toch. De muziek klinkt gewoon te vaag. En ja, ze zingt wel nog altijd goed en zo, maar het is vind ik toch maar weer meer van het zelfde.

    Een mens wordt wel verwend hé.

  • Tom gaat Let’s Groove van

    Tom gaat Let’s Groove van Earth Wind & Fire zingen. Hm. De muziek en zijn stem klinken veel te tinnig. Disco moet vet zijn, niet zoals dat getsingtsing dat je op de bus uit walkmans hoort komen.

  • 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!