Tales of Drudgery and Boredom

Michel Vuijlsteke's Weblog. Altijd al geprobeerd een dagboek bij te houden.

I've moved
My new address is http://blog.zog.org.
Not because I was immensely dissatisfied with Radio, just because TypePad is the better service. That, and Robb's Law: I don't want to have a weblog (any website really) on a domain that I don't own.

Ik ben verhuisd
Mijn nieuw adres is http://blog.zog.org.
Niet omdat ik heel erg ontevreden was van Radio, maar gewoon omdat TypePad beter is. En omdat ik er een website kan hebben op mijn eigen domeinnaam.

  vrijdag 7 maart 2003

Nog een uur en twaalf minuten en Visual Studio.NET is ook op de portable geïnstalleerd, en dan kan ik ook in mijn trekzetel van C# doen.

En ondertussen een filmpje van Hitler en Eva Braun op het deuntje "Ich woll't ich wär ein Huhn / ich hätt nicht viel zu tun / ich legte vormittags ein Ei und nachmittags wär ich frei."

En voor ik het vergeet: run, don't walk to Amazon.co.uk (of .com natuurlijk) en koop u een exemplaar van The Rise of Western Christendom: Triumph and Diversity 200-1000 AD. Lang (lang) geleden dat ik nog zo'n goed boek gelezen heb.

Ik zie er naar uit, naar Idool 2003 volgende week.

En nu op bbc2: Secrets of leadership! Ze zullen nog verschieten maandag de mannen! Ha! Heute gehört uns der Dendermondsesteenweg, morgen die Dampoort!

Ik heb compassie met Alain. Miserie met allerlei datasources en servers en sites die niet werken, en van die symptomen die veel mensen wel meegemaakt hebben, maar waar nergens oplossingen voor gegeven worden.

't Is verdorie al ver gekomen als ik dergelijke fouten maak:

if (arraylen(tempRegion) AND tempRegion[1].xmlTekst EQ "Kust") { ... }

xmlTekst in plaats van xmlText. Zucht. En daarjuist ook al veel te lang zitten zoeken naar dacht ik een bug in XPath, en dat bleek gewoon inconsistentie in de XML-file te zijn. Overal t_Veldnaam gebruikt, maar plots stond daar een T_Veldnaam natuurlijk. Dubbel zucht.

Ik heb de succesvolle conversie gevierd met foie gras (nog twee doosjes over in de GB aan de Dampoort, ik ben echt wel de enige die daar sinds kerstdag foie gras gekocht heeft) en ierse zalm. Mmmmm.

En net een uur juridisch telefoongesprek achter de rug.

Wahey! Nu doet het wat het zou moeten gedaan hebben:

4/1486 Stereo MC's
product toevoegen - object aanmaken -

array

1

xml element

XmlName t_Gemeentenaam
XmlNsPrefix
XmlNsURI
XmlText Brussel
XmlComment
XmlAttributes
struct [empty]
XmlChildren

Convert events
1/1486
TestNaam
     product toevoegen - object aanmaken - naamveld toevoegen
2/1486
Schaken door de eeuwen heen
     product toevoegen - object aanmaken - naamveld toevoegen
3/1486
test Oostendse Salsanachten
     product toevoegen - object aanmaken - naamveld toevoegen
4/1486
Stereo MC's
     product toevoegen - object aanmaken - gemeenteveld toevoegen - naamveld toevoegen
5/1486
Cirque Du Soleil Saltimbanco
     product toevoegen - object aanmaken - naamveld toevoegen
6/1486
Tentoonstelling 'Walter de Schilder' (test)
     product toevoegen - object aanmaken - gemeenteveld toevoegen - naamveld toevoegen
7/1486
Postzegelbeur, thema 'Vakantie aan zee'
     product toevoegen - object aanmaken - gemeenteveld toevoegen - naamveld toevoegen

Dat is wat ik nodig had. Fijn. En dan nu; naar de GB! Eten halen!

Good heavens. Bush is weer eens op zijn diplomatische best. Hij wil een nieuwe, duidelijke voer-maar-oorlog-resolutie, en iedereen die zo'n resolutie niet steunt is de facto "de vijand", en ah ja, zelfs als de resolutie er niet door komt en er binnen een paar dagen dus geen mandaat van de VN is, dan doet Bush het allemaal wel alleen.

