<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>this.Pose() as Expert - C#</title>
    <link>http://chrison.net/</link>
    <description />
    <language>en-us</language>
    <copyright>Christoph Wille</copyright>
    <lastBuildDate>Wed, 08 Oct 2008 12:37:23 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>christoph.wille@gmail.com</managingEditor>
    <webMaster>christoph.wille@gmail.com</webMaster>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=87d85c15-403c-4c3d-9dfd-606b6f7b4f6a</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,87d85c15-403c-4c3d-9dfd-606b6f7b4f6a.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,87d85c15-403c-4c3d-9dfd-606b6f7b4f6a.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=87d85c15-403c-4c3d-9dfd-606b6f7b4f6a</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx">IndexOf</a> has
overloads that take <a href="http://msdn.microsoft.com/en-us/library/system.stringcomparison.aspx">StringComparison</a> which
allows me to specify how the comparison is done: culture (in)sensitive, case (in)
sensitive, et cetera. Why is it that <a href="http://msdn.microsoft.com/en-us/library/system.string.contains.aspx">Contains</a> doesn't
sport such an overload? IndexOf makes a LINQ query look so much more ugly than Contains...
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=87d85c15-403c-4c3d-9dfd-606b6f7b4f6a" />
      </body>
      <title>Why No String.Contains(string, StringComparison)?</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,87d85c15-403c-4c3d-9dfd-606b6f7b4f6a.aspx</guid>
      <link>http://chrison.net/WhyNoStringContainsstringStringComparison.aspx</link>
      <pubDate>Wed, 08 Oct 2008 12:37:23 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/system.string.indexof.aspx"&gt;IndexOf&lt;/a&gt; has
overloads that take &lt;a href="http://msdn.microsoft.com/en-us/library/system.stringcomparison.aspx"&gt;StringComparison&lt;/a&gt; which
allows me to specify how the comparison is done: culture (in)sensitive, case (in)
sensitive, et cetera. Why is it that &lt;a href="http://msdn.microsoft.com/en-us/library/system.string.contains.aspx"&gt;Contains&lt;/a&gt; doesn't
sport such an overload? IndexOf makes a LINQ query look so much more ugly than Contains...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=87d85c15-403c-4c3d-9dfd-606b6f7b4f6a" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,87d85c15-403c-4c3d-9dfd-606b6f7b4f6a.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=7dd40183-a18e-48fe-819c-6f5b7103feab</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,7dd40183-a18e-48fe-819c-6f5b7103feab.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,7dd40183-a18e-48fe-819c-6f5b7103feab.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=7dd40183-a18e-48fe-819c-6f5b7103feab</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I have created another (hopefully useful) checkin policy for Team Foundation Server
2008 - one that checks C# and VB.NET project files for COM references. The idea came
from a customer, where they require the developers to use "authorized" interop assemblies
instead of developers recreating those by simply adding a COM reference to each and
every project. And how do you prevent this? By having a TFS checkin policy in place.
</p>
        <p>
A COM reference looks like this in an MSBuild project file:
</p>
        <p>
          <font face="Courier New">  &lt;ItemGroup&gt;<br />
    &lt;COMReference Include="XcpControlLib"&gt;<br />
      &lt;Guid&gt;{283C8576-0726-4DBC-9609-3F855162009A}&lt;/Guid&gt;<br />
      &lt;VersionMajor&gt;1&lt;/VersionMajor&gt;<br />
      &lt;VersionMinor&gt;0&lt;/VersionMinor&gt;<br />
      &lt;Lcid&gt;0&lt;/Lcid&gt;<br />
      &lt;WrapperTool&gt;tlbimp&lt;/WrapperTool&gt;<br />
      &lt;Isolated&gt;False&lt;/Isolated&gt;<br />
    &lt;/COMReference&gt;<br />
  &lt;/ItemGroup&gt;</font>
        </p>
        <p>
