maandag, augustus 28, 2006

.NET XmlDocument is DOM

De MSDN zegt het zelf eigenlijk ook al:
As XML has become popular as a representation format for large sources of information, developers have begun to have problems with editing large XML files. This is especially true for applications that process large log files and need to constantly append information to these files. The most straightforward way to edit an XML file is to load it into an XmlDocument, modify the document in memory and then save it back to disk. However, doing so means that the entire XML document has to be loaded in memory, which may be infeasible depending on the size of the document and the memory requirements of the application.
Gebruiken van XmlDocument is DOM.

RSS en ATOM feeds zijn implementaties van XML. Voor een goede feedreader zul je XML moeten parsen. Echter bij voorkeur niet met het XmlDocument. Die maakt namelijk een DOM aan. In een DOM heeft elk element, attribuut etc zijn eigen objecten. Die objecten moeten aangemaakt worden en in het geheugen gezet worden. En dat kost resources, veel resources. Ooit afgevraagd waarom je feedreader zoveel geheugen vraagt? Waarschijnlijk gebruiken ze een DOM. Mijn perfecte RSS reader gebruikt amper geheugen. Liefst minder dan 5 mb (1 % van de gemiddelde pc dezer dagen) om dat te bereiken gebruik ik geen DOM maar SAX. Oftewel: XmlTextReader. En om het helemaal spannend te maken: XmlValidatingReader met de validating type op none. Voor mij geen schema en geen dtd!


XmlTextReader tr = new XmlTextReader(xmlStream);
XmlValidatingReader myReader = new XmlValidatingReader(tr);
myReader.ValidationType = ValidationType.None;

try
{
while(myReader.Read())
{
string tagName = myReader.Name.ToLower();
if (tagName.Equals("entry"))
{
[...]
}
}
}
catch(Exception ex)
{
[...]
}

(Code is nog lang niet production quality, geen foutafvanging als item verkeerd gaat e.d. maar dat is niet het punt wat ik wil maken. Ik wil alleen maar laten zien hoe makkelijk je met XmlTextReader kunt werken als je het formaat van de binnenkomende XML al weet)

En het resultaat:

zondag, augustus 27, 2006

SVB (Samenwonen voor beginners) deel 1: het vinden van een huis

Je hebt al een tijdje een relatie. En het gaat allemaal lekker. Jullie houden van elkaar en beslissen dat jullie het beu zijn. Altijd maar dat reizen tussen twee huizen. Of het nooit echt alleen kunnen zijn omdat je nog bij je ouders of in een studentenhuis woont. Jullie besluiten samen te gaan wonen. Maar daar begint het pas mee. Er is veel te regelen en veel te doen. Ik woon nu ruim 3 jaar samen met (ondertussen) mijn vrouw. We hebben veel moeten regelen veel afspraken moeten maken.
Ik ben altijd benieuwd hoe andere mensen bepaalde zaken rond het samenwonen oplossen en wat ze belangrijk vinden. Daarom heb ik afgelopen mei op mijn blog een yoursurvey enquete gehouden. De uitslag van deze enquete zal ik in een aantal delen behandelen. En dit is deel 1: het vinden van een huis!



Als je alletwee al op jezelf woont of eentje woont al in een eigen huis is het vinden van een huis niet het grootste probleem. Het probleem is dan om te bepalen in wiens huis er gewoond gaat worden. Vaak zie je dat stellen al langzaam aan samen gaan wonen. Meer en meer tijd wordt er samen doorgebracht bij 1 van de 2. Alleen de laatste stap (het verplaatsen van de meubels) laat nog even op zich wachtten. Vaak wordt gekozen voor het grootste huis, of het koophuis als de ander een huurwoning heeft. De andere woning wordt vaak nog even een paar maanden aangehouden, voor de zekerheid. Omdat huurwoningen nu eenmaal moeilijk te krijgen zijn. En als het toch mis blijkt te gaan in de eerste maanden wil je niet jaren hoeven wachten op een andere woning. Op deze manier gaan samenwonen is een snelle en makkelijke manier om te starten.



