<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.oosterkamp.nl/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Thomas Huijer</title><subtitle type="html" /><id>http://blogs.oosterkamp.nl/blogs/thomas/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.oosterkamp.nl/blogs/thomas/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.20917.1142">Community Server</generator><updated>2009-03-11T11:28:33Z</updated><entry><title>MVP C# in 2010</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2010/01/01/mvp-c-in-2010.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2010/01/01/mvp-c-in-2010.aspx</id><published>2010-01-01T21:16:46Z</published><updated>2010-01-01T21:16:46Z</updated><content type="html">&lt;p&gt;I was notified today by email that Microsoft awarded me the 2010 Microsoft MVP Award for C#. &lt;/p&gt;  &lt;p&gt;Just great! &lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=290" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author></entry><entry><title>MSTest: Cannot start more than one local run</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/12/22/mstest-cannot-start-more-than-one-local-run.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/12/22/mstest-cannot-start-more-than-one-local-run.aspx</id><published>2009-12-22T11:44:22Z</published><updated>2009-12-22T11:44:22Z</updated><content type="html">&lt;p&gt;When I run my tests in Visual Studio and one or more tests fail, I hit the Debug Selected Test so see what is going on. But at times, I get this error message:   &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/image_7F28321E.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.oosterkamp.nl/blogs/thomas/image_thumb_258A156A.png" width="244" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I don’t know what trigger this, but I had to restart Visual Studio to be able to Run or Debug tests again. After some searching on the net, I found out that there’s some sort of communication error between Visual Studio and the executable that actually runs the tests. So my resolution now is to kill that process and try again. The name of the executable to look for is VSTestHost.exe. Kill the process and you’re good to go…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/image_3E19B2BA.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.oosterkamp.nl/blogs/thomas/image_thumb_00C8D826.png" width="613" height="605" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=287" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author></entry><entry><title>Chad Hower’s story</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/12/08/chad-hower-s-story.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/12/08/chad-hower-s-story.aspx</id><published>2009-12-08T11:08:39Z</published><updated>2009-12-08T11:08:39Z</updated><content type="html">&lt;p&gt;A friend of mine, Chad Hower aka Kudzu, is in trouble. Chad has developed many internet-related components for Delphi, with Indy (being shipped with Delphi) being the most well known. Chad is also a speaker and writer and now works for Microsoft. He’s accused of kidnapping his son. Although there’s really strong evidence that it’s totally impossible for him to have done so. For example, how can you kidnap a son you have custody over? It’s a heartbreaking and quite unbelievable story. Watch the 5 minute at &lt;a href="http://www.freechad.org"&gt;www.freechad.org&lt;/a&gt; and spread the word!&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=282" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author></entry><entry><title>What’s new in WCF 4.0: brief summary</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/11/27/what-s-new-in-wcf-4-0-brief-summary.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/11/27/what-s-new-in-wcf-4-0-brief-summary.aspx</id><published>2009-11-27T10:59:25Z</published><updated>2009-11-27T10:59:25Z</updated><content type="html">&lt;p&gt;Below are the notes I took at the PDC about what’s new in WCF 4.0. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Default bindings can be created. If no bindings are specified for a service, these bindings are used.&lt;/li&gt;    &lt;li&gt;WCf supports configuration inheritance, so bindings could also be specified at various levels including the machine.config.&lt;/li&gt;    &lt;li&gt;Same applies to behaviors&lt;/li&gt;    &lt;li&gt;Default bindings/behaviors are the bindings/behaviors that have no name or name=”” in the configuration&lt;/li&gt;    &lt;li&gt;Configuration based activation allows services without *.svc files&lt;/li&gt;    &lt;li&gt;ETW (Event Tracing for Windows) is used by WCF&lt;/li&gt;    &lt;li&gt;AppFabric (FKA “Dublin”) stores that data in a Sql Server database for easy retrieval and querying. &lt;/li&gt;    &lt;li&gt;Routing is a completely new feature in WCF which allows service aggregation, protocol bridging and versioning.&lt;/li&gt;    &lt;li&gt;MessageFilters are used to determine destination(s).&lt;/li&gt;    &lt;li&gt;Routing table can be changed at runtime.&lt;/li&gt;    &lt;li&gt;Security can also be bridged.&lt;/li&gt;    &lt;li&gt;Alternate endpoints can be specified for fail-over-safety.&lt;/li&gt;    &lt;li&gt;Discovery is another new feature. It allows for location agility, dynamic / self-healing apps&lt;/li&gt;    &lt;li&gt;Discovery adheres to WS-Discovery standards&lt;/li&gt;    &lt;li&gt;Two mode for discovery: Ad-hoc and managed&lt;/li&gt;    &lt;li&gt;Ad-hoc discovery uses broadcasts&lt;/li&gt;    &lt;li&gt;Managed discovery is like UDDI with a Discovery Proxy.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=278" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Visual Studio 2010" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio+2010/default.aspx" /><category term="WCF" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/WCF/default.aspx" /></entry><entry><title>Compile-time checked region names in Prism</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/30/compile-time-checked-region-names-in-prism.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/30/compile-time-checked-region-names-in-prism.aspx</id><published>2009-10-30T19:28:25Z</published><updated>2009-10-30T19:28:25Z</updated><content type="html">&lt;p&gt;In a R&amp;amp;D project of mine, I’m using &lt;a href="http://compositewpf.codeplex.com/" target="_blank"&gt;Prism&lt;/a&gt; to create a composite WPF application. I can recommend anyone writing WPF or Silverlight applications to &lt;a href="http://channel9.msdn.com/shows/Continuum/Prismv2/" target="_blank"&gt;take a look&lt;/a&gt; at it if you’re unfamiliair with Prism.&lt;/p&gt;  &lt;p&gt;One thing I dislike about it though, is that is uses strings as region names. Meaning that there’s no compile-time checking if your region names in the Shell and the names you’re using when registering the views are actually aligned.&lt;/p&gt;  &lt;p&gt;Here’s a small trick to get compile-time checking for your region names in Prism:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Define an Enum containing the names of all known regions:      &lt;br /&gt;      &lt;br /&gt;      &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;       &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;enum&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ToolBar,&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MessageList,&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Details&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;
    &lt;/div&gt;

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;Define a &lt;a href="http://msdn.microsoft.com/en-us/library/ms747254.aspx" target="_blank"&gt;MarkupExtension&lt;/a&gt; for each value of the enum. This sounds like a lot of work, but with a base class like the one below, it’s no more than a few lines. 

    &lt;br /&gt;

    &lt;br /&gt;

    &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;
      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;BaseRegionExtension&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;MarkupExtension&lt;/span&gt;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt; _regionName;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; BaseRegionExtension(&lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt; regionName)&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _regionName = regionName;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; ProvideValue(&lt;span style="color:#2b91af;"&gt;IServiceProvider&lt;/span&gt; serviceProvider)&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; _regionName.ToString();&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt; Name&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;get&lt;/span&gt;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;return&lt;/span&gt; _regionName;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;set&lt;/span&gt;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _regionName = &lt;span style="color:blue;"&gt;value&lt;/span&gt;;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;
    &lt;/div&gt;

    &lt;br /&gt;

    &lt;br /&gt;Defining a MarkupExtension now becomes really simple: 

    &lt;br /&gt;

    &lt;br /&gt;

    &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;
      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ToolBarRegionExtension&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;BaseRegionExtension&lt;/span&gt;&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; ToolBarRegionExtension()&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : &lt;span style="color:blue;"&gt;base&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt;.ToolBar)&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;

      &lt;pre style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/pre&gt;
    &lt;/div&gt;

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;When registering your view, just call the ToString() of the enum value you want to use: 
    &lt;br /&gt;

    &lt;br /&gt;

    &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;
      &lt;pre style="margin:0px;"&gt;&amp;#160; _regionManager.RegisterViewWithRegion(&lt;span style="color:#2b91af;"&gt;RegionName&lt;/span&gt;.ToolBar.ToString(), &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;MainToolbarView&lt;/span&gt;));&lt;/pre&gt;
    &lt;/div&gt;

    &lt;br /&gt;&lt;/li&gt;

  &lt;li&gt;When defining regions in your Shell Xaml file, use the right MarkupExtension to reference a value in your enum: 
    &lt;br /&gt;

    &lt;br /&gt;&amp;lt;ToolBarPanel&amp;gt;

    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ItemsControl cal:RegionManager.RegionName=&amp;quot;{ui:ToolBarRegion}&amp;quot;&amp;gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ItemsControl&amp;gt;

    &lt;br /&gt; &amp;lt;/ToolBarPanel&amp;gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Have fun!&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=267" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Visual Studio 2008" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio+2008/default.aspx" /><category term="C#" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/C_2300_/default.aspx" /><category term="WPF" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/WPF/default.aspx" /><category term="Silverlight" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Silverlight/default.aspx" /></entry><entry><title>No regions when generating code</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/21/no-regions-when-generating-code.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/21/no-regions-when-generating-code.aspx</id><published>2009-10-21T17:58:14Z</published><updated>2009-10-21T17:58:14Z</updated><content type="html">&lt;p&gt;Just wished I had found this option about 5 years earlier….&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/image_0E092ADA.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.oosterkamp.nl/blogs/thomas/image_thumb_4496D61E.png" width="751" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=260" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Visual Studio" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio/default.aspx" /><category term="Visual Studio 2008" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio+2008/default.aspx" /><category term="Trick" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Trick/default.aspx" /></entry><entry><title>Programming with a guitar…</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/21/programming-with-a-guitar.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/10/21/programming-with-a-guitar.aspx</id><published>2009-10-21T13:51:02Z</published><updated>2009-10-21T13:51:02Z</updated><content type="html">&lt;p&gt;My long-time friend Mark Miller of &lt;a href="http://www.devexpress.com/" target="_blank"&gt;DevExpress&lt;/a&gt; has created another challenge for himself. A couple of years ago at the PDC he challenged developers to write some code together. The developer would have a full keyboard and mouse and a standard Visual Studio. Mark would have a keyboard too, but he had to program with chopsticks. His Visual Studio would have &lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/" target="_blank"&gt;CodeRush&lt;/a&gt; installed though. And yeah, Mark was faster…&lt;/p&gt;  &lt;p&gt;Well, this year Mark has an even greater challenge. He’s not going to use a keyboard at all. He’s going to use a guitar to write code. Yeah…a guitar…to write code…&lt;/p&gt;  &lt;p&gt;Watch Mark in action on his guitar: &lt;a title="http://tv.devexpress.com/GuitarCodeInterview.movie" href="http://tv.devexpress.com/GuitarCodeInterview.movie"&gt;http://tv.devexpress.com/GuitarCodeInterview.movie&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=259" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="fun" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/fun/default.aspx" /><category term="CodeRush" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/CodeRush/default.aspx" /></entry><entry><title>Great free tool to manage TFS WorkItems</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/09/29/great-free-tool-to-manage-tfs-workitems.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/09/29/great-free-tool-to-manage-tfs-workitems.aspx</id><published>2009-09-29T20:22:35Z</published><updated>2009-09-29T20:22:35Z</updated><content type="html">&lt;p&gt;Internally we use TFS to manage our own projects. And also at client-site we recommend using TFS for managing the application lifecycle. But Visual Studio Team Explorer is not as easy to use as I’d like it to be. Some things are just too hard. For example, try searching for a workitem that you know has a certain term in its Title or its Description. If you’re nodding your head now, you know what I’m talking about…&lt;/p&gt;  &lt;p&gt;Yesterday I came across a great tool from &lt;a href="http://www.telerik.com/" target="_blank"&gt;Telerik&lt;/a&gt;, a tool and component-vendor. They offer a FREE tool to manage TFS workitems. I recommend anyone using TFS to check out Telerik’s &lt;a href="http://www.telerik.com/products/tfsmanager-and-tfsdashboard/tfs-work-item-manager-features.aspx" target="_blank"&gt;TFS Work Item Manager&lt;/a&gt;. These features are advertised by Telerik. Needless to say I really like the last one…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Work Item grid filtering, grouping, and aggregation &lt;/li&gt;    &lt;li&gt;Area and Iteration filtering using single and multi select modes &lt;/li&gt;    &lt;li&gt;Filter query results using a tree of areas or iterations &lt;/li&gt;    &lt;li&gt;Unique Task board view of work items independent from any process template &lt;/li&gt;    &lt;li&gt;Print work item cards for the board in your room &lt;/li&gt;    &lt;li&gt;Iteration schedule &lt;/li&gt;    &lt;li&gt;Paste clipboard contents into a work item &lt;/li&gt;    &lt;li&gt;&amp;quot;New Query by example” saves your query for other team members &lt;/li&gt;    &lt;li&gt;Search the title and description of query results as you type&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=252" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Team Foundation Server" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Team+Foundation+Server/default.aspx" /><category term="TFS" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/TFS/default.aspx" /></entry><entry><title>Getting started with the Managed Extensibility Framework</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/22/getting-started-with-the-managed-extensibility-framework.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/22/getting-started-with-the-managed-extensibility-framework.aspx</id><published>2009-07-22T09:44:28Z</published><updated>2009-07-22T09:44:28Z</updated><content type="html">&lt;p&gt;I recently started exploring the new Visual Studio 2010 code editor. The great thing about the new editor is that it supports plugins. You’re able to write additions to the Visual Studio editor that formats the code in any way you like. Microsoft put up &lt;a href="http://editorsamples.codeplex.com/" target="_blank"&gt;some samples&lt;/a&gt; on CodePlex. Visual Studio uses the &lt;a href="http://www.codeplex.com/MEF" target="_blank"&gt;Managed Extensibility Framework&lt;/a&gt; (MEF) as the base for writing plugins. In this post I’d like to give you the basics of the Managed Extensibility Framework. After that, I’ll explore writing plugins for Visual Studio 2010.&lt;/p&gt; &lt;h4&gt;What problems does MEF solve?&lt;/h4&gt;MEF presents a simple solution for the runtime extensibility problem. Until now, any application that wanted to support a &lt;a href="http://en.wikipedia.org/wiki/Plugin"&gt;plugin model&lt;/a&gt; needed to create its own infrastructure from scratch. Those plugins would often be application-specific and could not be reused across multiple implementations.  &lt;ul&gt; &lt;li&gt;MEF provides a standard way for the host application to expose itself and consume external extensions. Extensions, by their nature, can be reused amongst different applications. However, an extension could still be implemented in a way that is application-specific. Extensions themselves can depend on one another and MEF will make sure they are wired together in the correct order (another thing you won&amp;#39;t have to worry about).  &lt;li&gt;MEF offers a set of discovery approaches for your application to locate and load available extensions.  &lt;li&gt;MEF allows tagging extensions with additional metadata which facilitates rich querying and filtering &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I copied the above text from the CodePlex MEF homepage. So basically, MEF is a framework that will let you write applications that support plugins very easily. MEF exposes classes, interfaces and services to easily let you write applications that support plugins.&lt;/p&gt; &lt;h4&gt;How does MEF work?&lt;/h4&gt; &lt;p&gt;Basically, this is how it works:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Some components (parts of your application, not System.ComponentModel.Component) expose capabilities (or services if you will). &lt;/li&gt; &lt;li&gt;Some components are dependent on other capabilities. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The goal of MEF is to glue the capabilities and dependencies together in your application. This allows for a very modular design. Exposing a capability in MEF is called an Export and a dependency on an other capability is called in Import.&lt;/p&gt; &lt;p&gt;Let’s take a look at how this works. Suppose we have an application that is able to write tracing messages to some log. One class is going to want to log a message, the other class is going to take care of that. Of course we don’t want having a direct reference from one class to the other, so we’ll use an interface. Just like you’d do in any well designed application. &lt;/p&gt; &lt;div style="font-family:courier new;background:white;color:black;font-size:10pt;"&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;interface&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ITraceMessageWriter&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;void&lt;/span&gt; WriteToLog( &lt;span style="color:blue;"&gt;string&lt;/span&gt; message );&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The next step is to create a class that implements this interface. This class will take care of actually logging the message:&lt;/p&gt;