Instead of searching for the string "&lt;COMReference" I decided to use the MSBuild
Engine API in my implementation:
</p>
        <pre>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">public</span>
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">override</span> PolicyFailure[]
Evaluate() { PendingChange[] checkedFiles <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> PendingCheckin.PendingChanges.CheckedPendingChanges;
ArrayList failures <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> ArrayList(); <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">foreach</span> (PendingChange
change <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">in</span> checkedFiles)
{ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span> extension <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Path.GetExtension(change.LocalItem); <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> ((0
== String.Compare(extension, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">".csproj"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>))
|| (0 == String.Compare(extension, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">".vbproj"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">false</span>)))
{ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (change.ChangeType
== ChangeType.Edit || change.ChangeType == ChangeType.Add) { <span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">//
this is a workaround because project.Load(fileName doesn't work in the same process
as VS</span> FileStream fs <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> File.OpenRead(change.LocalItem);
Project project <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> Project();
project.Load(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> StreamReader(fs),
ProjectLoadSettings.IgnoreMissingImports); <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">foreach</span> (BuildItemGroup
big <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">in</span> project.ItemGroups)
{ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">foreach</span> (BuildItem
bi <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">in</span> big)
{ <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> (0
== String.Compare(bi.Name, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"COMReference"</span>, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">true</span>))
{ PolicyFailure failure <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> PolicyFailure(String.Format(ComReferencePolicyStrings.activateMessage,
change.LocalItem), <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">this</span>);
failures.Add(failure); } } } } } } <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">return</span> (PolicyFailure[])failures.ToArray(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">typeof</span>(PolicyFailure));
}</span>
        </pre>
        <p>
At first, I tried to load directly from the .??proj files, but Visual Studio (after
thinking a bit about it it is pretty obvious...) doesn't like someone inside its process
play around with the MSBuild engine. That's why I resorted to loading it indirectly.
</p>
        <p>
For installation I have provided checkinpolicy.reg, however, you must adapt the path
to the .dll before importing it into the registry. 
</p>
        <p>
          <font face="Courier New">Windows Registry Editor Version 5.00</font>
        </p>
        <p>
          <font face="Courier New">[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation\SourceControl\Checkin
Policies]<br />
"ChrisOnNet.CheckinPolicies.ComReferencePolicy"="C:\\Work\\ChrisOnNet.CheckinPolicies.ComReferencePolicy.dll"</font>
        </p>
        <p>
Once registered, you can add it to your team projects:
</p>
        <p>
          <img src="http://chrison.net/content/binary/ComReferencesForbiddenPolicy.png" border="0" />
        </p>
        <p>
As usual I have included the source code (BSD licensed) in the download:
</p>
        <p>
          <a href="http://chrison.net/content/binary/ChrisOnNet.CheckinPolicies.ComReferencePolicy.zip">ChrisOnNet.CheckinPolicies.ComReferencePolicy.zip
(35.35 KB)</a>
        </p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=7dd40183-a18e-48fe-819c-6f5b7103feab" />
      </body>
      <title>COM References Forbidden Policy</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,7dd40183-a18e-48fe-819c-6f5b7103feab.aspx</guid>
      <link>http://chrison.net/COMReferencesForbiddenPolicy.aspx</link>
      <pubDate>Wed, 23 Jul 2008 13:04:16 GMT</pubDate>
      <description>&lt;p&gt;
I have created another (hopefully useful) checkin policy for Team Foundation Server
2008 - one that checks C# and VB.NET project files for COM references. The idea came
from a customer, where they require the developers to use "authorized" interop assemblies
instead of developers recreating those by simply adding a COM reference to each and
every project. And how do you prevent this? By having a TFS checkin policy in place.
&lt;/p&gt;
&lt;p&gt;
A COM reference looks like this in an MSBuild project file:
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;&amp;nbsp; &amp;lt;ItemGroup&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;COMReference Include="XcpControlLib"&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Guid&amp;gt;{283C8576-0726-4DBC-9609-3F855162009A}&amp;lt;/Guid&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;VersionMajor&amp;gt;1&amp;lt;/VersionMajor&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;VersionMinor&amp;gt;0&amp;lt;/VersionMinor&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Lcid&amp;gt;0&amp;lt;/Lcid&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;WrapperTool&amp;gt;tlbimp&amp;lt;/WrapperTool&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Isolated&amp;gt;False&amp;lt;/Isolated&amp;gt;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/COMReference&amp;gt;&lt;br&gt;
&amp;nbsp; &amp;lt;/ItemGroup&amp;gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Instead of searching for the string "&amp;lt;COMReference" I decided to use the MSBuild
Engine API in my implementation:
&lt;/p&gt;
&lt;pre&gt;&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;public&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;override&lt;/span&gt; PolicyFailure[]
Evaluate() { PendingChange[] checkedFiles &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; PendingCheckin.PendingChanges.CheckedPendingChanges;
ArrayList failures &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; ArrayList(); &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;foreach&lt;/span&gt; (PendingChange
change &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;in&lt;/span&gt; checkedFiles)
{ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; extension &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Path.GetExtension(change.LocalItem); &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; ((0
== String.Compare(extension, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;".csproj"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&lt;/span&gt;))
|| (0 == String.Compare(extension, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;".vbproj"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;false&lt;/span&gt;)))
{ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (change.ChangeType
== ChangeType.Edit || change.ChangeType == ChangeType.Add) { &lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;//
this is a workaround because project.Load(fileName doesn't work in the same process
as VS&lt;/span&gt; FileStream fs &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; File.OpenRead(change.LocalItem);
Project project &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; Project();
project.Load(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; StreamReader(fs),
ProjectLoadSettings.IgnoreMissingImports); &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;foreach&lt;/span&gt; (BuildItemGroup
big &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;in&lt;/span&gt; project.ItemGroups)
{ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;foreach&lt;/span&gt; (BuildItem
bi &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;in&lt;/span&gt; big)
{ &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; (0
== String.Compare(bi.Name, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"COMReference"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;true&lt;/span&gt;))
{ PolicyFailure failure &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; PolicyFailure(String.Format(ComReferencePolicyStrings.activateMessage,
change.LocalItem), &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;this&lt;/span&gt;);
failures.Add(failure); } } } } } } &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;return&lt;/span&gt; (PolicyFailure[])failures.ToArray(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;typeof&lt;/span&gt;(PolicyFailure));
}&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
At first, I tried to load directly from the .??proj files, but Visual Studio (after
thinking a bit about it it is pretty obvious...) doesn't like someone inside its process
play around with the MSBuild engine. That's why I resorted to loading it indirectly.
&lt;/p&gt;
&lt;p&gt;
For installation I have provided checkinpolicy.reg, however, you must adapt the path
to the .dll before importing it into the registry. 
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;Windows Registry Editor Version 5.00&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Courier New"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\TeamFoundation\SourceControl\Checkin
Policies]&lt;br&gt;
"ChrisOnNet.CheckinPolicies.ComReferencePolicy"="C:\\Work\\ChrisOnNet.CheckinPolicies.ComReferencePolicy.dll"&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Once registered, you can add it to your team projects:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://chrison.net/content/binary/ComReferencesForbiddenPolicy.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
As usual I have included the source code (BSD licensed) in the download:
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://chrison.net/content/binary/ChrisOnNet.CheckinPolicies.ComReferencePolicy.zip"&gt;ChrisOnNet.CheckinPolicies.ComReferencePolicy.zip
(35.35 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=7dd40183-a18e-48fe-819c-6f5b7103feab" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,7dd40183-a18e-48fe-819c-6f5b7103feab.aspx</comments>
      <category>C#</category>
      <category>Team System</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=a93ea6f3-32b6-4350-888d-94395ffcc9ed</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,a93ea6f3-32b6-4350-888d-94395ffcc9ed.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,a93ea6f3-32b6-4350-888d-94395ffcc9ed.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=a93ea6f3-32b6-4350-888d-94395ffcc9ed</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, I was asked whether there was a "real" difference between debug and release
builds of a C# project - other than the PDB files. I didn't know for sure, so I set
out on a search for more information, which turned up the blog entry <a href="http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx">debug
vs. release in C#. </a>The interesting part is the first comment by <a href="http://blogs.msdn.com/joshwil/">Josh
Williams</a>: "...the /debug[+|-] switch controls JIT optimizations &lt;snip /&gt;.
Disabling JIT optimizations is very useful for debugging purposes but will very much
affect the runtime perf of an app as much of the optmization of your code is done
by the JIT, not CSC..."
</p>
        <p>
Now that definitely turns shipping a debug build to customers into a non-starter.
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=a93ea6f3-32b6-4350-888d-94395ffcc9ed" />
      </body>
      <title>What does the /debug+ switch really do?</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,a93ea6f3-32b6-4350-888d-94395ffcc9ed.aspx</guid>
      <link>http://chrison.net/WhatDoesTheDebugSwitchReallyDo.aspx</link>
      <pubDate>Tue, 10 Oct 2006 18:28:09 GMT</pubDate>
      <description>&lt;p&gt;
Today, I was asked whether there was a "real" difference between debug and release
builds of a C# project - other than the PDB files. I didn't know for sure, so I set
out on a search for more information, which turned up the blog entry &lt;a href="http://blogs.msdn.com/jaybaz_ms/archive/2004/06/28/168314.aspx"&gt;debug
vs. release in C#. &lt;/a&gt;The interesting part is the first comment by &lt;a href="http://blogs.msdn.com/joshwil/"&gt;Josh
Williams&lt;/a&gt;: "...the /debug[+|-] switch controls JIT optimizations &amp;lt;snip /&amp;gt;.
Disabling JIT optimizations is very useful for debugging purposes but will very much
affect the runtime perf of an app as much of the optmization of your code is done
by the JIT, not CSC..."
&lt;/p&gt;
&lt;p&gt;
Now that definitely turns shipping a debug build to customers into a non-starter.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=a93ea6f3-32b6-4350-888d-94395ffcc9ed" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,a93ea6f3-32b6-4350-888d-94395ffcc9ed.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=964f5235-28ee-444f-b61e-17ac54251529</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,964f5235-28ee-444f-b61e-17ac54251529.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,964f5235-28ee-444f-b61e-17ac54251529.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=964f5235-28ee-444f-b61e-17ac54251529</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Beta 1 of SharpDevelop2 2.1 is <a href="http://www.icsharpcode.net/OpenSource/SD/Download/#SharpDevelop221">available
for download</a>. While I was putting together the <a href="http://community.sharpdevelop.net/forums/thread/11710.aspx">annoucement
for v2.1</a> yesterday, I realized that for a point release, we really managed to
put in a lot of new cool features:
</p>
        <ul>
          <li>
            <a href="http://laputa.sharpdevelop.net/FxCopSupportInSharpDevelop221Serralongue.aspx">FxCop
Support</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/06/20/UsingTheComponentInspector.aspx">Component
Inspector</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/09/17/WixIntegration.aspx">WiX
Support</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/09/09/IncrementalSearchInSharpDevelop21.aspx">Incremental
Search</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/davidalpert/archive/2006/09/18/Code-Navigation-History.aspx">Code
Navigation History</a>
          </li>
          <li>
            <a href="http://laputa.sharpdevelop.net/AnnouncingSupportForListDataSourcesInSharpReport.aspx">List
Data Sources in SharpReport</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/08/05/TestingXPathQueriesInSharpDevelop.aspx">XPath
Queries</a>
          </li>
          <li>
            <a href="http://laputa.sharpdevelop.net/CodeCompletionSupportForNET1011AndCompactFramework20.aspx">Code
Completion for Different Frameworks</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/08/09/GoToXmlSchemaDefinition.aspx">GoTo
XML Schema Definition</a>
          </li>
          <li>
            <a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/02/18/TargetingDifferentFrameworksWithVBNet.aspx">Targeting
Different Frameworks</a>
          </li>
          <li>
            <a href="http://laputa.sharpdevelop.net/AnnouncingSharpDevelopForApplicationsSDA.aspx">Hosting
of SharpDevelop in 3rd Party Applications</a>
          </li>
        </ul>
        <p>
A couple of WOW features (for me, at least): Not only can you compile an application
for different versions of .NET, you also get version-specific code completion support.
Another cool one is that you can host SharpDevelop in your application, providing
your application a "macro editor" (on steroids I might add) with full .NET support.
And to pick a third, code analysis rounds out our professional offering in addition
to code coverage as well as unit testing.
</p>
        <p>
Two features did not make it for the Beta 1 announcement as they don't yet cover all
the scenarios we are hoping for: integrated Subversion support (yeah!) and targetting
the Compact Framework for Windows CE devices. Those slipped silently into this release.
</p>
        <p>
As you can see, SharpDevelop is ever growing and the developers working on it can
be rightly proud of their achievements!
</p>
        <p>
Finally, a kind of "call to action": let us know what you think! Not only in <a href="http://community.sharpdevelop.net/forums/">our
forums</a>, but also in your blogs, communities, et cetera. We need your feedback
regarding feature set, stability, and much more.
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=964f5235-28ee-444f-b61e-17ac54251529" />
      </body>
      <title>SharpDevelop2 2.1 Beta 1</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,964f5235-28ee-444f-b61e-17ac54251529.aspx</guid>
      <link>http://chrison.net/SharpDevelop221Beta1.aspx</link>
      <pubDate>Tue, 19 Sep 2006 10:10:55 GMT</pubDate>
      <description>&lt;p&gt;
Beta 1 of SharpDevelop2 2.1 is &lt;a href="http://www.icsharpcode.net/OpenSource/SD/Download/#SharpDevelop221"&gt;available
for download&lt;/a&gt;. While I was putting together the &lt;a href="http://community.sharpdevelop.net/forums/thread/11710.aspx"&gt;annoucement
for v2.1&lt;/a&gt; yesterday, I realized that for a point release, we really managed to
put in a lot of new cool features:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://laputa.sharpdevelop.net/FxCopSupportInSharpDevelop221Serralongue.aspx"&gt;FxCop
Support&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/06/20/UsingTheComponentInspector.aspx"&gt;Component
Inspector&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/09/17/WixIntegration.aspx"&gt;WiX
Support&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/09/09/IncrementalSearchInSharpDevelop21.aspx"&gt;Incremental
Search&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/davidalpert/archive/2006/09/18/Code-Navigation-History.aspx"&gt;Code
Navigation History&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://laputa.sharpdevelop.net/AnnouncingSupportForListDataSourcesInSharpReport.aspx"&gt;List
Data Sources in SharpReport&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/08/05/TestingXPathQueriesInSharpDevelop.aspx"&gt;XPath
Queries&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://laputa.sharpdevelop.net/CodeCompletionSupportForNET1011AndCompactFramework20.aspx"&gt;Code
Completion for Different Frameworks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/08/09/GoToXmlSchemaDefinition.aspx"&gt;GoTo
XML Schema Definition&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://community.sharpdevelop.net/blogs/mattward/archive/2006/02/18/TargetingDifferentFrameworksWithVBNet.aspx"&gt;Targeting
Different Frameworks&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://laputa.sharpdevelop.net/AnnouncingSharpDevelopForApplicationsSDA.aspx"&gt;Hosting
of SharpDevelop in 3rd Party Applications&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
A couple of WOW features (for me, at least): Not only can you compile an application
for different versions of .NET, you also get version-specific code completion support.
Another cool one is that you can host SharpDevelop in your application, providing
your application a "macro editor" (on steroids I might add)&amp;nbsp;with full .NET support.
And to pick a third, code analysis rounds out our professional offering in addition
to code coverage as well as unit testing.
&lt;/p&gt;
&lt;p&gt;
Two features did not make it for the Beta 1 announcement as they don't yet cover all
the scenarios we are hoping for: integrated Subversion support (yeah!) and targetting
the Compact Framework for Windows CE devices. Those slipped silently into this release.
&lt;/p&gt;
&lt;p&gt;
As you can see, SharpDevelop is ever growing and the developers working on it can
be rightly proud of their achievements!
&lt;/p&gt;
&lt;p&gt;
Finally,&amp;nbsp;a kind of "call to action": let us know what you think! Not only in &lt;a href="http://community.sharpdevelop.net/forums/"&gt;our
forums&lt;/a&gt;, but also in your blogs, communities, et cetera. We need your feedback
regarding feature set, stability, and much more.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=964f5235-28ee-444f-b61e-17ac54251529" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,964f5235-28ee-444f-b61e-17ac54251529.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>C#</category>
      <category>Cool Download</category>
      <category>Subversion</category>
      <category>this</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=161538e8-a8fc-4d5f-a0ff-d883133e7a75</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,161538e8-a8fc-4d5f-a0ff-d883133e7a75.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,161538e8-a8fc-4d5f-a0ff-d883133e7a75.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=161538e8-a8fc-4d5f-a0ff-d883133e7a75</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.DanielGrunwald">Daniel</a> published
the <a href="http://www.codeproject.com/csharp/ICSharpCodeCore.asp">first article</a> in
a series about using the <a href="http://www.icsharpcode.net/OpenSource/SD/">SharpDevelop</a> core
to build your applications. Those of you tracking the progress of SharpDevelop through
the years might be wondering "Aren't there restrictions because SharpDevelop is released
under the GPL?" Well, version 1.x is GPL-licensed. But for version 2.0, we <a href="http://laputa.sharpdevelop.net/SharpDevelop2LicenseChangedToLGPL.aspx">changed
the license to LGPL</a>. Thus, you can use all of the SharpDevelop2 assemblies in
your applications regardless of license.
</p>
        <p>
Aside from the articles, there are videos showing <a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.AddInWritingTutorials">how
to write addins for SharpDevelop2</a>. This will get you started with plugging in
functionality with SharpDevelop2 via addins (again, your choice of license now!).
Be sure to always get the latest bits either <a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.UsingTheRepository">via
our source control server</a>, or if you prefer from our <a href="http://build.sharpdevelop.net/">build
server</a>.
</p>
        <p>
Please note that SharpDevelop2 requires .NET Framework 2.0, and, the usual disclaimer,
that it is a work in progress. This, however, does not apply to the core - it has
been in development for four years+, and as such is very stable and proven. After
all, it is the basis for a 300 kLOC C# application!
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=161538e8-a8fc-4d5f-a0ff-d883133e7a75" />
      </body>
      <title>Article: Building Applications with the SharpDevelop Core</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,161538e8-a8fc-4d5f-a0ff-d883133e7a75.aspx</guid>
      <link>http://chrison.net/ArticleBuildingApplicationsWithTheSharpDevelopCore.aspx</link>
      <pubDate>Wed, 04 Jan 2006 10:41:41 GMT</pubDate>
      <description>&lt;p&gt;
&lt;a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.DanielGrunwald"&gt;Daniel&lt;/a&gt; published
the &lt;a href="http://www.codeproject.com/csharp/ICSharpCodeCore.asp"&gt;first article&lt;/a&gt; in
a series about using the &lt;a href="http://www.icsharpcode.net/OpenSource/SD/"&gt;SharpDevelop&lt;/a&gt; core
to build your applications. Those of you tracking the progress of SharpDevelop through
the years might be wondering "Aren't there restrictions because SharpDevelop is released
under the GPL?" Well, version 1.x is GPL-licensed. But for version 2.0, we &lt;a href="http://laputa.sharpdevelop.net/SharpDevelop2LicenseChangedToLGPL.aspx"&gt;changed
the license to LGPL&lt;/a&gt;. Thus, you can use all of the SharpDevelop2 assemblies in
your applications regardless of license.
&lt;/p&gt;
&lt;p&gt;
Aside from the articles, there are videos showing &lt;a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.AddInWritingTutorials"&gt;how
to write addins for SharpDevelop2&lt;/a&gt;. This will get you started with plugging in
functionality with SharpDevelop2 via addins (again, your choice of license now!).
Be sure to always get the latest bits either &lt;a href="http://wiki.sharpdevelop.net/default.aspx/SharpDevelop.UsingTheRepository"&gt;via
our source control server&lt;/a&gt;, or if you prefer from our &lt;a href="http://build.sharpdevelop.net/"&gt;build
server&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Please note that SharpDevelop2 requires .NET Framework 2.0, and, the usual disclaimer,
that it is a work in progress. This, however, does not apply to the core - it has
been in development for four years+, and as such is very stable and proven. After
all, it is the basis for a 300 kLOC C# application!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=161538e8-a8fc-4d5f-a0ff-d883133e7a75" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,161538e8-a8fc-4d5f-a0ff-d883133e7a75.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>this</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=ef3e6b4b-9ac4-455b-b784-837646d5e8b4</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,ef3e6b4b-9ac4-455b-b784-837646d5e8b4.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,ef3e6b4b-9ac4-455b-b784-837646d5e8b4.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=ef3e6b4b-9ac4-455b-b784-837646d5e8b4</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today, a member of our <a href="http://www.dotnetgerman.com/">German .NET community</a> asked
if it is possible to programmatically query the Google page rank. He had seen it done
in PHP (<a href="http://www.googlecommunity.com/scripts/pagerank-source.phps">here</a> on
the <a href="http://www.googlecommunity.com/">Google Community</a> site), but didn't
have time / PHP skills to translate it. All I found on a rather shallow search was <a href="http://www.bolinfest.com/pullrank/">PullRank</a>,
which I'd describe as non-fit for server use.
</p>
        <p>
So I decided to set out to convert the PHP sample. Being PHP-challenged myself, I
decided to give the <a href="http://msdn.microsoft.com/asp.net/using/migrating/phpmig/phpmigasst.aspx">PHP
to ASP.NET Migration Assistant</a> a shot. Whoha! That converted code is the most
convoluted contraption to be called code I have seen - ever. I tried to get it to
run, but failed because the conversion left me with some loose ends.
</p>
        <p>
Instead of giving in, I contacted <a href="http://www.hauser-wenz.de/s9y/">Christian
Wenz</a> to lend me a hand because he has some PHP experience. He thankfully hosted
an "annotated" version of the PHP script so I could look at the output of
various stages to test my solution with known-good values. That was most helpful.
</p>
        <p>
Instead of doing a Web site demo application with everything intertwined, I split
up the project into two - <strong>GPRDotNet</strong> being a DLL assembly project
you can reference in any type of .NET application (Windows Forms, Web Forms, you name
it), as well as a simple Web frontend to demo the usage: <strong>DemoSite</strong>.
</p>
        <p>
          <img src="http://chrison.net/content/binary/GooglePageRankInDotNet20.png" border="0" />
        </p>
        <p>
Querying the page rank is really simple - the following snippet is the code
from the "Check PageRank" button event handler:
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">protected</span>
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">void</span> doCheckPageRank_Click(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">object</span> sender,
EventArgs e)<br />
{<br />
  GooglePageRank pr <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">new</span> GooglePageRank();<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">  </font>string</span> url <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> webSiteUrl.Text;<br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">  </font>try</span><br />
  {<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">    </font>string</span> rank <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> pr.GetRank(url);<br />
    thePageRank.Text <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> rank;<br />
  }<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">  </font>catch</span> (Exception
ex)<br />
  {<br /><span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">    </font>//
this is rather chatty (telling the end user everything *IS* a bad idea)</span><br />
    thePageRank.Text <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Requesting
the page rank failed. Reason: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> ex.ToString();<br />
  }<br />
}</span>
        </p>
        <p>
I want to emphasize that the code for the GooglePageRank class is a rather quick &amp;
dirty port of the PHP code and that it does not contain the necessary error handling
you would expect for a server-side library. After all, it is just a proof of concept
for our community.
</p>
        <p>
Finally, here is the source code: <a href="http://chrison.net/content/binary/PageRank.zip">PageRank.zip
(26.89 KB)</a></p>
        <p>
If you find errors, please leave a blog comment so others know about improvements.
Thanks!
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=ef3e6b4b-9ac4-455b-b784-837646d5e8b4" />
      </body>
      <title>Google PageRank as a .NET Assembly</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,ef3e6b4b-9ac4-455b-b784-837646d5e8b4.aspx</guid>
      <link>http://chrison.net/GooglePageRankAsANETAssembly.aspx</link>
      <pubDate>Mon, 05 Dec 2005 18:03:00 GMT</pubDate>
      <description>&lt;p&gt;
Today, a member of our &lt;a href="http://www.dotnetgerman.com/"&gt;German .NET community&lt;/a&gt; asked
if it is possible to programmatically query the Google page rank. He had seen it done
in PHP (&lt;a href="http://www.googlecommunity.com/scripts/pagerank-source.phps"&gt;here&lt;/a&gt;&amp;nbsp;on
the &lt;a href="http://www.googlecommunity.com/"&gt;Google Community&lt;/a&gt; site), but didn't
have time / PHP skills to translate it. All I found on a rather shallow search was &lt;a href="http://www.bolinfest.com/pullrank/"&gt;PullRank&lt;/a&gt;,
which I'd describe as&amp;nbsp;non-fit for server use.
&lt;/p&gt;
&lt;p&gt;
So I decided to set out to convert the PHP sample. Being PHP-challenged myself, I
decided to give the &lt;a href="http://msdn.microsoft.com/asp.net/using/migrating/phpmig/phpmigasst.aspx"&gt;PHP
to ASP.NET Migration Assistant&lt;/a&gt; a shot. Whoha! That converted code is the most
convoluted contraption to be called code I have seen - ever. I tried to get it to
run, but failed because the conversion left me with some loose ends.
&lt;/p&gt;
&lt;p&gt;
Instead of giving in, I contacted &lt;a href="http://www.hauser-wenz.de/s9y/"&gt;Christian
Wenz&lt;/a&gt; to lend me a hand because he has some PHP experience. He thankfully hosted
an "annotated"&amp;nbsp;version of the PHP script so I could look at the output&amp;nbsp;of
various stages to test my solution with known-good values. That was most helpful.
&lt;/p&gt;
&lt;p&gt;
Instead of doing a Web site demo application with everything intertwined, I split
up the project into two - &lt;strong&gt;GPRDotNet&lt;/strong&gt; being a DLL assembly project
you can reference in any type of .NET application (Windows Forms, Web Forms, you name
it), as well as a simple Web frontend to demo the usage: &lt;strong&gt;DemoSite&lt;/strong&gt;.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://chrison.net/content/binary/GooglePageRankInDotNet20.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Querying the page rank is really simple -&amp;nbsp;the following snippet&amp;nbsp;is the code
from the "Check PageRank" button event handler:
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;protected&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;void&lt;/span&gt; doCheckPageRank_Click(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;object&lt;/span&gt; sender,
EventArgs e)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp; GooglePageRank pr &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; GooglePageRank();&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#000000&gt;&amp;nbsp; &lt;/font&gt;string&lt;/span&gt; url &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; webSiteUrl.Text;&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#000000&gt;&amp;nbsp; &lt;/font&gt;try&lt;/span&gt;
&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;string&lt;/span&gt; rank &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; pr.GetRank(url);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; thePageRank.Text &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; rank;&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#000000&gt;&amp;nbsp; &lt;/font&gt;catch&lt;/span&gt; (Exception
ex)&lt;br&gt;
&amp;nbsp; {&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: green; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font color=#000000&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;//
this is rather chatty (telling the end user everything *IS* a bad idea)&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; thePageRank.Text &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Requesting
the page rank failed. Reason: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; ex.ToString();&lt;br&gt;
&amp;nbsp; }&lt;br&gt;
}&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
I want to emphasize that the code for the GooglePageRank class is a rather quick &amp;amp;
dirty port of the PHP code and&amp;nbsp;that it does not contain the necessary error handling
you would expect for a server-side library. After all, it is just a proof of concept
for our community.
&lt;/p&gt;
&lt;p&gt;
Finally, here is the source code: &lt;a href="http://chrison.net/content/binary/PageRank.zip"&gt;PageRank.zip
(26.89 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
If you find errors, please leave a blog comment so others know about improvements.
Thanks!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=ef3e6b4b-9ac4-455b-b784-837646d5e8b4" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,ef3e6b4b-9ac4-455b-b784-837646d5e8b4.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>ASP.NET</category>
      <category>C#</category>
      <category>Community</category>
      <category>this</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=4b54ef65-b215-4142-96c4-3cea48e04590</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,4b54ef65-b215-4142-96c4-3cea48e04590.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,4b54ef65-b215-4142-96c4-3cea48e04590.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4b54ef65-b215-4142-96c4-3cea48e04590</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Lunch breaks always tend to end up being cut short by stupid ideas, today by my insistence
to use <strong>My</strong> (from Visual Basic) in C#. To get up to speed on <strong>My</strong>,
I suggest looking at <a href="http://msdn2.microsoft.com/en-us/library/5btzf5yk">Development
with My</a> in the MSDN library. The class diagram graphic will come in handy later
on.
</p>
        <p>
Step 1 is to reference the Microsoft.VisualBasic.dll assembly:
</p>
        <p>
          <img src="http://chrison.net/content/binary/myincsharp.png" border="0" />
        </p>
        <p>
Next, we need a couple of includes:
</p>
        <pre>using Microsoft.VisualBasic.ApplicationServices;<br />
using Microsoft.VisualBasic.CompilerServices;<br />
using Microsoft.VisualBasic.Devices;<br />
using Microsoft.VisualBasic.FileIO;<br />
using Microsoft.VisualBasic.Logging; </pre>
        <p>
Why those and not Microsoft.VisualBasic.MyServices? Well, My is just an amalgamation
of various classes that live in those namespaces: Computer, Audio, ... All the stuff
you saw in the class diagram in the article <a href="http://msdn2.microsoft.com/en-us/library/5btzf5yk">Development
with My</a>.
</p>
        <p>
Basically, you now have the functionality provided by My, but not as nicely grouped
with a My object as in Visual Basic. To achieve this, have a look at the article <a href="http://www.csharphelp.com/archives3/archive594.html">C#
My Services</a> by Gildeoni Santos, it sports a download for wrapping My. As the code
(at the time of this writing) is based on Beta 1 bits, you will have to put in the
correct namespace references and pull the My prefix on all class names. 
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=4b54ef65-b215-4142-96c4-3cea48e04590" />
      </body>
      <title>My in C#</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,4b54ef65-b215-4142-96c4-3cea48e04590.aspx</guid>
      <link>http://chrison.net/MyInC.aspx</link>
      <pubDate>Wed, 16 Nov 2005 12:10:40 GMT</pubDate>
      <description>&lt;p&gt;
Lunch breaks always tend to end up being cut short by stupid ideas, today by my insistence
to use &lt;strong&gt;My&lt;/strong&gt; (from Visual Basic) in C#. To get up to speed on &lt;strong&gt;My&lt;/strong&gt;,
I suggest looking at &lt;a href="http://msdn2.microsoft.com/en-us/library/5btzf5yk"&gt;Development
with My&lt;/a&gt; in the MSDN library. The class diagram graphic will come in handy later
on.
&lt;/p&gt;
&lt;p&gt;
Step 1 is to reference the&amp;nbsp;Microsoft.VisualBasic.dll assembly:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://chrison.net/content/binary/myincsharp.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Next, we need a couple of includes:
&lt;/p&gt;
&lt;pre&gt;using Microsoft.VisualBasic.ApplicationServices;&lt;br&gt;
using Microsoft.VisualBasic.CompilerServices;&lt;br&gt;
using Microsoft.VisualBasic.Devices;&lt;br&gt;
using Microsoft.VisualBasic.FileIO;&lt;br&gt;
using Microsoft.VisualBasic.Logging; &lt;/pre&gt;
&lt;p&gt;
Why those and not Microsoft.VisualBasic.MyServices? Well, My is just an amalgamation
of various classes that live in those namespaces: Computer, Audio, ... All the stuff
you saw in the class diagram in the article &lt;a href="http://msdn2.microsoft.com/en-us/library/5btzf5yk"&gt;Development
with My&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Basically, you now have the functionality provided by My, but not as nicely grouped
with a My object as in Visual Basic. To achieve this, have a look at the article &lt;a href="http://www.csharphelp.com/archives3/archive594.html"&gt;C#
My Services&lt;/a&gt; by Gildeoni Santos, it sports a download for wrapping My. As the code
(at the time of this writing) is based on Beta 1 bits, you will have to put in the
correct namespace references and pull the My prefix on all class names. 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=4b54ef65-b215-4142-96c4-3cea48e04590" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,4b54ef65-b215-4142-96c4-3cea48e04590.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=82eaf5e8-bff9-4d5c-821d-d323aca59679</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,82eaf5e8-bff9-4d5c-821d-d323aca59679.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,82eaf5e8-bff9-4d5c-821d-d323aca59679.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=82eaf5e8-bff9-4d5c-821d-d323aca59679</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I just finished a Web-based C# to VB.NET converter for .NET 2.0. It took me about
half an hour and 20 lines of code. How come? Well, Daniel (<a href="http://www.icsharpcode.net/opensource/sd/">#develop</a> 2.0
PM) did a <a href="http://laputa.sharpdevelop.net/NRefactoryTutorialVideo.aspx">video
on NRefactory</a>, which is at the heart of #develop's parsing infrastructure. I took
some of his demo code plus some of #develop's internal code converter, and put it
into a ASP.NET 2.0 page. Presto, that easy if you can stand on the shoulders of giants.
</p>
        <p>
Oh, and I actually put it online, here is the link: <a href="http://developer.sharpdevelop.net/codeconvert.net/convertcsharp20tovbnet80.aspx">C#
to VB.NET converter</a> (you can find the source code for a simpler VB.NET implementation
of the converter <a href="http://laputa.sharpdevelop.net/CToVBNETCodeConversionASPNETStyle.aspx">here</a>).
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=82eaf5e8-bff9-4d5c-821d-d323aca59679" />
      </body>
      <title>Convert C# 2.0 Code to VB.NET 8.0</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,82eaf5e8-bff9-4d5c-821d-d323aca59679.aspx</guid>
      <link>http://chrison.net/ConvertC20CodeToVBNET80.aspx</link>
      <pubDate>Thu, 10 Nov 2005 19:22:24 GMT</pubDate>
      <description>&lt;p&gt;
I just finished a Web-based C# to VB.NET converter for .NET 2.0. It took me about
half an hour and 20 lines of code. How come? Well, Daniel (&lt;a href="http://www.icsharpcode.net/opensource/sd/"&gt;#develop&lt;/a&gt; 2.0
PM) did a &lt;a href="http://laputa.sharpdevelop.net/NRefactoryTutorialVideo.aspx"&gt;video
on NRefactory&lt;/a&gt;, which is at the heart of #develop's parsing infrastructure. I took
some of his demo code plus some of #develop's internal code converter, and put it
into a ASP.NET 2.0 page. Presto, that easy if you can stand on the shoulders of giants.
&lt;/p&gt;
&lt;p&gt;
Oh, and I actually put it online, here is the link: &lt;a href="http://developer.sharpdevelop.net/codeconvert.net/convertcsharp20tovbnet80.aspx"&gt;C#
to VB.NET converter&lt;/a&gt;&amp;nbsp;(you can find the source code for a simpler VB.NET implementation
of the converter &lt;a href="http://laputa.sharpdevelop.net/CToVBNETCodeConversionASPNETStyle.aspx"&gt;here&lt;/a&gt;).
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=82eaf5e8-bff9-4d5c-821d-d323aca59679" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,82eaf5e8-bff9-4d5c-821d-d323aca59679.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>ASP.NET</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=2735af34-6730-4cdf-90ec-1a1380d26bf3</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,2735af34-6730-4cdf-90ec-1a1380d26bf3.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,2735af34-6730-4cdf-90ec-1a1380d26bf3.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2735af34-6730-4cdf-90ec-1a1380d26bf3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I already have one box (the Shuttle XPC) that is running Windows Server Codename Longhorn
Build 5219. Because it wasn't all that much of a hassle when compared to Beta 1 of
Windows Vista, I decided to set up Longhorn on my laptop - and try to work with that
installation for a week, while I am in Seattle for the MVP &amp; AspInsiders summits.
Boy did I end up with an installation marathon...
</p>
        <p>
Lessons learned in this Sunday's "don't try this at home kids" department:
</p>
        <ul>
          <li>
Don't assume that ATI drivers for your IBM X31 will install on Longhorn. They refuse,
making for rather crappy UI performance. By the way, on failing, setup suggests to
install a VGA driver first. 
</li>
          <li>
None of the network adapters were found - neither the onboard LAN, nor the onboard
WLAN. When you peek into Computer Mangement, it is your guess which of the two "Ethernet
Controller" is which. 
</li>
          <li>
Don't only update the driver for one, even if it is the LAN one. Your ISA 2004 client
installation will mysteriously fail. After installing drivers for all LAN equipement,
it just works. 
</li>
          <li>
Minor annoyance: the OS-provided sound driver produces hisses et al. Not too bad,
but annoying if you plan to watch loads of Channel 9 movies. Your guess is correct:
the vendor-provided driver refuses to install. 
</li>
          <li>
No standby. That sucks royally. 
</li>
          <li>
You learned about that in my <a href="http://chrison.net/ErrorsYouDontExpect.aspx">previous
post</a> - no .NET 1.1 for you by default. 
</li>
          <li>
Installing VS can be so much fun, especially if MSXML 6.0 refuses to install as part
of the default install. Doing it separately works so much better. And the "Locate
File" dialog for the VM driver irritated me only for the better part of a minute... 
</li>
          <li>
Before installing the Atlas VSIs, you better start VS at least once. Otherwise the
Atlas installation will fail. Only mildly interesting. 
</li>
          <li>
Do I need to mention that Virtual PC networking doesn't work? That one didn't change
for the better, which will make me dual boot into XP.</li>
        </ul>
        <p>
On a different note: default installs of 5219 have a blank password for Administrator.
And IIS 7 is installed by default, which really baffled me. I'm so trained to enable
features after install that at first I was thinking it was not part of the bits I
got...
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=2735af34-6730-4cdf-90ec-1a1380d26bf3" />
      </body>
      <title>Windows Server Codename Longhorn, Visual Studio 2005 Team System Beta 2, LINQ &amp; Atlas</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,2735af34-6730-4cdf-90ec-1a1380d26bf3.aspx</guid>
      <link>http://chrison.net/WindowsServerCodenameLonghornVisualStudio2005TeamSystemBeta2LINQAtlas.aspx</link>
      <pubDate>Sun, 25 Sep 2005 20:25:57 GMT</pubDate>
      <description>&lt;p&gt;
I already have one box (the Shuttle XPC) that is running Windows Server Codename Longhorn
Build 5219. Because it wasn't all that much of a hassle when compared to Beta 1 of
Windows Vista, I decided to set up Longhorn on my laptop - and try to work with that
installation for a week, while I am in Seattle for the MVP &amp;amp; AspInsiders summits.
Boy did I end up with an installation marathon...
&lt;/p&gt;
&lt;p&gt;
Lessons learned in this Sunday's "don't try this at home kids" department:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Don't assume that ATI drivers for your IBM X31 will install on Longhorn. They refuse,
making for rather crappy UI performance. By the way, on failing, setup suggests to
install a VGA driver first. 
&lt;li&gt;
None of the network adapters were found - neither the onboard LAN, nor the onboard
WLAN. When you peek into Computer Mangement, it is your guess which of the two "Ethernet
Controller" is which. 
&lt;li&gt;
Don't only update the driver for one, even if it is the LAN one. Your ISA 2004 client
installation will mysteriously fail. After installing drivers for&amp;nbsp;all LAN equipement,
it just works. 
&lt;li&gt;
Minor annoyance: the OS-provided sound driver produces hisses et al. Not too bad,
but annoying if you plan to watch loads of Channel 9 movies. Your guess is correct:
the vendor-provided driver refuses to install. 
&lt;li&gt;
No standby. That sucks royally. 
&lt;li&gt;
You learned about that in my &lt;a href="http://chrison.net/ErrorsYouDontExpect.aspx"&gt;previous
post&lt;/a&gt; - no .NET 1.1 for you by default. 
&lt;li&gt;
Installing VS can be so much fun, especially if MSXML 6.0 refuses to install as part
of the default install. Doing it separately works so much better. And the "Locate
File" dialog for the VM driver irritated me only for the better part of a minute... 
&lt;li&gt;
Before installing the Atlas VSIs, you better start VS at least once. Otherwise the
Atlas installation will fail. Only mildly interesting. 
&lt;li&gt;
Do I need to mention that Virtual PC networking doesn't work? That one didn't change
for the better, which will make me dual boot into XP.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
On a different note: default installs of 5219 have a blank password for Administrator.
And IIS 7 is installed by default, which really baffled me. I'm so trained to enable
features after install that at first I was thinking it was not part of the bits I
got...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=2735af34-6730-4cdf-90ec-1a1380d26bf3" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,2735af34-6730-4cdf-90ec-1a1380d26bf3.aspx</comments>
      <category>2 Ohhhh</category>
      <category>ASP.NET</category>
      <category>C#</category>
      <category>IIS</category>
      <category>Longhorn</category>
      <category>Team System</category>
      <category>this</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=408574fe-5241-4858-82b0-02ec929d1e02</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,408574fe-5241-4858-82b0-02ec929d1e02.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,408574fe-5241-4858-82b0-02ec929d1e02.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=408574fe-5241-4858-82b0-02ec929d1e02</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today's first keynote speaker was Eric Rudder. He unveiled the Expression Suite, which
contains Acrylic, Quartz and Sparkle. For the latter, go to Channel 9 and watch <a href="http://channel9.msdn.com/showpost.aspx?postid=115387">this
video</a>. Also, the <a href="http://msdn.microsoft.com/windowsvista/building/workflow/default.aspx">Windows
Workflow Foundation</a> saw the light of day during the keynote, as well as (last
but not least) VSTA (Visual Studio Tools for Applications). You can learn more about
VSTA in <a href="http://blogs.msdn.com/pstubbs/archive/2005/09/14/466165.aspx">this
blog post</a>.
</p>
        <p>
Eric was followed by Steven Sinofsky, who focused on Office 12. He demoed SharePoint,
InfoPath, the new Access and more. I have to say again what I said previously
- this is the first time I'm interested in an Office beta program. Good news is that
all PDC attendees are signed up, steak knives being strictly optional &lt;g /&gt;
(and even more limited than that phone fiasco from day one, 'nough said).
</p>
        <p>
Now, without further ado(.net), the sessions I attended today:
</p>
        <ul>
          <li>
Windows Vista: User Account Protection—Securing Your Application with Least Privilege
Administration 
</li>
          <li>
The .NET Language Integrated Query Framework: An Overview 
</li>
          <li>
C#: Future Directions in Language Innovation 
</li>
          <li>
ASP.NET: Future Directions for Developing Rich Web Applications with Atlas (Part 1)  
</li>
        </ul>
        <p>
Anders Hejlsberg did the LINQ (Language Integrated Query Framework) and C# 3.0 sessions.
Highly impressive stuff, and I am looking forward to the DLinq session to learn more
about the relational access model. I do like to know what is going on behind the scenes,
various OR mappers made me wary. In closing: at least now I know why ObjectSpaces
made a rapid disappearance...
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=408574fe-5241-4858-82b0-02ec929d1e02" />
      </body>
      <title>PDC05: Day Two, Wednesday</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,408574fe-5241-4858-82b0-02ec929d1e02.aspx</guid>
      <link>http://chrison.net/PDC05DayTwoWednesday.aspx</link>
      <pubDate>Thu, 15 Sep 2005 01:43:18 GMT</pubDate>
      <description>&lt;p&gt;
Today's first keynote speaker was Eric Rudder. He unveiled the Expression Suite, which
contains Acrylic, Quartz and Sparkle. For the latter, go to Channel 9 and watch &lt;a href="http://channel9.msdn.com/showpost.aspx?postid=115387"&gt;this
video&lt;/a&gt;. Also, the &lt;a href="http://msdn.microsoft.com/windowsvista/building/workflow/default.aspx"&gt;Windows
Workflow Foundation&lt;/a&gt; saw the light of day during the keynote, as well as (last
but not least) VSTA (Visual Studio Tools for Applications). You can learn more about
VSTA in &lt;a href="http://blogs.msdn.com/pstubbs/archive/2005/09/14/466165.aspx"&gt;this
blog post&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Eric was followed by Steven Sinofsky, who focused on Office 12. He demoed&amp;nbsp;SharePoint,
InfoPath, the new Access and more.&amp;nbsp;I have to say again what I said previously
- this is the first time I'm interested in an Office beta program. Good news is that
all PDC attendees are signed up, steak knives being strictly optional &amp;lt;g /&amp;gt;
(and even more limited than that phone fiasco from day one, 'nough said).
&lt;/p&gt;
&lt;p&gt;
Now, without further ado(.net), the sessions I attended today:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Windows Vista: User Account Protection—Securing Your Application with Least Privilege
Administration 
&lt;li&gt;
The .NET Language Integrated Query Framework: An Overview 
&lt;li&gt;
C#: Future Directions in Language Innovation 
&lt;li&gt;
ASP.NET: Future Directions for Developing Rich Web Applications with Atlas (Part 1)&amp;nbsp; 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Anders Hejlsberg did the LINQ (Language Integrated Query Framework) and C# 3.0 sessions.
Highly impressive stuff, and I am looking forward to the DLinq session to learn more
about the relational access model. I do like to know what is going on behind the scenes,
various OR mappers made me wary. In closing: at least now I know why ObjectSpaces
made a rapid disappearance...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=408574fe-5241-4858-82b0-02ec929d1e02" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,408574fe-5241-4858-82b0-02ec929d1e02.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>this</category>
      <category>Training and Conferences</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=1d0d95ea-aa35-49e1-8c4d-8ea12034de2a</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,1d0d95ea-aa35-49e1-8c4d-8ea12034de2a.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,1d0d95ea-aa35-49e1-8c4d-8ea12034de2a.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=1d0d95ea-aa35-49e1-8c4d-8ea12034de2a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
The PDC today officially kicked off with a keynote by Bill Gates. To me, the more
interesting parts came later in Jim Allchins keynote: <a href="http://atlas.asp.net">Atlas</a>,
Windows Communication Foundation, Windows Presentation Foundation as well as <a href="http://msdn.microsoft.com/netframework/future/">C#
3.0 &amp; LINQ</a>. However, Office 12 does look very promising too. Can't wait to
get my hands on that beta (never expected to say that about Office, ever).
</p>
        <p>
In the afternoon, I attended the following breakouts:
</p>
        <ul>
          <li>
Behind the Scenes of Visual Studio 2005 Team Foundation Server</li>
          <li>
Windows Server “Longhorn”: What's New for Developers</li>
          <li>
Windows Presentation Foundation ("Avalon"): A Lap around the Windows Presentation
Foundation</li>
        </ul>
        <p>
Looking forward to tomorrow, because Windows Workflow Foundation will be revealed
at the keynote (aka general session).
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=1d0d95ea-aa35-49e1-8c4d-8ea12034de2a" />
      </body>
      <title>PDC05: Day One in Review</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,1d0d95ea-aa35-49e1-8c4d-8ea12034de2a.aspx</guid>
      <link>http://chrison.net/PDC05DayOneInReview.aspx</link>
      <pubDate>Tue, 13 Sep 2005 02:33:11 GMT</pubDate>
      <description>&lt;p&gt;
The PDC today officially kicked off with a keynote by Bill Gates. To me, the more
interesting parts came later in Jim Allchins keynote: &lt;a href="http://atlas.asp.net"&gt;Atlas&lt;/a&gt;,
Windows Communication Foundation, Windows Presentation Foundation as well as &lt;a href="http://msdn.microsoft.com/netframework/future/"&gt;C#
3.0 &amp;amp; LINQ&lt;/a&gt;. However, Office 12 does look very promising too. Can't wait to
get my hands on that beta (never expected to say that about Office, ever).
&lt;/p&gt;
&lt;p&gt;
In the afternoon, I attended the following breakouts:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Behind the Scenes of Visual Studio 2005 Team Foundation Server&lt;/li&gt;
&lt;li&gt;
Windows Server “Longhorn”: What's New for Developers&lt;/li&gt;
&lt;li&gt;
Windows Presentation Foundation ("Avalon"): A Lap around the Windows Presentation
Foundation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Looking forward to tomorrow, because Windows Workflow Foundation will be revealed
at the keynote (aka general session).
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=1d0d95ea-aa35-49e1-8c4d-8ea12034de2a" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,1d0d95ea-aa35-49e1-8c4d-8ea12034de2a.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>ASP.NET</category>
      <category>C#</category>
      <category>Team System</category>
      <category>this</category>
      <category>Training and Conferences</category>
      <category>Visual Studio</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=2727d8ad-94ac-40e0-b58f-ded31647a32e</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,2727d8ad-94ac-40e0-b58f-ded31647a32e.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,2727d8ad-94ac-40e0-b58f-ded31647a32e.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=2727d8ad-94ac-40e0-b58f-ded31647a32e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">A new Channel 9 wiki has popped up - about
performance tips for managed code and related CLR "stuff". A really usefull collection
of articles, videos et al - <a href="http://channel9.msdn.com/wiki/default.aspx/Channel9.RicoM">check
it out</a>!<img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=2727d8ad-94ac-40e0-b58f-ded31647a32e" /></body>
      <title>Rico Mariani's Articles and Recommendations</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,2727d8ad-94ac-40e0-b58f-ded31647a32e.aspx</guid>
      <link>http://chrison.net/RicoMarianisArticlesAndRecommendations.aspx</link>
      <pubDate>Wed, 09 Mar 2005 16:03:33 GMT</pubDate>
      <description>A new Channel 9 wiki has popped up - about performance tips for managed code and related CLR "stuff". A really usefull collection of articles, videos et al - &lt;a href="http://channel9.msdn.com/wiki/default.aspx/Channel9.RicoM"&gt;check
it out&lt;/a&gt;!&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=2727d8ad-94ac-40e0-b58f-ded31647a32e" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,2727d8ad-94ac-40e0-b58f-ded31647a32e.aspx</comments>
      <category>.NET</category>
      <category>BCL</category>
      <category>C#</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=064b4e6a-3e38-48bb-a39e-f3766931c2e5</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,064b4e6a-3e38-48bb-a39e-f3766931c2e5.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,064b4e6a-3e38-48bb-a39e-f3766931c2e5.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=064b4e6a-3e38-48bb-a39e-f3766931c2e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Another AppDev training CD has hit the download center: this time, it is the ISO
image of the Developing Applications in Visual C# .NET (CD1) training course. Note
that in contrast to <a href="http://chrison.net/CurrentlyDownloadingExploringASPNET20UsingVisualC2005.aspx">Exploring
ASP.NET 2.0 Using Visual C# 2005</a>, this courseware is for Visual Studio .NET 2003. <a href="http://www.microsoft.com/downloads/details.aspx?familyid=2fe772b2-f480-4334-b023-51e6abe12f0e&amp;displaylang=en">Download</a></p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=064b4e6a-3e38-48bb-a39e-f3766931c2e5" />
      </body>
      <title>Developing Applications in Visual C# .NET</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,064b4e6a-3e38-48bb-a39e-f3766931c2e5.aspx</guid>
      <link>http://chrison.net/DevelopingApplicationsInVisualCNET.aspx</link>
      <pubDate>Tue, 08 Mar 2005 16:29:14 GMT</pubDate>
      <description>&lt;p&gt;
Another AppDev training CD has hit the download center:&amp;nbsp;this time, it is the&amp;nbsp;ISO
image of the Developing Applications in Visual C# .NET (CD1) training course. Note
that in contrast to &lt;a href="http://chrison.net/CurrentlyDownloadingExploringASPNET20UsingVisualC2005.aspx"&gt;Exploring
ASP.NET 2.0 Using Visual C# 2005&lt;/a&gt;, this courseware is for Visual Studio .NET 2003.&amp;nbsp;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2fe772b2-f480-4334-b023-51e6abe12f0e&amp;amp;displaylang=en"&gt;Download&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=064b4e6a-3e38-48bb-a39e-f3766931c2e5" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,064b4e6a-3e38-48bb-a39e-f3766931c2e5.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Cool Download</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=d0b43425-bf95-407c-8187-855314d628f6</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,d0b43425-bf95-407c-8187-855314d628f6.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,d0b43425-bf95-407c-8187-855314d628f6.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=d0b43425-bf95-407c-8187-855314d628f6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
This can be pretty useful to get an idea which open source projects are available,
and today I did it (again) for <a href="http://sourceforge.net/softwaremap/trove_list.php?form_cat=271&amp;page=1">C#</a>.
Of course you will see the usual suspects (NUnit, NAnt, RSS Bandit, NHibernate and <strong>a
lot</strong> of others), as well as ones you haven't yet heard of, such as <a href="http://sourceforge.net/projects/dotlucene/">dotLucene</a> (I
knew of the Java one) or <a href="http://sourceforge.net/projects/report/">Report.NET</a>.
And on occasion you stumble upon something really wacky, such as <a href="http://sourceforge.net/projects/pr0nspider/">Pr0nspider</a>,
which is a multithreaded sample for the WebSpider library... this sample definitely
drives home the concept!
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=d0b43425-bf95-407c-8187-855314d628f6" />
      </body>
      <title>Browsing sf.net's software map</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,d0b43425-bf95-407c-8187-855314d628f6.aspx</guid>
      <link>http://chrison.net/BrowsingSfnetsSoftwareMap.aspx</link>
      <pubDate>Mon, 27 Dec 2004 08:29:19 GMT</pubDate>
      <description>&lt;p&gt;
This can be pretty useful to get an idea which open source projects are available,
and today I did it (again) for &lt;a href="http://sourceforge.net/softwaremap/trove_list.php?form_cat=271&amp;amp;page=1"&gt;C#&lt;/a&gt;.
Of course you will see the usual suspects (NUnit, NAnt, RSS Bandit, NHibernate and &lt;strong&gt;a
lot&lt;/strong&gt; of others), as well as ones you haven't yet heard of, such as &lt;a href="http://sourceforge.net/projects/dotlucene/"&gt;dotLucene&lt;/a&gt; (I
knew of the Java one) or &lt;a href="http://sourceforge.net/projects/report/"&gt;Report.NET&lt;/a&gt;.
And on occasion you stumble upon something really wacky, such as&amp;nbsp;&lt;a href="http://sourceforge.net/projects/pr0nspider/"&gt;Pr0nspider&lt;/a&gt;,
which is a multithreaded&amp;nbsp;sample for the WebSpider library... this sample definitely
drives home the concept!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=d0b43425-bf95-407c-8187-855314d628f6" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,d0b43425-bf95-407c-8187-855314d628f6.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=c5be61fb-b3a8-4702-b392-1b3a866d2e47</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,c5be61fb-b3a8-4702-b392-1b3a866d2e47.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,c5be61fb-b3a8-4702-b392-1b3a866d2e47.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=c5be61fb-b3a8-4702-b392-1b3a866d2e47</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Finally found some time to add a few missing things to the registry editor: most importantly
editors for string[] (REG_MULTI_SZ) and byte[] (REG_BINARY), as well as some other
improvements (mostly behind the scenes).
</p>
        <p>
Like last time: please read <em>doc\Program Notes (4 Dev and User).pdf</em> before
installing!
</p>
        <p>
Details from ChangeLog.txt:
</p>
        <p>
- Byte[] editor added (needs to be improved user-input-wise)<br />
- String[] editor added<br />
- Editors are now loaded via Hashtable and Reflection (easier to maintain)<br />
- Menu restructuring (New Value submenu)<br />
- KeyPress event for DWORD editor modified to only allow numbers to be entered<br />
- New project directory structure
</p>
        <p>
          <a href="/content/binary/RegEdit20041214.zip">
            <strong>Download</strong>
          </a> (795KB)
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=c5be61fb-b3a8-4702-b392-1b3a866d2e47" />
      </body>
      <title>Registry Editor for SmartPhone - An Update (v0.8.1)</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,c5be61fb-b3a8-4702-b392-1b3a866d2e47.aspx</guid>
      <link>http://chrison.net/RegistryEditorForSmartPhoneAnUpdateV081.aspx</link>
      <pubDate>Tue, 14 Dec 2004 20:06:22 GMT</pubDate>
      <description>&lt;p&gt;
Finally found some time to add a few missing things to the registry editor: most importantly
editors for string[] (REG_MULTI_SZ) and byte[] (REG_BINARY), as well as some other
improvements (mostly behind the scenes).
&lt;/p&gt;
&lt;p&gt;
Like&amp;nbsp;last time: please read &lt;em&gt;doc\Program Notes (4 Dev and User).pdf&lt;/em&gt; before
installing!
&lt;/p&gt;
&lt;p&gt;
Details from ChangeLog.txt:
&lt;/p&gt;
&lt;p&gt;
- Byte[] editor added (needs to be improved user-input-wise)&lt;br&gt;
- String[] editor added&lt;br&gt;
- Editors are now loaded via Hashtable and Reflection (easier to maintain)&lt;br&gt;
- Menu restructuring (New Value submenu)&lt;br&gt;
- KeyPress event for DWORD editor modified to only allow numbers to be entered&lt;br&gt;
- New project directory structure
&lt;/p&gt;
&lt;p&gt;
&lt;a href="/content/binary/RegEdit20041214.zip"&gt;&lt;strong&gt;Download&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;(795KB)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=c5be61fb-b3a8-4702-b392-1b3a866d2e47" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,c5be61fb-b3a8-4702-b392-1b3a866d2e47.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Cool Download</category>
      <category>Smartphone and PocketPC</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=3cda0542-ed0d-4d9e-ab9b-18c16f946371</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,3cda0542-ed0d-4d9e-ab9b-18c16f946371.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,3cda0542-ed0d-4d9e-ab9b-18c16f946371.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=3cda0542-ed0d-4d9e-ab9b-18c16f946371</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
I’m one of those next-cool-thing addicts that can’t resist to play with
the latest most unstable Whidbey CTP coming out of Redmond. One of the red-hot things
is generics that will be included with C#^H^H the CLR v2.0. This intentional blunder
is the central point of this editorial - clearing up misconceptions about generics.
</p>
        <p>
When reading postings or talking to fellow early .NET 2.0 adopters you come to categorize
those into the following distinct groups:
</p>
        <ul>
          <li>
The C++ developers</li>
          <li>
The Non-C#, Non-VB.NET, Non-Managed C++ developer</li>
          <li>
The Java developer (yes, I know…)</li>
          <li>
Generics, huh?</li>
        </ul>
        <p>
Let’s start out with the die-hard C++ programmer, a guy who really is in love
with the templating system in C++ (when referring to C++ I really mean the unmanaged
C++ world). This is the most vocal among the four groups, and they’ll be very
forthcoming in telling you how much better C++ templates are than generics in C#.
I hate to break the news to them, but generics are intentionally different: firstly,
and most importantly, C++ templates are compile time only, whereas generics are compile
as well as runtime. Anders Hejlsberg did a great job of explaining that in [1], and
the C# team has a FAQ online on this topic too [2].
</p>
        <p>
Secondly, the being different goal also extends to simplicity of use. Do you remember
yourself screaming bloody murder when C# came along with single inheritance? Right.
How many people did and do care in real life? See. Same here in generics-land: certain
power has been stripped from you because it would tip the balance from easy to use
to intimidating and overly complicated. That’s why constraints don’t cover
the whole complexity spectrum and don’t allow operator constraining and the
like, such as non-default constructor constraints. Oh, you can fake operator constraints
if you really, really care with the approach detailed in [1] and [3], but admittedly
this won’t solve the problems for intrinsic types.
</p>
        <p>
Speaking of operator constraints constraints (couldn’t resist), a general misconception
in the C++ camp is that everything they are used to should be just as dangerous –
pardon me, powerful – in other implementations. C++ templates allow you to do
what you damn well please, but generics don’t – that very type checking
is the one thing to single out that rid us of AVs, remember?
</p>
        <p>
The Non-C#, Non-VB.NET, Non-Managed C++ developer. So who are they? Try one of 30+
(don’t quote me on the actual figure) other programming languages that follow
the CLS (Common Language Specification) and produce code that can run on the CLR.
It is rather similar if not exactly the same as with Edit and Continue support –
“me too!” is heard all around the globe. So, do they get generics? Depends.
Because of the many programming languages that exist for .NET, Microsoft decided to
not put generics in the CLS. So it is entirely up to the language vendor in 2.0 to
support generics or not. 
</p>
        <p>
Has the C#/VB.NET developer any beef with that? You bet. If you write a framework
that has to be used in other programming languages, that framework has to be CLS compliant
(“should be” is too soft in my view). And this means you cannot use generics
on the public interfaces if you want to mark your assembly with the CLSCompliant attribute.
The Non-CLS compliance of generics is pointed out in [4] and [5], with hints that
generics will find their way into the Common Language Specification in the Orcas /
Longhorn timeframe.
</p>
        <p>
The Java developer. Now, how do they fit into the picture of the early adopter of
.NET 2.0? I’m sure one thing .NET developers will hear a lot is that “Java
had generics long before .NET.” Not so fast, Scotty. Just like there are differences
between C++ templates and .NET generics, there are differences between Java generics
and their counterparts in .NET. Once again, Anders Hejlsberg did a great job in [1]
of explaining what is different: for one, .NET generics are actually typed, which
means no boxing for value types (a very good thing!). Secondly, .NET generics are
runtime too, not just compile time – you can reflect on generics in .NET, you
can’t do that in Java. The lowdown: generics in Java spare you the task of casting,
but that’s about it.
</p>
        <p>
Finally, the group “Generics, huh?” Those are developers who for example
still have the misconception that generics are a C#-only feature, like many programmers
using 1.0 initially thought that features offered by the CLR were actually C# features.
Let’s chalk that one up to miscommunication, but a repeated one. 
</p>
        <p>
You know that generics (will) exist, but have no clear idea what they are intended
to be used for? I’d like to quote Anders Hejlsberg: “Generics is essentially
the ability to have type parameters on your type.”[1] D’accord? Really
simple but really powerful.
</p>
        <p>
You know what generics are (if not, please see the previous paragraph), but have no
idea what to use them for? If you are like one of my friends “I’m not
in the business of writing frameworks, and the .NET framework already has generic
collections, so what use are generics to me?”, rest assured that there are plenty
of other non-class uses: generic methods (data access, anyone?) and generic delegates
(in an instant makes callbacks that much more fun). Did you know about those two generics
use cases?
</p>
        <p>
To conclude this editorial, I’d like to firmly state that generics are positioned
somewhere between being  “just a fancy way of replacing typed collections”
and the all-too-powerful for shooting yourself in the foot C++ templates. Well designed,
tightly integrated in the CLR, the right dose of power – with one problem: too
many different views of what generics are, what they are intended for, and what they
can be used for. I for one am confident that they will be useful to programmers –
yes, useful –  nothing more, nothing less.
</p>
        <p>
[1] Generics in C#, Java, and C++<br /><a href="http://www.artima.com/intv/generics.html">http://www.artima.com/intv/generics.html</a></p>
        <p>
[2] How do C# generics compare to C++ templates?<br /><a href="http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88913.aspx">http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88913.aspx</a></p>
        <p>
[3] Generics Algorithms<br /><a href="http://blogs.msdn.com/ericgu/archive/2003/11/14/52852.aspx">http://blogs.msdn.com/ericgu/archive/2003/11/14/52852.aspx</a></p>
        <p>
[4] Dan Fernandez's Blog - Quick information on Generics<br /><a href="http://blogs.msdn.com/danielfe/archive/2004/06/21/161962.aspx">http://blogs.msdn.com/danielfe/archive/2004/06/21/161962.aspx</a></p>
        <p>
[5] Q&amp;A with VJ# and C# Team on Generics<br /><a href="http://www.thedatafarm.com/blog/CommentView.aspx?guid=a71779f2-7a6a-4df1-81d4-3ccaa2f18cff">http://www.thedatafarm.com/blog/CommentView.aspx?guid=a71779f2-7a6a-4df1-81d4-3ccaa2f18cff</a></p>
        <p>
[6] An introduction to Generics<br /><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/csharp_generics.asp">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/csharp_generics.asp</a></p>
        <p>
          <strong>Bootnote:</strong> This blog entry originallly was intended to be an editoral,
however, an editorial is an opinion piece, and the publisher wanted a different opinion.
This is why the text is now in my blog where you can read (and flame) it freely.
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=3cda0542-ed0d-4d9e-ab9b-18c16f946371" />
      </body>
      <title>Generics – Misconceptions Abound</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,3cda0542-ed0d-4d9e-ab9b-18c16f946371.aspx</guid>
      <link>http://chrison.net/GenericsMisconceptionsAbound.aspx</link>
      <pubDate>Fri, 10 Dec 2004 09:22:26 GMT</pubDate>
      <description>&lt;p&gt;
I&amp;#8217;m one of those next-cool-thing addicts that can&amp;#8217;t resist to play with
the latest most unstable Whidbey CTP coming out of Redmond. One of the red-hot things
is generics that will be included with C#^H^H the CLR v2.0. This intentional blunder
is the central point of this editorial - clearing up misconceptions about generics.
&lt;/p&gt;
&lt;p&gt;
When reading postings or talking to fellow early .NET 2.0 adopters you come to categorize
those into the following distinct groups:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
The C++ developers&lt;/li&gt;
&lt;li&gt;
The Non-C#, Non-VB.NET, Non-Managed C++ developer&lt;/li&gt;
&lt;li&gt;
The Java developer (yes, I know&amp;#8230;)&lt;/li&gt;
&lt;li&gt;
Generics, huh?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
Let&amp;#8217;s start out with the die-hard C++ programmer, a guy who really is in love
with the templating system in C++ (when referring to C++ I really mean the unmanaged
C++ world). This is the most vocal among the four groups, and they&amp;#8217;ll be very
forthcoming in telling you how much better C++ templates are than generics in C#.
I hate to break the news to them, but generics are intentionally different: firstly,
and most importantly, C++ templates are compile time only, whereas generics are compile
as well as runtime. Anders Hejlsberg did a great job of explaining that in [1], and
the C# team has a FAQ online on this topic too [2].
&lt;/p&gt;
&lt;p&gt;
Secondly, the being different goal also extends to simplicity of use. Do you remember
yourself screaming bloody murder when C# came along with single inheritance? Right.
How many people did and do care in real life? See. Same here in generics-land: certain
power has been stripped from you because it would tip the balance from easy to use
to intimidating and overly complicated. That&amp;#8217;s why constraints don&amp;#8217;t cover
the whole complexity spectrum and don&amp;#8217;t allow operator constraining and the
like, such as non-default constructor constraints. Oh, you can fake operator constraints
if you really, really care with the approach detailed in [1] and [3], but admittedly
this won&amp;#8217;t solve the problems for intrinsic types.
&lt;/p&gt;
&lt;p&gt;
Speaking of operator constraints constraints (couldn&amp;#8217;t resist), a general misconception
in the C++ camp is that everything they are used to should be just as dangerous &amp;#8211;
pardon me, powerful &amp;#8211; in other implementations. C++ templates allow you to do
what you damn well please, but generics don&amp;#8217;t &amp;#8211; that very type checking
is the one thing to single out that rid us of AVs, remember?
&lt;/p&gt;
&lt;p&gt;
The Non-C#, Non-VB.NET, Non-Managed C++ developer. So who are they? Try one of 30+
(don&amp;#8217;t quote me on the actual figure) other programming languages that follow
the CLS (Common Language Specification) and produce code that can run on the CLR.
It is rather similar if not exactly the same as with Edit and Continue support &amp;#8211;
&amp;#8220;me too!&amp;#8221; is heard all around the globe. So, do they get generics? Depends.
Because of the many programming languages that exist for .NET, Microsoft decided to
not put generics in the CLS. So it is entirely up to the language vendor in 2.0 to
support generics or not. 
&lt;/p&gt;
&lt;p&gt;
Has the C#/VB.NET developer any beef with that? You bet. If you write a framework
that has to be used in other programming languages, that framework has to be CLS compliant
(&amp;#8220;should be&amp;#8221; is too soft in my view). And this means you cannot use generics
on the public interfaces if you want to mark your assembly with the CLSCompliant attribute.
The Non-CLS compliance of generics is pointed out in [4] and [5], with hints that
generics will find their way into the Common Language Specification in the Orcas /
Longhorn timeframe.
&lt;/p&gt;
&lt;p&gt;
The Java developer. Now, how do they fit into the picture of the early adopter of
.NET 2.0? I&amp;#8217;m sure one thing .NET developers will hear a lot is that &amp;#8220;Java
had generics long before .NET.&amp;#8221; Not so fast, Scotty. Just like there are differences
between C++ templates and .NET generics, there are differences between Java generics
and their counterparts in .NET. Once again, Anders Hejlsberg did a great job in [1]
of explaining what is different: for one, .NET generics are actually typed, which
means no boxing for value types (a very good thing!). Secondly, .NET generics are
runtime too, not just compile time &amp;#8211; you can reflect on generics in .NET, you
can&amp;#8217;t do that in Java. The lowdown: generics in Java spare you the task of casting,
but that&amp;#8217;s about it.
&lt;/p&gt;
&lt;p&gt;
Finally, the group &amp;#8220;Generics, huh?&amp;#8221; Those are developers who for example
still have the misconception that generics are a C#-only feature, like many programmers
using 1.0 initially thought that features offered by the CLR were actually C# features.
Let&amp;#8217;s chalk that one up to miscommunication, but a repeated one. 
&lt;/p&gt;
&lt;p&gt;
You know that generics (will) exist, but have no clear idea what they are intended
to be used for? I&amp;#8217;d like to quote Anders Hejlsberg: &amp;#8220;Generics is essentially
the ability to have type parameters on your type.&amp;#8221;[1] D&amp;#8217;accord? Really
simple but really powerful.
&lt;/p&gt;
&lt;p&gt;
You know what generics are (if not, please see the previous paragraph), but have no
idea what to use them for? If you are like one of my friends &amp;#8220;I&amp;#8217;m not
in the business of writing frameworks, and the .NET framework already has generic
collections, so what use are generics to me?&amp;#8221;, rest assured that there are plenty
of other non-class uses: generic methods (data access, anyone?) and generic delegates
(in an instant makes callbacks that much more fun). Did you know about those two generics
use cases?
&lt;/p&gt;
&lt;p&gt;
To conclude this editorial, I&amp;#8217;d like to firmly state that generics are positioned
somewhere between being&amp;nbsp; &amp;#8220;just a fancy way of replacing typed collections&amp;#8221;
and the all-too-powerful for shooting yourself in the foot C++ templates. Well designed,
tightly integrated in the CLR, the right dose of power &amp;#8211; with one problem: too
many different views of what generics are, what they are intended for, and what they
can be used for. I for one am confident that they will be useful to programmers &amp;#8211;
yes, useful &amp;#8211;&amp;nbsp; nothing more, nothing less.
&lt;/p&gt;
&lt;p&gt;
[1] Generics in C#, Java, and C++&lt;br&gt;
&lt;a href="http://www.artima.com/intv/generics.html"&gt;http://www.artima.com/intv/generics.html&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[2] How do C# generics compare to C++ templates?&lt;br&gt;
&lt;a href="http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88913.aspx"&gt;http://blogs.msdn.com/csharpfaq/archive/2004/03/12/88913.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[3] Generics Algorithms&lt;br&gt;
&lt;a href="http://blogs.msdn.com/ericgu/archive/2003/11/14/52852.aspx"&gt;http://blogs.msdn.com/ericgu/archive/2003/11/14/52852.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[4] Dan Fernandez's Blog - Quick information on Generics&lt;br&gt;
&lt;a href="http://blogs.msdn.com/danielfe/archive/2004/06/21/161962.aspx"&gt;http://blogs.msdn.com/danielfe/archive/2004/06/21/161962.aspx&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[5] Q&amp;amp;A with VJ# and C# Team on Generics&lt;br&gt;
&lt;a href="http://www.thedatafarm.com/blog/CommentView.aspx?guid=a71779f2-7a6a-4df1-81d4-3ccaa2f18cff"&gt;http://www.thedatafarm.com/blog/CommentView.aspx?guid=a71779f2-7a6a-4df1-81d4-3ccaa2f18cff&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
[6] An introduction to Generics&lt;br&gt;
&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/csharp_generics.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/csharp_generics.asp&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Bootnote:&lt;/strong&gt; This blog entry originallly was intended to be an editoral,
however, an editorial is an opinion piece, and the publisher wanted a different opinion.
This is why the text is now in my blog where you can read (and flame) it freely.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=3cda0542-ed0d-4d9e-ab9b-18c16f946371" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,3cda0542-ed0d-4d9e-ab9b-18c16f946371.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>C#</category>
      <category>this</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=fcc48103-d63b-4d1b-82ca-cd2e59b6b293</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,fcc48103-d63b-4d1b-82ca-cd2e59b6b293.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,fcc48103-d63b-4d1b-82ca-cd2e59b6b293.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=fcc48103-d63b-4d1b-82ca-cd2e59b6b293</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Today <a href="http://www.icsharpcode.net/pub/relations/team.aspx">we</a> released
yet another open source project: <a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx">#usblib
(SharpUSBLib)</a>. The history for this project is quite similar to many other OS
projects ("scratching an itch"): Mike built a terrarium for his soon-to-be-delivered
chameleon, and he wanted to manage the ligthing using a USB-controlled power switch.
Not having found a suitable USB library for .NET, he decided to write one himself.
</p>
        <p>
The library is used for low level access to USB devices, and it works under WIN32/.NET
and Linux/Mono. Documentation can be found in the <a href="http://wiki.sharpdevelop.net/default.aspx/SharpUsbLib.SharpUsbLib">wiki</a>,
a <a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/Forum.aspx">support forum</a> also
exists. The <a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/Download.aspx">download</a> includes
source code for this dual-licensed (GPL and LGPL) library.
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=fcc48103-d63b-4d1b-82ca-cd2e59b6b293" />
      </body>
      <title>#usblib - a library for low-level USB access in .NET</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,fcc48103-d63b-4d1b-82ca-cd2e59b6b293.aspx</guid>
      <link>http://chrison.net/usblibALibraryForLowlevelUSBAccessInNET.aspx</link>
      <pubDate>Wed, 08 Dec 2004 10:28:39 GMT</pubDate>
      <description>&lt;p&gt;
Today &lt;a href="http://www.icsharpcode.net/pub/relations/team.aspx"&gt;we&lt;/a&gt; released
yet another open source project: &lt;a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/default.aspx"&gt;#usblib
(SharpUSBLib)&lt;/a&gt;. The history for this project is quite similar to many other OS
projects ("scratching an itch"): Mike built a terrarium for his soon-to-be-delivered
chameleon, and he wanted to manage the ligthing using a USB-controlled power switch.
Not having found a suitable USB library for .NET, he decided to write one himself.
&lt;/p&gt;
&lt;p&gt;
The library is used for low level access to USB devices, and it works under WIN32/.NET
and Linux/Mono. Documentation can be found in the &lt;a href="http://wiki.sharpdevelop.net/default.aspx/SharpUsbLib.SharpUsbLib"&gt;wiki&lt;/a&gt;,
a &lt;a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/Forum.aspx"&gt;support forum&lt;/a&gt; also
exists. The &lt;a href="http://www.icsharpcode.net/OpenSource/SharpUSBLib/Download.aspx"&gt;download&lt;/a&gt; includes
source code for this dual-licensed (GPL and LGPL) library.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=fcc48103-d63b-4d1b-82ca-cd2e59b6b293" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,fcc48103-d63b-4d1b-82ca-cd2e59b6b293.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Cool Download</category>
      <category>this</category>
      <category>Use the source Luke</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=4db2cffe-4aaa-409c-88ee-553dce5ce090</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,4db2cffe-4aaa-409c-88ee-553dce5ce090.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,4db2cffe-4aaa-409c-88ee-553dce5ce090.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=4db2cffe-4aaa-409c-88ee-553dce5ce090</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
In case this weekend turns out to be too long for you (and you get bored without
a real .NET challenge), check out the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=7e979ed3-416b-43b6-993b-308a160831b6&amp;displaylang=en">CodeDOM
MSIL Code Provider</a> and the <a href="http://www.microsoft.com/downloads/details.aspx?familyid=61bb0de4-0359-418c-bd70-9693d2fe99ca&amp;displaylang=en">CodeDOM
Subset Code Provider</a>. The more interesting bits from the download description:
</p>
        <p>
          <!--StartFragment -->
          <font class="detailsContent">
            <em>The <a href="http://www.microsoft.com/downloads/details.aspx?familyid=7e979ed3-416b-43b6-993b-308a160831b6&amp;displaylang=en">Microsoft
Intermediate Language (MSIL) code provider</a> takes a CodeDom tree and generates
MSIL syntax. MSIL code provider generates all the CodeDom elements that are part of
the 1.1 conformance spec. MSIL code provider generates code for most of the CodeDom
types that shipped in V1.1.</em>
          </font> Why emit C# when you can emit IL!
</p>
        <p>
          <em>The </em>
          <a href="http://www.microsoft.com/downloads/details.aspx?familyid=61bb0de4-0359-418c-bd70-9693d2fe99ca&amp;displaylang=en">
            <em>CodeDom
Subset Code provider</em>
          </a>
          <em> consumes CodeDom trees in the way the C# code provider
does, but whenever a node that does not fall into the subset is encountered, it emits
a #error in the generated code. This will alert to the CodeDom tree builder of any
place in their code where they don't meet subset conformance. </em>Roll your own subset
of the C# language - anyone interested?
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=4db2cffe-4aaa-409c-88ee-553dce5ce090" />
      </body>
      <title>CodeDOM Fun</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,4db2cffe-4aaa-409c-88ee-553dce5ce090.aspx</guid>
      <link>http://chrison.net/CodeDOMFun.aspx</link>
      <pubDate>Thu, 25 Nov 2004 19:32:10 GMT</pubDate>
      <description>&lt;p&gt;
In case&amp;nbsp;this weekend turns out to be too long for you (and you get bored without
a real .NET challenge), check out the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7e979ed3-416b-43b6-993b-308a160831b6&amp;amp;displaylang=en"&gt;CodeDOM
MSIL Code Provider&lt;/a&gt; and the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=61bb0de4-0359-418c-bd70-9693d2fe99ca&amp;amp;displaylang=en"&gt;CodeDOM
Subset Code Provider&lt;/a&gt;. The more interesting bits from the download description:
&lt;/p&gt;
&lt;p&gt;
&lt;!--StartFragment --&gt;&lt;font class=detailsContent&gt;&lt;em&gt;The &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7e979ed3-416b-43b6-993b-308a160831b6&amp;amp;displaylang=en"&gt;Microsoft
Intermediate Language (MSIL) code provider&lt;/a&gt; takes a CodeDom tree and generates
MSIL syntax. MSIL code provider generates all the CodeDom elements that are part of
the 1.1 conformance spec. MSIL code provider generates code for most of the CodeDom
types that shipped in V1.1.&lt;/em&gt;&lt;/font&gt; Why emit C# when you can emit IL!
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;The &lt;/em&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=61bb0de4-0359-418c-bd70-9693d2fe99ca&amp;amp;displaylang=en"&gt;&lt;em&gt;CodeDom
Subset Code provider&lt;/em&gt;&lt;/a&gt;&lt;em&gt; consumes CodeDom trees in the way the C# code provider
does, but whenever a node that does not fall into the subset is encountered, it emits
a #error in the generated code. This will alert to the CodeDom tree builder of any
place in their code where they don't meet subset conformance. &lt;/em&gt;Roll your own subset
of the C# language - anyone interested?
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=4db2cffe-4aaa-409c-88ee-553dce5ce090" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,4db2cffe-4aaa-409c-88ee-553dce5ce090.aspx</comments>
      <category>.NET</category>
      <category>C#</category>
      <category>Cool Download</category>
    </item>
    <item>
      <trackback:ping>http://chrison.net/Trackback.aspx?guid=f9f2fe9f-7653-485d-bbc8-43047208f179</trackback:ping>
      <pingback:server>http://chrison.net/pingback.aspx</pingback:server>
      <pingback:target>http://chrison.net/PermaLink,guid,f9f2fe9f-7653-485d-bbc8-43047208f179.aspx</pingback:target>
      <dc:creator>Christoph Wille</dc:creator>
      <wfw:comment>http://chrison.net/CommentView,guid,f9f2fe9f-7653-485d-bbc8-43047208f179.aspx</wfw:comment>
      <wfw:commentRss>http://chrison.net/SyndicationService.asmx/GetEntryCommentsRss?guid=f9f2fe9f-7653-485d-bbc8-43047208f179</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <em>
            <a href="http://www.itu.dk/research/c5/">C5</a> is a library of generic collection
classes for the upcoming version 2.0 of the .Net platform. C5 extends the standard
.Net System.Collections.Generic namespace with tree data structures, heap based priority
queues and hash indexed array lists and linked lists, making it more comprehensive
than most collection class libraries on similar platforms. Unlike many other collection
class libraries, C5 is designed with a strict policy of supporting "code to interface
not implementation".</em>
        </p>
        <p>
Now that definitely looks worth checking out!
</p>
        <img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=f9f2fe9f-7653-485d-bbc8-43047208f179" />
      </body>
      <title>C5 - A library of generic collections</title>
      <guid isPermaLink="false">http://chrison.net/PermaLink,guid,f9f2fe9f-7653-485d-bbc8-43047208f179.aspx</guid>
      <link>http://chrison.net/C5ALibraryOfGenericCollections.aspx</link>
      <pubDate>Tue, 24 Aug 2004 06:35:52 GMT</pubDate>
      <description>&lt;p&gt;
&lt;em&gt;&lt;a href="http://www.itu.dk/research/c5/"&gt;C5&lt;/a&gt; is a library of generic collection
classes for the upcoming version 2.0 of the .Net platform. C5 extends the standard
.Net System.Collections.Generic namespace with tree data structures, heap based priority
queues and hash indexed array lists and linked lists, making it more comprehensive
than most collection class libraries on similar platforms. Unlike many other collection
class libraries, C5 is designed with a strict policy of supporting "code to interface
not implementation".&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
Now that definitely looks worth checking out!
&lt;/p&gt;
&lt;img width="0" height="0" src="http://chrison.net/aggbug.ashx?id=f9f2fe9f-7653-485d-bbc8-43047208f179" /&gt;</description>
      <comments>http://chrison.net/CommentView,guid,f9f2fe9f-7653-485d-bbc8-43047208f179.aspx</comments>
      <category>.NET</category>
      <category>2 Ohhhh</category>
      <category>Use the source Luke</category>
      <category>C#</category>
    </item>
  </channel>
</rss>