Als je allebei nog thuiswoont, of als je allebei in een studentenhuis woont is het vinden van een mooi huis al een groter probleem. Uit de enquete blijkt dat de meeste mensen kiezen voor een huurwoning via de woningbouw. De woningbouw heeft echter een belangrijk nadeel: je komt op een wachtlijst. In sommige steden is de wachtlijst al opgelopen tot 8 jaar. En zo kan het jaren duren voordat je een huis toegewezen krijgt. Als je dan op je 22e wilt samenwonen kun je maar beter zorgen dat je op je 14e al ingeschreven stond. Je kunt ook particulier huren, hier is veel sneller aan een huis te komen maar de prijzen zijn dan ook veel hoger. Samen kopen is natuurlijk ook een optie. Maar voor starters vrij moeilijk. Er zijn weinig huizen in goede staat voor een goede prijs. Zonder hulp van anderen is het vaak niet mogelijk een huis te kopen als je net afgestudeerd bent en op jezelf wilt.



De belangrijkte eis die mensen aan een huis hebben is ruimte. Hoe groter hoe beter. Uit eigen ervaring weet ik dat een huis snel vol groeit. Je kunt geen ruimte genoeg hebben. Daarnaast natuurlijk een fijne buurt waar men zich veilig voelt en geen last heeft van geluidsoverlast. En ander belangrijk punt is het licht. Mensen willen een licht en zonnig huis. Daarnaast zul je ook rekening willen houden met de afstand tot je werk. Elke dag 2 uur reizen in het openbaar vervoer breekt je op. Perse twee auto's moeten hebben omdat je anders allebei niet op het werk kunt komen is erg duur. Allemaal zaken waar je rekening mee wilt houden als je een huis kiest.



Bij een koopwoning wil je goed weten wat je nu eigenlijk koopt. Een bouwkundig onderzoek is dan aan te raden. Zekerheid heb je echter nooit een CV ketel die altijd goed heeft gewerkt kan ineens kapot gaan. Je moet er ook vanuit gaan dat je er minimaal 5 jaar woont. Bij het kopen van een (bestaande) woning betaal je 11% van het aankoopbedrag als kosten koper. Dit bedrag zul je vaak meefinancieren in de hypotheek. Om te zorgen dat je geen schuld overhoudt wanneer je je huis verkoopt zal je huis dus 11% in waarde moeten zijn gestegen. Ga daarom bij het kopen van een huis niet over 1 nacht ijs. Bekijk de buurt, onderzoek wat de plannen van de gemeente zijn en ga op het gevoel af wat je krijgt als je door een wijk loopt en het gevoel wat ke krijgt wanneer je het huis binnenstapt. Bij nieuwbouw betaal je geen kosten koper maar je hebt ook geen idee hoe de buurt precies gaat worden. Maar daardoor zijn de prijzen van nieuwbouw woningen vaak wel lager dan van bestaande huizen. Voor nieuwbouw bestaat vaak veel animo. Goed de plannen in de gaten houden en je in laten schrijven bij makelaars.



Of je nu huur of koop wilt, je zult het over een aantal zaken eens moeten worden: wordt het een dorp of een stad? Een buitenwijk of het centrum? Wat is belangrijker: ruimte of bereikbaarheid? CV of knus en authentiek? Oftewel waar moet je huis aan voldoen? En hebben jij en je partner dezelfde eisen? Daarbijkan ik je niet helpen. Daar zul je toch echt samen uit moeten komen. En zoals met alles in een relatie is het een kwestie van geven en nemen. Onze regel is dat we ons allebei veilig moeten voelen in een huis en een buurt anders gaan we er niet wonen. Veilig voelen is vaak aan onderbuikgevoel en hoewel angst een slecht raadgever is willen we toch onze intuitie niet negeren.



