<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tech Talk - Driessen HRM _ Payroll</title>
	<atom:link href="http://www.driessen.nl/techtalk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.driessen.nl/techtalk</link>
	<description>Techtalk over Driessen HRM _ Payroll</description>
	<lastBuildDate>Mon, 21 Jun 2010 11:22:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Op zoek naar collega&#8217;s in het .NET Magazine</title>
		<link>http://www.driessen.nl/techtalk/op-zoek-naar-collegas-in-het-net-magazine/</link>
		<comments>http://www.driessen.nl/techtalk/op-zoek-naar-collegas-in-het-net-magazine/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 10:07:57 +0000</pubDate>
		<dc:creator>Patrick Adriaansen</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=1012</guid>
		<description><![CDATA[Er staat een advertentie in de .NET Magazine waarin we nieuwe collega&#8217;s zoeken. We zijn op zoek naar nieuwe C# .NET developers. De gelukkige die hier mag komen werken valt daarbij meteen met zijn neus in de boter. Naast natuurlijk zulke fijne collega&#8217;s (kuch), mag hij/zij ook direct mee naar de DevConnections 2010 in Las [...]]]></description>
			<content:encoded><![CDATA[<p>Er staat een advertentie in de .NET Magazine waarin we nieuwe collega&#8217;s zoeken. We zijn op zoek naar nieuwe C# .NET developers.</p>
<p>De gelukkige die hier mag komen werken valt daarbij meteen met zijn neus in de boter. Naast natuurlijk zulke fijne collega&#8217;s (kuch), mag hij/zij ook direct mee naar de DevConnections 2010 in Las Vegas. Lijkt me een prima reden om direct te solliciteren.</p>
<p style="text-align: center;"><img class="size-full wp-image-1020 aligncenter" title="vegas_advertentie" src="http://www.driessen.nl/techtalk/wp-content/uploads/2010/06/vegas_advertentie.jpg" alt="vegas_advertentie" width="157" height="222" /></p>
<p>De advertentie kun je <a href="http://www.driessen.nl/techtalk/wp-content/uploads/2010/06/CNET_LasVegas_DevConnections.pdf">hier</a> vinden.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/op-zoek-naar-collegas-in-het-net-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nieuwe developer PC&#8217;s</title>
		<link>http://www.driessen.nl/techtalk/nieuwe-developer-pcs/</link>
		<comments>http://www.driessen.nl/techtalk/nieuwe-developer-pcs/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 15:47:18 +0000</pubDate>
		<dc:creator>Patrick Adriaansen</dc:creator>
				<category><![CDATA[Algemeen]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=1003</guid>
		<description><![CDATA[Vandaag zijn er nieuwe PC&#8217;s gearriveerd. Met de omschakeling naar Visual Studio 2010 waren ook de PC&#8217;s waarop code werd geklopt aan vervanging toe.                 De specs van de nieuwe machines liegen er niet om: Intel Core i7 860 (op een gigabyte mainboard met SATA3 en USB 3.0) 4GB [...]]]></description>
			<content:encoded><![CDATA[<p>Vandaag zijn er nieuwe PC&#8217;s gearriveerd. Met de omschakeling naar Visual Studio 2010 waren ook de PC&#8217;s waarop code werd geklopt aan vervanging toe.</p>
<div id="attachment_1006" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-1006" title="PC uitpaksessie" src="http://www.driessen.nl/techtalk/wp-content/uploads/2010/04/PC_Uitpaksessie_1-300x225.jpg" alt="Uitpakken van nieuwe PC's" width="300" height="225" /><p class="wp-caption-text">Uitpakken van nieuwe PC&#39;s</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>De specs van de nieuwe machines liegen er niet om:</p>
<ul>
<li>Intel Core i7 860 (op een gigabyte mainboard met SATA3 en USB 3.0)</li>
<li>4GB Intern Memory</li>
<li>2x SSD 80GB Intel X25-M Postville (Raid-0)</li>
<li>2x 1TB Samsung HDD (Raid-0)</li>
<li>2x VGA card van Club 3d om 3 schermen aan te sturen</li>
<li>en al dit moois in een kast van Antec met een superstille voeding</li>
</ul>
<p>De SSD disks halen een doorvoer snelheid van meer dan 500MB per seconde! De Visual Studio IDE is in elk geval een heel stuk sneller geworden met de machines onder Windows 7. Ten op zichte van de vorige machines halen we een tijdsbesparing van 25% bij het builden van de applicaties en het draaien van de unit tests. We kunnen in elk geval weer een paar jaar vooruit!</p>
<div id="attachment_1007" class="wp-caption alignleft" style="width: 310px"><img class="size-medium wp-image-1007" title="PCs op een rijtje" src="http://www.driessen.nl/techtalk/wp-content/uploads/2010/04/PCs-op-een-rijtje-300x225.jpg" alt="Nieuwe developer PC's op een rijtje" width="300" height="225" /><p class="wp-caption-text">Nieuwe developer PC&#39;s op een rijtje</p></div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p>De oude machines krijgen een mooi plekje als testservers. Met de in Raid-0 geschakelde disken en de dual core processors kunnen ze nog heel mooi dienst doen als SQL server in onze testfarm.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/nieuwe-developer-pcs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating good software solutions</title>
		<link>http://www.driessen.nl/techtalk/creating-good-software-solutions/</link>
		<comments>http://www.driessen.nl/techtalk/creating-good-software-solutions/#comments</comments>
		<pubDate>Mon, 15 Mar 2010 09:22:45 +0000</pubDate>
		<dc:creator>Freek Bos</dc:creator>
				<category><![CDATA[Algemeen]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=995</guid>
		<description><![CDATA[Software isn’t build because we can, but because there is a problem whereby computer software can provide a solution. When writing a software solution there is more to keep in mind than just one’s and zero’s. Creating software is understanding the ‘problem’ the client faces. This is the most important aspect of developing software. Secondly [...]]]></description>
			<content:encoded><![CDATA[<p>Software isn’t build because we can, but because there is a problem whereby computer software can provide a solution. When writing a software solution there is more to keep in mind than just one’s and zero’s. Creating software is understanding the ‘problem’ the client faces. This is the most important aspect of developing software.</p>
<p>Secondly is the software itself. Of course creating the software should ensure the client’s problem no longer exists, but the software shouldn’t create a new problem. This is where high quality solutions are expected.</p>
<p>When creating software solutions I keep the following criteria in mind.</p>
<ul>
<li>High quality software: Software of low quality will contain bugs and bugs cost money and result in unsatisfied end users.</li>
<li>User friendly software: Software with bad user experience will not be used and is a waste of money.</li>
<li>Multi-tier architecture: Bad architecture may cause early or unfixable bottle-necks, in the worst case leading to scrapping the solution entirely, with the inevitable cost.</li>
<li>Quick or good delivery: Software that is released too soon has the potential of having bugs or  corner-cutting. This could eventually lead to spending more time developing/bug-fixing after the first release.</li>
</ul>
<p><strong>High quality software</strong><br />
By using technologies like unit-testing, test driven development, code analysis and agile development, I can meet the higher expectations of sturdy and stable software. ‘Quick and Dirty is not an option’ is the motto I use when developing software.</p>
<p><em>Unit-testing</em> is the process of writing code to test your code. In other words, every little piece of code gets tested by several unit-tests making sure all scenarios this particular code block can handle will get handled with success. The size of the application grows but the tested scenarios increase as well, making sure that every block of code keeps working as expected.<br />
Since these tests exist in code and not by some test-script a human-tester needs to follow, thousands of tests can be run on a daily basis so the developer can detect flaws at a very early stage.</p>
<p><em>Test driven development</em> is a technique where the developer writes the unit-tests for a code block before the code block is created. This helps the developer to better understand the code he is supposed to write and helps the developer improve architecture of the code before the code is written.</p>
<p><em>Code analysis</em> is the use of strict coding rules and guidelines used and improved by .NET developers around the world. By building code according to these rules and guidelines, knowledge is used from developers worldwide who have experienced bad coding practices and written the rules or guidelines to ensure other developers don’t fall into the same trap.<br />
Agile development lets the client (or user) get involved in the development process. By showing the development progress to the end user in a two to four week cycle the user can</p>
<ol>
<li>Better understand the application when they start to use it;</li>
<li>Change the course of the development process as the application is growing (in this way the end product is exactly what the end user expected).</li>
<li>Achieve a better understanding of how the build progresses.</li>
</ol>
<p><strong>User friendly software</strong><br />
The success of an application doesn’t necessarily depend on how ‘clever’ it can be but more so on how ‘cleverly’ the user can use it.<br />
If the software has lots of buttons, checkboxes, settings and highly complicated calculation capabilities, then the user often backs away and hardly dares to touch it. Whereas applications that have a friendly and simple look-and-feel have more chance of being used.<br />
Why build a over complicated and flexible application if nobody knows or wants to use it?</p>
<p><strong>Multi-tier architecture</strong><br />
The larger software solutions mostly aren’t run on one computer and aren’t used by one user. The more complex software solutions will be used by many  users with more than one role and will most likely run on different computers in different locations. By using multi-tier technologies these solutions can be built.</p>
<p>Two-tier applications are application where there is a client application running on the user’s pc and a server application running on the server handling the data the users provide.</p>
<p>Three-tier applications have a separate application running on a server which in general is used for ‘number crunching’ that could eat up the entire server capacity. These number crunchers shouldn’t be run on a client pc or data server because it could freeze the client application.</p>
<p>These technologies are used to balance the workload of the software over several computers so the user-interface on the client machine keeps responding, and the data server can keep up with handling the data changes.</p>
<p><strong>Quick or good delivery</strong><br />
There is a very thin line between delivering a software solution too soon or too late.</p>
<p>If a tight deadline is set in advance, there is a bigger chance of active bugs in the final product because of cutting corners. But if the developer keeps building, testing and improving the software, the development process could end up in an endless loop of recreating and redesigning the software. The software is becoming too expensive to build.</p>
<p>Agile development helps in finding the right time for deployment of the software solution and ‘going-live’, even if there is a strict deadline or has strict functional requirements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/creating-good-software-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TFS Bugfarm Service</title>
		<link>http://www.driessen.nl/techtalk/tfs-bugfarm-service/</link>
		<comments>http://www.driessen.nl/techtalk/tfs-bugfarm-service/#comments</comments>
		<pubDate>Wed, 16 Dec 2009 14:56:49 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=971</guid>
		<description><![CDATA[Het laatste item op mijn Visual Studio / TFS 2010 checklist was het aanpassen van WITS zodat ze werken met onze service &#8216;TFSBugfarm&#8217;. Hiermee kunnen (interne) gebruikers en de portal sites zelf bij een fout een gedetailleerde bug inschieten in Team Foundation Server. In het geval van een windows applicatie zelfs met screenshot van de [...]]]></description>
			<content:encoded><![CDATA[<p>Het laatste item op mijn Visual Studio / TFS 2010 checklist was het aanpassen van WITS zodat ze werken met onze service &#8216;TFSBugfarm&#8217;. Hiermee kunnen (interne) gebruikers en de portal sites zelf bij een fout een gedetailleerde bug inschieten in Team Foundation Server. In het geval van een windows applicatie zelfs met screenshot van de situatie.</p>
<p>Om dit te laten functioneren moeten er enkele velden worden toegevoegd aan de bug workitem template. Sinds enkele weken is de <a title="beta van Power Tools voor TFS 2010" href="http://blogs.msdn.com/bharry/archive/2009/12/01/tfs-2010-power-tools-are-available.aspx" target="_blank">beta van Power Tools voor TFS 2010</a> beschikbaar. Ik heb nog geen tijd gehad om te kijken wat er nu echt allemaal nieuw en verbeterd is, maar ik heb wel gelijk de eerste <a title="Bug!" href="https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=520150" target="_blank">bug</a> te pakken. Gelukkig stond het mijn test van onze TFSBugFarm service niet in de weg, omdat ik de noodzakelijke velden gewoon toe kon voegen. De minimale vereiste voor de TFSBugFarm service is een veld voor de username, en een veld om een reply te kunnen geven aan de user.</p>
<p><strong>Wat is de TFS Bugfarm Service?</strong><br />
In essentie bestaat onze TFS Bugfarm Service uit een WCF service die verbonden is met Team Foundation Service en een base client met een Windows en een Web wrapper eromheen. Via de Windows wrapper is het voor de gebruiker mogelijk om zelf items  in te schieten in Team Foundation Server en om de afhandeling van deze items te volgen. Ook kan een Windows applicatie bij een crash zelf een screenshot maken en deze vervolgens, samen met de exception en de call-stack automatisch inschieten.</p>
<p>Via de Web wrapper kunnen onze portal sites (<a title="Payroll Portal" href="https://www.payrollportal.nl" target="_blank">Payroll Portal</a> en <a title="RAP" href="http://www.rechtspositie.info" target="_blank">RAP</a>) exceptions automatisch loggen in Team Foundation Server, zodat hiernaar gekeken kan worden. Via de Team Foundation Bug list kunnen items eenvoudig aan een sprint gekoppeld worden om opgelost te worden.</p>
<p>De Windows wrapper vind ik zelf wel erg leuk werken.  Hier zitten enkele standaard componenten in die je eigenlijk maar op een form hoeft te slepen. Vervolgens specificeer je alleen nog het TFS Bugfarm service URL en het TFS Project.</p>
<p>De componenten bestaan uit een issue list waarmee de voortgang van items kan worden bekeken en een submit form control om issues in te sturen. Die laatste bevat ook gelijk de mogelijkheid om attachments toe te voegen, en om screenshots direct vanaf het clipboard als attachment toe te voegen, zonder ze eerst op schijf op te hoeven slaan. Deze attachment zitten dan in TFS netjes als File Attachment aan het work item gekoppeld.</p>
<p>Als er zich een onverwachte exception voor doet, wordt dit scherm gestart. Automatisch wordt er een screenshot als attachment toegevoegd, en de exception message en call-stack worden in het bericht gezet. De gebruiker kan het item eventueel nog bewerken en hoeft vervolgens alleen maar op versturen te klikken.</p>
<p>Ik heb een paar screenshots gemaakt van de TFS Bugfarm client in Invio, een van onze Windows applicaties.</p>
<div id="attachment_973" class="wp-caption aligncenter" style="width: 206px"><a href="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/bugfarm_win_options.png"><img class="size-full wp-image-973" title="TFS Bugfarm client in Invio" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/bugfarm_win_options.png" alt="TFS Bugfarm opties in Invio" width="196" height="88" /></a><p class="wp-caption-text">TFS Bugfarm opties in Invio</p></div>
<p style="text-align: center;">
<div id="attachment_975" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/tfsbugfarm.png"><img class="size-medium wp-image-975" title="Meldingen bekijken" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/tfsbugfarm-300x168.png" alt="TFS meldingen bekijken in Invio" width="300" height="168" /></a><p class="wp-caption-text">TFS meldingen bekijken in Invio</p></div>
<div id="attachment_976" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/addtfs.png"><img class="size-medium wp-image-976" title="Incident insturen" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/addtfs-300x170.png" alt="Een nieuw incident insturen in Invio" width="300" height="170" /></a><p class="wp-caption-text">Een nieuw incident insturen in Invio</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/tfs-bugfarm-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De Development &#8216;Cockpit&#8217;</title>
		<link>http://www.driessen.nl/techtalk/de-development-cockpit/</link>
		<comments>http://www.driessen.nl/techtalk/de-development-cockpit/#comments</comments>
		<pubDate>Fri, 11 Dec 2009 09:29:31 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[Geen rubriek]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=957</guid>
		<description><![CDATA[Hoe ziet nu eigenlijk zo&#8217;n werkplek van een &#8216;Driessen Developer&#8217; eruit? Om dit te illustreren heeft Stefan vrijwillig zijn werkstation even aan ons afgestaan om een foto te maken. Het middelste scherm is een vette 22&#8243;, links en rechts vergezeld van een 15&#8243; scherm. Links zien we de resultaten van de unittests (allemaal rood?!), in [...]]]></description>
			<content:encoded><![CDATA[<p>Hoe ziet nu eigenlijk zo&#8217;n werkplek van een &#8216;Driessen Developer&#8217; eruit?</p>
<p>Om dit te illustreren heeft Stefan vrijwillig zijn werkstation even aan ons afgestaan om een foto te maken. Het middelste scherm is een vette 22&#8243;, links en rechts vergezeld van een 15&#8243; scherm. Links zien we de resultaten van de unittests (allemaal rood?!), in het midden natuurlijk Visual Studio, en rechts Sql Management Studio, met op de voorgrond onze eigen framework dataclass-generator.</p>
<div id="attachment_955" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/IMG_0130.jpg"><img class="size-medium wp-image-955" title="Development 'cockpit'" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/12/IMG_0130-300x225.jpg" alt="Development 'cockpit'" width="300" height="225" /></a><p class="wp-caption-text">Development &#39;cockpit&#39;</p></div>
<p>Alle werkstations zitten via een kvm-switch aangesloten op een flinke beamer waarmee wij &#8216;s ochtends onze scrum meeting doen, grote reviews en natuurlijk aan het einde van een sprint de review meeting.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/de-development-cockpit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gold Certified Partner</title>
		<link>http://www.driessen.nl/techtalk/gold-certified-partner/</link>
		<comments>http://www.driessen.nl/techtalk/gold-certified-partner/#comments</comments>
		<pubDate>Wed, 25 Nov 2009 16:22:42 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[Algemeen]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=946</guid>
		<description><![CDATA[We zijn al enkele jaren met een ISV/Software Solutions competency Certified Partner van Microsoft. Sinds 26 augustus 2009 zijn we, nadat we ook de Hosting Solutions competency binnensleepten, Gold Certified Partner. Ik kan wel zeggen dat we behoorlijk Microsoft-minded zijn. We maken gebruik van de allernieuwste Microsoft technologie. We houden onze kennis op peil door [...]]]></description>
			<content:encoded><![CDATA[<p><span>We zijn al enkele jaren met een ISV/Software Solutions competency Certified Partner van Microsoft. Sinds 26 augustus 2009 zijn we, nadat we ook de Hosting Solutions competency binnensleepten, Gold Certified Partner.</span></p>
<p><span>Ik kan wel zeggen dat we behoorlijk Microsoft-minded zijn. We maken gebruik van de allernieuwste Microsoft technologie. We houden onze kennis op peil door uitgebreide Microsoft trainingstrajecten (zoals bijvoorbeeld MCPD Enterprise Application Developer) en we zorgen dat we op de hoogte blijven van de nieuwste ontwikkelingen door het bezoeken van  conferenties zoals de <a title="Microsoft DevDays" href="http://www.devdays.nl">Microsoft DevDays</a> en <a title="VSLive!" href="http://vslive.com/">VSLive</a>!. </span></p>
<p><span>Ik denk dat we daarmee de behaalde titel Microsoft Gold Certified Partner ook echt eer aan doen.<br />
</span></p>
<p><img src="../../algemeen/images/stories/Gold_Partner_rgb_96_6.jpg" alt="alt" width="266" height="60" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/gold-certified-partner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Donkere uithoeken van .NET</title>
		<link>http://www.driessen.nl/techtalk/donkere-uithoeken-van-net/</link>
		<comments>http://www.driessen.nl/techtalk/donkere-uithoeken-van-net/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 13:04:31 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=884</guid>
		<description><![CDATA[Voor het bouwen van een maatwerk web-portal voor een van onze klanten, kwam ik tot de ogenschijnlijke kleine uitdaging om een stuk java-script aan te maken in C# code. Piece of cake… Totdat er een new-line in de javascript kwam te staan, die de browser niet (zomaar) slikte.]]></description>
			<content:encoded><![CDATA[<p><strong>De uitdaging</strong><br />
Voor het bouwen van een maatwerk web-portal voor een van onze klanten, kwam ik tot de ogenschijnlijke kleine uitdaging om een stuk java-script aan te maken in C# code. Piece of cake… Totdat er een new-line in de java-script kwam te staan, die de browser niet (zomaar) slikte.</p>
<p>In het voorbeeld dat ik hieronder aanhaal gebruik ik het ‘OnClientClick’ event van een Button. Daar komt ter bevestiging een “Weet u het zeker” melding in te staan, alvorens de server-side event afgaat. Het OnClientClick event is eigenlijk een string property die gevuld mag worden met java-script. Voor een “Weet u het zeker” melding zou daar het volgende in kunnen komen te staan:</p>
<pre class="brush: jscript; light: true;">
return confirm('Weet u het zeker.');
</pre>
<p>Als in de confirmatietekst een new-line (“\r\n”) staat, dan gaat het niet zomaar lukken. De new-line moet ge-escaped worden naar:</p>
<pre class="brush: jscript; light: true;">
return confirm('Weet u het zeker.\\r\\nAlle data gaat verloren');
</pre>
<p><strong>De eerste oplossing</strong><br />
In eerste instantie zegt mijn intuïtie dat ASP.NET vast ergens wel een method heeft die dit voor me doet. Zo is er de HttpServerUtility.HtmlEncode, en de HttpServerUtility.UrlEncode. Deze zijn hier echter niet voor geschikt.</p>
<p>In een vorig project werd het opgelost door middel van enkele string-replace aanroepen. Zie onderstaand voorbeeld:</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Build a javascript string, to be used in a javascript.|
/// &lt;/summary&gt;
/// &lt;param&gt;The raw value to create a javascript string for.&lt;/param&gt;
/// &lt;returns&gt;The javascript string.&lt;/returns&gt;
private static string BuildJavascriptString(string rawValue)
{
    string escapedValue =
        rawValue
        .Replace(&quot;\\&quot;, &quot;\\\\&quot;)
        .Replace(&quot;\'&quot;, &quot;\\\'&quot;)
        .Replace(&quot;\&quot;&quot;, &quot;\\\&quot;&quot;)
        .Replace(&quot;\r&quot;, &quot;\\r&quot;)
        .Replace(&quot;\n&quot;, &quot;\\n&quot;);
    return string.Format(&quot;'{0}'&quot;, escapedValue);
}
</pre>
<p>Het gebruik van deze method ziet er als volgt uit:</p>
<pre class="brush: csharp;">
MyButton.OnClientClick = string.Format(&quot;return confirm({0});&quot;,
    BuildJavascriptString(confirmMessage));
</pre>
<p><strong>De echte oplossing</strong><br />
Het is en blijft echter vreemd dat zoveel string-replace aanroepen nodig zijn. Het zou wellicht op te lossen zijn met een regular expression, maar zelfs dan zit ik nog op het verkeerde spoor. En zijn nu alle varianten afgedekt? Blijft dit werken in de toekomst? Dit moet toch beter kunnen!</p>
<p>Ergens in een donkele hoek van alle Microsoft assemblies in de <a title=".NET Global Assembly Cache" href="http://en.wikipedia.org/wiki/Global_Assembly_Cache">GAC</a>, staat de Microsoft.JScript assembly. Laat deze nou toevallig een method hebben die lijkt op de java-script escape method. Door de method BuildJavascriptString te vervangen door onderstaande, weet ik zeker dat ik er nooit meer naar om hoef te kijken.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Build a javascript string, to be used in a javascript.
/// &lt;/summary&gt;
/// &lt;param&gt;The raw value to create a javascript string for.&lt;/param&gt;
/// &lt;returns&gt;The javascript string.&lt;/returns&gt;
private static string BuildJavascriptString(string rawValue)
{
    return string.Format(&quot;unescape('{0}')&quot;,
        Microsoft.JScript.GlobalObject.escape(rawValue));
}
</pre>
<p>Bovenstaande method is overigens in ons framework geadopteerd, met een uitbreiding voor booleans, integers, doubles en nullables:</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Convert a value, regardless of it's type, to be used in a javascript.
/// &lt;/summary&gt;
/// &lt;typeparam&gt;The type of the parameter.&lt;/typeparam&gt;
/// &lt;param&gt;The value to convert.&lt;/param&gt;
/// &lt;returns&gt;A javascript string which represents the specified value.&lt;/returns&gt;
public static string ConvertValueToJavaScript&lt;T&gt;(T value)
{
    string valueAsJavaScriptString = string.Empty;

    if (value == null)
        valueAsJavaScriptString = &quot;null&quot;;
    else if (typeof(T) == typeof(bool))
        valueAsJavaScriptString =
            value.ToString().ToLowerInvariant();
    else if (typeof(T) == typeof(string))
        valueAsJavaScriptString =
            &quot;unescape('{0}')&quot;.FormatInvariant(
            Microsoft.JScript.GlobalObject
                .escape(value as string));
    else
        valueAsJavaScriptString = Convert.ToString(value,
            CultureInfo.InvariantCulture);

    return valueAsJavaScriptString;
}
</pre>
<p><strong>Java-script syntax verifiëren met C#</strong><br />
In diezelfde donkere uithoek zit ook een java-script compiler, die run-time gebruikt kan worden om java-script te complileren en verifiëren. Hiermee is het mogelijk om een unit-test te schrijven, die alle java-script bestanden opzoekt in het project, en verifieërd. Maar voor deze vonst gaan de credits naar Mads Kristensen, zie zijn blog-post: <a title="Verify JavaScript syntax using C#" href="http://madskristensen.net/post/Verify-JavaScript-syntax-using-C.aspx">Verify JavaScript syntax using C#</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/donkere-uithoeken-van-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Win ppprrrijzen!</title>
		<link>http://www.driessen.nl/techtalk/win-ppprrrijzen/</link>
		<comments>http://www.driessen.nl/techtalk/win-ppprrrijzen/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 09:43:47 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[Algemeen]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=872</guid>
		<description><![CDATA[We zijn nu bezig met het opzetten van een sinterklaas actie voor onze payroll-krachten. Hierbij kunnen ze mooie prijzen winnen. Tenminste: doe mij ook maar een 5 daagse vliegreis voor 2 personen naar Barcelona. Als dat er voor mij niet in zou zitten zou ik toch ook wel blij zijn met een van de Bol.com cadeaubonnen. [...]]]></description>
			<content:encoded><![CDATA[<p>We zijn nu bezig met het opzetten van een sinterklaas actie voor onze payroll-krachten.<br />
Hierbij kunnen ze mooie prijzen winnen. Tenminste: doe mij ook maar een 5 daagse vliegreis voor 2 personen naar Barcelona. Als dat er voor mij niet in zou zitten zou ik toch ook wel blij zijn met een van de Bol.com cadeaubonnen.</p>
<p>Het is de bedoeling dat de prijzen via een soort van digitale tombola verloot worden onder de deelnemers, en aan mij de taak om dit op de Payroll Portal te implementeren.</p>
<p>Omdat ik me voor zou kunnen stellen dat er in de toekomst vaker van dit soort acties plaats zullen vinden, besloot ik geen wegwerp oplossing te maken, maar eentje die herbruikbaar is voor meerdere acties.</p>
<p>Deze actie is bedoeld voor payroll-krachten, maar wellicht is een volgende actie ook voor opdrachtgevers. Het systeem moet hier dus mee overweg kunnen. Verder moet de winkans variabel ingesteld kunnen worden zodat, afhankelijk van het aantal deelnemers, de prijzen zo evenredig mogelijk verdeeld worden. En niet geheel onbelangrijk moet door Driessen een lijst met winnaars en hun prijzen gemaakt kunnen worden.</p>
<p>Technisch gezien is het allemaal compact en eenvoudig. Ik werk met een deelnametabel waar payroll-krachten en opdrachtgevers die deelnemen in worden gelogd. Daarmee kan ik ook controleren of iemand al deelgenomen heeft. Verder hebben we natuurlijk een prijzentabel waar een omschrijving van de prijs in staat, of het de hoofdprijs is, of (en door wie) de prijs gewonnen is. Voor de overzichtslijst van winnaars heb ik een view tegen beide tabellen gebouwd die, naast de gewonnen prijs, ook de NAW gegevens van de deelnemer erbij pakt zodat er contact opgenomen kan worden.</p>
<p>De kansgenerator is alles behalve rocketsience, het is bijna lachwekkend hoe eenvoudig hij is, maar hij spreidt de kansen wel eerlijk. Dat is natuurlijk het belangrijkste.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Calculates if a prize is won using the winchance factor defined in the settings table
/// &lt;/summary&gt;
/// &lt;returns&gt;True if a prize is won&lt;/returns&gt;
private static bool CalculateIfPrizeIsWon(Core core)
{
    // Get the win chance factor from the settings table
    Settings&lt;EnmSettingsSectionsFldName, EnmSettingsKeysFldName&gt; settings =
        new Settings&lt;EnmSettingsSectionsFldName, EnmSettingsKeysFldName&gt;(core);
    int winChanceFactor =
        settings.GetValue(EnmSettingsSectionsFldName.V1oPayrollPortal,
        EnmSettingsKeysFldName.V10oCampaignWinChanceFactor,
       defaultWinChanceFactor);
    int participationCount =
        (int)core.DataHandler.ReadValue(“srvGetCampaignWinFactor”);
    // If the participant’s number is the winning number, a prize is won!
    bool prizeWon = (participationCount % winChanceFactor == 0);

    return prizeWon;
}
</pre>
<p>Behoorlijk recht toe recht aan dus.<br />
De settings class en core zijn onderdelen van ons framework die me een hoop werk uit handen nemen als het gaat om data access en het gebruiken van settings e.d.</p>
<p>Ik heb er inmiddels een paar uurtjes ingestoken in het totale mechaniek en het werkt goed. Omdat het een permanent karakter heeft heb ik gisteravond wat tijd besteed aan het bouwen van de nodige unittests voor het valideren van de deelnemers en het loggen van deelnames en gewonnen prijzen. Het werkt als een trein. Vanavond nog wat werk afronden aan de unittests. Daarna kan ik beginnen aan de UI. Daar is mijn DTP-Collega Hans al een paar mooie ontwerpen voor aan het maken.</p>
<p>Ik denk dat we lekker op tijd klaar zijn, zodat zaterdag de actie van start kan gaan. Ik ben benieuwd naar de reacties.</p>
<p><strong>[Edit]<br />
</strong>Bij de unittests die ik inmiddels voor de bovenstaande code heb geschreven bleek dat het principe wel klopt, maar dat het bijvoorbeeld goed kan zijn dat bij een winkans van 1 op 50, bij 5000 passes de ene keer niemand wint en de andere keer 300 mensen.  On the long run werkt het wel, maar voor het doel waar wij het voor willen gebruiken is het niet zeker genoeg dat de prijzen er ook daadwerkelijk uit gaan.</p>
<p>Om te kunnen garanderen de prijzen er uit gaan is de code nu aangepast naar een modulus berekening, wat overeenkomt met &#8216;iedere zoveelste beller wint&#8217;.</p>
<pre class="brush: csharp;">
/// &lt;summary&gt;
/// Calculates if a prize is won using the winchance factor defined in the settings table
/// &lt;/summary&gt;
/// &lt;returns&gt;True if a prize is won&lt;/returns&gt;
private static bool CalculateIfPrizeIsWon(Core core)
{
    // Get the win chance factor from the settings table
    Settings&lt;EnmSettingsSectionsFldName, EnmSettingsKeysFldName&gt; settings =
        new Settings&lt;EnmSettingsSectionsFldName, EnmSettingsKeysFldName&gt;(core);
    int winChanceFactor =
        settings.GetValue(EnmSettingsSectionsFldName.V1oPayrollPortal,
        EnmSettingsKeysFldName.V10oCampaignWinChanceFactor,
        defaultWinChanceFactor);
    int participationCount =
        (int)core.DataHandler.ReadValue(“srvGetCampaignWinFactor”);

    // If the participant’s number is the winning number, a prize is won!
    bool prizeWon = (participationCount % winChanceFactor == 0);

    return prizeWon;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/win-ppprrrijzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 / Team Foundation Server 2010</title>
		<link>http://www.driessen.nl/techtalk/visual-studio-2010-team-foundation-server-2010/</link>
		<comments>http://www.driessen.nl/techtalk/visual-studio-2010-team-foundation-server-2010/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 14:48:51 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=845</guid>
		<description><![CDATA[Om straks vlekkeloos over te kunnen stappen van Visual Studio 2008 en Team Foundation Server 2008 naar de 2010 versies van deze producten ben ik de afgelopen 2 weken bezig geweest met het inventariseren en testen met de Beta 2 release van beide producten. Visual Studio Ik moet zeggen dat het er allemaal erg goed [...]]]></description>
			<content:encoded><![CDATA[<p>Om straks vlekkeloos over te kunnen stappen van Visual Studio 2008 en Team Foundation Server 2008 naar de 2010 versies van deze producten ben ik de afgelopen 2 weken bezig geweest met het inventariseren en testen met de Beta 2 release van beide producten.</p>
<p><strong>Visual Studio</strong></p>
<p>Ik moet zeggen dat het er allemaal erg goed uit ziet. Ik had wel liever gezien dat ze tijd hadden gestoken in bijvoorbeeld een multithreaded compiler dan om de hele UI in WPF te gieten maar ach, het gaat vlot genoeg.</p>
<p>Buiten natuurlijk de language support voor C# 4.0 zijn er toch 3 nieuwe zaken die er voor mij echt uitspringen in deze versie van Visual Studio.</p>
<p><em>Run Impacted Tests</em><br />
Een hele welkome toevoeging op Visual Studio Team System (ik gebruik op dit moment beta 2 van de Ultimate edition) is de &#8216;Run Impacted Tests&#8217; feature. Ik heb er even mee geëxperimenteerd en het werkt fantastisch!<br />
Na een build bekijkt visual studio welke unittests (direct of indirect) geraakt worden door de code die gewijzigd is.  Vervolgens kun je ervoor kiezen om alleen de &#8216;Impacted Unittests&#8217; te draaien. Zo weet je zeker dat je geen gerelateerde unittests over het hoofd ziet, zonder alle unittests te hoeven draaien.</p>
<p><em>Intellisense</em><br />
De intellisense is ook wat intelligenter geworden door een contains filter op het gedeelte van je invoer te zetten. Een member hoeft dus niet langer te beginnen met je invoer.</p>
<p><img class="alignnone size-full wp-image-855" title="Intellisense2008" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/11/Intellisense2008.png" border="1" alt="Intellisense2008" width="190" height="190" /> �<br />
<em>Visual Studio 2008<br />
</em></p>
<p><img title="Intellisense2010" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/11/Intellisense2010.png" border="1" alt="Intellisense2010" width="266" height="84" /><br />
<em>Visual Studio 2010</em></p>
<p><em><br />
Code Analysis</em><br />
Er zijn bovendien een hoop nieuwe Code Analysis rules bijgekomen die voor ons een zeer welkome toevoeging zijn op de bestaande set rules en onze custom rules. Aan 90% van de nieuwe rules voldeden we al zonder het in de gaten te hebben. 5% van de nieuwe rules is bij ons eigenlijk niet van toepassing. De overige 5% van de nieuwe rules zijn wel in lijn met onze guidelines, dus die zouden feitelijk geen meldingen moeten geven. Maargoed, we zijn allemaal mensen dus er kan wel eens wat doorheen glipppen. Het aantal meldingen die hierdoor ontstaan is dusdanig beperkt dat we toch wel trots op onszelf kunnen zijn. Deze gaan we dus aanpakken en oplossen.</p>
<p> Ook het nieuwe &#8216;Ruleset&#8217; concept dat met Visual Studio 2010 geïntroduceerd wordt is zeer welkom. Dit helpt om zelf vaste sets te maken waar de code in projecten aan moet voldoen, zonder dit steeds op ieder nieuw project handmatig een voor een in te moeten stellen. Ook is een &#8216;minimium requirement&#8217; ruleset op te geven bij de Check-In policy van Team Foundation server, wat ook enkele onhebbelijkheden uit het verleden opheft.</p>
<p> </p>
<p><strong>Team Foundation Server</strong></p>
<p>Team Foundation server is eenvoudiger te beheren en biedt tools om aan Team Project inrichting te sleutelen zonder Visual Studio daarbij nodig te hebben.<br />
TFS Web Access zit nu geintegreerd in de Team Foundation installatie, maar als ik zie wat er allemaal voor &#8216;neat features&#8217; beschikbaar zijn gekomen direct op de Project Portal (zoals het beheren van de User Stories en Tasks) denk ik niet dat TFS Web Access nog nodig is. Team Foundation Server is nu toch wel volwassen te noemen.</p>
<p>Bij Driessen valt met de komst van Team Foundation Server 2010 het doek voor de Scrum project template van Conchango die we tot nu toe gebruikten voor project planning. De MSF for Agile project template dekt de lading om volgens het Scrum principe te werken ruimschoots.<br />
Ik verwacht dat ook onze product owners hier op korte termijn goed mee uit de voeten kunnen.</p>
<p><img class="alignnone size-full wp-image-846" title="capacity overview" src="http://www.driessen.nl/techtalk/wp-content/uploads/2009/11/capacity-overview.JPG" alt="capacity overview" width="628" height="347" /><br />
<em><strong>Sprint Planning met Excel in Team Foundation Server 2010. Even wennen maar het werkt toch wel erg lekker!</strong><br />
Een goed overzicht met de workload op iedere developer. Marco blijkt wat teveel hooi op zijn vork te hebben genomen, dus moet er  wat werk van Marco naar de andere developers gezet worden.</em></p>
<p> Al met al dus genoeg om naar uit te kijken. Ook de proefconversies van onze projecten die ik tot nu toe heb gedaan zien er goed uit. We wachten in spanning af tot Q1 2010.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/visual-studio-2010-team-foundation-server-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why software sucks&#8230;</title>
		<link>http://www.driessen.nl/techtalk/why-software-sucks/</link>
		<comments>http://www.driessen.nl/techtalk/why-software-sucks/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 11:00:51 +0000</pubDate>
		<dc:creator>Randy Keyers</dc:creator>
				<category><![CDATA[Algemeen]]></category>

		<guid isPermaLink="false">http://www.driessen.nl/techtalk/?p=827</guid>
		<description><![CDATA[Waarom doet software nooit wat ik wil?
Een veel gehoorde opmerking van computergebruikers wereldwijd.
Maar wat doe je eraan?]]></description>
			<content:encoded><![CDATA[<p>&#8230; and what you can do about it.</p>
<p>Dat is de titel van het <a title="Why Software Sucks" href="http://www.whysoftwaresucks.com/" target="_blank">boek</a> van <a title="David Platt" href="http://www.rollthunder.com/" target="_blank">David Platt</a> (Rolling Thunder Computing) dat ik tijdens ons jaarlijks bezoekje aan de <a title="Microsoft DevDays" href="http://www.devdays.nl/" target="_blank">Microsoft DevDays</a> in 2008, naar aanleiding van zijn gelijknamige <a title="Keynote" href="http://www.youtube.com/watch?v=OCVf1EfMkG8" target="_blank">keynote</a> heb aangeschaft.</p>
<p>Het boek zit, net als de keynote overigens, boordevol humor maar heeft wel een duidelijk doel: Maak software <a href="http://www.youtube.com/watch?v=OCVf1EfMkG8" target="_blank">gebruiksvriendelijk</a>!</p>
<p>Waar het over het algemeen fout dreigt te gaan bij het maken van software is dat wij, techneuten, bij voorkeur <a title="Techneuten willen veel controle" href="http://www.youtube.com/watch?v=JAOTTLQ0rlY&amp;feature=related" target="_blank">veel controle</a> hebben. We willen veel mogelijkheden en we willen veel informatie zien. Wij vinden het &#8216;cool&#8217; om al die gave features in actie te zien en te gebruiken.</p>
<p>Het verschil tussen ons en de eindgebruiker is het volgende: De eindgebruiker wil de software niet gebruiken. De eindgebruiker wil de software <em>gebruikt hebben</em>. Ze willen de software niet, ze willen wat de software voor ze doet.<br />
Je gaat geen boortjes kopen omdat je plezier beleeft aan het kopen van boortjes. Je wil geen boortjes, je wil <em>gaten</em>!</p>
<p>En dat is gelijk &#8216;Platt&#8217;s First, Last, and Only Law of User Interface Design:<br />
<strong>Know Thy User, For He Is Not Thee</strong></p>
<p>De software moet de gebruiker zo min mogelijk in de weg staan dat waar de gebruiker de software voor gebruikt, te doen.</p>
<p>Dit houdt dus in: geen onnodige handmatige acties, geen functionaliteit waar niemand (behalve jijzelf natuurlijk)  op zit te wachten, niet onnodig om bevestiging vragen, de gebruiker hoeft niet het &#8216;slachtoffer&#8217;  te worden van hoe de software intern werkt.</p>
<p>Een goed voorbeeld van hoe het niet moet is Microsoft Word:<br />
<strong>- De vraag &#8216;Wijzigingen opslaan?&#8217;</strong>  (Als ik dat niet wilde had ik toch undo gedaan?)<br />
In feite wordt de gebruiker opgezadeld met een vraag die ermee te maken heeft dat Word intern niet daadwerkelijk in het bestand op de harde schijf werkt, maar met een in-memory copy.</p>
<p><strong>-t/m versie 2003: Versleepbare menu&#8217;s.</strong> (Wie heeft daadwerkelijk het menu ooit versleept? Precies!)<br />
Iemand heeft op een dag bedacht dat het wel cool zou zijn als je de menu&#8217;s zou kunnen verslepen. Hij heeft dat idee voorgesteld en er is nog daadwerkelijk tijd in gestoken ook nog!<br />
Het enige dat het de eindgebruiker waarschijnlijk ooit heeft gebracht is dat hij perongeluk het menu versleepte toen hij erop wilde klikken en de rest van de middag bezig is geweest met het terugvinden en terugzetten van het menu.</p>
<p><strong>- Worst case scenario: Clippy!<br />
</strong>Ja&#8230; ach&#8230;</p>
<p>Wij houden sinds die keynote bij het maken van de software steeds de Why Software Sucks regels in het achterhoofd. Als een functionaliteit een te hoge &#8216;SuckFactor&#8217; heeft wordt het herzien en gebruiksvriendelijker gemaakt.</p>
<p>Hoewel de titel van het boek misschien wat gechargeerd is, heeft het voor Driessen toch zeker geen windeieren gelegd.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.driessen.nl/techtalk/why-software-sucks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