Internationale diplomatie is dus nu officieel een spelletje blufpoker geworden. Mein Führerpresident, I can valk!

The president is now demanding that all countries "put their cards on the table", in an all-or-nothing vote on a second resolution.
In his televised press conference on Thursday evening, Mr Bush said the issue would be resolved "within days".
[...]
"If we need to act," he said, "we will act, and we really don't need the United Nations' approval to do so." [BBC]

Die conversie blijft raar doen... Om de één of andere reden weigert het ding dit evenement te converteren:

<Evenement>
   <T_GemiddeldeDuurtijd/><T_Prijsindicatie/><T_url>http://<;/T_url>
   <SYS_composite_268304>
      <name/><data>DATA::BASE64</data><mediatype/><url/><itemid/><path/>
   </SYS_composite_268304>
   <MV_T_Classificatie>EVENTCLASS_THEMABEURZEN</MV_T_Classificatie>
   <T_Organisatie/><publicatieniveau>Regionaal</publicatieniveau><T_Plaatsen/>
   <T_Frequentie/><M_Prijzen/><MV_T_Eigenschappen/>
   <T_Naam>GESCHENKENBEURS</T_Naam>
   <Comm_Commentaar/>
   <MV_T_MenSpreekt>LANGUAGE_NL</MV_T_MenSpreekt>
   <ML_M_Omschrijving><NL>geschenkenbeurs.</NL></ML_M_Omschrijving>
   <MV_T_Type>EVENTTYPE_BEURS</MV_T_Type>
   <Evenement_Basis.FK_Evenement__>
      <itemid>447661</itemid>
      <Evenement_Basis.FK_Basis__>
         <itemid>447652</itemid>
         <Basis_Adres.FK_Basis__>
            <Basis_Adres.FK_Adres__>
               <Gemeente_Adres.FK_Adres__>
                  <itemid>447657</itemid>
                  <Gemeente_Adres.FK_Gemeente__>
                     <t_Land/><t_Postcode/><T_PlaatsTic/><t_Gemeentenaam/>
                     <itemid>308519</itemid><T_Hoofdgemeente/>
                  </Gemeente_Adres.FK_Gemeente__>
               </Gemeente_Adres.FK_Adres__>
               <itemid>447654</itemid><t_Subadres/>
               <t_Straatnaam>Ijzerhand</t_Straatnaam><t_Nummer>17</t_Nummer>
               <t_Adresnaam>WERELDWINKEL</t_Adresnaam>
            </Basis_Adres.FK_Adres__>
            <itemid>447659</itemid>
         </Basis_Adres.FK_Basis__>
      </Evenement_Basis.FK_Basis__>
   </Evenement_Basis.FK_Evenement__>
   <itemid>447595</itemid>
   <T_ReservatieStaus/>
   <KL_Periode>07/12/2002 08/12/2002</KL_Periode>
   <T_Aanvangsuur>07 &amp; 08/12/2002 - 10.00 tot 17.00 uur.</T_Aanvangsuur>
</Evenement>

Ik ga het er voorlopig uitknikkeren, we zien dan wel wat dit eventueel gemeenschappelijk heeft met eventuele andere evenementen die eventueel ook niet zouden willen lukken.

Die Clint, het is me er eentje.

The Distinction “You are not your box,” becomes remarkably useful as soon as you turn it around and apply it to the people closest to you in your work and your home life.

We react to someone because when we encounter his or her unpleasant manifestations we take it personally. We react to them because we think that “they” are doing it to “us.”

But if we make the distinction between the other person and their Box (if we disidentify them for ourselves), then we have options for relating and communicating with them that were not available to us before.

We can start over. We do not need to conclude that the unpleasantness is coming from them, but rather from their Box.

All of a sudden, they can be okay with us again. Here is the experiment. Within the next few minutes, you are almost certain to judge someone critically and get offended. In that moment, before you generate a negative story about that person, tell yourself, “They are not their Box!”

Notice what you suddenly experience.