Voor het eerst de sleutel omdraaiien van het huis waar je samen gaat wonen geeft een bijzonder gevoel. Wat en waar het ook is. Het is jullie nieuwe plek, ik is wij geworden. Maar het vinden van een passend huis is pas het begin van hopelijk een lange tijd samen op jullie plek. Bij het samenwonen komt nog heel veel meer kijken meer daarover in deel 2 van de serie: "Samenwonen voor beginners"!

donderdag, augustus 24, 2006

Close cappuccino encounter of the second kind

Weten jullie het nog? De Nescafe cappuccino pads? Nu zijn ze er ook van Douwe Egbers! 10 mei kreeg ik een mailtje van de DE met de volgende afbeelding:

Ik was natuurlijk meteen enthousiast en heb het pakketje aangevraagd. Daarna heb ik gewacht, gewacht, en nog meer gewacht. Maar niets. Nu is het 4 maanden later en heb ik nog steeds niets gehad. Dan maar zelf naar de winkel! Dan kan ik in ieder geval een vergelijkend waren onderzoek doen. Al vrij snel heb ik bij de buurtsuper een mooi exemplaar bemachtigd. Mijn Albert Heijn heeft hem echter nog niet in het assortiment.



Tot mijn blijdschap waren de instructies voor deze cappuccino heel wat simpeler. En bevatten gelukkig geen extra arbeid van de uiteindelijke genieter. Ik heb een senseo voor mijn gemak ja! Niet zodat ik mijn handen vrij heb om te roeren! De koffie pad heeft een dubbelle dikte van een normale pad.



Bij het aanzetten moet er even worden opgelet. Hoewel je de dubbele padhouder in het apparaat doet is het de bedoeling dat je toch op de knop voor 1 kopje drukt!



En zie daar de cappuccino is een feit! Nu heb ik het al eerder gezegd. Cappuccino is een laffe drank voor laffe mensen die geen echte koffie durven drinken. Koffie hoort karakter te hebben en die moet je verdoezelen met melk of suiker. Koffie drink je zwart! Anyway van deze cappuccino wordt ik in ieder geval niet misselijk. En dat is een pluspunt. Mijn vrouw heeft het echter nog niet geproefd en zij is toch echt de cappuccino expert bij ons in huis. Voor cappuccino is hij best lekker. Een pluspunt voor Douwe Egberts!



Maar helaas laat de cappuccino wel rotzooi achter in het apparaat doordat de melk al in de pad zit. Dus toch handwerk! Want dit moet schoongemaakt worden voordat er weer normale koffie gezet kan worden!



De nescafe cappuccino ligt nog in de la, amper gebruikt. En ik denk dat dit pak hetzelfde lot wacht. Broederlijk naast de theepads van Pickwick! Douwe Egberts cappuccino vind ik wel lekkerder dan die van nescafe. Maar ik wacht met smart op de dubbel dark die Douwe Egberts volgens de geruchten uit gaat brengen!

woensdag, augustus 23, 2006

Weekend of code

Ik merk dat ik de laatste tijd met minder regelmaat blog. Nu komt dat niet omdat ik niets meemaak, maar vooral omdat ik te weinig tijd neem om mijn verhalen te vertellen. Daarom vandaag een samenvat post. Verhalen die stuk voor stuk in een eigen post kunnen maar waar ik gewoon de tijd niet voor vrijmaak. Toch wil ik het graag met jullie delen.



Afgelopen week heb ik mijn 3e MCP certificaat gehaald. Na mijn C# voor webapplications en C# voor windows applications heb ik nu ook het certificaat voor Webservices en windows components with C#. Dus mag ik me sinds donderdag MCAD-er noemen. Met het daarbij horende logo. Tada!