&lt;div style="font-family:courier new;background:white;color:black;font-size:10pt;"&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color:#2b91af;"&gt;Export&lt;/span&gt;(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;ITraceMessageWriter&lt;/span&gt;))]&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;TraceMessageWriter&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;ITraceMessageWriter&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; WriteToLog( &lt;span style="color:blue;"&gt;string&lt;/span&gt; message )&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&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:green;"&gt;// write here to any data store (file/database)&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The only thing we added is an MEF attribute: Export. The argument of the Export attribute is the name of a contract. This can be a string or a Type. The purpose of this attribute is to link the right services to the right dependencies. So the next piece of code shows how to import a dependency:&lt;/p&gt;
&lt;div style="font-family:courier new;background:white;color:black;font-size:10pt;"&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Window1&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;Window&lt;/span&gt;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;span style="color:#2b91af;"&gt;Import&lt;/span&gt;]&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;protected&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;ITraceMessageWriter&lt;/span&gt; _writer;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;To make sure the _writer field actually gets a reference to an instance, we make sure MEF is going to ‘compose’ our object. To do this we call a method called Compose in the constructor. This method is one we’re defining later and will make sure that MEF fills our field. After that we can call methods on it. Note that there’s no guarantee that the field will actually be filled. In the case that there’s no Export (service/capability) found for this dependency, the field would still be null.&lt;/p&gt;
&lt;div style="font-family:courier new;background:white;color:black;font-size:10pt;"&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;public&lt;/span&gt; Window1()&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Compose();&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _writer.WriteToLog(&lt;span style="color:#a31515;"&gt;&amp;quot;Hello World&amp;quot;&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The Compose method does all the MEF magic. In this Compose method, we need to do a couple of things. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a CompositionContainer. This container is used when composing objects. &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Tell which object or objects needs composing (have their dependencies resolved).&lt;br /&gt;To do this, we need a CompositionBatch. An object which holds references to all objects that need to be composed.&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Tell which extensions/plugins need to be searched for Exports&lt;br /&gt;In MEF we need a Catalog for this. A Catalog defines the location of one or more extensions. In this example, I’ll be using an AssemblyCatalog. A Catalog referring to an already loaded assembly&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt; Fortunately, the resulting code is pretty easy:&lt;/p&gt;
&lt;div style="font-family:courier new;background:white;color:black;font-size:10pt;"&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; Compose()&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&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:#2b91af;"&gt;AssemblyCatalog&lt;/span&gt; catalog = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;AssemblyCatalog&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Assembly&lt;/span&gt;.GetExecutingAssembly());&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&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:#2b91af;"&gt;CompositionContainer&lt;/span&gt; _container = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CompositionContainer&lt;/span&gt;(catalog);&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&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:#2b91af;"&gt;CompositionBatch&lt;/span&gt; batch = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;CompositionBatch&lt;/span&gt;();&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; batch.AddPart(&lt;span style="color:blue;"&gt;this&lt;/span&gt;);&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _container.Compose(batch);&lt;/pre&gt;&lt;pre style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This is what we did: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We created a catalog for the current executing assembly&lt;/li&gt;
&lt;li&gt;We created a container to do the composition&lt;/li&gt;
&lt;li&gt;We added ourselves (since ‘this’ has the _writer field) to a CompositionBatch.&lt;/li&gt;
&lt;li&gt;We called Compose on the container passing in the CompositionBatch.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;That’s all. Our dependency is resolved by MEF and we’re ready to go. Admittedly, this is a extremely basic example. But remember that the dependencies we have may resolved from plugins that are loaded dynamically from a given directory. Or from registered plugins in a config file. &lt;br /&gt;&lt;/p&gt;
&lt;h4&gt;Isn’t MEF just another Dependency Injection framework?&lt;/h4&gt;
&lt;p&gt;No, not really. Although MEF does have some capabilities that DI-frameworks have, MEF’s focus is on composition. Some classes import services from other parts of the application, and some classes export services. The goal of MEF is to seamlessly glue those together. One other difference is that normally when using a DI-framework, you are aware of all the components used in the application. In MEF, this may not be the case. You load up some extensions or plugins or whatever you want to call them, and MEF discovers all the exports and imports of services in those extensions. Therefore, the actual functionality of the application is dependent of the extensions that are loaded at a given time. This is uncommon in ‘normal’ DI scenario’s. &lt;/p&gt;
&lt;h4&gt;Where and when is MEF available? &lt;/h4&gt;
&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Whenever you use the .NET Framework 4.0. As &lt;a href="http://msdn.microsoft.com/en-us/library/dd460648(VS.100).aspx" target="_blank"&gt;MSDN&lt;/a&gt; says: “MEF is an integral part of the .NET Framework 4 Beta 1, and is available wherever the .NET Framework is used. You can use MEF in your client applications, whether they use Windows Forms, WPF, or any other technology, or in server applications that use ASP.NET. In addition, there are plans to add MEF support for Silverlight applications.”&lt;/p&gt;
&lt;p&gt;So it’s going to be a part of the Framework 4.0. Until then, MEF can be downloaded from &lt;a href="http://www.codeplex.com/MEF" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;
&lt;h4&gt;Where do we go from here?&lt;/h4&gt;
&lt;p&gt;If you’re interested in MEF, I’d suggest you read at least &lt;a href="http://msdn.microsoft.com/en-us/library/dd460648(VS.100).aspx" target="_blank"&gt;this overview on MSDN&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/brada/archive/2009/07/20/simple-example-using-managed-extensibility-framework-in-silverlight.aspx" target="_blank"&gt;Brad Abrams Simple Example of MEF in Silverlight.&lt;/a&gt; That should give you a good headstart.&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=241" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author></entry><entry><title>First Dutch Surface User Group meeting</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/03/first-dutch-surface-user-group-meeting.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/03/first-dutch-surface-user-group-meeting.aspx</id><published>2009-07-03T08:14:11Z</published><updated>2009-07-03T08:14:11Z</updated><content type="html">&lt;p&gt;The Dutch Surface Usergroup had its first meeting on June 25th, 2009. See the video of that meeting &lt;a href="http://www.youtube.com/v/IlWIhv4JNpA" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The usergroup also has its own website located at &lt;a title="http://surface.dotned.nl/" href="http://surface.dotned.nl/"&gt;http://surface.dotned.nl/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=237" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author></entry><entry><title>Interview with Niklaus Wirth</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/02/interview-with-niklaus-wirth.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/07/02/interview-with-niklaus-wirth.aspx</id><published>2009-07-02T19:48:35Z</published><updated>2009-07-02T19:48:35Z</updated><content type="html">&lt;p&gt;Although I mostly develop in C#, I do have a long history developing in Delphi. I just stumbled upon an interview with Niklaus Wirth, the language designer of the original Pascal. Niklaus Wirth is a very interesting man. As a real academic, he has some views on today’s programming languages and programs that are non-conventional. I found it an interesting read. Oh, and the &lt;a href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html" target="_blank"&gt;history of languages described in this interview IS real by the way&lt;/a&gt;…&lt;/p&gt;  &lt;p&gt;Read the interview here: &lt;a title="http://www.simple-talk.com/opinion/geek-of-the-week/niklaus-wirth-geek-of-the-week/" href="http://www.simple-talk.com/opinion/geek-of-the-week/niklaus-wirth-geek-of-the-week/"&gt;http://www.simple-talk.com/opinion/geek-of-the-week/niklaus-wirth-geek-of-the-week/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=236" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="History" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/History/default.aspx" /></entry><entry><title>DevDays 2009 – part I</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/06/03/devdays-2009-part-i.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/06/03/devdays-2009-part-i.aspx</id><published>2009-06-03T10:41:14Z</published><updated>2009-06-03T10:41:14Z</updated><content type="html">&lt;p&gt;Last week, the DevDays were held in The Hague. I went there with all of my dev-collegues. Although we had seen a lot of stuff at the PDC back in november, there was plenty of new cool things to show. It was a pretty different experience from the other DevDays that I’d been to. First of all, we had no booth. That was a first. And, I had no talk to give. That was a first too. So, I could see any session I want, didn’t need to rush back to the booth in between sessions. Actually, I was much more enjoyable in general.&lt;/p&gt;  &lt;p&gt;I saw a couple of Silverlight 3 sessions. There are some cool new features coming like H.264 and AAC support, 720p+ smooth streaming, 3D graphics, pixel shader, easing functions (animation effects), a Bitmap API, control skinning, bitmap caching. Deep linking and the ability to run a Silverlight application out of the browser. &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx#whatsnew" target="_blank"&gt;Read more about Silverlight 3 here&lt;/a&gt;. I really liked Mike Taulty’s fast paced style, doing lots of demo’s fairly quickly. I also liked the fact that he kept his demo’s small and simple. As he said at the beginning of his talk that was intentional. I too believe that if you’re introducing people to new concepts or new features, keep the demo’s as simple as possible. You probably have a crowd of pretty decent developers (given the fact that it’s the DevDays), they’ll think of ways of using there features in their own apps.&lt;/p&gt;  &lt;p&gt;The ‘what’s new in WCF/WF 4.0’ session was good in terms of delivery. Aaron Skonnard did well, but … at the PDC I had been given the impression that WCF 4.0 had support for XAML-based services. And that proved to be only partially correct. It’s true if and only if you build a WF Service, that is a workflow exposed as a service. I was heavily (and visibly even: there was a customer who saw me shake my head and knew why) disappointed. It’d be so great if we had a XAML based WCF Service. That would alleviate us from the burden of config files. Although a lot of work has been done to simplify the config-files in WCF 4.0, having a XAML-based WCF Service would be even better. Way better I suppose. Because then we’d have compile-time checking of all the classes, interfaces used in the XAML file, just like WPF does. Anyway, the changes in WCF 4.0 are good, but I just expected more of it after what I heard at the PDC.&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=225" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="WCF" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/WCF/default.aspx" /><category term="DevDays" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/DevDays/default.aspx" /><category term="Silverlight" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Silverlight/default.aspx" /></entry><entry><title>At last: my pet complaint about Visual Studio has been fixed!</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/05/22/at-last-my-pet-complaint-about-visual-studio-has-been-fixed.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/05/22/at-last-my-pet-complaint-about-visual-studio-has-been-fixed.aspx</id><published>2009-05-22T09:58:00Z</published><updated>2009-05-22T09:58:00Z</updated><content type="html">&lt;p&gt;One of the things that has bugged me most about the Visual Studio IDE has been fixed in VS2010. In just about every training I teach, I mention this at least once. Actually, some people were complaining to me about complaining about it too much. ;-)&lt;/p&gt;  &lt;p&gt;The one I mean is the Project and Project item dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/image_7DF2DC16.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://blogs.oosterkamp.nl/blogs/thomas/image_thumb_08B2C41D.png" width="685" height="423" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The problem I had with this dialog are the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It’s not sorted by default &lt;/li&gt;    &lt;li&gt;You can’t sort it in any way &lt;/li&gt;    &lt;li&gt;You can’t filter it in any way &lt;/li&gt;    &lt;li&gt;The Dialog is not sizeable. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;This makes it so damn hard to choose the right template fast&lt;/strong&gt;. I don’t want to stare 5 seconds at this dialog just to find the template I need. So I was very delighted when I opened a new project in Visual Studio 2010 Beta 1. In Visual Studio 2010 the dialog looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/VS2008Dialog_66D90211.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="VS2008 Dialog" border="0" alt="VS2008 Dialog" src="http://blogs.oosterkamp.nl/blogs/thomas/VS2008Dialog_thumb_2F2647E1.png" width="705" height="442" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Yeah, baby! Now I can sort, filter and resize it. &lt;strong&gt;Whoohoo!&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=223" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Visual Studio 2010" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio+2010/default.aspx" /></entry><entry><title>History of programming languages…well, kind of…</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/05/08/history-of-programming-languages-well-kind-of.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/05/08/history-of-programming-languages-well-kind-of.aspx</id><published>2009-05-08T21:00:30Z</published><updated>2009-05-08T21:00:30Z</updated><content type="html">&lt;p&gt;I just read this article named “A Brief, Incomplete, and Mostly Wrong History of Programming Languages” by James Iry. I thought it was hilarious…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can read it here: &lt;a target="_blank" href="http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html"&gt;A Brief, Incomplete, and Mostly Wrong History of Programming Languages&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=219" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="fun" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/fun/default.aspx" /></entry><entry><title>WPF Debugger Visualizer</title><link rel="alternate" type="text/html" href="http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/03/11/wpf-debugger-visualizer.aspx" /><id>http://blogs.oosterkamp.nl/blogs/thomas/archive/2009/03/11/wpf-debugger-visualizer.aspx</id><published>2009-03-11T10:28:33Z</published><updated>2009-03-11T10:28:33Z</updated><content type="html">&lt;p&gt;While debugging a WPF I came across a great debugger visualizer: &lt;a href="http://www.codeproject.com/KB/WPF/WoodstockForWPF.aspx"&gt;WoodStock&lt;/a&gt;. WoodStock gives you a treeview of the current Visual Tree of a given element. So when you debug, you can select a framework element and show the tree like this:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.codeproject.com/KB/WPF/WoodstockForWPF/datatip5.png" alt="" /&gt; &lt;/p&gt;  &lt;p&gt;It then shows a tree similar to this tree:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://www.codeproject.com/KB/WPF/WoodstockForWPF/woodstock5.png" alt="" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Great stuff when debugging a WPF app!&lt;/p&gt;&lt;img src="http://blogs.oosterkamp.nl/aggbug.aspx?PostID=210" width="1" height="1"&gt;</content><author><name>Thomas</name><uri>http://blogs.oosterkamp.nl/members/Thomas.aspx</uri></author><category term="Visual Studio 2008" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/Visual+Studio+2008/default.aspx" /><category term="WPF" scheme="http://blogs.oosterkamp.nl/blogs/thomas/archive/tags/WPF/default.aspx" /></entry></feed>