Netwerkproblemen blijkbaar opgelost geraakt, en dev32gent2 herstart en alles.

Netwerkproblemen, stom.

Of neen, ik ga er toch maar niet naar kijken. Nieuw form is nieuwe files in Delphi, en naamgevingen en alles, en ik kan mij inbeelden dat Stijn daar liever zelf in ingrijpt.

Alla dus. Ik ga de computer van Stijn achterlaten en naar mijn eigen bureau verhuizen.

Bon, ik ga nog eventjes kijken naar een zoekscherm voor die statussen in Delphi.

Getver. Het was te verwachten natuurlijk. Dev32gent2 is ook zo dood als een pier door die //-xpath.

Oh well, wachten tot straks dus, want ik kan er niet naar terminalservicen, dus 't zal een kwestie zijn van laten uitrazen...

Pfuh. Het moest er ooit eens van komen natuurlijk: xmlsearch(thisevent,"//t_Gemeentenaam"), en dat in een loop van alle events. Gevolg: 1500x1500 keer alle t_Gemeentenaam-nodes ge-cfdumpt. En de computer zo vast als een mug in honing natuurlijk.

Zucht. En dat allemaal omdat ik één puntje vergeten was (".//t_Gemeentenaam").

't Is echt wel een soep van XPath en structKeyExists en list-operaties aan het worden, die conversie van events. Bah.

Ik ben natuurlijk niet de wereldspecialist van XML, maar er is volgens mij toch echt wel iets mis met een schema waar de gemeente waarin een evenement plaatsvindt zit onder

Evenement_Basis
    FK_Evenement__
      Evenement_Basis
        FK_Basis__
          Basis_Adres
            FK_Basis__
              Basis_Adres
                FK_Adres__
                  Gemeente_Adres
                    FK_Adres__
                      Gemeente_Adres
                        FK_Gemeente__
                          t_Gemeentenaam

Misschien net iets teveel van het goede.

Euh, ja, waar was ik?

Juist: die evenementen in de juiste tabellen krijgen dus.

Feh. Die werkt dan wel weer. Tja, dan zal het zo maar moeten gaan zeker?

The mind positively boggles. Ik geraak van nergens meer aan die computer. noch als mezelf, noch als Stijn, noch via mijn computer, noch via een andere. Maar alle services draaien nog en de websites zijn zonder problemen toegankelijk.

Weird. Eens kijken of RDS nog aan staat.

...maar nu is er weer iets met de ontwikkelserver. Stom ding is nog altijd beschikbaar om op te surfen, maar filesharing is gelijk afgezet. Ik kan er niet meer op, noch via een share, noch via terminal services. Dammit. Eens kijken in het serverkot waar dat ding fysiek staat.

Ha! Het lukt! 't Is gewoon gelukt om uit die XML de jpegs te halen, ha! Nooit gedacht dat het zo simpel zou zijn. Eerst een functie definiëren voor he wegschrijven naar een file:

<cffunction name="writeBase64File" access="private">
  <cfargument name="filename" type="string" required="yes">
  <cfargument name="content" type="string" required="yes">
  <cffile action="WRITE" file="#arguments.filename#" output="#toBinary(arguments.content)#">
</cffunction>

En dan de loop over de XML, met lelijke kludge als er meer dan alleen DATA:BASE64 in het <data>-ding staat:

<cfscript>
  eventXML=xmlparse(eventXML);
  numEvents=arraylen(eventXML.xmlRoot.xmlchildren);
  request.fnInstall.installMsg("parsing eventXML took #gettickcount()-temp# ticks");
  request.fnInstall.installMsg("eventXML contains #numEvents# events");
  
  request.fnInstall.installMsg("looping over events", "head");
  temp=gettickcount();   

  for (iEvent=1; iEvent LTE numevents; iEvent=iEvent+1) {
    thisEvent=eventXML.xmlRoot.xmlChildren[iEvent];
    eventName=thisEvent.T_NAAM.xmlText;
    eventImg=thisEvent.SYS_composite_268304.data.xmlText;
    request.fnInstall.installMsg("#eventName#");
    if (len(eventImg) GT 12) {
      eventImg=right(eventImg,len(eventImg)-find("BASE64",eventImg)-5);
      eventImgName=listlast(thisEvent.SYS_composite_268304.path.xmlText,"/");
      writeBase64File("#expandpath("../products/events/images/"&eventImgName)#","#eventImg#");
      request.fnInstall.installMsg("---created file #eventImgName#");
    }
  }

 
  request.fnInstall.installMsg("looping over #numEvents# events took #gettickcount()-temp# ticks");