Ook hebben we sinds anderhalve week een andere auto. Ik was de andere auto meer dan beu en er kwamen veel onkosten aan dus werd het tijd voor een ander. Maar ik wilde even geen peugeot meer. Wat ik wel wilde? geen idee. Ik wilde een hatchback, een compacte middenklasser, 5-deurs en betaalbaar. Merk maakte me niet zoveel uit. Alleen werken de meeste websites niet op deze manier. Als je wil zoeken op het aanbod moet je eerst een merk kiezen, en dat wilde ik juist niet. Ik ging mij veel meer om soort auto dan om merk.



Daarom: ikrij.nl. Een website die werkt op een andere manier. Namelijk tagging! Heel erg web 2.0! Heel erg hip! Maar met een oud principe: Ik pak de content van de belangrijkste handels sites en neem deze op in rubrieken op mijn site. En dat maak ik makkelijk doorzoekbaar, en vooral ook de geschiedenis!. Bekijk bijvoorbeeld http://sedan.ikrij.nl of http://hatchback.ikrij.nl. Telkens krijg je de mogelijkheid om de zoekresultaten te verfijnen. Zo krijg je een mooi overzicht van de resultaten in een bepaalde klasse en de gangbare prijs. Uiteindelijk heb ik gekozen. En ik rij Fiat Brava. En ik ben er uitermate tevreden mee. Lekker ruim, redelijk wat pit, 5-deurs en niet te vergeten betaalbaar en jong! nog geen 10 jaar oud en geen 80k gelopen.



Ondertussen ben ik bezig geweest met mijn paypal nu kopen script. En tegen het 1e probleem ben ik alweer aangelopen. Ik wil namelijk van bepaalde bestanden bepaalde versies in de zip, en bepaalde versies op mijn site. Bijvoorbeeld de settings files met mijn database wachtwoord. En nu is dat handwerk en extra stappen. En dat vraagt er gewoon om dat het een keer fout gaat. Dus daar wil ik een programma voor schrijven. Ik wil trouwens bij deze de 2 kopers van het tekstbestand bedanken. Ik heb daar per persoon toch 22 cent winst op gemaakt. (59 - paypal kosten = 22). Bedankt!



En dan kom ik via een bochtje toch weer terug bij mijn titel. Ik heb geen tijd. Of ieder geval te weinig tijd. En daarom wil ik een "weekend of code" organiseren. Samen met vrienden/kennissen een lang weekend in centerparcs. Samen bouwen aan een applicatie. Kijken hoever je kunt komen met 2 x 24 uur. Zijn er mensen zo gek om met me mee te gaan? (en er evt een traditie van te maken?)

(en nu ben ik nog vergeten te vertellen over de huizen die we bekeken hebben, de cursus die ik gevolgd heb, de verjaardagen die we gevierd hebben wat dan al niet meer!)

zondag, augustus 20, 2006

Nu kopen: paypal nu kopen script!

Wat is er mooier dan het stellen van een retorische vraag? En wat is er mooier dan het eerste script wat je met je nieuwe paypal nu kopen script verkoopt het script zelf is? Volg je het nog? Dit weekend heb ik eindelijk mijn plan uitgewerkt om via mijn website mijn eigen gemaakte software te verkopen. Bekijk het op: http://www.breinloos.nl/paypal/.

Het is een script waarmee ik zip bestanden kan verkopen. Op de homepage zie je een lijst van de producten. Als je op de "nu kopen" knop drukt ga je naar paypal. Maak je daar de actie af dan krijg je een e-mailtje met daarin een download link. Met die link kun je de bestanden downloaden en gebruiken. Maar waarom mijn code op deze manier verkopen?

Laat me duidelijk zijn: ik ben niet tegen open source. Open source heeft zijn plek, maar is niet het antwoord op alles. Een van de grootste valkuilen van Open Source is de relatief slechte kwaliteit van de meeste projecten. Omdat mensen het voor hun plezier doen mis je vaak de handleiding en mag je hopen dat het doorontwikkeld wordt. Daarnaast worden alleen die dingen ontwikkeld waar mensen zelf plezier aan beleven. Of wordt het gebruikt voor studie en het opdoen van ervaring. Niet echt aantrekkelijk voor de eindgebruikers. Het nadeel voor een Open Source ontwikkelaar is dat je veel tijd kwijt kunt zijn met het ondersteunen van je gebruikers (zeker als je een brakke handleiding oplevert).

