<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Dennis' Blog</title><link>http://blogger.xs4all.nl/detrio00/</link><description>Avonturen in .NET</description><managingEditor>Dennis Vroegop</managingEditor><dc:language>en-US</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Dennis Vroegop</dc:creator><title>Ik ga verhuizen!</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/03/07/81178.aspx</link><pubDate>Tue, 07 Mar 2006 00:07:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/03/07/81178.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/81178.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/03/07/81178.aspx#Feedback</comments><slash:comments>34</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/81178.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/81178.aspx</trackback:ping><description>&lt;P&gt;Nou ja.. ik niet, maar mijn blog wel. En wel naar &lt;A href="http://www.dotned.nl/blogs/dennis_blog/default.aspx"&gt;http://www.dotned.nl/blogs/dennis_blog/default.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Dus vanaf nu kun je me daar vinden, mocht je geinteresseerd zijn in .net, 'from the trenches' en alle andere dingen die ik beschreef.&lt;/P&gt;
&lt;P&gt;Hope to see you on the other side!&lt;/P&gt;
&lt;P&gt;Dennis&lt;/P&gt;
&lt;P&gt; &lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/81178.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Veel, heeeeel veel info over Linq</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/16/78610.aspx</link><pubDate>Thu, 16 Feb 2006 12:20:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/16/78610.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/78610.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/16/78610.aspx#Feedback</comments><slash:comments>43</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/78610.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/78610.aspx</trackback:ping><description>&lt;P&gt;Als je bezig bent met Linq, is het wellicht handig om hier eens naar te kijken: &lt;A href="http://objectsharp.com/blogs/barry/archive/2005/09/13/3395.aspx"&gt;http://objectsharp.com/blogs/barry/archive/2005/09/13/3395.aspx&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hier vindt je een verzameling met links naar Linq...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/78610.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>IE 7</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/12/78139.aspx</link><pubDate>Sun, 12 Feb 2006 12:17:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/12/78139.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/78139.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/12/78139.aspx#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/78139.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/78139.aspx</trackback:ping><description>&lt;P&gt;Natuurlijk is er Firefox. Stabiel, snel, tabs, secure enzovoorts. Waarom zou je dan toch bij Internet Explorer blijven? Nou, omdat het nu eenmaal de marktleider is. Dat is op zich geen goed argument, althans geen goed argument, maar het betekent wel dat de meeste websites alleen maar getest worden op IE. En er dus op Firefox niet goed uitzien. Dat is niet de schuld van de browsers maar van de website bouwers, maar het is wel de realiteit.&lt;/P&gt;
&lt;P&gt;Ook kan het een probleem worden als je voor je vak afhankelijk bent van features die alleen IE bieden, zoals in mijn geval. Ik werk met Microsoft CMS, Sharepoint en dergelijke tools en het is niet eenvoudig om dat goed aan de praat te krijgen op Firefox.&lt;/P&gt;
&lt;P&gt;Microsoft heeft echter gezegd dat IE 7 een stuk beter wordt: tab browsing, meer security, kortom: meer zoals Firefox. IE 7 moet dit jaar uitkomen, maar wanneer is nog niet duidelijk.&lt;/P&gt;
&lt;P&gt;In afwachting daarvan is er al wel een filmpje beschikbaar waarin duidelijk wordt waarom je IE7 moet gaan gebruiken. Ik plaats de link hier gewoon zonder verder commentaar :)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blog.seanalexander.com/PermaLink,guid,77a0c6b2-79c4-429a-b6f2-8bb1ee824957.aspx"&gt;http://blog.seanalexander.com/PermaLink,guid,77a0c6b2-79c4-429a-b6f2-8bb1ee824957.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/78139.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Visual Studio Team Foundation Server RC</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/08/77678.aspx</link><pubDate>Wed, 08 Feb 2006 14:59:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/08/77678.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/77678.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/08/77678.aspx#Feedback</comments><slash:comments>27</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/77678.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/77678.aspx</trackback:ping><description>&lt;P&gt;De release candidate van TFServer is beschikbaar. Dat betekent normaal gesproken dat we erg dicht bij de uiteindelijke versie zitten, deze is gepland voor ergens in maart.&lt;/P&gt;
&lt;P&gt;Ik had Beta3 Refresh al geinstalleerd en de upgrade ging relatief eenvoudig. Er zijn wel wat verschillen tussen B3 en RC, dus zorg ervoor dat je eerst de documentatie die er bij zit goed leest! Ik had wat issues met betrekking tot de domain controller en ook klaagde de installer over de reeds aanwezige databases. Op zich was dit niet zo'n probleem: ik had nog geen echte code in de databases zitten. Ik kon gewoon de oude data weggooien en de installer een nieuwe database laten genereren. Voor de mensen die dat niet kunnen: er zit in de download een aantal tools die je helpen met de migratie. &lt;/P&gt;
&lt;P&gt;Er is een Go-Live licentie voor zowel Beta 3 als voor de RC beschikbaar, dus niets staat je in de weg om Foundation Server eens te proberen! Ik moet zeggen dat ik erg gecharmeerd ben van het hele product.&lt;/P&gt;
&lt;P&gt;Ok, er is niets nieuws onder de zon. Alles wat Foundation Server je biedt was al beschikbaar in de een of andere vorm. Laten we eens kijken:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Team Pages. Tja, in Sharepoint Services kon je dat al, het voordeel nu is dat je een template hebt.&lt;/LI&gt;
&lt;LI&gt;Integrated Unit Testing. nUnit, wie kent het niet?&lt;/LI&gt;
&lt;LI&gt;MSBuild: nAnt is een hele goede, open source tool die hetzelfde doet&lt;/LI&gt;
&lt;LI&gt;Work Item tracking: ook dit kon je al doen met Sharepoint Services&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;En zo zijn er nog veel dingen die je al lang kunt doen met gratis en/of open source software. &lt;/P&gt;
&lt;P&gt;Waarom ben ik dan toch zo enthousiast over Foundation Server? Wel, de reden daarvoor is dat je nu alles in een systeem hebt. Dat systeem is nog eens gestandaardiseerd ook: bedrijven zullen veel sneller een dergelijke toolset van Microsoft gaan gebruiken dan dat ze de beheerder opdracht geven een tiental open source tools te downloaden en installeren. Ik zeg niet dat ik het met een dergelijk beleid eens ben, maar het is wel wat ik om me heen zie. Het is het idee &amp;#8220;Als het van Microsoft is, dan is het wel goed.&amp;#8221; Het leuke is dat ze in dit geval nog eens gelijk hebben ook.&lt;/P&gt;
&lt;P&gt;Ik heb mijn eerste projecten nu in Foundation Server staan en de werking van de tools (met als belangrijkste Team Explorer) is erg intuitief. &lt;/P&gt;
&lt;P&gt;Voor veel tips en tutorials verwijs ik je even door naar &lt;A href="http://teamsystemrocks.com"&gt;http://teamsystemrocks.com&lt;/A&gt; Deze site staat vol met links naar blogs, tuturiol video's en andere interessante zaken.&lt;/P&gt;
&lt;P&gt;Happy coding!&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/77678.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>From the trenches: een maritieme oplossing</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77160.aspx</link><pubDate>Sat, 04 Feb 2006 22:21:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77160.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/77160.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77160.aspx#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/77160.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/77160.aspx</trackback:ping><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;From the trenches, een maritieme oplossing.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Ik werkte aan een groot web-based systeem. Dit systeem zou gebruikt worden door vele tienduizenden gebruikers, met koppelingen naar diverse backoffice systemen. Tussen de toekomstige gebruikers van het systeem zitten ongetwijfeld een paar heel slimme mensen, mensen met verstand van computers en vooral van computers &amp;#8216;cracken&amp;#8217;, dus je kunt je voorstellen dat beveiliging van het systeem erg belangrijk was. Nou, daar verschillen de meningen dus nogal over.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Na een grondige review van het systeem vond ik een behoorlijk groot risico lek. In de wekelijkse voortgangsbespreking wees ik de verantwoordelijke manager hierop. Tot mijn verbazing vloog hij me niet om de hals om me te bedanken voor het voorkomen van een toekomstige ramp. In tegendeel zelfs: het gesprek ging ongeveer als volgt:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Ik: &amp;#8220;Maar als we dit niet oplossen, wat nu nog niet zoveel tijd kost, hoeven we hier ons geen zorgen meer over te maken en is het systeem een stuk beter beveiligd.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Ach, waar maak je je nou druk om? Niemand zal dat lek vinden.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Tja, dat zeiden ze bij jullie collega bedrijven ook en ik heb hier een krantenartikel waarin staat dat vorige week bij jullie collega het netwerk gekraakt is. Hun architectuur lijkt trouwens op die we hier hebben.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Nou ja, dat is daar. Bij ons gebeurt dat niet. Trouwens, over 4 maanden moeten we weer een nieuwe versie uitleveren en dan kijken we er wel naar.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Maar als we het nu oplossen kost me dat ongeveer 4 dagen. Als we het over 4 maanden mee moeten nemen zal het tegen die tijd 4 weken werk kosten: het systeem groeit ontzettend hard.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Nou, dat waag ik te betwijfelen.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Het gesprek ging verder over de functionaliteit die nog ge&amp;#239;mplementeerd moest worden. Ik stond even perplex: hier stond ik dan, met mijn kennis op het gebied van security en er werd mij verteld door iemand die geen inhoudelijke kennis van de systemen heeft (zijn woorden, niet de mijne hoewel ik het wel met hem eens ben) dat ik het helemaal mis op. In gedachten haal ik mijn schouders op, noteer dit gesprek zodat ik later dit allemaal kan documenteren en ga verder met de meeting.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Even later komen we bij een ander probleem. Er zijn 2 manieren om het op te lossen. E&amp;#233;n ervan duurt een week maar is wel secuur, de tweede duurt &amp;#233;&amp;#233;n dag maar is qua veiligheid zo lek als een mandje.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Toen ontstond de volgende dialoog.&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Ik vind het vervelend om er over te beginnen, maar zo introduceren we wel een nieuwe beveiligingsprobleem.&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Daar heb je hem weer met zijn beveiliging. Dat is toch geen probleem!&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Toch denk ik dat we het anders moeten aanpakken!&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;En hierop volgend kreeg ik, als duurbetaalde expert, een uitleg over hoe het nu werkt bij het beveiligen van IT-systemen:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&amp;#8220;Ik zie het zo: stel je hebt een boot. In die boot zit een gat. Dan zinkt die boot. Als je er nu een tweede gat bij maakt, dan maakt dat echt niet meer uit!&amp;#8221;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Ik mompelde nog: &amp;#8220;Met een beetje geluk loopt het water via het ene gat naar binnen en via het andere gat naar buiten.&amp;#8221;, en besloot het er maar bij te laten. Tegen dit soort logica kan ik niet op.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Na 6 maanden (nadat ik al weg was bij dat bedrijf) sprak ik iemand die er nog werkte, en die bevestigde mij dat alle beveiligingsproblemen nog steeds in het systeem zitten. De grote update die plaats gevonden heeft, heeft een groot aantal problemen opgelost, maar het beveiligingsprobleem oplossen zou op dat moment te veel tijd gekost hebben. Tja&amp;#8230;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/77160.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>From the trenches</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77159.aspx</link><pubDate>Sat, 04 Feb 2006 22:20:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77159.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/77159.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/04/77159.aspx#Feedback</comments><slash:comments>26</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/77159.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/77159.aspx</trackback:ping><description>&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Ik werk in de detachering. Als consultant en als developer kom ik bij nogal wat bedrijven binnen. Dat is altijd spannend, in het begin is het vooral even zoeken. Wat moet ik precies doen, wat wordt er van mij verlangd, hoe werken ze hier, waar is het toilet? En dat iedere 3 &amp;#224; 4 maanden opnieuw.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Toch vind ik dat vooral leuk: iedere keer weer een kans om jezelf te bewijzen, om nieuwe mensen te leren en vooral om nieuwe dingen te leren. Niet alleen nieuwe technieken, maar ook nieuwe manieren om al bekende technieken toe passen.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Uiteraard heeft dit ook zijn nadelen. Binnen iedere organisatie zit altijd wel iemand met wie je niet echt door &amp;#233;&amp;#233;n deur kunt. Zo iemand die het bloed onder je nagels vandaan weet te halen door alleen al in dezelfde ruimte te zijn. Meestal is de reden daarvoor dat die persoon erg veel op jezelf lijkt, maar een dergelijke beschouwing is meer voer voor psychologen en hoort niet thuis in deze blog.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Als je al wat langer met dergelijke personen samen werkt, weet je op een gegeven moment wel hoe je met ze om moet gaan. Je weet wat je moet doen om ze te ontlopen en wat je moet zeggen om te voorkomen dat ze weer vol trots beginnen te vertellen over hun nieuwe hond die als beste van de puppytraining ge&amp;#235;indigd was. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Als gedetacheerde heb ik die luxe niet. Ten eerste omdat het tijd kost om dergelijke tactieken te ontwikkelen, ten tweede omdat dat soort mensen om de een of andere reden altijd op leidinggevende posities terecht komen. Dat zijn dus de mensen waar ik dagelijks mee te maken heb.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Laat me duidelijk zijn: 95% van de mensen met wie ik samenwerk zijn absoluut een aanwist voor ons vakgebied. Het zijn leuke mensen, gedreven developers, vakbekwame collega&amp;#8217;s en meestal prettig in de omgang.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;De overige 5 procent&amp;#8230; Daar wil ik het in deze column over hebben.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Onder het kopje &amp;#8220;From the trenches&amp;#8221; zal ik mijn ervaringen met dit soort mensen met jullie delen. Uiteraard zijn er enkele details veranderd en de namen laat ik weg of pas ik aan om de (on)schuldigen te beschermen. Dat neemt echter niet weg dat de strekking van mijn verhalen allemaal waar gebeurd zijn.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Als je zelf ook dergelijke ervaring hebt, laat het me weten! Gedeelde smart is halve smart dus kom maar op met die verhalen!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN lang=NL&gt;Dennis.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/77159.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Tech Ed verschoven...</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/02/02/76853.aspx</link><pubDate>Thu, 02 Feb 2006 15:35:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/02/02/76853.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/76853.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/02/02/76853.aspx#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/76853.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/76853.aspx</trackback:ping><description>&lt;P&gt;Dit is al wat ouder nieuws, maar ik wil het toch nog even 'highlighten' hier.&lt;/P&gt;
&lt;P&gt;Tech Ed Europe is helaas &lt;STRONG&gt;niet&lt;/STRONG&gt; in Amsterdam in Juli dit jaar, maar wordt gehouden in Barcelona, en wel te weten op 7-10 November. De reden hiervoor kun je vinden op &lt;A href="http://www.mseventseurope.com/teched/05/pre/content/faq_key.aspx#whyresched"&gt;deze pagina&lt;/A&gt;, maar volgens mij heeft het ook iets te maken met de kosten: direct volgend op Tech Ed wordt het IT-Forum event gehouden. Deze was al gepland voor November in Barcelona en het is goedkoper om die twee aan elkaar te plakken. &lt;/P&gt;
&lt;P&gt;Gelijk hebben ze maar besloten om Tech Ed iets anders in te vullen. Er zijn nu 2 edities:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Tech Ed Developers&lt;/LI&gt;
&lt;LI&gt;Tech Ed IT Forum&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Ze sluiten mooi op elkaar aan, dus dat is dan wel weer handig.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/76853.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Dave Sussman op de dotNED bijeenkomst</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76403.aspx</link><pubDate>Mon, 30 Jan 2006 16:40:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76403.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/76403.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76403.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/76403.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/76403.aspx</trackback:ping><description>&lt;P&gt;Eens in de zoveel tijd mogen we bij dotNED, de Nederlandse .NET gebruikersgroep een spreker van wereldfaam uitnodigen. Donderdag 26 januari was het weer zover, we hadden Dave Sussman dit keer te gast, die een verhaal vertelde over caching in ASP.Net 2.0 en SQLServer 2000 en 2005.&lt;/P&gt;
&lt;P&gt;We hadden 75 inschrijvingen, daarvan kwamen er ongeveer 65 opdagen. Die tien die er niet waren hebben een hele interessante avond gemist! Na de reguliere sessie (voor zover je van regulier kunt spreken) werd het tijd voor Q&amp;amp;A. Iedereen kon vragen wat hij wilde, als het maar met ASP.Net 2.0 te maken had. Er kwamen een aantal hele goede vragen en ook antwoorden!&lt;/P&gt;
&lt;P&gt;Voor iedereen die er niet bij was: hou &lt;A href="http://www.dotned.nl"&gt;http://www.dotned.nl&lt;/A&gt; in de gaten voor meer van dit soort avonden!&lt;/P&gt;
&lt;P&gt;&lt;IMG id=ViewPicture.ascx_GalleryImage style="BORDER-RIGHT: black 2px solid; BORDER-TOP: black 2px solid; BORDER-LEFT: black 2px solid; WIDTH: 500px; BORDER-BOTTOM: black 2px solid; HEIGHT: 340px" alt="Dave Sussman in voorbereiding" src="/images/blogger_xs4all_nl/detrio00/16379/r_sussman.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Foto: Dave Sussman aan het voorbereiden.&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/76403.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Visual Studio Team Foundation Server</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76352.aspx</link><pubDate>Mon, 30 Jan 2006 10:52:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76352.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/76352.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/01/30/76352.aspx#Feedback</comments><slash:comments>31</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/76352.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/76352.aspx</trackback:ping><description>&lt;P&gt;Het heeft heel lang geduurd, en het ging ook niet allemaal even makkelijk, maar het is me gelukt: ik heb nu een Team Foundation Server draaien. Alles draait nu op een single-server en dat moet later uitgesplitst worden naar meerdere servers (AD server, SQL Server, TF server en een aparte buildmachine).&lt;/P&gt;
&lt;P&gt;De volgende stap is uiteraard kijken wat ik er nu precies mee kan. Goed, het concept is me wel duidelijk, maar om het in de praktijk nu te gaan gebruiken is toch een heel ander verhaal.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/76352.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Microsoft Virtual Labs</title><link>http://blogger.xs4all.nl/detrio00/archive/2006/01/17/74653.aspx</link><pubDate>Tue, 17 Jan 2006 14:38:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2006/01/17/74653.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/74653.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2006/01/17/74653.aspx#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/74653.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/74653.aspx</trackback:ping><description>&lt;P&gt;Even een kort berichtje. &lt;/P&gt;
&lt;P&gt;Je kent het wel: je wilt eens spelen met de laatste tools van Microsoft, maar die moet je weer helemaal downloaden, installeren, configureren en daarna weer van je machine afhalen (zo'n harde schijf is immers zo vol, niet waar?)&lt;/P&gt;
&lt;P&gt;Wellicht is dit dan een oplossing: Microsoft heeft tegenwoordig de Virtual Labs online staan. Dat is in principe niets anders dan een batterij servers die allemaal Virtual Server draaien met daarop geconfigureerd een aantal tools en platforms. Jij kunt daar dan op inloggen en dan heb je die machine zo'n 90 minuten tot je beschikking. Er zijn meestal een aantal oefeningen bij zodat je eens kunt spelen met Biztalk, Windows Workflow Foundation, ASP.NET 2.0 en nog veel meer. Als je je nou verveelt, is dit wellicht eens leuk om te doen. Het kost niets!&lt;/P&gt;
&lt;P&gt;Hier is de link: &lt;A href="http://msdn.microsoft.com/virtuallabs/default.aspx"&gt;http://msdn.microsoft.com/virtuallabs/default.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/74653.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Een eerste blik op LINQ</title><link>http://blogger.xs4all.nl/detrio00/archive/2005/11/10/66350.aspx</link><pubDate>Thu, 10 Nov 2005 22:10:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2005/11/10/66350.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/66350.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2005/11/10/66350.aspx#Feedback</comments><slash:comments>56</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/66350.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/66350.aspx</trackback:ping><description>&lt;P&gt;Het is alweer enige tijd geleden dat ik iets over C# 3.0 geschreven heb, maar dat ga ik nu (min of meer) goedmaken. Ik vervolg deze serie nu met een aantal artikelen over een van de toepassingen van de nieuwe mogelijkheden: Linq. &lt;/P&gt;
&lt;P&gt;Linq staat voor Language Integrated Query. Zoals de naam al aangeeft geeft ons dat de mogelijkheid om in de taal (in dit geval C# maar VB.Net kan er ook mee overweg) queries te definieren. &lt;SPAN lang=en-us&gt;Het verhaal achter het ontstaan van Linq zal ik hier even kort schetsen, zodat je een beeld hebt wat de geschiedenis is.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=en-us&gt;Neem eens een stuk code dat je recentelijk geschreven hebt. Kijk er eens goed naar en ga dan kijken hoe vaak je in die code "zoekt" naar zaken. Denk bijvoorbeeld aan het doorlopen van een ArrayList instance met daarin Customer objecten. Regelmatig schrijf je code die in die lijst op zoek gaat naar alle klanten die nog een betaling open hebben staan. Of je wilt een overzicht van alle klanten in je lijst die aangegeven hebben dat ze informatie per email willen ontvangen. Of je wilt simpelweg in die lijst op zoek gaan naar die ene klant met klantnummer 'xyz123' zodat je de gegevens daarvan op het scherm kunt tonen. Als je goed kijkt, zul je zien dat het zoeken naar gegevens in lijsten (in wat voor vorm dan ook) best vaak voorkomt.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN lang=en-us&gt;Echter, een goede methode om te zoeken is er niet. Neem de volgende code eens:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// Initializeer de boel&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;Customer&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; displayCustomer = &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;bool&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; bFound = &lt;SPAN style="COLOR: blue"&gt;false&lt;/SPAN&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; counter = 0;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// Zoek de juiste klant&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;while&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;( (!bFound) &amp;amp;&amp;amp; (counter &amp;lt; customerList.Count) ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; displayCustomer = (&lt;SPAN style="COLOR: teal"&gt;Customer&lt;/SPAN&gt;)customerList[counter];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;( displayCustomer.CustomerID == &lt;SPAN style="COLOR: maroon"&gt;"xyz123"&lt;/SPAN&gt; ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bFound = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; counter++;&lt;BR&gt;}&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;( bFound ) {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Laat zien&lt;BR&gt;&lt;/SPAN&gt;} &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Geef foutmelding&lt;BR&gt;&lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;// Enzovoorts...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Ik weet het, deze code kan beter. Je kunt natuurlijk een specifieke CustomerList type definieren, met daarin de juiste zoekcode. Maar die zal er niet echt anders uitzien dan bovenstaande code. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Zoeken is behoorlijk belangrijk de meeste, serieuze applicaties. Er zijn vele voorbeelden te verzinnen: zoeken naar de inlognaam van de gebruiker om zijn of haar wachtwoord te controleren, zoeken naar de bestanden in de plugin-directory, zoeken naar de geinstalleerde printers op het systeem, zoeken naar.. affijn, je snapt het wel.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Zoeken gebeurdt uiteraard ook in databases. Da's mooi, zul je denken, want daar hoef ik niet zo veel voor te doen. Alles wat ik moet doen is de juiste SQL code schrijven en de database regelt het zelf wel. Maar heb je je wel eens gerealiseerd dat dat eigenlijk een hele vreemde constructie oplevert? Je schrijft hele mooie, goed gedocumenteerde, door de compiler op alle details gecontroleerde C# of VB.Net code, vervolgens plak je daar een string (!!!) in met daarin een stuk code in een hele andere taal, namelijk SQL. Denk daar eens over na: in onze code staat opeens een niet te controleren, niet te compileren en dus niet te verifieren string met een andere programmeertaal daarin. Vreemd, vind je niet?&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Als je nu veel met XML werkt (en wie doet dat tegenwoordig niet?) dan krijg je te maken met weer een hele andere manier van zoeken in data. Nu kun je met XQuery of XPath aan de gang gaan, of je itereert zelf over de elementen in je XML document heen en goet alles zelf. &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Zoeken, zoeken en zoeken. We doen het nogal eens in onze applicatie, op heel veel verschillende en elkaar min of meer tegensprekende methodes. Om daar nu wat aan te doen, is het Project Linq geboren. Het idee hierachter is: laten we alle mogelijke manieren van zoeken (querien in slecht nederlands) nu eens onder de loep nemen en daar een uniforme, strongly typed, verifieerbare en compileerbare methode voor verzinnen. En dat hebben ze gedaan.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Al gauw bleek dat dat niet zo eenvoudig was en om dat op een goede manier te doen moest de taal C# en VB.Net aangepast worden. Welke aanpassingen dat zijn, heb je in mijn vorige postings kunnen lezen (ja ja, er zat een lijn in het verhaal!). Met die uitbreidingen is Linq mogelijk geworden. Ik zal nog even op een rijtje zetten welke nieuwe mogelijkheden er komen:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Type inferrence (var q = ....)&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Extension methods&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Initializers&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Anonymous types&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-FAMILY: Arial"&gt;Lambda expressions&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Met dit alles kunnen we bovenstaande code anders gaan schrijven, op een manier die ons behoorlijk bekend voor zal komen:&lt;BR&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; displayCustomer = &lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; customer &lt;SPAN style="COLOR: blue"&gt;in&lt;/SPAN&gt; customerList &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; customer.CustomerID == &lt;SPAN style="COLOR: maroon"&gt;"xyz123"&lt;BR&gt;&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; customer;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; (displayCustomer != &lt;SPAN style="COLOR: blue"&gt;null&lt;/SPAN&gt;)&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Laat zien&lt;BR&gt;&lt;/SPAN&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;else&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Geef foutmelding&lt;BR&gt;&lt;/SPAN&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;En dit doet dus precies hetzelfde...&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Laat je niet verwarren door de rare plaatsing van 'select', dit leg ik nog wel uit. Maar afgezien daarvan is dit 'gewoon' SQL in C# syntax. De enige aanpassing die ik gedaan heb is dat customerList nu geen ArrayList meer is maar een List&amp;lt;Customer&amp;gt;. Dat maakt echter voor mijn verhaal niets uit.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Laten we eens kijken hoe dit nou kan. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Je moet weten dat de namespace System.Query (waar Linq in is gedefnieerd) voornamelijk bestaat uit een aantal extension methods op het type IEnumerable&amp;lt;T&amp;gt;. Met andere woorden: alles wat de interface IEnumerable&amp;lt;T&amp;gt; implementeert heeft een aantal extra methods gekregen. Een van die methods is bijvoorbeeld Where(); Die zit er als volgt uit:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: teal; FONT-FAMILY: 'Courier New'"&gt;IEnumerable&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;lt;T&amp;gt; IEnumerable.Where&amp;lt;T&amp;gt;((T) =&amp;gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; : predicate)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Met andere woorden: de method Where heeft als resultaat een IEnumerable&amp;lt;T&amp;gt; en als argument de lambda expression (T) =&amp;gt; bool: predicate, oftewel er wordt een anonymous method gemaakt die een bool terug geeft. Dus als we dat even toepassen op onze customerList gaat dat er als volgt uitzien:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; resultList = customerList.Where( (Customer c) =&amp;gt; c.CustomerID == &lt;SPAN style="COLOR: maroon"&gt;"xyz123"&lt;/SPAN&gt; );&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Vertaling: neem onze List&amp;lt;Customer&amp;gt; customerList (welke IEnumerable&amp;lt;Customer&amp;gt; implementeert). Voer daar de 'Where' method op uit. In die Where method geven we mee de lambda expressie (nogmaals, lees mijn vorige postings over dit onderwerp om te begrijpen wat dat precies is) (Customer c) =&amp;gt; c.CustomerID == "xyz123" . Er wordt nu dus een anonymous method gedefnieerd die voor iedere Customer instance in de lijst kijkt naar de CustomerID en die vergelijkt met "xyz123". Daar komt een bool uit (true of false) en als hij true is, dan wordt die Customer instance aan de nieuwe resultList toegevoegd. Overigens is resultList ook een class die IEnumerable&amp;lt;T&amp;gt; implementeert....&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Kijk hier nog eens goed naar, laat het even bezinken. Ik wacht wel even.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Goed. Het resultaat is dus een IEnumerable&amp;lt;T&amp;gt;. Daarop kunnen we dan weer andere extension methods toepassen, welke bijna allemaal een IEnumerable&amp;lt;T&amp;gt; terug geven. We kunnen dus een hele rij van dit soort methods aanroepen: Lijst.Where().Where().GroupBy().Select(); Anders weergegeven:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Lijst.Where().&lt;BR&gt;&amp;nbsp;Where().&lt;BR&gt;&amp;nbsp;GroupBy().&lt;BR&gt;&amp;nbsp;Select();&lt;BR&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Nou hebben we net gezien in mijn voorbeeld dat we helemaal geen IEnumerable&amp;lt;T&amp;gt;.Where() method gebruiken. Nee, we roepen gewoon from type x in lijst where x.iets == "bla" select x.ID; of zo iets dergelijks. De reden dat dat werkt is door het gebruik van Expression Trees. Dat is wellicht iets voor andere posting, maar neem nu maar even van me aan dat dat er voor zorgt dat onze mooie, SQL-achtige syntax verandert in die reeks van method calls en dat alle code achter bijvoorbeeld de where vertaalt wordt in een lambda expressie. Moeilijk is dat niet, het is een kwestie van haakjes en dergelijke toevoegen.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Dat betekent dat onze eerste voorbeeld code er eigenlijk zo uit gaat zien:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;var&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; displayCustomer = customerList&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Where((Customer customer) =&amp;gt; customer.CustomerID == &lt;SPAN style="COLOR: maroon"&gt;"xyz123"&lt;/SPAN&gt;)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Select(customer =&amp;gt; customer);&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;En deze code moet nu te begrijpen zijn. &lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Je ziet het: als je er even naar kijkt, is het op zich vrij logisch. Maar je moet er even aan wennen. Persoonlijk vind ik mijn eerste Linq voorbeeld qua code duidelijker en overzichtelijker dan mijn eerst code-voorbeeld in deze posting.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Volgende keer ga ik kijken naar DLinq, oftewel Linq'en op een database. Het zal je niet verbazen dat dat vrijwel hetzelfde werkt als wat ik je nu heb laten zien.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;Tot dan!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN lang=en-us&gt;PS Mocht je opmerkingen, vragen of iets anders te melden hebben, aarzel dan niet om te reageren, hetzij via het commentaarvakje, hetzij via de mail. Op die manier weet ik of er uberhaupt mensen geinteresseerd zijn in wat ik te melden heb over dit onderwerp.&lt;/SPAN&gt;&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/66350.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>De rups is eindelijk een vlinder!</title><link>http://blogger.xs4all.nl/detrio00/archive/2005/10/28/64784.aspx</link><pubDate>Fri, 28 Oct 2005 07:10:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2005/10/28/64784.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/64784.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2005/10/28/64784.aspx#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/64784.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/64784.aspx</trackback:ping><description>&lt;P&gt;De officiele launch van Visual Studio 2005 en SQL Server 2005 is pas op 7 november. Maar MSDN subscribers kunnen hem al vanaf vandaag downloaden!&lt;/P&gt;
&lt;P&gt;Reken wel op lange downloadtijden: de hele wereld doet dat op dit moment!&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/64784.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Sorry, sorry, sorry...</title><link>http://blogger.xs4all.nl/detrio00/archive/2005/10/25/64516.aspx</link><pubDate>Tue, 25 Oct 2005 21:33:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2005/10/25/64516.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/64516.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2005/10/25/64516.aspx#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/64516.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/64516.aspx</trackback:ping><description>&lt;P&gt;Ik had beloofd om een stukje van (D/X)Linq te laten zien. En dat heb ik dus nog niet gedaan. De reden daarvoor is dat ik het erg druk heb gehad, onder andere met het voorbereiden van mijn praatje voor de Nederlandse .NET gebruikersgroep, over hetzelfde onderwerp.&lt;/P&gt;
&lt;P&gt;Het goede nieuws is dat ik nu nog beter weet wat ik jullie over C# 3.0 en Linq wil vertellen en ook hoe ik dat moet doen! Dus de rest van de artikelen worden nog beter!&lt;/P&gt;
&lt;P&gt;Overigens: voor diegenen die niet kunnen wachten tot ik alles klaar heb en hier geplaatst heb, heb ik hier een&lt;A href="http://msdn.microsoft.com/netframework/future/linq"&gt; link naar de officiele site van Linq.&lt;/A&gt; Daarop staan diverse whitepapers en de preview-compiler, zodat je er zelf mee aan de gang kunt gaan.&lt;/P&gt;
&lt;P&gt;Tot die tijd! Veel plezier en happy coding!&lt;/P&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/64516.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Oude wijn in nieuwe zakken? Lambda expressies! (De toekomst van C#, deel 5)</title><link>http://blogger.xs4all.nl/detrio00/archive/2005/10/09/62488.aspx</link><pubDate>Sun, 09 Oct 2005 20:21:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2005/10/09/62488.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/62488.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2005/10/09/62488.aspx#Feedback</comments><slash:comments>24</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/62488.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/62488.aspx</trackback:ping><description>&lt;p&gt;&lt;font size="5"&gt;Lambda expressies&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Lambda expressies zijn niets nieuws. De eerste publicatie over 'lambda calculus' 
dateert uit de jaren dertig, dat is dus ver voordat men na begon te denken over 
C#. Lambda expressies vormen een belangrijk onderdeel van de taal Lisp maar zijn 
ook in andere omgevingen terug te vinden. Voor een overzicht van de Lambda calculus, 
zie
&lt;a title="Wikipedia uitleg over Lambda calculus." target="_blank" href="http://en.wikipedia.org/wiki/Lambda_calculus"&gt;
deze entry in Wikipedia.&lt;/a&gt; Voor ons is het genoeg om te weten dat een Lambda expressie 
een andere schrijfwijze voor een functie is. Ik zal een voorbeeld geven:&lt;/p&gt;
&lt;p&gt;Neem de wiskundige functie die een getal met zichzelf vermenigvuldigt: f(x) = 
x * x. In de lambda notatie wordt dat ? &lt;i&gt;x&lt;/i&gt;. &lt;i&gt;x&lt;/i&gt; * &lt;i&gt;x&lt;/i&gt;. In C# drukken 
we dat uit als &lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(&lt;span style="color:blue"&gt;int&lt;/span&gt; 
x) =&gt; x * x;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Let op: dit is geen compileerbare code, dit is slechts een schrijfwijze van een 
functie!&lt;/p&gt;
&lt;p&gt;Een ander voorbeeld is bijvoorbeeld een functie die twee doubles bij elkaar optelt 
en het resultaat teruggeeft:
&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(&lt;span style="color:blue"&gt;double&lt;/span&gt; 
x, &lt;span style="color:blue"&gt;double&lt;/span&gt; y) =&gt; &lt;span style="color:blue"&gt;return&lt;/span&gt; 
x + y;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We kunnen deze schrijfwijze gebruiken om de anonymous methods uit C# 2.0 te vereenvoudigen. 
Neem bijvoorbeeld de method List&lt;T&gt;.FindAll(). Deze method ziet er als volgt uit:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;
&lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;T&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;T&gt;.FindAll(&lt;span style="color:teal"&gt;Predicate&lt;/span&gt;&lt;T&gt; 
match) { ... }&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;De Predicate staat voor een delegate:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;
&lt;span style="color:blue"&gt;delegate&lt;/span&gt; &lt;span style="color:blue"&gt;bool&lt;/span&gt;
&lt;span style="color:teal"&gt;Predicate&lt;/span&gt;&lt;T&gt;(T obj);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In het kort komt dit dus op het volgende neer: aan FindAll geef je een delegate 
mee, welke wordt aangeroepen voor ieder item T in de List&lt;T&gt;. In de delegate kijk 
je of het meegegeven item voldoet aan een bepaalde eis, en je geeft true of false 
terug, al naar gelang de uitkomst. Hoewel deze functionaliteit nieuw is in C# 2.0, 
zal ik eerst even laten zien hoe je hem zou moeten gebruiken zonder anonymous methods:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;
List&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
lijst = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
{ &lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"is"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"een"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"verzameling"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"strings"&lt;/span&gt; };&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;List&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
newLijst = lijst.FindAll(ValidateString);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;foreach&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(
&lt;span style="color:blue"&gt;string&lt;/span&gt; s &lt;span style="color:blue"&gt;in&lt;/span&gt; newLijst 
) {&lt;br&gt;
    &lt;span style="color:teal"&gt;Console&lt;/span&gt;.WriteLine(s);&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;De delegate ValidateString ziet er als volgt uit:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;public&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;
&lt;span style="color:blue"&gt;static&lt;/span&gt; &lt;span style="color:blue"&gt;bool&lt;/span&gt; ValidateString(&lt;span style="color:blue"&gt;string&lt;/span&gt; 
s)  {&lt;br&gt;
    &lt;span style="color:blue"&gt;return&lt;/span&gt; (s.Length &gt; 3);&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Met andere woorden: we lopen door een lijst van strings heen, en geven een subset 
daaruit terug, bestaande uit strings met een lengte van meer dan 3. Het resultaat 
zal dan ook zijn "verzameling" en "strings". &lt;/p&gt;
&lt;p&gt;In C#2.0 hebben we anonymous methods. Dit betekent dat we bovenstaande code kunnen 
schrijven &lt;i&gt;zonder&lt;/i&gt; de ValidateString() method te maken. Dat gaat als volgt:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;
List&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
lijst = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
{ &lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"is"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"een"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"verzameling"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"strings"&lt;/span&gt; };&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;
&lt;br&gt;
List&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
newLijst = lijst.FindAll(&lt;span style="color:blue"&gt;delegate&lt;/span&gt;(&lt;span style="color:blue"&gt;string&lt;/span&gt; 
s) { &lt;span style="color:blue"&gt;return&lt;/span&gt; (s.Length &gt; 3);});&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;foreach&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(
&lt;span style="color:blue"&gt;string&lt;/span&gt; s &lt;span style="color:blue"&gt;in&lt;/span&gt; newLijst 
) {&lt;br&gt;
    &lt;span style="color:teal"&gt;Console&lt;/span&gt;.WriteLine( s );&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Zoals je ziet hebben we de delegate niet meer nodig: de code daarvoor staat in 
de lijst.Findall() aanroep. Uiteraard is dit alleen handig indien de code in de 
delegate niet al te groot is; anders kun je beter een aparte method gebruiken.&lt;/p&gt;
&lt;p&gt;In C# 3.0 kunnen we dit nog vereenvoudigen, met behulp van type inferrence en 
lambda expressions:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;
var&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt; lijst 
= &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
{ &lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"is"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"een"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"verzameling"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"strings"&lt;/span&gt; };&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;
&lt;br&gt;
var&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt; newLijst = 
lijst.FindAll((&lt;span style="color:blue"&gt;string&lt;/span&gt; s) =&gt; (s.Length &gt; 3));&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;foreach&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(
&lt;span style="color:blue"&gt;var&lt;/span&gt; s &lt;span style="color:blue"&gt;in&lt;/span&gt; newLijst 
) {&lt;br&gt;
    &lt;span style="color:teal"&gt;Console&lt;/span&gt;.WriteLine( s );&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Door het gebruik van het 'var' keyword en de lambda expressie&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;(&lt;span style="color:blue"&gt;string&lt;/span&gt; 
s) =&gt; (s.Length &gt; 3)&lt;/span&gt;is de code een stuk overzichtelijker geworden.&lt;/p&gt;
&lt;p&gt;Dit is voorlopig de laatste posting over de nieuwe features in de taal C# 3.0. 
Volgende keer zal ik alles wat ik in de afgelopen 5 postings gedemonstreerd heb 
samenvoegen in een overzicht van Linq. &lt;/p&gt;
&lt;p&gt;Even in het kort: Linq staat voor Language Integrated Query, een manier om queries 
op te bouwen in je C# code. Dit is mogelijk doordat C# uitgebreid is met alle mogelijkheden 
die ik tot nu toe heb laten zien. &lt;/p&gt;
&lt;p&gt;Dus als je je afvraagt waar dit hele verhaal naar toe gaat, hou mijn blog in 
de gaten en zie het allemaal samen komen in mijn bespreking van Linq, DLinq en XLing!&lt;/p&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/62488.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Dennis Vroegop</dc:creator><title>Nog meer tijdsbesparing (De toekomst van C#, deel 4)</title><link>http://blogger.xs4all.nl/detrio00/archive/2005/10/08/62367.aspx</link><pubDate>Sat, 08 Oct 2005 19:52:00 GMT</pubDate><guid>http://blogger.xs4all.nl/detrio00/archive/2005/10/08/62367.aspx</guid><wfw:comment>http://blogger.xs4all.nl/detrio00/comments/62367.aspx</wfw:comment><comments>http://blogger.xs4all.nl/detrio00/archive/2005/10/08/62367.aspx#Feedback</comments><slash:comments>31</slash:comments><wfw:commentRss>http://blogger.xs4all.nl/detrio00/comments/commentRss/62367.aspx</wfw:commentRss><trackback:ping>http://blogger.xs4all.nl/detrio00/services/trackbacks/62367.aspx</trackback:ping><description>&lt;p&gt;Dit keer ga ik het hebben over 2 onderwerpen die nieuw zijn in C# 3.0. Die twee 
dingen zijn: initializers en anonymous types.&lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;Initializers&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Laat ik beginnen met een code-voorbeeld:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;class&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;
&lt;span style="color:teal"&gt;Point&lt;/span&gt; {&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt;
&lt;span style="color:blue"&gt;int&lt;/span&gt; _x;&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt;
&lt;span style="color:blue"&gt;int&lt;/span&gt; _y;&lt;br&gt;
 &lt;br&gt;
    &lt;span style="color:blue"&gt;public&lt;/span&gt;
&lt;span style="color:blue"&gt;int&lt;/span&gt; X {&lt;br&gt;
        &lt;span style="color:blue"&gt;get&lt;/span&gt; {
&lt;span style="color:blue"&gt;return&lt;/span&gt; _x; }&lt;br&gt;
        &lt;span style="color:blue"&gt;set&lt;/span&gt; { 
_x = &lt;span style="color:blue"&gt;value&lt;/span&gt;; }&lt;br&gt;
    }&lt;br&gt;
 &lt;br&gt;
    &lt;span style="color:blue"&gt;public&lt;/span&gt;
&lt;span style="color:blue"&gt;int&lt;/span&gt; Y {&lt;br&gt;
        &lt;span style="color:blue"&gt;get&lt;/span&gt; {
&lt;span style="color:blue"&gt;return&lt;/span&gt; _y; }&lt;br&gt;
        &lt;span style="color:blue"&gt;set&lt;/span&gt; { 
_y = &lt;span style="color:blue"&gt;value&lt;/span&gt;; }&lt;br&gt;
    }&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Als we in onze code nu een instance willen maken van Point, dan doen we dat dus 
zo:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;Point&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt; 
myPoint = &lt;span style="color:blue"&gt;new&lt;/span&gt; MyPoint();&lt;br&gt;
myPoint.X = 42;&lt;br&gt;
myPoint.Y = 32;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Natuurlijk kunnen we een extra constructor maken die de waardes van X en Y instelt, 
maar in C# 3.0 kan dat ook op een andere manier. Dat ziet er dan zo uit:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;Point&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt; 
myPoint = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;Point&lt;/span&gt;{X=42, 
Y=32};&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;En dat maakt het leven een stuk overzichtelijker! Overigens hoef je niet alle 
properties of public fields mee te geven, alleen de X bijvoorbeeld had ook gekund. 
Ook de volgorde maakt niet uit, de velden zijn immers benoemd dus de compiler vindt 
wel waar alles heen moet.&lt;/p&gt;
&lt;p&gt;Dit trucje kunnen we ook uithalen met Collections. Het is bekend dat we bijvoorbeeld 
een array direct kunnen vullen bij het declareren van de variabele:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;
string&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt;[] 
stringArray = { &lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"zijn"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"een"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"stelletje"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"strings."&lt;/span&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dat kan nu dus ook met collection classes. Eerst even de pre-c# 3.0 code:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;List&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt; 
stringList = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt;();&lt;br&gt;
&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt;stringList.Add(&lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;);&lt;br&gt;
stringList.Add(&lt;span style="color:maroon"&gt;"zijn"&lt;/span&gt;);&lt;br&gt;
stringList.Add(&lt;span style="color:maroon"&gt;"een"&lt;/span&gt;);&lt;br&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;stringList.Add(&lt;span style="color:maroon"&gt;"stelletje"&lt;/span&gt;);&lt;br&gt;
stringList.Add(&lt;span style="color:maroon"&gt;"strings."&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Ziet er bekend uit, niet waar? Een hoop werk, en nogmaals: daar houden we niet 
zo van. Dus in C#3.0 ziet het er als volgt uit:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;
var&lt;/span&gt;&lt;span lang="NL" style="font-size: 10.0pt; font-family: Courier New"&gt; stringList 
= &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;List&lt;/span&gt;&lt;&lt;span style="color:blue"&gt;string&lt;/span&gt;&gt;{&lt;span style="color:maroon"&gt;"Dit"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"zijn"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"een"&lt;/span&gt;,
&lt;span style="color:maroon"&gt;"stelletje"&lt;/span&gt;, &lt;span style="color:maroon"&gt;"strings."&lt;/span&gt;
&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;};&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dat is een stuk korter, overzichtelijker en duidelijker. Let ook op het gebruik 
van de 'var'. De compiler kan hier immers aan de new List&lt;string&gt; afleiden wat stringList 
voor een type moet zijn, dus dat hoeven we niet nog een keer aan te geven. &lt;/p&gt;
&lt;p&gt;&lt;font size="5"&gt;Anonymous types&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We hebben gezien hoe we een object makkelijker kunnen instantieren. Kijk nu eens 
naar de volgende code:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;var&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt; 
someType = &lt;span style="color:blue"&gt;new&lt;/span&gt; {Naam=&lt;span style="color:maroon"&gt;"Dennis"&lt;/span&gt;, 
EMail=&lt;span style="color:maroon"&gt;"dvroegop@detrio.nl"&lt;/span&gt;, Huisnummer=42, Salaris=7800.00};&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Dit is uiteraard een fictief voorbeeld: dat salaris ligt in werkelijkheid een 
stukje hoger.&lt;/p&gt;
&lt;p&gt;Een quiz. Wat voor een type is sometype? Als het goed is, kan de compiler zelf 
bepalen wat voor een type het is, door te kijken wat er na de '=' staat. Dat is 
immers wat het 'var' keyword betekend. Maar... er staat niet zo veel achter het 
'=' teken, behalve het 'new' keyword en een initializer. Wat voor een type is dit 
nou?&lt;/p&gt;
&lt;p&gt;Het antwoord daarop is: maakt dat wat uit? Ik kan je wel vertellen dat de compiler 
nu een class aanmaakt, maar hoe die precies heet weten we niet. De code die de compiler 
nu genereert ziet er ongeveer als volgt uit:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: blue"&gt;class&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt;
&lt;span style="color:teal"&gt;__newType&lt;/span&gt; {&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color:blue"&gt;string&lt;/span&gt; 
_Naam = &lt;span style="color:maroon"&gt;"Dennis"&lt;/span&gt;;&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color:blue"&gt;string&lt;/span&gt; 
_EMail = &lt;span style="color:maroon"&gt;"&lt;a href="mailto:dvroegop@detrio.nl"&gt;dvroegop@detrio.nl&lt;/a&gt;"&lt;/span&gt;;&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color:blue"&gt;int&lt;/span&gt; 
_Huisnummer = 42;&lt;br&gt;
    &lt;span style="color:blue"&gt;private&lt;/span&gt; &lt;span style="color:blue"&gt;double&lt;/span&gt; 
_Salaris = 7800.00;&lt;br&gt;
 &lt;br&gt;
  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;string&lt;/span&gt; 
Naam {&lt;br&gt;
      &lt;span style="color:blue"&gt;get&lt;/span&gt; { &lt;span style="color:blue"&gt;return&lt;/span&gt; 
_Naam; }&lt;br&gt;
      &lt;span style="color:blue"&gt;set&lt;/span&gt; { _Naam = &lt;span style="color:blue"&gt;
value&lt;/span&gt;; }&lt;br&gt;
  }&lt;br&gt;
 &lt;br&gt;
  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;string&lt;/span&gt; 
EMail {&lt;br&gt;
      &lt;span style="color:blue"&gt;get&lt;/span&gt; { &lt;span style="color:blue"&gt;return&lt;/span&gt; 
_EMail; }&lt;br&gt;
      &lt;span style="color:blue"&gt;set&lt;/span&gt; { _EMail = &lt;span style="color:blue"&gt;
value&lt;/span&gt;; }&lt;br&gt;
  }&lt;br&gt;
 &lt;br&gt;
  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;int&lt;/span&gt; 
Huisnummer {&lt;br&gt;
      &lt;span style="color:blue"&gt;get&lt;/span&gt; { &lt;span style="color:blue"&gt;return&lt;/span&gt; 
_Huisnummer; }&lt;br&gt;
      &lt;span style="color:blue"&gt;set&lt;/span&gt; { _Huisnummer =
&lt;span style="color:blue"&gt;value&lt;/span&gt;; }&lt;br&gt;
  }&lt;br&gt;
 &lt;br&gt;
  &lt;span style="color:blue"&gt;public&lt;/span&gt; &lt;span style="color:blue"&gt;double&lt;/span&gt; 
Salaris {&lt;br&gt;
      &lt;span style="color:blue"&gt;get&lt;/span&gt; { &lt;span style="color:blue"&gt;return&lt;/span&gt; 
_Salaris;}&lt;br&gt;
      &lt;span style="color:blue"&gt;set&lt;/span&gt; { _Salaris = &lt;span style="color:blue"&gt;
value&lt;/span&gt;; }&lt;br&gt;
  }&lt;br&gt;
}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;en even verderop:&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
&lt;span style="font-size: 10.0pt; font-family: Courier New; color: teal"&gt;__newType&lt;/span&gt;&lt;span style="font-size: 10.0pt; font-family: Courier New"&gt; 
someType;&lt;br&gt;
someType = &lt;span style="color:blue"&gt;new&lt;/span&gt; &lt;span style="color:teal"&gt;__newType&lt;/span&gt;();&lt;br&gt;
 &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="text-autospace: none"&gt;
De waardes hoeven niet meer geinitialiseerd te worden, die staan immers in de 
class. In werkelijkheid ziet het er iets anders uit, maar voor dit moment is dit goed 
genoeg. Er wordt dus een anoniem type aangemaakt waarvan we de naam niet kennen, 
maar hij wordt wel aangemaakt met de juiste velden er in. Dus na de uitbreiding 
met anonymous methods in C#2.0 hebben we nu zelfs anonymous types. Voor je het weet 
komen ze met anonymous applications, maar dat zal wel niet zo snel gebeuren.&lt;/p&gt;
&lt;p&gt;Volgende keer: lambda expressions!&lt;/p&gt;&lt;img src ="http://blogger.xs4all.nl/detrio00/aggbug/62367.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>