</cfscript>

Jawel, die ColdFusion is wel een stuk geëvolueerd sinds pakweg 1999. Het kan natuurlijk nog altijd lelijk, daar niet van:

<cfset eventXML=xmlparse(eventXML)>
<cfloop from="1" to="#arraylen(eventXML.xmlRoot.xmlchildren)#" index="i">
<cfif len(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText) GT 12>
<cffile action="WRITE" file="#expandpath("../products/events/images/"&listlast(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.path.xmlText,"/"))#" output="#toBinary(right(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText,len(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText)-find("BASE64",eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText)-5))#"></cfif></cfloop>

...maar voor wie wil, kan het ook proper. En objectgeoriënteerdachtig. En al.

Te mooi om waar te zijn:

The parameter 1 of function ToBinary, which is now "DATA:image/jpeg:BASE64/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABIAE8DAREA AhEBAxEB/8QAGwAAAgIDAQAAAAAAAAAAAAAAAwQBBQACBgf/xAAwEAACAQMDAwIFBAEFAAAAAAAB AgMABBEFEiExQVETIgYUYXGBMkKRsaEVI1JTkv/EABoBAAMBAQEBAAAAAAAAAAAAAAECAwQFAAb/ Ex9PhbK/G9Ccup2nZ+3p9q3n5nb2Dx8SJEbI29aIPzA+M9hGI0Ece3lj1PNIZZECCoIKuNuDgd68 YizTAH980YPMghTkAV6EgEETs4IjPpT6ku1h8ojooI3CaAMuMdT1BrB6gD+l9f4M+dyY+GQrKawn so72A2hjaRj7SBliCORID1/PfpxWp1LCm7TQA9cajmlOLlna19S7uDbPI4Zm3eoUIHXgcnHHbPio oKrLk37h8gn+oOTcrJnGtcO8gKjIA4rqhaE6gyMWFSrFxvJWQZYnAXtVeNCxMHrc9PDpOUBhR3ye DhjgUhUHZEfhjB4gTUCOJ8KvtPO4HoaJJYbhGLGjceOpsDDHLjoSM4B4NeIZu8bhhDVU1jZDOzO+ MDgZNGjVCIi4i5LVCtskUlOD1B8mgLHeWbHicWomuUaPIUK6djXgCDuT44mTQqpMawn3BBjx2okt GRMTDlxmSSRIpTaC3OFPNeCmBziTQG4s10zRqQemcj60/ETK2Zitgz//2Q== " must be a Base-64 encoded string.

Tja, natuurlijk. Die DATA:image/jpeg:BASE64 staat er teveel. Afkappen die handel.

Ik heb gelijk het gevoel dat dit niet de juiste manier is om dat beeld aan te maken. Het kan toch niet zo simpel zijn?

<cffile action="WRITE" file="#expandpath(listlast(eventXML.xmlRoot.xmlChildren[thisEvent].SYS_composite_268304.path.xmlText,"/"))#" output="#toBinary(eventXML.xmlRoot.xmlChildren[thisEvent].SYS_composite_268304.data.xmlText)#">

Effe tsjekke.

En dan nu: BASE64 proberen decoden. Hrm. Het beeld zit in een tag met de naam SYS_composite_268304. Zou die in de volgende versie dezelfde naam hebben?

En in het algemeen: ik heb er geen flauw idee van of dat gaat lukken met die BASE 64. Maar: wel een beetje opwindend :)

Ikzelf

Nieuws & stuff Fark - Salon - BBC - Standaard - Slashdot

Mensen Graham - Bie - Neil G. - Rene - Iwein - Merel - Free - Steven - Bruno - Stijn

Boeken Bookslut - Amazon UK