Daarom heb ik besloten mijn code ter verkoop aan te bieden. Het is niet zo dat ik denk dat mijn code uniek is of dat ik briljante code heb geschreven en die niet wil delen. Nee, ik wil het publiek beperken. Ik wil dat alleen mensen die serieus interesse hebben in mijn code deze kopen en gebruiken. En alleen die mensen zal ik ondersteunen. Daarom heb ik dit script gemaakt. Nu houdt dit script het kopieren van mijn code niet tegen. Maar als mensen mijn script kopen, kopen ze de ondersteuning niet het script. En die ondersteuning bestaat uit een jaar lang gratis updates en bugfixes en mail ondersteuning.

Blijft er nog een andere kant van Open Source over: door de code open te maken wordt hij veiliger. Dat klopt. Maar dat klopt pas als een product redelijk populair is. Als ik dit script nu op Sourceforge zet en 10 mensen downloaden het dan wordt het echt niet veiliger. Ik ga niet zeggen dat het script nu veilig is. Dat weet ik namelijk niet, het is net af! maar ik gebruik het zelf, op mijn eigen webserver. Als het niet veilig is merk ik het zelf ook.

Door op deze manier mijn code te verkopen heb ik hopelijk het beste voor iedereen: mensen die het script kopen hebben recht op ondersteuning en bugfixes. En ik hoef alleen maar mensen te ondersteunen met oprechte interesse. Daarnaast is de prijs zo ontzettend laag dat je het bijna gratis kunt noemen. Ik zie alleen maar voordelen! Koop het script, bouw mooie documenten en verkoop het via je website!

woensdag, augustus 16, 2006

BillMonk

Via oldnewthing kwam ik op BillMonk. Een handige website om bij te houden wie wat nog moet betalen of wie welke boek of dvd van je geleend heeft. Nu ben ik zelf niet zo dat ik alles op de cent nauwkeurig wil doen. Maar het is toch wel handig om bij te houden wat je mensen nog moet betalen, en in mijn geval: van wie heb ik die DVD ook alweer geleend.

Dus heb ik nog een DVD van je, of krijg je nog geld van me. Meld je aan! En meld mij aan als vriend. Gebruik mijn gmail adres maar :)

maandag, augustus 14, 2006

Er was er één jarig!

Afgelopen zaterdag was ik jarig. Maar heb het niet gevierd. Komend weekend ga ik mijn verjaardag samen vieren met mijn vrouw. In plaats van mijn verjaardag te vieren heb ik de dag doorgebracht bij mijn vader in de garage. Na alle salontafeltjes werd het tijd voor mooi tuinmeubilair. Aangezien de huidige plastic stoeltjes helemaal verweerd zijn.



Geïnspireerd op de tuinmeubels op het dakterras van mijn werk heb ik verkleinde versies gemaakt. Nog even in de grondverf en hopen dat in het weekend mooi weer is. Dan hebben we op onze verjaardagen een mooie, nette tuin! Toch blijft het heerlijk even met je handen werken.

maandag, augustus 07, 2006

Wasigh C# notifyballoon

Een tijdje terug schreef ik al over mijn perfecte RSS reader. Om de notify balloon te maken heb ik code gehaald van: http://www.codeproject.com/cs/miscctrl/notifyiconex.asp Alleen heeft deze code wat problemen:
I must admit that the documentation concerning the balloon tip does not seem to match the behaviour. The timeout value does not seem to work. I could not get the correct windows message when the balloon is closed by the 'x' button. I get the 'timeout' message whether the balloon times out or it is closed by the user. Let me know if I have done anything wrong in regards to these issues or if anybody gets different results than I did on my XP machine.




De timeout issue heb ik gefixed door gebruik te maken van een timer een het feit dat de balloon verdwijnt als je de tekst op een lege string zet: https://blogs.gotdotnet.com/oldnewthing/archive/2005/01/10/349894.aspx
Alleen override ik hiermee het standaard gedrag dat een een notifyballoon heeft
(hij ziet automatisch of de user wel achter de pc zit, wat best kewl is ;))



Over zijn 2e opmerking dat is "by design" zoals Raymond Chen opmerkt:
"If such a notification were generated, ill-behaved programs would just react to a click on the balloon's "X" button with an annoying follow-up dialog like, "Are you sure you want to ignore my wonderful message?" So there was a conscious decision not to give them the chance."


Waarom het dan wel in de API zit? Beats me... Om mijn wijzigingen terug te geven aan de community: http://www.breinloos.nl/files/Wasigh.NotifyIcon.zip

vrijdag, augustus 04, 2006

Een goede programmeur herken je aan zijn debugging

Op mijn werk heb ik als hobby om one-liners en adviezen rond te strooiien. Voor de grap, maar altijd met een serieuze ondertoon. Zo roep ik vrijwel dagelijks: "Gebruik geen stored procedures!", "regex is NIET de oplossing" en "van coding guidelines ga je geen betere progamma's schrijven". Sinds kort heb ik er een nieuwe bij "Goede programmeurs herken je aan hun debugging skills.". En die wil ik graag even uitleggen.

Hoe goed is een programmeur? Hoe wil je dat meten? Aantal regels code per uur? Aantal bugs per duizend regels? Aantal sourcesafe checkins per maand? Het is allemaal moeilijk te meten, terwijl er toch verschillen zijn tussen hoe goed programmeurs zijn. De ene krijgt nu eenmaal meer voor elkaar dan een andere Hoe ga je daar mee om?

Een goede programmeur schrijft goede code. Eens? Goede code is code zonder fouten. Eens? Code schrijven zonder fouten is onmogelijk. Eens? Fouten oplossen doe je door te debuggen. Hoe goed je code kunt debuggen hangt af van de manier waarop de code geschreven is. Eens?


String s = (String)var.ToString().SubString(blaat.IndexOf("a"), 8).ToLower().Trim();

Is veel lastiger dan:

String myString = var.toString();
myString = myString.trim();
myString = myString.ToLower();
int pos = blaat.IndexOf("a");
String s = myString.SubString(pos, 8);

En in het 2e voorbeeld zie je in één oogopslag dat de code niet veilig is. Wat als er in blaat geen "a" zit? Wat als myString korter is dan 8 karakters? Dat is debugging zonder de debugger ook alleen maar te gebruiken! En wat als blaat null is? In het 1e geval krijg je een Exception op een hele lange regel. In het 2e geval krijg je een Exception op: "int pos = blaat.IndexOf("a");" Vertel mij maar wat makkelijker is?

Dit soort dingen zijn moeilijk in coding conventions te vangen. Dit heeft te maken met goede programmeurs die ervaring hebben met debuggen. En weten hoe je fout zoeken in code makkelijker kunt maken. Eigenlijk heb je maar één coding conventie nodig: "Zorg dat je code goed debugbaar is!"

Voor debugging heb je veel kennis en ervaring nodig van de taal en het platform waarin je werk. Moet je zorgvuldig te werk te gaan en doorzettingsvermogen hebben. Beoordeel een programmeur daarom niet op zijn code, maar op zijn debugging.

dinsdag, augustus 01, 2006

Blinq, Blinq!

Het heeft een aantal jaar geduurd maar eindelijk zijn de saaie jaren voor ons programmeurs voorbij. Een website is vaak niets anders dan een database uitlezen en updaten en dat is saai programmeerwerk. Gelukkig hebben we nu een oplossing van Microsoft: Blinq!

Helaas heb ik niet werkend op mijn systeem, maar heb ik wel nhibernate, lblgen pro en xbForms draaien. Maar ik hou het in de gaten ;)