<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>pushbomb &#187; software as strategic</title>
	<atom:link href="http://team.pushbomb.com/category/software-as-strategic/feed/" rel="self" type="application/rss+xml" />
	<link>http://team.pushbomb.com</link>
	<description>tv programmed by the collective</description>
	<lastBuildDate>Tue, 05 Jan 2010 22:49:48 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='team.pushbomb.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/a08732ed34e6814d5a5513fe8cde5696?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>pushbomb &#187; software as strategic</title>
		<link>http://team.pushbomb.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://team.pushbomb.com/osd.xml" title="pushbomb" />
	<atom:link rel='hub' href='http://team.pushbomb.com/?pushpress=hub'/>
		<item>
		<title>Silverlight Bing Maps &#8211; Now with StreetSide!!</title>
		<link>http://team.pushbomb.com/2009/12/17/silverlight_finally_gets_streetside_view_in_maps/</link>
		<comments>http://team.pushbomb.com/2009/12/17/silverlight_finally_gets_streetside_view_in_maps/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 18:32:24 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Deep Earth]]></category>
		<category><![CDATA[Digital Media]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Geographic Apps]]></category>
		<category><![CDATA[HD Video]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[PlugIns & Extensibility (MEF)]]></category>
		<category><![CDATA[Prism]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Smooth Streaming]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[silverlight 3]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[tangent.ux media platform]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2009/12/17/silverlight_finally_gets_streetside_view_in_maps/</guid>
		<description><![CDATA[This is pretty awesome. I have been deep into Bing Maps as well as the Deep Earth project and have ported it to Prism as well as the brand spanking new extension DLL for StreetSide view.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1940&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This is pretty awesome. I have been deep into Bing Maps as well as the Deep Earth project and have ported it to Prism as well as the brand spanking new extension DLL for StreetSide view.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Here is what my old apartment looks like for example (and click the link to play yourself – routes, free form drawing of geometries, reverse geo-code, etc. etc.</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://go.pushbomb.com/deepearthnext.html"><img style="display:inline;border-width:0;" title="silverlightstreetview" border="0" alt="silverlightstreetview" src="http://dcarr.files.wordpress.com/2009/12/silverlightstreetview.png?w=644&#038;h=375" width="644" height="375" /></a> </p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://go.pushbomb.com/deepearthnext.html">Here is the link.</a></p>
<p>&#160;</p>
<p>So how is this possible? I’ll keep this short and if anyone needs more I’d be happy to help.</p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2009/12/highlevel.png"><img style="display:inline;border-width:0;" title="highlevel" border="0" alt="highlevel" src="http://dcarr.files.wordpress.com/2009/12/highlevel_thumb.png?w=640&#038;h=198" width="640" height="198" /></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>Look close at the versions. You need the new CTP of Extended Modes and the 1.0.1.0 of the two map controls.</p>
<p>&#160;</p>
<p>&#160;</p>
<p>And using Prism makes Deep Earth a joy to work with:</p>
<p>&#160;</p>
<div style="padding:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8fb3aceb-4367-4763-b112-6d19970baf70" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background:#ddd;max-height:300px;overflow:scroll;padding:0;">
<ol style="background:#000000;white-space:wrap;margin:0 0 0 35px;">
<li> <span style="background:#000000;color:#ffffff;">&lt;</span><span style="color:#f9caca;">UserControl</span><span style="color:#ff6464;"> x</span><span style="color:#ffffff;">:</span><span style="color:#ff6464;">Class</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;pushbomb.geo.poc.Page&#8221;</li>
<li style="background:#0c0c0c;"> </span><span style="color:#ffffff;">   </span><span style="color:#ff6464;"> xmlns</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml/presentation&#8221;</span><span style="color:#ffffff;"> </li>
<li>    </span><span style="color:#ff6464;"> xmlns</span><span style="color:#ffffff;">:</span><span style="color:#ff6464;">x</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;http://schemas.microsoft.com/winfx/2006/xaml&#8221;</span><span style="color:#ff6464;"> xmlns</span><span style="color:#ffffff;">:</span><span style="color:#ff6464;">Regions</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation&#8221;</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">    </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">UserControl.Resources</span><span style="color:#ffffff;">&gt;</li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">        </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">ResourceDictionary</span><span style="color:#ffffff;">&gt;</li>
<li> </span><span style="color:#808080;">            </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">ResourceDictionary.MergedDictionaries</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">                </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">ResourceDictionary</span><span style="color:#ff6464;"> Source</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;/DeepEarth.BingMapsToolkit.Client.Common;component/resources/CommonStyles.xaml&#8221;</span><span style="color:#ffffff;"> /&gt;</li>
<li> </span><span style="color:#808080;">            </span><span style="color:#ffffff;">&lt;/</span><span style="color:#f9caca;">ResourceDictionary.MergedDictionaries</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#808080;">        </span><span style="color:#ffffff;">&lt;/</span><span style="color:#f9caca;">ResourceDictionary</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#808080;">    </span><span style="color:#ffffff;">&lt;/</span><span style="color:#f9caca;">UserControl.Resources</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#808080;">    </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">Grid</span><span style="color:#ff6464;"> x</span><span style="color:#ffffff;">:</span><span style="color:#ff6464;">Name</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;LayoutRoot&#8221;</span><span style="color:#ff6464;"> Background</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;Black&#8221;</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#808080;">        </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">ContentControl</span><span style="color:#ffffff;">  </span><span style="color:#ff6464;"> Content</span><span style="color:#ffffff;">=&#8221;{</span><span style="color:#f8c7c7;">Binding</span><span style="color:#ff0000;"> Map</span><span style="color:#ffffff;">}</span><span style="color:#9797ff;">&#8220;</span><span style="color:#ff6464;"> HorizontalContentAlignment</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;Stretch&#8221;</span><span style="color:#ff6464;"> VerticalContentAlignment</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;Stretch&#8221;</span><span style="color:#ffffff;"> &gt;</li>
<li style="background:#0c0c0c;"> </li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">        </span><span style="color:#ffffff;">&lt;/</span><span style="color:#f9caca;">ContentControl</span><span style="color:#ffffff;">&gt;</li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">        </span><span style="color:#ffffff;">&lt;</span><span style="color:#f9caca;">ItemsControl</span><span style="color:#ffffff;"> </span><span style="color:#ff6464;"> Regions</span><span style="color:#ffffff;">:</span><span style="color:#ff6464;">RegionManager.RegionName</span><span style="color:#ffffff;">=</span><span style="color:#9797ff;">&#8220;WidgetsRegion&#8221;</span><span style="color:#ffffff;"> /&gt;</li>
<li> </li>
<li style="background:#0c0c0c;"> </li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#808080;">    </span><span style="color:#ffffff;">&lt;/</span><span style="color:#f9caca;">Grid</span><span style="color:#ffffff;">&gt;</li>
<li> &lt;/</span><span style="color:#f9caca;">UserControl</span><span style="color:#ffffff;">&gt;</li>
<li style="background:#0c0c0c;"> </span></li>
</ol>
</div>
</div>
</div>
<p>&#160;</p>
<p>&#160;</p>
<div style="padding:5px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a37f21ad-567f-4847-b586-ccdf4ab4d658" class="wlWriterEditableSmartContent">
<div style="border:#000080 1px solid;font-family:'Courier New', Courier, Monospace;font-size:10pt;">
<div style="background:#000080;color:#fff;font-family:Verdana, Tahoma, Arial, sans-serif;font-weight:bold;padding:2px 5px;">Code Snippet</div>
<div style="background:#ddd;max-height:300px;overflow:scroll;padding:0;">
<ol style="background:#000000;white-space:wrap;margin:0 0 0 35px;">
<li> <span style="background:#000000;color:#3e60fd;">using</span><span style="color:#ffffff;"> System</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Windows;</li>
<li style="background:#0c0c0c;"> </span><span style="color:#3e60fd;">using</span><span style="color:#ffffff;"> Microsoft</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Maps</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">MapControl</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Core;</li>
<li> </span><span style="color:#3e60fd;">using</span><span style="color:#ffffff;"> Microsoft</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Practices</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Unity;</li>
<li style="background:#0c0c0c;"> </span><span style="color:#3e60fd;">using</span><span style="color:#ffffff;"> pushbomb</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">composite</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">core</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Infrastructure;</li>
<li> </span><span style="color:#3e60fd;">using</span><span style="color:#ffffff;"> pushbomb</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">composite</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">core</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Interfaces;</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#3e60fd;">namespace</span><span style="color:#ffffff;"> pushbomb</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">geo</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">poc</li>
<li style="background:#0c0c0c;"> {</li>
<li>     </span><span style="color:#3e60fd;">public</span><span style="color:#ffffff;"> </span><span style="color:#3e60fd;">class</span><span style="color:#ffffff;"> </span><span style="color:#2b91af;">MapViewModel</span><span style="color:#ffffff;"> : </span><span style="color:#2b91af;">ViewModelBase</span><span style="color:#ffffff;">, </span><span style="color:#2b91af;">IMapViewContainer</li>
<li style="background:#0c0c0c;"> </span><span style="color:#ffffff;">    {</li>
<li>         </span><span style="color:#3e60fd;">private</span><span style="color:#ffffff;"> </span><span style="color:#3e60fd;">readonly</span><span style="color:#ffffff;"> </span><span style="color:#2b91af;">InnerViewContainer</span><span style="color:#00ffff;">&lt;</span><span style="color:#2b91af;">MapShellView</span><span style="color:#00ffff;">&gt;</span><span style="color:#ffffff;"> _inner;</li>
<li style="background:#0c0c0c;"> </li>
<li> </li>
<li style="background:#0c0c0c;">         </span><span style="color:#3e60fd;">public</span><span style="color:#ffffff;"> MapViewModel(</span><span style="color:#2b91af;">IApplicationContext</span><span style="color:#ffffff;"> context, [</span><span style="color:#2b91af;">Dependency</span><span style="color:#ffffff;">(</span><span style="color:#808080;">"Shell"</span><span style="color:#ffffff;">)] </span><span style="color:#2b91af;">FrameworkElement</span><span style="color:#ffffff;"> view)</li>
<li>             : </span><span style="color:#3e60fd;">base</span><span style="color:#ffffff;">(context, view)</li>
<li style="background:#0c0c0c;">         {</li>
<li>             _inner </span><span style="color:#00ffff;">=</span><span style="color:#ffffff;"> </span><span style="color:#3e60fd;">new</span><span style="color:#ffffff;"> </span><span style="color:#2b91af;">InnerViewContainer</span><span style="color:#00ffff;">&lt;</span><span style="color:#2b91af;">MapShellView</span><span style="color:#00ffff;">&gt;</span><span style="color:#ffffff;">(view, </span><span style="color:#3e60fd;">this</span><span style="color:#ffffff;">);</li>
<li style="background:#0c0c0c;">         }</li>
<li> </li>
<li style="background:#0c0c0c;"> </span><span style="color:#ff0000;">        #region</span><span style="color:#ffffff;"> IMapViewContainer Members</li>
<li> </li>
<li style="background:#0c0c0c;">         </span><span style="color:#3e60fd;">public</span><span style="color:#ffffff;"> </span><span style="color:#2b91af;">MapBase</span><span style="color:#ffffff;"> Map</li>
<li>         {</li>
<li style="background:#0c0c0c;">             </span><span style="color:#3e60fd;">get</span><span style="color:#ffffff;"> { </span><span style="color:#3e60fd;">return</span><span style="color:#ffffff;"> AppContext</span><span style="color:#00ffff;">.</span><span style="color:#ffffff;">Map; }</li>
<li>         }</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#ff0000;">        #endregion</li>
<li style="background:#0c0c0c;"> </li>
<li> </span><span style="color:#ffffff;">        </span><span style="color:#3e60fd;">public</span><span style="color:#ffffff;"> </span><span style="color:#3e60fd;">override</span><span style="color:#ffffff;"> </span><span style="color:#3e60fd;">void</span><span style="color:#ffffff;"> Initialize()</li>
<li style="background:#0c0c0c;">         {</li>
<li>             InvokePropertyChanged(() </span><span style="color:#00ffff;">=&gt;</span><span style="color:#ffffff;"> Map);</li>
<li style="background:#0c0c0c;">         }</li>
<li>     }</li>
<li style="background:#0c0c0c;"> \</span></li>
</ol>
</div>
</div>
</div>
<br />Posted in Deep Earth, Digital Media, Framework Design, Geographic Apps, HD Video, Linq, Multithreading, PlugIns &amp; Extensibility (MEF), Prism, silverlight 3, Siverlight, Smooth Streaming, software as strategic, Software Design, tangent.ux media platform, Technology, Tips and Tricks  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1940/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1940/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1940/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1940&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/12/17/silverlight_finally_gets_streetside_view_in_maps/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2009/12/silverlightstreetview.png" medium="image">
			<media:title type="html">silverlightstreetview</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2009/12/highlevel_thumb.png" medium="image">
			<media:title type="html">highlevel</media:title>
		</media:content>
	</item>
		<item>
		<title>Reactive Extensions Now Available &#8211; This is Exciting Work</title>
		<link>http://team.pushbomb.com/2009/11/18/reactive-extensions-now-available-this-is-exciting-work/</link>
		<comments>http://team.pushbomb.com/2009/11/18/reactive-extensions-now-available-this-is-exciting-work/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 13:20:07 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[F#]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Multithreading]]></category>
		<category><![CDATA[Observable]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[silverlight 3]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[reactive extensions]]></category>
		<category><![CDATA[rx framework]]></category>
		<category><![CDATA[SilverLight]]></category>

		<guid isPermaLink="false">http://team.pushbomb.com/?p=1918</guid>
		<description><![CDATA[vLabs: Reactive Extensions for .NET (Rx)
&#160;
http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx
&#160;




&#160;

About Rx
Rx is a library for composing asynchronous and event-based programs using observable collections.
The “A” in “AJAX” stand for asynchronous, and indeed modern Web-based and Cloud-based applications are fundamentally asynchronous. In fact, Silverlight bans all blocking networking and threading operations. Asynchronous programming in by no means restricted to Web and Cloud [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1918&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h3>vLabs: Reactive Extensions for .NET (Rx)</h3>
<p>&nbsp;</p>
<p><a href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx">http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx</a></p>
<p>&nbsp;</p>
<div>
<div>
<div><img src="http://i.msdn.microsoft.com/ee794896.DevLabs_Rx_Project%28en-us%29.png" alt="" align="Left" /></div>
</div>
<p>&nbsp;</p>
</div>
<h4>About Rx</h4>
<p>Rx is a library for composing asynchronous and event-based programs using observable collections.</p>
<p>The “A” in “AJAX” stand for asynchronous, and indeed modern Web-based and Cloud-based applications are fundamentally asynchronous. In fact, Silverlight bans all blocking networking and threading operations. Asynchronous programming in by no means restricted to Web and Cloud scenarios, however. Traditional desktop applications also have to maintain responsiveness in the face of long latency IO operations and other expensive background tasks.</p>
<p>Another common attribute of interactive applications, whether Web/Cloud or client-based, is that they are event-driven. The user interacts with the application via a GUI that receives event streams asynchronously from the mouse, keyboard, and other inputs.</p>
<p>Rx is a superset of the standard LINQ sequence operators that exposes asynchronous and event-based computations as push-based, observable  collections via the new .NET 4.0 interfaces IObservable&lt;T&gt; and IObserver&lt;T&gt;.  These are the mathematical dual of the familiar IEnumerable&lt;T&gt; and IEnumerator&lt;T&gt; interfaces for pull-based, enumerable collections in the .NET framework.</p>
<p>The IEnumerable&lt;T&gt; and IEnumerator&lt;T&gt; interfaces allow developers to create reusable abstractions to consume and transform values from a wide range of concrete enumerable collections such as arrays, lists, database tables, and XML documents. Similarly, Rx allows programmers to glue together complex event processing and asynchronous computations using LINQ queries over observable collections such as .NET events and APM-based computations, PFx concurrent Task&lt;T&gt;,  the Windows 7 Sensor and Location APIs, SQL StreamInsight temporal event streams , F# first-class events, and async workflows.</p>
<p>Play with Rx, stress it, evaluate it, and tell us what you think.</p>
<br />Posted in F#, Functional Programming, Linq, Multithreading, Observable, silverlight 3, Siverlight, software as strategic Tagged: reactive extensions, rx framework, SilverLight <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1918/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1918/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1918/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1918&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/11/18/reactive-extensions-now-available-this-is-exciting-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://i.msdn.microsoft.com/ee794896.DevLabs_Rx_Project%28en-us%29.png" medium="image" />
	</item>
		<item>
		<title>Deep Zoom features updated &#8211; silverlight 3 media platform</title>
		<link>http://team.pushbomb.com/2009/08/05/deep-zoom-silverlight3-software-update/</link>
		<comments>http://team.pushbomb.com/2009/08/05/deep-zoom-silverlight3-software-update/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 16:58:56 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Adobe Video Formats]]></category>
		<category><![CDATA[Art and Animation]]></category>
		<category><![CDATA[Cannot live Without]]></category>
		<category><![CDATA[Digital Media]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[HD Video]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Live Smooth Streaming]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[Smooth Streaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[silverlight 3]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[tangent.ux media platform]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[deep zoom]]></category>
		<category><![CDATA[Deep Zoom Sample]]></category>
		<category><![CDATA[HD]]></category>
		<category><![CDATA[media platform]]></category>
		<category><![CDATA[New Release]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[tangent.ux]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://blog.domaindotnet.com/?p=1612</guid>
		<description><![CDATA[This build has significant deep zoom related enhancements, specifically around movie genre selection. There is a lot more coming!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1612&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.stumbleupon.com/submit?url=http://blog.domaindotnet.com/2009/08/05/deep-zoom-silverlight3-software-update/%26title%3DThe%2BArticle%2BTitle"> <img src="http://cdn.stumble-upon.com/images/120x20_thumb_black.gif" border="0" alt="" /></a></p>
<h3 style="text-align:left;">new deep zoom related enhancements - click below<a href="http://media.tangentux.com/deepzoom.htm"><img class="size-large wp-image-1613 alignright" title="new deep zoom enhanced featured" src="http://dcarr.files.wordpress.com/2009/08/deepzoom.png?w=446&#038;h=356" alt="new deep zoom enhanced featured" width="446" height="356" /></a></h3>
<p><a href="http://smooth.s3.amazonaws.com/deepzoom.htm"></a></p>
<br />Posted in Adobe Video Formats, Art and Animation, Cannot live Without, Digital Media, Framework Design, HD Video, Industry News, Linq, Live Smooth Streaming, SilverLight, silverlight 3, Smooth Streaming, software as strategic, tangent.ux media platform, Technology, Visual Studio 2010 Tagged: .NET, 3D, C#, deep zoom, Deep Zoom Sample, HD, media platform, New Release, nhibernate, SilverLight, silverlight 3, Software Design, tangent.ux, Video, WCF <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1612/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1612&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/08/05/deep-zoom-silverlight3-software-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://cdn.stumble-upon.com/images/120x20_thumb_black.gif" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2009/08/deepzoom.png?w=600" medium="image">
			<media:title type="html">new deep zoom enhanced featured</media:title>
		</media:content>
	</item>
		<item>
		<title>Silverlight 3 Media The Complete Story with Advanced Sample</title>
		<link>http://team.pushbomb.com/2009/07/24/silverlight_3_digital_media_complete_information_media_platform/</link>
		<comments>http://team.pushbomb.com/2009/07/24/silverlight_3_digital_media_complete_information_media_platform/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 00:04:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Adobe Video Formats]]></category>
		<category><![CDATA[Art and Animation]]></category>
		<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Digital Media]]></category>
		<category><![CDATA[HD Video]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Live Smooth Streaming]]></category>
		<category><![CDATA[PlugIns & Extensibility (MEF)]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[Smooth Streaming]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[silverlight 3]]></category>
		<category><![CDATA[acceleration]]></category>
		<category><![CDATA[acquisition]]></category>
		<category><![CDATA[adaptive]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[advantage]]></category>
		<category><![CDATA[agencies]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[audiences]]></category>
		<category><![CDATA[Audio]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[Blend]]></category>
		<category><![CDATA[bridge]]></category>
		<category><![CDATA[broadcasters]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[Bureau]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[codecs]]></category>
		<category><![CDATA[Compatible]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[components]]></category>
		<category><![CDATA[computer]]></category>
		<category><![CDATA[congestion]]></category>
		<category><![CDATA[conversion]]></category>
		<category><![CDATA[cost]]></category>
		<category><![CDATA[Datacenter]]></category>
		<category><![CDATA[demo]]></category>
		<category><![CDATA[Developers]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[Digital]]></category>
		<category><![CDATA[distribution]]></category>
		<category><![CDATA[ecosystem]]></category>
		<category><![CDATA[Encoder]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[Expression]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[features]]></category>
		<category><![CDATA[Individualization]]></category>
		<category><![CDATA[innovation]]></category>
		<category><![CDATA[Integration]]></category>
		<category><![CDATA[Learn]]></category>
		<category><![CDATA[leverage]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[Live]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Manager]]></category>
		<category><![CDATA[measurement]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[Monetize]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Motion]]></category>
		<category><![CDATA[Motor]]></category>
		<category><![CDATA[Movie]]></category>
		<category><![CDATA[Multicast]]></category>
		<category><![CDATA[navigation]]></category>
		<category><![CDATA[needs]]></category>
		<category><![CDATA[norm]]></category>
		<category><![CDATA[Novell]]></category>
		<category><![CDATA[Online]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[organizations]]></category>
		<category><![CDATA[Overview]]></category>
		<category><![CDATA[owners]]></category>
		<category><![CDATA[Pack]]></category>
		<category><![CDATA[partners]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[photo]]></category>
		<category><![CDATA[Picture]]></category>
		<category><![CDATA[pipeline]]></category>
		<category><![CDATA[platforms]]></category>
		<category><![CDATA[Play]]></category>
		<category><![CDATA[playback]]></category>
		<category><![CDATA[player]]></category>
		<category><![CDATA[players]]></category>
		<category><![CDATA[Playlists]]></category>
		<category><![CDATA[PlayReady]]></category>
		<category><![CDATA[processor]]></category>
		<category><![CDATA[Providers]]></category>
		<category><![CDATA[QUMU]]></category>
		<category><![CDATA[RTMP]]></category>
		<category><![CDATA[scenarios]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Smooth]]></category>
		<category><![CDATA[SMPTE]]></category>
		<category><![CDATA[Standard]]></category>
		<category><![CDATA[Studio]]></category>
		<category><![CDATA[subscriptions]]></category>
		<category><![CDATA[Support]]></category>
		<category><![CDATA[supports]]></category>
		<category><![CDATA[talent]]></category>
		<category><![CDATA[technique]]></category>
		<category><![CDATA[techniques]]></category>
		<category><![CDATA[technologies]]></category>
		<category><![CDATA[Television]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[templates]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[Toyota]]></category>
		<category><![CDATA[Trailer]]></category>
		<category><![CDATA[Video]]></category>
		<category><![CDATA[Visual]]></category>
		<category><![CDATA[XAML]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2009/07/25/silverlight_3_digital_media_complete_information_media_platform/</guid>
		<description><![CDATA[Silverlight 3 is an amazing release but perhaps mostly for digital media. Here is the full explanation of what is new as well as our commentary on what we are using in our new Silverlight 3 Media Platform. The demo which shows off most of below (and much more including deep zoom) check out the Movie Trailer sample of our platform. This platform can be used by anyone as a site template for media, a personal app, and is fully customizable either as Expression Encoder 3 templates (no support for 2) or controls with template parts/skin exposed customizations just like Microsoft controls.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1472&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Silverlight 3 is an amazing release but perhaps mostly for digital media. Here is the full explanation of what is new as well as our commentary on what we are using in our new Silverlight 3 Media Platform.</p>
<p>The demo which shows off most of below (and much more including deep zoom) check out the Movie Trailer sample of our platform. This platform can be used by anyone as a site template for media, a personal app, and is fully customizable either as Expression Encoder 3 templates (no support for 2) or controls with template parts/skin exposed customizations just like Microsoft controls.</p>
<p><strong><code><div id="x-video-0" class="video-player">
<embed id="video0" src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.18&#038;guid=B04BewKm&#038;width=510&#038;height=382&#038;locksize=no&#038;qc_publisherId=p-18-mFEk4J448M" type="application/x-shockwave-flash" width="510" height="382" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"" title="tangent.ux Silverlight 3 Media Platform"></embed>
</div></code></strong></p>
<p align="right">
<p align="right"><a href="http://www.tangentux.com/">http://www.tangentux.com/</a></p>
<ul>
<li>
<h6>True HD video</h6>
</li>
<li>
<h6>Smooth Streaming</h6>
</li>
<li>
<h6>Go out of browser</h6>
</li>
<li>
<h6>Mac, Windows, and Linux</h6>
</li>
<li>
<h6>Millions of skilled developers to help you</h6>
</li>
<li>
<h6>Seamless Designer-Developer workflow</h6>
</li>
<li>
<h6>Monetize your assets</h6>
</li>
<li>
<h6>Silverlight DRM, Powered by PlayReady</h6>
</li>
<li>
<h6>Compatible with Windows Media DRM 10</h6>
</li>
<li>
<h6>Third Party DRM Providers</h6>
</li>
<li>
<h6>Advertising</h6>
</li>
<li>
<h6>Lower delivery costs</h6>
</li>
<li>
<h6>Internet Information Services (IIS) 7.0 Media Services</h6>
</li>
<li>
<h6>Windows Media Services 2008</h6>
</li>
<li>
<h6>Multicast Support for Silverlight</h6>
</li>
</ul>
<p><a href="http://www.tangentux.com/"></a></p>
<h4>True HD video</h4>
<p>Customers can enjoy 720/1080p true HD-quality video using H.264 (MP4/F4V) or WMV/VC-1. Use your existing Windows Media library or add support for third-party codecs.</p>
<p>Silverlight 3 now supports H.264 natively for playback of MP4 or F4V files. Silverlight also supports Windows Media Video (WMV) 9, which is Microsoft&#8217;s implementation of the Society of Motion Picture and Television Engineers (SMPTE) VC-1 codec standard. In addition to WMA and WMA Pro audio codecs, Silverlight supports MP3 audio and with Silverlight 3 supports MP4 standard AAC audio.</p>
<p>With Silverlight 3 it’s easy to add in support for managed codecs. Developers can deliver non-native Silverlight codecs via an application, and using the new Raw AV pipeline audio or video is then rendered in Silverlight.</p>
<p>Leveraging graphics processor unit (GPU) hardware acceleration, Silverlight experiences can now be delivered in true full-screen HD (720p+). The GPU can be used for windowed or full-screen video scaling enabling smoother playback.</p>
<p>Silverlight&#8217;s support for VC-1 and legacy Windows Media Video formats means that existing WMV content libraries are Silverlight-ready. Video encoded for Silverlight can be simultaneously delivered to other Windows Media compatible players on a variety of platforms and devices.</p>
<h4><a name="smooth"></a>Smooth Streaming</h4>
<p>Extend viewing times using Smooth Streaming. Adjust the quality in real-time based upon the consumer’s changing bandwidth and CPU conditions. Get minimal buffering and quick start-up time using HTTP-based adaptive streaming.</p>
<p>Smooth Streaming is a new extension for Internet Information Services (IIS) 7.0 Media Services, enabling adaptive streaming of media to Silverlight clients via HTTP.</p>
<p>Smooth Streaming dynamically detects and seamlessly switches, in real time, the video quality of a media file that a Silverlight player receives based on local bandwidth and CPU conditions. Consumers with high bandwidth connections can experience HD quality streaming while others with lower bandwidth speeds receive the appropriate stream for their connectivity, allowing consumers across the board to enjoy a compelling, uninterrupted streaming experience which leads to extended audience engagement.</p>
<p>Media companies can boost advertising and subscription revenues by using true HD (720p+) video with uninterrupted delivery to extend viewing times. By using Smooth Streaming, leverage the massive scale of existing HTTP infrastructure. Proprietary streaming networks have much fewer resources than HTTP and network congestion can limit access to popular content.</p>
<p>Live Smooth Streaming (in-beta) also enables PVR-style access and navigation to live video streams. Join events in progress and quickly seek to the beginning, rewind the highlights and enjoy the Silverlight experience in your own way.</p>
<h4><a name="goout"></a>Go out of browser</h4>
<p>Play video whether you are connected via the Web or not. Save content locally for disconnected scenarios and update when you connect.</p>
<h4><a name="macwindow"></a>Mac, Windows, and Linux</h4>
<p>When you create applications for Silverlight you’re actually creating one application that will run equally on Internet Explorer, Firefox and Safari on Windows, Mac and Linux. Silverlight on different platforms and browsers has exactly the same functionality, ensuring the same experience for all your users. Microsoft is working with Novell to offer Silverlight support for the Linux platform. The Mono Project is an open-source initiative hosted at <a href="http://www.mono-project.com/Moonlight">http://www.mono-project.com/Moonlight</a>. This is available for all major Linux distributions. Moonlight 2.0 supports C# and other Dynamic Languages, and includes controls, layout and media.</p>
<h4><a name="millions"></a>Millions of skilled developers to help you</h4>
<p>Tap into the talent pool of six million .NET developers to find the expertise you need. A vibrant ecosystem means it’s easy to find partners and pre-built components.</p>
<h4><a name="seamless"></a>Seamless Designer-Developer workflow</h4>
<p>Accelerate time to market as designers collaborate with developers using the integration between Expression Studio’s creative tools and the Visual Studio family of development tools.</p>
<p>Talk to anyone building interactive applications, and they will tell you about the promise and the frustration of user experience design. Concepts that look great in photo editing tools rarely lend themselves well to actual implementation, while tools that mash together designer and developer disciplines often fall short. In organizations lucky enough to have dedicated designers, they are often forced to spend more time on programming than on actual design. While the integration of developer and designer disciplines is increasing, it is hardly the norm. This is why Microsoft® Expression® Studio was created.</p>
<p>Whether developing applications for the desktop or the Web, the Expression products will allow designers to fully engage with developers to finally bridge the gap in the designer/developer workflow. This will bring together the best minds in design and development to create applications and sites with a focus on great User Experience (UX).</p>
<p>Expression Blend shares project format, XAML, and .NET development with Visual Studio for Designer-Developer workflow; and has added support for Silverlight. This means that the designer can work on the same project as the developer, and thus requires no re-writing of code or use of exporters or clunky add-ins. It also means that developer practices can be applied to the UI mark-up, such as diff’ing and source control.</p>
<h4><a name="monetize"></a>Monetize your assets</h4>
<p>Silverlight offers a choice of content protection techniques for subscriptions: End-user authentication, SSL, Web playlists, Silverlight DRM, and Windows Media DRM.</p>
<p>With the explosive growth in streaming online video and rich internet experiences, it’s critical to ensure your content and your business models are secure. The new peaks in online video audiences not only create a great opportunity to explore new revenue opportunities, but to also expose the challenges in managing and protecting valuable media assets. A variety of content protection schemes, including Digital Rights Management (DRM); end-user authentication and authorization; Web Playlists; and SSL ensure that content owners can fully monetize and protect their media assets.</p>
<h4><a name="drm"></a>Silverlight DRM, Powered by PlayReady</h4>
<p>Silverlight DRM, Powered by PlayReady is a content encryption technology designed and optimized to enable key Silverlight online content distribution scenarios including live streaming, on-demand streaming, progressive download, and adaptive streaming (e.g., IIS7 Smooth Streaming). Unlike simple stream or link encryption technologies (e.g., Adobe’s RTMP/e), Silverlight DRM, encrypts the video and audio in a secure wrapper ensuring content, including advertising, stays protected from server to Silverlight plug-in until it is decompressed during playback.</p>
<p>Silverlight DRM is a small, cross-platform version of the PlayReady client used exclusively by the Silverlight Web browser plug-in. Analogous to other online content services, a Silverlight service that offers protected content uses the PlayReady Server SDK (or alternatively, the WM Rights Manager 10.1 SDK) to first package (encrypt) the Windows Media Audio (WMA) and Windows Media Video (WMV) content. When a consumer then wants to play that content a license is requested and obtained from a license acquisition server that uses the PlayReady Server SDK.</p>
<p>The Silverlight plug-in includes an individualized PlayReady client acquired from an online service, hosted by Microsoft. Individualization binds the run-time client to the computer on which the client was initially installed. Every end-user is given an individualized Playready component and different certified license keys. This significantly reduces the danger of global breaks. If a specific version of a PlayReady client becomes compromised, it can be barred from acquiring licenses for new digital media files unless the latest version of the PlayReady client is downloaded that is robust against the circumvention.</p>
<h4><a name="compatible-drm"></a>Compatible with Windows Media DRM 10</h4>
<p>Silverlight DRM allows content owners to deliver their protected content using either legacy WMDRM10 or new PlayReady encryption. This enables content owners to deliver existing libraries of WMDRM10 content to Silverlight without having to re-encrypt anything and means that the same protected content can be played back in both Silverlight and Windows Media based-clients.</p>
<h4><a name="third-party-drm"></a>Third Party DRM Providers</h4>
<p>With the extensibility and openness of Silverlight, third-parties are able to build content protection solutions, extending customer choice and opening up infrastructure options.</p>
<p>SKY player in Silverlight using Silverlight DRM, Powered by PlayReady</p>
<h4><a name="instream"></a>Advertising</h4>
<p>Silverlight, approved by the Interactive Advertising Bureau (IAB), supports all leading advertising scenarios, including linear pre-rolls, post-rolls, interstitials as well as non-linear tickers, bugs and transparent overlays.</p>
<p>As the market for online advertising continues to grow, the technology powering rich media-based ads needs to be up for the challenge. Complex business needs and creative capabilities demand more than simple animation and basic tagging – which is where Silverlight comes in. Silverlight enables lightning-fast development through familiar markup and controls based on XML that, combined with integrated productivity tools such as Expression Studio and Visual Studio, helps designers and developers work better together and push the limits of interactive innovation.</p>
<p>When designers and developers work together to bring advertising ideas to life, campaigns can be more nimble, more powerful and more effective. Silverlight enables agencies and advertisers to create, launch, measure, and quickly respond to online advertising campaigns through powerful controls and fully integrated tools.</p>
<p>Benefits of Silverlight for Rich Media and In-stream Advertising</p>
<ul>
<li><strong>User Engagement </strong><br />
Silverlight powers the most compelling media experiences on the Web for rich media and in-stream advertising, offering the most effective engagement and conversion opportunities for advertisers</li>
<li><strong>Discoverability </strong><br />
Silverlight is the most discoverable rich media ad platform with superior SEO capabilities</li>
<li><strong>Analytics </strong><br />
Silverlight supports robust and complex online advertising reporting and analytics to enable effective campaign response and measurement</li>
</ul>
<p>Online campaigns created with Silverlight can be more engaging, discoverable, and accountable than with other technologies</p>
<h4>Lower delivery costs</h4>
<p>Leverage existing HTTP infrastructure and improve delivery over proprietary streaming servers. Use multicast for Intranet-based executive broadcasts and online training.</p>
<p>Windows Server helps content providers realize new levels of reliability and scalability, all with lower-cost content delivery. Windows Server represents a significant competitive edge when delivering streaming media and/or applications cross-platform and cross-device, and is already in use by most major broadcasters around the world. Windows Server now powers HTTP-based adaptive streaming via Smooth Streaming.</p>
<h4><a name="iis"></a>Internet Information Services (IIS) 7.0 Media Services</h4>
<p>IIS Media Services is the new name (previously IIS Media Pack) for the media-relevant extensions for IIS. With IIS Media Services, Microsoft is offering an integrated media delivery platform for customers interested in delivering media over HTTP-based adaptive streaming, a new hybrid technique for content delivery. IIS Media Services provides an easy to deploy and manage set of capabilities for companies interested in taking advantage of the inherent scale and availability advantages that come with using standards-based HTTP as a media delivery protocol.</p>
<p>IIS Media Services provides the fundamental features of a proprietary streaming solution: bit rate throttling, secure playlists and logging capabilities that are required for cost effectively delivering, measuring and monetizing media content. On top of these basic media delivery features, IIS Media Services offers enhanced media delivery capabilities such as on-demand and live adaptive streaming (Smooth Streaming) which makes true HD (720p+) media experiences practical as well as real-time logging and analytics capabilities for measuring and maximizing return on your media investment.</p>
<h4><a name="wms"></a>Windows Media Services 2008</h4>
<p>Windows Media Services, like all of Windows Server 2008, is significantly more secure, reliable, and robust — and it is already considered by many customers to be the best in the market for live and n-demand streaming delivery using “traditional” streaming. The latest improvements provide twice the scalability over Windows Media Services 9.0.</p>
<p>In addition to its proven scalability and reliability, Windows Media Services now supports a Server Core installation, enabling reduced footprints for fixed-function streaming server scenarios, offering embedded appliance-like performance. Additionally, a cache/proxy plug-in is built in, making it easier to configure WMS for edge network enterprise and Internet topologies. Many features of Windows Media Services that were previously available only on Windows Server Enterprise and Datacenter are now available on Windows Server Standard, and all Standard features are now also available on Windows Web Server 2008. This makes the power of Windows Media Services 2008 available to a broader set of users at a lower cost.</p>
<h4><a name="multicast"></a>Multicast Support for Silverlight</h4>
<p>Windows Media Services, together with Silverlight and a third-party open-source plug-in from QUMU, can support multicast-enabled scenarios for executive broadcasts and training scenarios behind the firewall.</p>
<br />Posted in Adobe Video Formats, Art and Animation, C# 3.0 Enhancements, Digital Media, HD Video, Industry News, Live Smooth Streaming, PlugIns &amp; Extensibility (MEF), SilverLight, silverlight 3, Smooth Streaming, Software Design, Software Futures, Technology, Tips and Tricks Tagged: acceleration, acquisition, adaptive, adobe, advantage, agencies, Analytics, animation, audiences, Audio, authentication, authorization, bandwidth, Blend, bridge, broadcasters, browser, Bureau, code, codecs, Compatible, component, components, computer, congestion, conversion, cost, Datacenter, demo, Developers, development, Digital, distribution, ecosystem, Encoder, encryption, Expression, extensions, features, Individualization, innovation, Integration, Learn, leverage, libraries, Live, Management, Manager, measurement, Microsoft, Migration, Monetize, Mono, Motion, Motor, Movie, Multicast, navigation, needs, norm, Novell, Online, options, organizations, Overview, owners, Pack, partners, performance, photo, Picture, pipeline, platforms, Play, playback, player, players, Playlists, PlayReady, processor, Providers, QUMU, RTMP, scenarios, Services, Smooth, SMPTE, Standard, Studio, subscriptions, Support, supports, talent, technique, techniques, technologies, Technology, Television, template, templates, tools, Toyota, Trailer, Video, Visual, XAML <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1472/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1472/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1472/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1472&subd=dcarr&ref=&feed=1" /><div><a href="http://team.pushbomb.com/2009/07/24/silverlight_3_digital_media_complete_information_media_platform/"><img alt="tangent.ux Silverlight 3 Media Platform" src="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.original.jpg" width="160" height="120" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/07/24/silverlight_3_digital_media_complete_information_media_platform/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<enclosure url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.mp4" length="9577472" type="video/mp4" />

		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:group>
			<media:content url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.mp4" fileSize="9577472" type="video/mp4" medium="video" isDefault="true" duration="94" width="400" height="300" />

			<media:content url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_fmt1.ogv" fileSize="9577472" type="video/ogg" medium="video" isDefault="false" duration="94" width="400" height="300" />

			<media:rating scheme="urn:mpaa">g</media:rating>
			<media:title type="plain">tangent.ux Silverlight 3 Media Platform</media:title>
			<media:description type="plain">Watch the power of deep zoom when combined with the most demanding video. Normally you&#039;d be waiting and waiting. Finally now this is delivered at the speed of thought via the cloud (we support Amazon , Google, Azure, etc.)</media:description>
			<media:thumbnail url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.original.jpg" width="256" height="192" />
			<media:player url="http://v.wordpress.com/B04BewKm" width="400" height="300" />
		</media:group>
	</item>
		<item>
		<title>Silverlight 3 RELEASE Video Player Demo using H.264 AAC MP4</title>
		<link>http://team.pushbomb.com/2009/07/23/silverlight_3_beta_adobe_video_playerworking_now/</link>
		<comments>http://team.pushbomb.com/2009/07/23/silverlight_3_beta_adobe_video_playerworking_now/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 05:08:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Adobe Video Formats]]></category>
		<category><![CDATA[Digital Media]]></category>
		<category><![CDATA[HD Video]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Proof Driven Development]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Smooth Streaming]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[concepts implemented]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[f4v]]></category>
		<category><![CDATA[flash video]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[H.264]]></category>
		<category><![CDATA[H.264 AAC MP4]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[silverlight 3]]></category>
		<category><![CDATA[silverlight 3 beta]]></category>
		<category><![CDATA[silverlight adobe]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2009/04/05/silverlight_3_beta_adobe_video_playerworking_now/</guid>
		<description><![CDATA[Silverlight 3 plays H.264 AAC MP4  video just fine. Really. Here is proof and a bit of fun with hardware accelerated 50+ FPS results<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1314&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:left;"><a href="http://www.domaindotnet.com/silver3adobevideo.htm" target="_blank"><img class="  " style="display:inline;background:black 0 0;border:black 5px solid;margin:5px;" src="http://www.domaindotnet.com/adobe_logo.gif" alt="" width="90" height="91" align="right" /></a></p>
<p style="text-align:left;">
<p style="text-align:left;"><em>This is now a complete media platform for synchronized content from Internet (MRSS, iTunes) as well as private sources with our integration Cloud support out of the box for Amazon S3.</em></p>
<p style="text-align:left;"><em> </em></p>
<p style="text-align:left;"><em>Here is one of the framework generated experiences (you can do your own but not in this demo) which transforms the Apple Movie Trailers content:</em></p>
<p><a href="http://media.tangentux.com/index.htm"></a></p>
<p> </p>
<p> </p>
<p style="text-align:right;"><div id="x-video-1" class="video-player">
<embed id="video1" src="http://v.wordpress.com/wp-content/plugins/video/flvplayer.swf?ver=1.18&#038;guid=B04BewKm&#038;width=510&#038;height=382&#038;locksize=no&#038;qc_publisherId=p-18-mFEk4J448M" type="application/x-shockwave-flash" width="510" height="382" seamlesstabbing="true" allowfullscreen="true" allowscriptaccess="always" overstretch="true"" title="tangent.ux Silverlight 3 Media Platform"></embed>
</div></p>
<p style="text-align:left;">Or click here to go direct:</p>
<p><a href="http://media.tangentux.com/index.htm">http://media.tangentux.com/index.htm</a><a href="http://smooth.s3.amazonaws.com/default.htm"></a></p>
<p style="text-align:left;">Adobe has no reason to ignore <a href="http://en.wikipedia.org/wiki/Silverlight_" target="_blank">Silverlight </a>now…They do that at their own peril and eventual harm.</p>
<h3><strong> </strong></h3>
<p>We will have a free version of this media center environment (yes indeed it is a lot like Windows Media Center, only completely built for Internet content). The demo above shows off some Deep Zoom integration, as well as some intelligent playback optimized for quality over M4v, MP4, and associated file types.</p>
<p>There is also a large demo with tons of smooth streaming content. Let me know if your interested.</p>
<div style="text-align:left;">
<h3><strong><br />
</strong></h3>
</div>
<h3>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b73a0b4-ab03-4eb6-8d91-005e51fe20d9" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/adobe">adobe</a>,<a rel="tag" href="http://del.icio.us/popular/f4v">f4v</a>,<a rel="tag" href="http://del.icio.us/popular/flash+video">flash video</a>,<a rel="tag" href="http://del.icio.us/popular/Flex">Flex</a>,<a rel="tag" href="http://del.icio.us/popular/flv">flv</a>,<a rel="tag" href="http://del.icio.us/popular/RIA">RIA</a>,<a rel="tag" href="http://del.icio.us/popular/SilverLight">SilverLight</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight+3">silverlight 3</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight+3+beta">silverlight 3 beta</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight+adobe">silverlight adobe</a>,<a rel="tag" href="http://del.icio.us/popular/Video">Video</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7011ac63-84fa-4317-a7b5-0c6e00e87398" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/adobe">adobe</a>,<a rel="tag" href="http://technorati.com/tags/f4v">f4v</a>,<a rel="tag" href="http://technorati.com/tags/flash+video">flash video</a>,<a rel="tag" href="http://technorati.com/tags/Flex">Flex</a>,<a rel="tag" href="http://technorati.com/tags/flv">flv</a>,<a rel="tag" href="http://technorati.com/tags/RIA">RIA</a>,<a rel="tag" href="http://technorati.com/tags/SilverLight">SilverLight</a>,<a rel="tag" href="http://technorati.com/tags/silverlight+3">silverlight 3</a>,<a rel="tag" href="http://technorati.com/tags/silverlight+3+beta">silverlight 3 beta</a>,<a rel="tag" href="http://technorati.com/tags/silverlight+adobe">silverlight adobe</a>,<a rel="tag" href="http://technorati.com/tags/Video">Video</a></div>
</h3>
<br />Posted in Adobe Video Formats, concepts implemented, Digital Media, HD Video, Industry News, Proof Driven Development, Siverlight, Smooth Streaming, software as strategic, Technology Tagged: adobe, f4v, flash video, Flex, flv, H.264, H.264 AAC MP4, RIA, SilverLight, silverlight 3, silverlight 3 beta, silverlight adobe, Video <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1314/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1314/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1314/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1314&subd=dcarr&ref=&feed=1" /><div><a href="http://team.pushbomb.com/2009/07/23/silverlight_3_beta_adobe_video_playerworking_now/"><img alt="tangent.ux Silverlight 3 Media Platform" src="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.original.jpg" width="160" height="120" /></a></div>]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/07/23/silverlight_3_beta_adobe_video_playerworking_now/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
	<enclosure url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.mp4" length="9577472" type="video/mp4" />

		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.domaindotnet.com/adobe_logo.gif" medium="image" />

		<media:group>
			<media:content url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.mp4" fileSize="9577472" type="video/mp4" medium="video" isDefault="true" duration="94" width="400" height="300" />

			<media:content url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_fmt1.ogv" fileSize="9577472" type="video/ogg" medium="video" isDefault="false" duration="94" width="400" height="300" />

			<media:rating scheme="urn:mpaa">g</media:rating>
			<media:title type="plain">tangent.ux Silverlight 3 Media Platform</media:title>
			<media:description type="plain">Watch the power of deep zoom when combined with the most demanding video. Normally you&#039;d be waiting and waiting. Finally now this is delivered at the speed of thought via the cloud (we support Amazon , Google, Azure, etc.)</media:description>
			<media:thumbnail url="http://cdn.videos.wordpress.com/B04BewKm/silverlightmedia_std.original.jpg" width="256" height="192" />
			<media:player url="http://v.wordpress.com/B04BewKm" width="400" height="300" />
		</media:group>
	</item>
		<item>
		<title>JetBrains Resharper 4.5 is out</title>
		<link>http://team.pushbomb.com/2009/04/16/resharper_4_5_rocks_for_dot_net_c_sharp_silverlight_devs/</link>
		<comments>http://team.pushbomb.com/2009/04/16/resharper_4_5_rocks_for_dot_net_c_sharp_silverlight_devs/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 02:12:43 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Cannot live Without]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Tips and Tricks]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[Windows Presentation Foundation]]></category>
		<category><![CDATA[concepts implemented]]></category>
		<category><![CDATA[resharper]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[.NET 3.5. software craftsman]]></category>
		<category><![CDATA[best addin]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Must-Have]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Resharper]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2009/04/16/resharper_4_5_rocks_for_dot_net_c_sharp_silverlight_devs/</guid>
		<description><![CDATA[9 our of 10 studies prove: Resharper make your your hair grow back, your dog come home (yes even if he died), your wife will love you again and your kids will listen to you.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1339&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p align="center">&#160;</p>
<p align="center"><a href="http://www.domaindotnet.com/resharper/whatsnew45.html" target="_blank">Click Here</a> to Watch What’s New </p>
<h5>9 our of 10 studies prove: Resharper make your your hair grow back, your dog come home (yes even if he died), your wife will love you again and your kids will listen to you.</h5>
<p>OK perhaps it is not a country music song played backwards. </p>
<blockquote><p>BUT your nuts to even think about wasting all that time not using it. For someone who knows it is people not tools that always win, this is my only exception in 20 years that I will stand behind.</p>
</blockquote>
<p>&#160;</p>
<p>Why stare at a keyboard for hours wondering how to navigate a nasty tangled refactoring you know you must do when you can do the right thing AND make the 5:30 train.</p>
<p>Me? I hit the shift-ctrl-space repeatedly and am shocked when nothing happens. Then I install it and life is good again.</p>
<h4>ReSharper 4.5 Released</h4>
<p>April 8, 2009</p>
<h6>In This Issue</h6>
<p><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45Intro">Introduction</a>     <br /><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45-1">Performance and Memory Usage Improvements</a>     <br /><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45-2">Solution-Wide Code Inspections</a></p>
<p><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45-3">VB9 Support</a>     <br /><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45-4">Extended Naming Style Configuration</a>     <br /><a href="http://www.jetbrains.com/news/dotnet/news.html#rs45-5">Other Enhancements</a></p>
<h5>Introduction</h5>
<p><b>ReSharper 4.5</b> is finally out, so your next productivity upgrade is just a mouse click away!</p>
<p>As announced, the new version features major improvements in performance and memory usage. After all, what is a productivity tool for if not for being agile, robust and responsive?</p>
<p>In addition to focusing on performance enhancements, we also added a number of intelligence features and improvements.</p>
<p>We&#8217;ve prepared a short <a href="http://www.jetbrains.com/resharper/documentation/presentation/rs45/whatsnew-rs45.html">Flash movie</a> to introduce the new features in ReSharper 4.5. Get the hang of things in just a few minutes! </p>
<p>For users of older versions we have a ReSharper 3.0 vs. ReSharper 4.5 <a href="http://www.jetbrains.com/resharper/features/resharper3_vs_resharper45.html">Comparison matrix</a>. <a href="http://dcarr.files.wordpress.com/2009/04/image.png"><img style="display:inline;border-width:0;margin:2px 0;" title="image" border="0" alt="image" align="right" src="http://dcarr.files.wordpress.com/2009/04/image-thumb.png?w=243&#038;h=244" width="243" height="244" /></a></p>
<p>However, if you believe a thousand words say more than a picture does, or even a movie, go ahead and read the descriptions below :)</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p>&#160;</p>
<p align="right"><strong>Alex Morozov      <br /></strong>NET product marketing manager&#160; <br />JetBrains</p>
<h5>Performance and Memory Usage Improvements</h5>
<p>We have managed to make ReSharper load and work faster and more smoothly in general, particularly on big (and we mean BIG) solutions:</p>
<ul>
<li>Wall-time measurements of solution loading show 20 to 40 percent acceleration until the solution is ready for code editing. </li>
<li>Web site loading time has also been reduced by a third. </li>
<li>For instance, a certain mixed-language solution consisting of about 15 thousand classes now takes only 70 seconds to load, and this includes making every ReSharper feature available. </li>
</ul>
<p>The list of significantly accelerated operations includes:</p>
<ul>
<li>renaming symbols </li>
<li>finding commonly used symbols </li>
<li>creating symbols from usage </li>
<li>analyzing large XAML files. </li>
</ul>
<p>We&#8217;ve also cut down the volume of memory resources required to analyze jumbo autogenerated code files, which should especially benefit those who work with ASP.NET and LINQ to SQL. </p>
<h5>Solution-Wide Code Inspections</h5>
<p>To enable you to detect unused non-private members on the fly, we have enlisted the help of our ever-improving solution-wide analysis. We have introduced a set of specialized code inspections that only work when you let ReSharper analyze your whole solution. They help you discover:</p>
<ul>
<li>Unused non-private declarations </li>
<li>Unused return values of non-private methods </li>
<li>Unaccessed non-private fields </li>
<li>Unused parameters in non-private members </li>
<li>Abstract or virtual events that are never invoked </li>
<li>Unassigned fields </li>
<li>Members and types that can be made internal instead of public </li>
</ul>
<p>Look for these inspections in your code and on the Marker Bar, highlighted as warnings or suggestions. In addition, new code annotations are available that you can use to mark certain unused non-private types and members to prevent ReSharper from fussing about them.</p>
<h5>VB9 Support – We can forgive this transgression (Damon)</h5>
<p> Visual Basic .NET developers can now benefit from VB9 language support that includes implicitly typed local variables, object initializers, anonymous types, extension methods, lambda expressions, partial methods, and embedded XML. VB9 support is all around you, courtesy of new context actions, code completion, refactorings, and Parameter Info, among other supporting features.<br />
<h5>Extended Naming Style Configuration</h5>
<p>Now you can define custom naming style settings for different languages and symbols including:</p>
<ul>
<li>types </li>
<li>namespaces </li>
<li>interfaces </li>
<li>parameters </li>
<li>method properties and events </li>
<li>static and instance fields, etc. </li>
</ul>
<p>For every kind of symbol, you can configure one of five casing options, prefixes and suffixes, variations for different access rights, abbreviations to preserve, or enable naming inspections. As a result, you can precisely align the way ReSharper completes and generates code with your specific coding guidelines.</p>
<h5>Other Enhancements</h5>
<ul>
<li><b>Go to Implementation</b> &#8211; This new navigation feature lets you jump from usage of a base type or member to any of its end implementations, bypassing intermediate steps in the inheritance chain. </li>
<li><b>New and Improved Refactorings</b> &#8211; ReSharper 4.5 has added Inline Field to its family of Inline refactorings. Rename refactoring now provides name completion, and some of the other refactorings were thoroughly refactored themselves, to make them perform faster. </li>
<li><b>Native MSTest Support</b> &#8211; Initially available through VstsUnit Plugin and then Gallio, MSTest support has finally made its way to being provided natively in ReSharper, on par with nUnit. </li>
<li><b>Wider Cross-Language Capabilities</b> &#8211; Quick-fixes and context actions work better in many cross-language scenarios: for example, you can extend a control written in VB.NET+XAML by choosing &quot;create from usage&quot; right from a C# usage. Add increased coverage for XAML and ASP.NET, and you get a substantial package of improvements. </li>
<li><b>Smoother Language and Framework Support</b> &#8211; Following the tradition of ReSharper 4.1, we have improved compatibility with F#, Compact Framework, Silverlight 2, and other languages and tools. </li>
</ul>
<p>Grab your all-new productivity &#8211; download ReSharper 4.5 now at <a href="http://www.jetbrains.com/resharper/download/index.html">http://www.jetbrains.com/resharper/download</a>. </p>
<p>ReSharper 4.5 is provided as a free upgrade from ReSharper 4.0. If you own an older version, please contact us to check your upgrade availability at <a href="mailto:sales@jetbrains.com">sales@jetbrains.com</a>. </p>
<p>&#160;</p>
<h4>JetBrains Team</h4>
<ul>
<li>
<p><a href="http://www.jetbrains.com/company/people/Anchipolevsky_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Anchipolevsky_small.gif" />Sergey           <br />Anchipolevsky</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Alshannikov_Igor.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Alshannikov_Igor_small.gif" />Igor           <br />Alshannikov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Anisimov_Alexander.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Anisimov_Alexander_small.gif" />Alexander           <br />Anisimov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Avdeev_Dmitry.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Avdeev_Dmitry_small.gif" />Dmitry           <br />Avdeev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Baranov_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Baranov_small.gif" />Sergey           <br />Baranov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Belyaev_Yury.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Yury_Belyaev_small.gif" />Yury           <br />Belyaev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Belyaeva_Natalia.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Natalia_Belyaeva_small.gif" />Natalia           <br />Belyaeva</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Bukreeva_Elena.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Bukreeva_Elena_small.gif" />Elena           <br />Bukreeva</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Bulenkov_Konstantin.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Bulenkov_Konstantin_small.gif" />Bulenkov           <br />Konstantin</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Charif_Jana.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Jana_Charif_small.gif" />Jana           <br />Charif</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Chashnikov_Nikolay.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Nikolay_Chashnikov_small.gif" />Nikolay           <br />Chashnikov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Alexander_Chernikov.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/soon.gif" />Alexander           <br />Chernikov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Chernyatchik_Roman.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Roman_Chernyatchik_small.gif" />Roman           <br />Chernyatchik</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Coox_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Coox_Sergey_small.gif" />Sergey           <br />Coox</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Dmitriev_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Dmitriev_small.gif" />Sergey           <br />Dmitriev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Dumov_Ilia.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Ilia_Dumov_small.gif" />Ilia           <br />Dumov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Falk_Kirill.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Kirill_Falk_small.gif" />Kirill           <br />Falk</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Gerasimov_Michael.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Michael_Gerasimov_small.gif" />Michael           <br />Gerasimov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Golovachev_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Golovachev_small.gif" />Sergey           <br />Golovachev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Gopachenko_Alexey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Alexey_Gopachenko_small.gif" />Alexey           <br />Gopachenko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Gromov_Peter.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Gromov_Peter_small.gif" />Peter           <br />Gromov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Michaela_Hroncova.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Michaela_Hroncova_small.gif" />Michaela           <br />Hroncová</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Jemerov_Dmitry.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Dmitry_Jemerov_small.gif" />Dmitry           <br />Jemerov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Khalusova_Maria.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Khalusova_Maria_small.gif" />Maria           <br />Khalusova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Kipiatkov_Valentin.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Valentin_Kipiatkov_small.gif" />Valentin           <br />Kipiatkov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Konopko_Cyril.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Konopko_Kirill_small.gif" />Cyril           <br />Konopko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Kozlova_Anna.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/soon.gif" />Anna           <br />Kozlova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Kropotov_Mikhail.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Mikhail_Kropotov_small.gif" />Mikhail           <br />Kropotov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Kudelevsky_Eugene.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Kudelevsky_Eugene_small.gif" />Eugene           <br />Kudelevsky</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Kudravtsev_Alexey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Alexey_Kudravtsev_small.gif" />Alexey           <br />Kudravtsev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Lobacheva_Olga.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Lobacheva_Olga_small.gif" />Olga           <br />Lobacheva</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Lukianov_Vyacheslav.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Vyacheslav_Lukianov_small.gif" />Vyacheslav           <br />Lukianov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Makeev_Anton.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Anton_Makeev_small.gif" />Anton           <br />Makeev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Malishev_Egor.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Malishev_Egor_small.gif" />Egor           <br />Malyshev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Marakulina_Maria.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Maria_Marakulina_small.gif" />Maria           <br />Marakulina</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Maximov_Kirill.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Kirill_Maximov_small.gif" />Kirill           <br />Maximov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Maximova_Sasha.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sasha_Maximova_small.gif" />Sasha           <br />Maximova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Megorskaya_Irina.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/soon.gif" />Irina           <br />Megorskaya</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Morawiecova_Lucie.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Morawiecova_Lucie_small.gif" />Lucie           <br />Morawiecova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Morozov_Alexander.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Morozov_Alexander_small.gif" />Alexander           <br />Morozov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Mossienko_Maxim.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Mossienko_Maxim_small.gif" />Maxim           <br />Mossienko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Musienko_Ekaterina.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Musienko_Ekaterina_small.gif" />Ekaterina           <br />Musienko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Oreshnikova_Ann.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Ann_Oreshnikova_small.gif" />Ann           <br />Oreshnikova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Pasynkov_Eugene.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Eugene_Pasynkov_small.gif" />Eugene           <br />Pasynkov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Pech_Vaclav.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Vaclav_Pech_small.gif" />Vaclav           <br />Pech</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Pegov_Alexey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Alexey_Pegov_small.gif" />Alexey           <br />Pegov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Petrenko_Eugene.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Petrenko_Eugene_small.gif" />Eugene           <br />Petrenko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Petrovskaya_Irina.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Irina_Petrovskaya_small.gif" />Irina           <br />Petrovskaya</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Pilin_Mikhail.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Mikhail_Pilin_small.gif" />Mikhail           <br />Pilin</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Repina_Julia.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Julia_Repina_small.gif" />Julia           <br />Repina</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Revyakina_Elizaveta.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Elizaveta_Revyakina_small.gif" />Elizaveta           <br />Revyakina</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Ryzhenkov_Ilya.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Ryzhenkov_Ilya_small.gif" />Ilya           <br />Ryzhenkov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Serebryansky_Andrew.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Serebryansky_Andrew_small.gif" />Andrew           <br />Serebryansky</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Sergey_Ilya.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Ilya_small.gif" />Ilya           <br />Sergey</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Shafirov_Maxim.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Maxim_Shafirov_small.gif" />Maxim           <br />Shafirov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Slavina_Tatiana.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Tatiana_Slavina_small.gif" />Tatiana           <br />Slavina</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Smirnova_Olesya.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Olesya_Smirnova_small.gif" />Olesya           <br />Smirnova</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Solomatov_Konstantin.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Konstantin_Solomatov_small.gif" />Konstantin           <br />Solomatov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Stepanov_Oleg.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Oleg_Stepanov_small.gif" />Oleg           <br />Stepanov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Sher_Pavel.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sher_Pavel_small.gif" />Pavel           <br />Sher</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Shliakhovetskaja_Ekaterina.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Shliakhovetskaja_Ekaterina_small.gif" />Ekaterina           <br />Shliakhovetskaja</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Shpynov_Oleg.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Shpynov_Oleg_small.gif" />Oleg           <br />Shpynov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Shrago_Gregory.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Shrago_Gregory_small.gif" />Gregory           <br />Shrago</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Toporov_Eugene.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Eugene_Toporov_small.gif" />Eugene           <br />Toporov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Udov_George.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Udov_George_small.gif" />George           <br />Udov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Vasiliev_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Vasiliev_small.gif" />Sergey           <br />Vasiliev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Yaremych_Natalie.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Natalie_Yaremych_small.gif" />Natalie           <br />Yaremych</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Yarko_Yegor.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Yarko_Yegor_small.gif" />Yegor           <br />Yarko</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Zambalayev_Timur.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Zambalayev_Timur_small.gif" />Timur           <br />Zambalayev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Zhukov_Sergey.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Sergey_Zhukov_small.gif" />Sergey           <br />Zhukov</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Zhuravlev_Eugene.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Eugene_Zhuravlev_small.gif" />Eugene           <br />Zhuravlev</a></p>
</li>
<li>
<p><a href="http://www.jetbrains.com/company/people/Alexander_Zverev.html"><img alt="photo" src="http://www.jetbrains.com/company/people/photos/Alexander_Zverev_small.gif" />Alexander           <br />Zverev</a></p>
</li>
</ul>
<div class="wlWriterHeaderFooter" style="text-align:right;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2009%2f04%2f16%2fresharper_4_5_rocks_for_dot_net_c_sharp_silverlight_devs%2f&amp;title=JetBrains+Resharper+4.5+is+out"><img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /></a></div>
<br />Posted in C# 3.0 Enhancements, C# 3.0 for Internal DSL, Cannot live Without, concepts implemented, Functional Programming, Industry News, Linq, resharper, Siverlight, software as strategic, Software Design, Software Futures, Technology, Tips and Tricks, Visual Studio 2010, Windows Presentation Foundation Tagged: .NET 3.5. software craftsman, best addin, C#, Must-Have, Refactoring, Resharper, SilverLight, Visual Studio 2008 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1339/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1339/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1339/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1339&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/04/16/resharper_4_5_rocks_for_dot_net_c_sharp_silverlight_devs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2009/04/image-thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Anchipolevsky_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Alshannikov_Igor_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Anisimov_Alexander_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Avdeev_Dmitry_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Baranov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Yury_Belyaev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Natalia_Belyaeva_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Bukreeva_Elena_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Bulenkov_Konstantin_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Jana_Charif_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Nikolay_Chashnikov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/soon.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Roman_Chernyatchik_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Coox_Sergey_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Dmitriev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Ilia_Dumov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Kirill_Falk_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Michael_Gerasimov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Golovachev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Alexey_Gopachenko_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Gromov_Peter_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Michaela_Hroncova_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Dmitry_Jemerov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Khalusova_Maria_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Valentin_Kipiatkov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Konopko_Kirill_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/soon.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Mikhail_Kropotov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Kudelevsky_Eugene_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Alexey_Kudravtsev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Lobacheva_Olga_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Vyacheslav_Lukianov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Anton_Makeev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Malishev_Egor_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Maria_Marakulina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Kirill_Maximov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sasha_Maximova_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/soon.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Morawiecova_Lucie_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Morozov_Alexander_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Mossienko_Maxim_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Musienko_Ekaterina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Ann_Oreshnikova_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Eugene_Pasynkov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Vaclav_Pech_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Alexey_Pegov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Petrenko_Eugene_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Irina_Petrovskaya_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Mikhail_Pilin_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Julia_Repina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Elizaveta_Revyakina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Ryzhenkov_Ilya_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Serebryansky_Andrew_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Ilya_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Maxim_Shafirov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Tatiana_Slavina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Olesya_Smirnova_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Konstantin_Solomatov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Oleg_Stepanov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sher_Pavel_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Shliakhovetskaja_Ekaterina_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Shpynov_Oleg_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Shrago_Gregory_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Eugene_Toporov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Udov_George_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Vasiliev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Natalie_Yaremych_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Yarko_Yegor_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Zambalayev_Timur_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Sergey_Zhukov_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Eugene_Zhuravlev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://www.jetbrains.com/company/people/photos/Alexander_Zverev_small.gif" medium="image">
			<media:title type="html">photo</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Martin Fowler and the .NET Developer Mandate for Oslo</title>
		<link>http://team.pushbomb.com/2009/02/21/oslo_dot_net_developer_domain_specific_language_mandate/</link>
		<comments>http://team.pushbomb.com/2009/02/21/oslo_dot_net_developer_domain_specific_language_mandate/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 22:34:24 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Domain Specific Languages]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[software as strategic]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2009/02/21/oslo_dot_net_developer_domain_specific_language_mandate/</guid>
		<description><![CDATA[All roads for the software developer lead to another acronym. DSLs are for real (indeed you already use a few).<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1302&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2009%2f02%2f21%2foslo_dot_net_developer_domain_specific_language_mandate%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2009%2f02%2f21%2foslo_dot_net_developer_domain_specific_language_mandate%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<p>As long time advocates of domain-driven practice it should be no surprise that we prefer ‘<a href="http://en.wikipedia.org/wiki/Domain_Specific_Language" target="_blank">Domain Specific Language</a>’ approaches.</p>
<p>Of course now it seems obvious to everyone that these are the future. Sure there were many bumps in the road, but it is not even an interesting debate about ‘if’.</p>
<p>This article is so good from Martin Fowler we had to repost:</p>
<h6>TIP: .NET Developer? Start learning the Oslo set of technologies, especially&#8217; all things ‘M’. We pay tribute to ‘M’ in our demo Silverlight cube on Silverlight.net showcase.</h6>
<p><a href="http://www.martinfowler.com"><img style="display:inline;margin:0;" src="http://www.martinfowler.com/mflogo.gif" alt="martinfowler.com logo" align="right" /></a></p>
<p><a href="DslMigration.html">DslMigration</a><br />
<a href="dsl.html">dsl</a><br />
<strong>4 February 2009</strong><br />
<a href="http://technorati.com/search/http://martinfowler.com/bliki/DslMigration.html">Reactions</a></p>
<p>One danger that DSL advocates need to guard against is the notion that first you design a DSL, then people use it. Like any other deice of software, a successful DSL will evolve. This means that scripts written in an earlier version of a DSL may fail when run with a later version.</p>
<p>Like many properties of DSL, good and bad, this is really very much the same as happens with a library. If you take a library from a someone and they upgrade the library, you may end up stuck. In essence DSLs don&#8217;t really do anything to change that. Your DSL definition is essentially a <a href="PublishedInterface.html">PublishedInterface</a> and you have to deal with the consequences just the same.</p>
<p>This problem can be more prominent with external DSLs. Many changes to an internal DSL can be handled through refactoring tools (for those languages that have them). But refactoring tools won&#8217;t help with an external DSL. In practice this problem is less of an issue than it might be. An internal DSL with scripts that are outside the control of the DSL implementers won&#8217;t be picked up with refactoring. So the only difference between internal and external lies with DSL scripts within the same code base.</p>
<p>One technique for handling evolution of DSLs is to provide tools that automatically migrate a DSL from one version to another. These can be run either during an upgrade, or automatically should you try to run an old version script against a new version.</p>
<p>There are two broad ways to handle migration. The first is an <strong>incremental migration</strong> strategy. This is essentially the same notion that&#8217;s used by people doing <a href="http://martinfowler.com/articles/evodb.html">evolutionary database design</a>. For every change you do to your DSL definition, create a migration program that automatically migrates DSL scripts from the old version to the new version.</p>
<p>An important part of incremental migration is that you keep the changes as small as you can. Imagine you are upgrading from version 1 to 2, and have ten changes you want to make to your DSL definition. In this case, don&#8217;t create just one migration script to migrate from version 1 to 2, instead create at least 10 scripts. Change the DSL definition one feature at a time, and write a migration script for each change. You may find it useful to break it down even more and add a feature with more than one step (and thus more than one migration). They way I&#8217;ve described it may sound like more work than a single script, but the point is that migrations are much easier to write if they are small, and it&#8217;s easy to chain multiple migrations together. As a result you&#8217;ll be much faster writing ten scripts than one.</p>
<p>The other approach is <strong>model-based migration</strong>. This is a tactic you can use if you are using a <a href="http://martinfowler.com/dslwip/SemanticModel.html">Semantic Model</a> (which is something I almost always recommend). With this approach you support multiple parsers for your language, one for each released version. (So you only do this for version 1 and 2, not for the intermediate steps.) Each parser populates the semantic model. When you use a semantic model, the parser&#8217;s behavior is pretty simple, so it&#8217;s not too much trouble to have several of them around. You then run the appropriate parser for the version of script you are working with. This handles multiple versions, but doesn&#8217;t migrate the scripts. To do the migration you write a generator from the semantic model that generates a DSL script representation. This way you can run the parser for a version 1 script, populate the semantic model, and then emit a version 2 script from the generator.</p>
<p>One problem with the model-based approach is that it&#8217;s easy to lose stuff that doesn&#8217;t matter to the semantics, but is something that the script writers want to keep. Comments are the obvious example. This is exacerbated if there&#8217;s too much smarts in the parser, but then the need to migrate this way may help encourage the parsers to stay dumb &#8211; which is Good Thing.</p>
<p>If the change to the DSL is big enough, you may not be able to transform a version 1 script into a version 2 semantic model. In which case you may need to keep a version 1 model (or intermediate model) around and give it the ability to emit a version 2 script.</p>
<p>I don&#8217;t have a strong preference between these two alternatives.</p>
<p>Migration scripts can be run by script programmers themselves when needed, or automatically by the DSL system. In order to run automatically it&#8217;s very useful to have the script record which version of the DSL it is so the parser can detect it easily and trigger the resulting migrations.</p>
<li><a href="http://msdn.com/oslo">Microsoft&#8217;s Codename Oslo</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/bb126235.aspx">Microsoft Visual Studio 2008: Domain-Specific Language Tools</a></li>
<li><a href="http://lambda-the-ultimate.org/taxonomy/term/24">Domain-specific language links from Lambda the Ultimate</a></li>
<li><a href="http://www.faqs.org/docs/artu/minilanguageschapter.html">Eric S. Raymond on minilanguages</a> (from <a href="http://en.wikipedia.org/wiki/The_Art_of_Unix_Programming">The Art of Unix Programming</a>)</li>
<li><a href="http://martinfowler.com/bliki/DomainSpecificLanguage.html">Martin Fowler on domain-specific languages</a> and <a href="http://www.martinfowler.com/articles/languageWorkbench.html">Language Workbenches</a>. Also in <a href="http://www.infoq.com/presentations/domain-specific-languages">a video presentation</a></li>
<li><a href="http://homepages.cwi.nl/~arie/papers/dslbib/">Domain-Specific Languages: An Annotated Bibliography</a></li>
<li><a href="http://www.venge.net/graydon/talks/mkc/html/index.html">One Day Compilers: Building a small domain-specific language using OCaml</a></li>
<li><a href="http://www.usenix.org/publications/library/proceedings/dsl97">Usenix Association: Conference on Domain-Specific Languages (DSL &#8216;97)</a> and <a href="http://www.usenix.org/publications/library/proceedings/dsl99">2nd Conference on Domain-Specific Languages (DSL &#8216;99)</a></li>
<li><a href="http://www.softwaresecretweapons.com/jspwiki/Wiki.jsp?page=BuildVarietyOfConsumerProductsAtLowCostUsingGenerativeProgramming">Feature Models for Generative Programming and DSL</a></li>
<li><a href="http://fragmental.tw/research-on-dsls/domain-specific-languages-dsls/internal-dsls/">Internal Domain-Specific Languages</a></li>
<li>Article <a href="http://www.theserverside.com/tt/articles/article.tss?l=PragmaticGen">External DSLs with Eclipse technology</a></li>
<li>Article <a href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.4685">Building Domain-Specific Languages over a Language Framework</a></li>
<li>Article <a href="http://www.acceleo.org/pages/using-acceleo-with-gmf/">Using Acceleo with GMF : Generating presentations from a MindMap DSL modeler</a></li>
<li>Article <a href="http://www.methodsandtools.com/archive/archive.php?id=71">UML vs. Domain-Specific Languages</a></li>
<li>Book <a href="http://www.pragmaticprogrammer.com/titles/tpantlr/index.html">The Definitive ANTLR Reference Building Domain-Specific Languages</a></li>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d697368d-f832-4c3e-af8d-ebe2432bbb1d" class="wlWriterEditableSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/oslo">oslo</a>,<a rel="tag" href="http://technorati.com/tags/DSL">DSL</a>,<a rel="tag" href="http://technorati.com/tags/Fowler">Fowler</a>,<a rel="tag" href="http://technorati.com/tags/C%23">C#</a>,<a rel="tag" href="http://technorati.com/tags/M">M</a></div>
<h3><a href="http://msdn.microsoft.com/en-us/library/dd129873.aspx" target="_blank">Microsoft &#8220;Oslo&#8221; Frequently Asked Questions</a></h3>
<br />Posted in C# 3.0 Enhancements, C# 3.0 for Internal DSL, Domain Specific Languages, Oslo, software as strategic, Visual Studio 2010  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1302/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1302/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1302/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1302&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2009/02/21/oslo_dot_net_developer_domain_specific_language_mandate/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2009%2f02%2f21%2foslo_dot_net_developer_domain_specific_language_mandate%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://www.martinfowler.com/mflogo.gif" medium="image">
			<media:title type="html">martinfowler.com logo</media:title>
		</media:content>
	</item>
		<item>
		<title>Silverlight 3D for SharePoint MOSS 2007 &#8211; Try it Here Now</title>
		<link>http://team.pushbomb.com/2008/11/19/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now/</link>
		<comments>http://team.pushbomb.com/2008/11/19/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 04:29:48 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[deepzoom]]></category>
		<category><![CDATA[invention]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/11/19/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now/</guid>
		<description><![CDATA[This effort started as an idea on a napkin (how cliché!) into what I hope will see decent use. Long story short, this is an effort to bring RIA to the SharePoint world. But not just RIA style usability, I believe we pushed the envelope even further by incorporating not only DeepZoom for ‘zoom in to the pixel’ resolution, but the 3D extensions not present by default (you have the essentials but only the amazingly talented people behind the Hard Rock Memorabilia site (vertigo) have shown this style of combined zoom/3d that we have seen in any largely deployed sample.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1161&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p> <br />
 Long story short, this is an effort to bring <a href="http://en.wikipedia.org/wiki/Rich_Internet_application" target="_blank">RIA </a>to the <a href="http://en.wikipedia.org/wiki/Sharepoint_" target="_blank">SharePoint </a>world.</p>
<p> </p>
<p>But not just RIA style <a href="http://en.wikipedia.org/wiki/Usability" target="_blank">usability</a>, I believe we pushed the envelope even further by incorporating not only <a href="http://en.wikipedia.org/wiki/DeepZoom" target="_blank">DeepZoom (SeaDragon) </a>for ‘zoom in to the pixel’ resolution, but the 3D extensions not present by default</p>
<p align="right">(you have the essentials but only the amazingly talented people behind the <a href="http://memorabilia.hardrock.com/" target="_blank">Hard Rock Memorabilia</a> site (vertigo) <a href="http://www.vertigo.com/DeepZoom.aspx" target="_blank">have shown this style of combined zoom/3d</a> that we have seen in any largely deployed sample).</p>
<p align="right"> </p>
<p align="center"><strong><br />
</strong></p>
<p style="text-align:center;"><a href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html"><img class="aligncenter" style="border-bottom:black 1px solid;border-left:black 1px solid;display:block;border-top:black 1px solid;border-right:black 1px solid;" title="SharepointZoom3d" src="http://dcarr.files.wordpress.com/2008/11/sharepointzoom3d3.png?w=240&#038;h=232" border="0" alt="SharepointZoom3d" width="240" height="232" /></a></p>
<p>Click the image here to launch the <a href="http://en.wikipedia.org/wiki/Silverlight" target="_blank">Silverlight</a> 2.0 cross-platform goodness.</p>
<h4><strong>NOTE: A prize goes to the first person to email us at: </strong><a href="mailto:innovate@domaindotnet.com"><strong>innovate@domaindotnet.com</strong></a><strong> the exact number of seconds it would take to complete the ‘applying attributes’ to the .gif file (you need to see the demo to understand).</strong></h4>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:1b3d19bf-9da9-439e-8cba-ffcf6c6f54f9" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/sharepoint">sharepoint</a>,<a rel="tag" href="http://technorati.com/tags/silverlight">silverlight</a>,<a rel="tag" href="http://technorati.com/tags/deepzoom">deepzoom</a>,<a rel="tag" href="http://technorati.com/tags/SOA">SOA</a>,<a rel="tag" href="http://technorati.com/tags/wcf">wcf</a>,<a rel="tag" href="http://technorati.com/tags/3D">3D</a>,<a rel="tag" href="http://technorati.com/tags/animation">animation</a>,<a rel="tag" href="http://technorati.com/tags/taxonomy">taxonomy</a>,<a rel="tag" href="http://technorati.com/tags/C%23">C#</a>,<a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/WCF">WCF</a>,<a rel="tag" href="http://technorati.com/tags/invention">invention</a></div>
<p><a title="Silverlight 3D DeepZoom Navigator" href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html" target="_blank"></a></p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:361263a2-257c-4554-b5e0-93c46a88fd08" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/sharepoint">sharepoint</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight">silverlight</a>,<a rel="tag" href="http://del.icio.us/popular/deepzoom">deepzoom</a>,<a rel="tag" href="http://del.icio.us/popular/SOA">SOA</a>,<a rel="tag" href="http://del.icio.us/popular/wcf">wcf</a>,<a rel="tag" href="http://del.icio.us/popular/3D">3D</a>,<a rel="tag" href="http://del.icio.us/popular/animation">animation</a>,<a rel="tag" href="http://del.icio.us/popular/taxonomy">taxonomy</a>,<a rel="tag" href="http://del.icio.us/popular/C%23">C#</a>,<a rel="tag" href="http://del.icio.us/popular/Linq">Linq</a>,<a rel="tag" href="http://del.icio.us/popular/WCF">WCF</a>,<a rel="tag" href="http://del.icio.us/popular/invention">invention</a></div>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/deepzoom">deepzoom</a></div>
<ul>
<li><a href="http://www.vertigo.com/deepzoom.aspx">Vertigo: DeepZoom</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/wcf">wcf</a></p>
<ul>
<li><a href="http://www.ayende.com/Blog/archive/2007/06/12/WCF-Windsor-Integration.aspx">WCF Windsor Integration</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/WCF">WCF</a></p>
<ul>
<li><a href="http://damon.agilefactor.com/2007/09/software-as-service-pattern-language.html">Software as a Service &#8211; A Pattern Language Approach</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/silverlight">silverlight</a></p>
<ul>
<li><a href="http://blogs.vertigo.com/personal/willa/Blog/archive/2008/10/14/silverlight-2-birthday-widget-part-ii.aspx">Will’s Blog &#8211; Silverlight 2 Birthday Widget, Part II</a></li>
<li><a href="http://silverlight.net/GetStarted/sl2rc0.aspx">The Official Microsoft Silverlight Site</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/SOA">SOA</a></p>
<ul>
<li><a href="http://www.slideshare.net/domaindotnetteam/advanced-concepts-in-software-as-a-service-service-oriented-architecture-presentation/">Advanced Concepts in Software as a Service / Service Oriented Architecture</a></li>
<li><a href="http://damon.agilefactor.com/2007/10/collision-of-software-project.html">The Collision of Software Project Management and Agile</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/sharepoint">sharepoint</a></p>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/office/bb251754.aspx">Business Data Catalog</a></li>
<li><a href="http://sharepointrss.com/">SharePoint RSS Alpha</a></li>
<li><a href="http://www.microsoft.com/technet/windowsserver/sharepoint/wssapps/templates/default.mspx">Templates for SharePoint</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms948927.aspx">Creating a Web Part with Custom Properties</a></li>
<li><a href="http://www.sharepoint-tips.com/2007/05/sharepoint-designer-article-2-creating.html">SharePoint Creating XSLT DataView</a></li>
<li><a href="http://www.codeplex.com/smartpart">SmartPart for SharePoint &#8211; Home</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb264593.aspx">Windows SharePoint Services 3.0</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/Linq">Linq</a></p>
<ul>
<li><a href="//speeddial/content/speeddial.xul">Speed Dial</a></li>
<li><a href="http://cifactorybuild.stelligent.com/CI%20Factory/default.aspx?_action_ViewBuildReport=true&amp;server=CI+Factory&amp;project=CI+Factory&amp;build=log20070923221806Lbuild.0.9.0.18.xml">CruiseControl.NET</a></li>
<li><a href="http://pragprog.com/">The Pragmatic Bookshelf</a></li>
<li><a href="http://www.streetmap.co.uk/newsearch.srf?mapp=newmap&amp;searchp=newsearch&amp;type=PostCode&amp;name=%s">map</a></li>
<li><a href="https://www.innerworkings.com/promotions/a5a8879b-fb5b-4f66-8182-a14fd63a3d73/msdn-code-gallery-silverlight-2-samples/register">Register &#8211; InnerWorkings</a></li>
</ul>
<br />Posted in C# 3.0 Enhancements, sharepoint, Siverlight, software as strategic, Software Design, Software Futures, Technology Tagged: 3D, animation, C#, deepzoom, invention, Linq, sharepoint, SilverLight, SOA, taxonomy, WCF <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1161/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1161/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1161/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1161&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/11/19/released-silverlight-3d-for-sharepoint-moss-2007-try-it-here-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/11/sharepointzoom3d3.png" medium="image">
			<media:title type="html">SharepointZoom3d</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint MOSS 2007 &#8216;DeepZoom 3D&#8217; is Here&#8230;.Click Below&#8230;</title>
		<link>http://team.pushbomb.com/2008/11/19/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning/</link>
		<comments>http://team.pushbomb.com/2008/11/19/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 15:25:56 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Windows Presentation Foundation]]></category>
		<category><![CDATA[agile practices]]></category>
		<category><![CDATA[concepts implemented]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[domain.dot.net]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[Opacity]]></category>
		<category><![CDATA[Perspective]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[Visualization]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/?p=1111</guid>
		<description><![CDATA[The breakthough for discovering your information in the Sharepoint world is almost here. This image is absolutely real and 100% cross-platform in the browser via Silverlight. None of us have ever seen anything like this. How about you?<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1111&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;"> </p>
<p style="text-align:center;"> <span>can </span></p>
<p style="text-align:center;"><span>you</span></p>
<p style="text-align:center;"><span>find</span></p>
<p style="text-align:center;"><span>the</span></p>
<p style="text-align:center;"><span>ghosts?</span></p>
<div id="attachment_1112" class="wp-caption aligncenter" style="width: 250px"><a href="http://www.domaindotnet.com/ClientBin/DeepZoom3D.html"><img class="size-full wp-image-1112 " style="display:inline;border:black 2px solid;margin:0 55px 0 0;" title="sharepoint3d" src="http://dcarr.files.wordpress.com/2008/11/sharepoint3d.png?w=240&#038;h=188" alt="a PowerPoint document in our breakthrough navigation and discovery technology" width="240" height="188" align="left" /></a><p class="wp-caption-text">click me and be prepared</p></div>
<p> </p>
<p style="text-align:center;">Send a screen shot if you find them to : <a href="mailto:innovate@domaindotnet.com">innovate@domaindotnet.com</a> and the best image will recieve some swag! Non-trivial swag as well! </p>
<p style="text-align:center;"> </p>
<p style="text-align:center;"><a title="Full perspective in 3D" href="http://blog.domaindotnet.com/2008/11/07/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning/sharepoint3d/"></a></p>
<div class="vcard"><span class="fn n"><span class="given-name">Damon</span> <span class="additional-name">Wilder</span> <span class="given-family">Carr</span> </span></div>
<div class="org">domain.dot.net</div>
<div class="org">team labs</div>
<div><a class="email" href="mailto:damon@domaindotnet.com">damon@domaindotnet.com</a></div>
<div class="adr">
<div class="tel"><a class="htc" href="646.853.3504"></a><a class="htc" href="646.853.3504"></a><a class="htc" href="646.853.3504"><a class="htc" href="646.853.3504">646.853.3504</a></a></div>
<div><a class="url" href="http://www.domaindotnet.com">http://www.domaindotnet.com</a></div>
</div>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/sharepoint">SharePoint</a></div>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/office/bb251754.aspx">Business Data Catalog</a></li>
<li><a href="http://sharepointrss.com/">SharePoint RSS Alpha</a></li>
<li><a href="http://www.microsoft.com/technet/windowsserver/sharepoint/wssapps/templates/default.mspx">Templates for SharePoint</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms948927.aspx">Creating a Web Part with Custom Properties</a></li>
<li><a href="http://www.sharepoint-tips.com/2007/05/sharepoint-designer-article-2-creating.html">SharePoint Creating XSLT DataView</a></li>
<li><a href="http://www.codeplex.com/smartpart">SmartPart for SharePoint &#8211; Home</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/bb264593.aspx">Windows SharePoint Services 3.0</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/C#">C#</a></p>
<ul>
<li><a href="terms=video&amp;folder=103006&amp;folder=103007&amp;folder=103008&amp;folder=103009&amp;folder=103010&amp;folder=103011&amp;folder=103012&amp;sort=14&amp;queryType=1">Video Favorites</a></li>
<li><a href="http://www.codeplex.com/SharpArchitecture">S#arp Architecture: ASP.NET MVC with NHibernate &#8211; Home</a></li>
<li><a href="http://skillsmatter.com/go/open-source-dot-net">Skills Matter OPEN SOURCE .NET</a></li>
<li><a href="http://www.castleproject.org/">Home :: Castle Project</a></li>
<li><a href="http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/">NHibernate 2.0 gold Released – Must Wait for ‘Linq to NHibernate’ « ubiquitous fluency</a></li>
</ul>
<p><a href="http://del.icio.us/damoncarr/C#">(more..)</a></p>
<br />Posted in agile practices, C# 3.0 Enhancements, concepts implemented, Framework Design, Industry News, sharepoint, Siverlight, software as strategic, Software Design, Software Futures, Technology, Windows Presentation Foundation Tagged: .NET 3.5, 3D, C#, domain.dot.net, MOSS, Opacity, Perspective, sharepoint, taxonomy, Visualization <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1111/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1111/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1111/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1111&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/11/19/sharepoint-moss-3d-is-almost-ready-this-was-taken-this-morning/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/11/sharepoint3d.png" medium="image">
			<media:title type="html">sharepoint3d</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate Profiler from Ayende : Maturity in ORM is here</title>
		<link>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/</link>
		<comments>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 07:31:13 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[ADO.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Domain]]></category>
		<category><![CDATA[Domain Driven]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Linq to Entities]]></category>
		<category><![CDATA[NHibernate Profiler]]></category>
		<category><![CDATA[SQL Profiler]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/</guid>
		<description><![CDATA[The always astoundingly good Ayende (Oren) is getting ready to release one of the most compelling software tools for people doing far less work with far higher quality by using NHibernate.  For the last two years or so I keep thinking ‘soon’ I can just assume teams will understand the facts around ORM and I continue to be astounded at the waste I encounter instead.





That MS SQL Certification is hard to let go I realize but is it worth acting like Sisyphus for? I have more interesting things to do and I KNOW your stakeholders are not cool with you wasting their money.





I simply mean you can think, talk, brainstorm etc. with your ‘domain experts’ without the silly attempt to handle two different systems (Relational and OO) of thought. You all share one. And you should know it. It’s called object oriented.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1109&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:right;">Stop</p>
<p style="text-align:right;">Writing.</p>
<p style="text-align:right;">Data</p>
<p style="text-align:right;">Access</p>
<p style="text-align:right;">Code</p>
<p>That MS SQL Certification is hard to let go I realize but is it worth acting like <a target="_blank" href="http://en.wikipedia.org/wiki/Sisyphus_">Sisyphus </a><a target="_blank" href="http://en.wikipedia.org/wiki/Sysphus_"></a>for? I have more interesting things to do and <strong>I KNOW your stakeholders are not cool with you wasting their money.</strong></p>
<p><strong></strong></p>
<p><a href="http://en.wikipedia.org/wiki/Image:Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg"><img style="display:inline;margin:10px 0 10px 25px;" border="0" alt="" align="right" src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg/280px-Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg" width="233" height="240" /></a></p>
<p>I simply mean you can think, talk, brainstorm etc. with your ‘domain experts’ without the silly attempt to handle two different systems (Relational and OO) of thought. You all share one. And you should know it. It’s called object oriented.</p>
<p>Anyway… Enough pithiness (is that a word?)…</p>
<p>The always astoundingly good <a target="_blank" href="http://www.ayende.com">Ayende</a> (Oren) is getting ready to release one of the most compelling software tools for people wasting far less and ‘for free’ gaining far higher quality by using NHibernate.</p>
<p>I expect it will be a fantastic tool to use in trying to work with teams desperately clutching their ADO.NET books….</p>
<p><a href="http://ayende.com/">This is all his content from here out:</a></p>
<p>NH Prof has reached the level in which I can actually talk about the features that it has in more than abstract terms. There is still a big feature area that I want to cover (which should be a nice surprise), but the basics are there, and today I had ample proof that it is maturing just nicely. I was able to deal with quite a few of the remaining tasks by applying check listing. Basically, to do X, I had to do A,B &amp; C. Trivially simple, and quite satisfying.</p>
<p>Test coverage went back up to over 90% on the backend again, which is also nice.</p>
<p>Anyway, let us start with the tour, shall we?</p>
<p><a href="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_2.png" width="655" height="557" /></a></p>
<p>The left upper pane shows the captured sessions. You can see the number of statements per each session, as well as the length time it was open.&#160; Let us move down a bit, and explore statistics.</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_8.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_3.png" width="655" height="557" /></a></p>
<p>The session factory statistics pane include a <em>lot</em> of information about NHibernate, which can give you a good indication about what is going on in the application in a global fashion. In 2.0 we have quite a few data points, but the statistics feature was significantly expanded in 2.1, and contains a lot more data and more finely grained statistics.</p>
<p>But that is probably not what gets you excited. What is likely to thrill you are the statement view.</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_12.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_5.png" width="748" height="495" /></a></p>
<p>I put a lot of though into designing those (well, into thinking about them, the actual design was handled by people who actually know what they are doing, design wise). The upper section of the screen is optimized to allow the human eye to quickly scan it in order to find all sorts of interesting patterns. Compare this to SQL Profiler UI, and you can see why I think that this is a much better version, just from that stand point.</p>
<p>The bottom half, however, is what I <em>really</em> like. This is the part I use the most often, in order to really see what is going on. I did an ad-hoc demo of the profiler in Dallas, and one of the things that cam out of this was the format that you see on the lower pane. This UI is set to allow you to just copy the query from the profiler and immediately execute a readable, easy to understand query on Management Studio or Toad. Again, another piece where I think that I providing a lot more value than SQL Profiler does.</p>
<p>For quick reference, we put the parameter values on the left of the query, so you can inspect them without having to go into a potentially complex queries to try to figure out what is what.</p>
<p>But this isn&#8217;t where it ends, let us take a look at the stack trace tab:</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_16.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_7.png" width="751" height="504" /></a></p>
<p>The stack trace will let you correlate a query and the code that generated it, and not only that, it will take you directly from the query to the code (opening visual studio, loading the file and landing you directly in the place in the code that caused this query to be executed.</p>
<p>Oh, and one more thing&#8230;</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_18.png"><img border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_8.png" width="764" height="538" /></a></p>
<p>I have over four years of experience working with NHibernate, a time during which I learned quite a bit about what work, what doesn&#8217;t and what kind of things we should be aware off. The profiler has given me the chance to codify a lot of these patterns, and put them in a way that allow you to have apply early detection and prevention mechanisms.</p>
<p>And one last thing, this time it will really be the last. Session / Entity inspection:</p>
<p><a href="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_20.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;" border="0" alt="image" src="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_9.png" width="749" height="527" /></a></p>
<p>You can see exactly what are the entities that were loaded by this session, including counts per entity and all the ids that were loaded.</p>
<p>I hope to be able to open it for beta testing in two to three weeks, and a 1.0 release about a month after that. Pricing is tentatively set at 200$ per user, but this is subject to change.</p>
<p><a title="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx" href="http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx">http://ayende.com/Blog/archive/2008/11/04/nh-prof-a-guided-tour.aspx</a></p>
<h3>Amazing stuff……Buy this from Oren!</h3>
<br />Posted in Framework Design, Industry News, nhibernate, ORM, Software Futures Tagged: ADO.NET, C#, C# 3.0, Domain, Domain Driven, Linq, Linq to Entities, nhibernate, NHibernate Profiler, ORM, SQL Profiler <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1109/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1109/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1109/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1109&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/11/06/nhibernate_profiler_orm_maturity_is_here/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://upload.wikimedia.org/wikipedia/commons/thumb/5/58/Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg/280px-Nekyia_Staatliche_Antikensammlungen_1494_n2.jpg" medium="image" />

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_7.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_8.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://ayende.com/Blog/images/ayende_com/Blog/WindowsLiveWriter/NHProfAguidedtour_6720/image_thumb_9.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>UPDATE: Core Engine for Sharepoint Taxonomy Navigation with Silverlight &amp; WPF/XAML Deep Zoom in 3D</title>
		<link>http://team.pushbomb.com/2008/10/28/sharepoint-taxonomy-navigation-with-silverlight-deep-zoom-in-3d/</link>
		<comments>http://team.pushbomb.com/2008/10/28/sharepoint-taxonomy-navigation-with-silverlight-deep-zoom-in-3d/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 14:58:58 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[SOA and Interop]]></category>
		<category><![CDATA[Siverlight]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[MOSS]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[SharePoint 2007]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[office 2007]]></category>
		<category><![CDATA[office xml]]></category>
		<category><![CDATA[deep zoom]]></category>
		<category><![CDATA[taxonomy]]></category>
		<category><![CDATA[tag navigation]]></category>
		<category><![CDATA[silverlight 2]]></category>
		<category><![CDATA[3D]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/10/22/sharepoint-taxonomy-navigation-with-silverlight-deep-zoom-in-3d/</guid>
		<description><![CDATA[This proof of concept gets us around a few hurdles we were struggling with to deliver a ‘Google Earth’ style view but into a ‘company as the earth’. In our opinion, you can navigate to almost any spot on the planet so why is it so hard to find documents?  
For those invested in document management, categorization and meta information addition (part of building the taxonomies) the piece we found missing was a ‘modern’ way to navigate, discover, filter, pattern match, etc. all that semi-structured data.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1060&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p style="text-align:center;">
<p style="text-align:center;">
<p style="text-align:right;">
<ul>
<li>Click the right mouse button to freeze the cube</li>
<li>Move the mouse to zoom in and out while the cube is frozen</li>
<li>See if you can get the Easter egg to display</li>
</ul>
<p style="text-align:right;">
<p style="text-align:center;"><strong>NOTE: If this did not work for you before, please try it using the new launch page below. This will indicate if any .NET bits are missing on your PC. This will all go away when we finish moving this work to Silverlight in total.</strong></p>
<p style="text-align:center;"><strong><br />
</strong></p>
<p><a href="http://www.domaindotnet.com/sharepoint/publish.htm" target="_blank"><img class="size-full wp-image-1071 alignleft" style="border:2px solid black;margin:5px;" title="videotitle" src="http://dcarr.files.wordpress.com/2008/10/videotitle.png?w=291&#038;h=218" alt="" width="291" height="218" /></a></p>
<blockquote>
<h3 style="text-align:center;"><span style="text-decoration:underline;"><a href="http://www.domaindotnet.com/sharepoint/publish.htm">Click here to see it live</a></span></h3>
</blockquote>
<p style="text-align:left;">This proof of concept gets us around a few hurdles we were struggling with to deliver a ‘Google Earth’ style view but into a ‘company as the earth’. In our opinion, you can navigate to almost any spot on the planet so why is it so hard to find documents?</p>
<p style="text-align:left;">For those invested in document management, categorization and meta information addition (part of building the taxonomies) the piece we found missing was a ‘modern’ way to navigate, discover, filter, pattern match, etc. all that semi-structured data.</p>
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:left;">
<p style="text-align:center;">
<p style="text-align:center;">
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a24b430e-bb28-4b7a-a183-639eb09ad2f0" class="wlWriterSmartContent" style="display:inline;float:none;text-align:center;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/sharepoint">sharepoint</a>,<a rel="tag" href="http://del.icio.us/popular/MOSS">MOSS</a>,<a rel="tag" href="http://del.icio.us/popular/Sharepoint+2007">Sharepoint 2007</a>,<a rel="tag" href="http://del.icio.us/popular/office+2007">office 2007</a>,<a rel="tag" href="http://del.icio.us/popular/office+xml">office xml</a>,<a rel="tag" href="http://del.icio.us/popular/deep+zoom">deep zoom</a>,<a rel="tag" href="http://del.icio.us/popular/taxonomy">taxonomy</a>,<a rel="tag" href="http://del.icio.us/popular/tag+navigation">tag navigation</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight">silverlight</a>,<a rel="tag" href="http://del.icio.us/popular/silverlight+2">silverlight 2</a>,<a rel="tag" href="http://del.icio.us/popular/3D">3D</a>,<a rel="tag" href="http://del.icio.us/popular/.NET">.NET</a></div>
<div class="wlWriterSmartContent" style="display:inline;float:none;text-align:center;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/sharepoint">sharepoint</a>,<a rel="tag" href="http://technorati.com/tags/MOSS">MOSS</a>,<a rel="tag" href="http://technorati.com/tags/Sharepoint+2007">Sharepoint 2007</a>,<a rel="tag" href="http://technorati.com/tags/office+2007">office 2007</a>,<a rel="tag" href="http://technorati.com/tags/office+xml">office xml</a>,<a rel="tag" href="http://technorati.com/tags/deep+zoom">deep zoom</a>,<a rel="tag" href="http://technorati.com/tags/taxonomy">taxonomy</a>,<a rel="tag" href="http://technorati.com/tags/tag+navigation">tag navigation</a>,<a rel="tag" href="http://technorati.com/tags/silverlight">silverlight</a>,<a rel="tag" href="http://technorati.com/tags/silverlight+2">silverlight 2</a>,<a rel="tag" href="http://technorati.com/tags/3D">3D</a>,<a rel="tag" href="http://technorati.com/tags/.NET">.NET</a></div>
<div class="wlWriterHeaderFooter" style="text-align:center;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f10%2f22%2fsharepoint-taxonomy-navigation-with-silverlight-deep-zoom-in-3d%2f&amp;title=Live+Proof+of+Concept%3a+Core+Engine+for+Sharepoint+Taxonomy+Navigation+with+Silverlight+%26+WPF%2fXAML+Deep+Zoom+in+3D"><img style="border:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br />Posted in sharepoint, Siverlight, SOA and Interop, Software Futures Tagged: .NET, 3D, deep zoom, MOSS, office 2007, office xml, sharepoint, SharePoint 2007, SilverLight, silverlight 2, tag navigation, taxonomy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1060/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1060/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1060/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1060&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/10/28/sharepoint-taxonomy-navigation-with-silverlight-deep-zoom-in-3d/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/videotitle.png" medium="image">
			<media:title type="html">videotitle</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Visual Studio 2010 Gets Serious about Visual Metrics &#8211; Screen Shots Here Look Promising but still no NDepend&#8230;.</title>
		<link>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/</link>
		<comments>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 02:03:46 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Industry News]]></category>
		<category><![CDATA[Software Factories]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[2010]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Class Diagram]]></category>
		<category><![CDATA[NDepend]]></category>
		<category><![CDATA[Sequence Diagram]]></category>
		<category><![CDATA[SilverLight]]></category>
		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/10/13/new_screen_shots_visual_studio_2010/</guid>
		<description><![CDATA[Modeling that Works with Code For most businesses only about 20% of the code being written today is for new applications; (DDN: Not true 100% however that is about right for budgets which is likely what they meant anyway).
the majority of work is being done on existing code bases. A typical issue encountered when working on existing code is not having good tools to help the architect or developer understand the system.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1024&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f"><img border="0" alt="kick it on DotNetKicks.com" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f" /></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;border-top:0;border-right:0;margin:0 auto;" title="bb725993.LayerDiagram(en-us,MSDN.10)" border="0" alt="bb725993.LayerDiagram(en-us,MSDN.10)" src="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn102.jpg?w=595&#038;h=398" width="595" height="398" /></p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn102.jpg"></a></p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn103.jpg"></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn102.jpg"></a></p>
<p>&#160;</p>
<p><img style="border-bottom:0;border-left:0;display:block;float:none;margin-left:auto;border-top:0;margin-right:auto;border-right:0;" title="bb725993.ArcExpl01(en-us,MSDN.10)" border="0" alt="bb725993.ArcExpl01(en-us,MSDN.10)" src="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn103.jpg?w=589&#038;h=394" width="589" height="394" /></p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn104.jpg"></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn104.jpg"></a></p>
<p align="center"><em></em></p>
<p align="center"><em>The new Architecture Explorer enables individuals to create a visual representation of existing code assets.</em></p>
<p align="center"><em></em></p>
<p align="center"><em></em></p>
<p>From MSDN (with added commentary….)</p>
<h3>&#160;</h3>
<h3>Modeling that Works with Code</h3>
<p>&#160;</p>
<p>For most businesses only about 20% of the code being written today is for new applications;</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>(DDN: Not true 100% however that is about right for budgets which is likely what they meant anyway).</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>the majority of work is being done on existing code bases. A typical issue encountered when working on existing code is not having good tools to help the architect or developer understand the system.</p>
<p>&#160;</p>
<p>(DDN: Uh.. How about no <a target="_blank" href="http://en.wikipedia.org/wiki/Regression_testing">regression tests</a>? How about no mandate for reuse, framework API quality, etc. etc.? Sure lets not talk about the why, just the ways we can profit from it)</p>
<p>&#160;</p>
<p>&#160;</p>
<p>This can make it challenging to not only understand what needs to be done to make the required changes, but it makes it equally challenging to understand the broader impact of the changes. Often it isn’t until much later that an unexpected bug is discovered as a result of a change.</p>
<p>Our modeling tools have tight integration into the actual code of the application. This means that a developer or architect can use models to explore existing code assets.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>Ugh.. Rational Round Trip UML nightmare but this should be part of your world at a minimum from code to view.</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>The new Architecture Explorer in Visual Studio Team System gives developers and architects the capability of creating a full architectural picture of existing code; understanding how they fit together; understanding how they “work.” This leads to better information about how to use, re-use, or even whether or not to discard existing code. The Architecture Explorer provides architects and developers a mechanism for visualizing code assets in a number of ways including graphs, stacked diagrams and dependency matrices.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>DDN: OK now I am officially getting scared… I can see all the developers saying ‘look ma! I’m an architect!’</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>The introduction of the Architecture Layer Diagram means that a developer or architect can use models to enforce constraints on code as well. The Architecture Layer Diagram can be coupled to code making it an active diagram that can be used for validation.</p>
<p>For example, when an architect designs a system where the presentation layer should not talk to the data layer, you want to be able to enforce that model at check-in.</p>
<p>&#160;</p>
<p>&#160;</p>
<h3>DDN: Oh my god was that last sentence serious? As if that would be a real interesting case?</h3>
<p>&#160;</p>
<p>&#160;</p>
<p>VSTS 2010 can do that. These capabilities delivered in VSTS 2010 are part of the Microsoft’s overall modeling story.</p>
<p>Learn more about modeling by watching the <a id="ctl00_mainContentContainer_ctl02" href="http://download.microsoft.com/download/8/a/5/8a5cddff-e76f-4a41-927f-db1accbd9e00/Modeling%20Webcast%209.12.08.wmv">Trends in Software Modeling</a> webcast featuring Jeffrey Hammond (Forrester Research), Cameron Skinner (Microsoft, Visual Studio Team System), and Clemens Reijnen (Sogeti).</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4c1a473e-b916-427b-953d-75884c544bd6" class="wlWriterSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Visual+Studio+2010" rel="tag">Visual Studio 2010</a>,<a href="http://technorati.com/tags/UML" rel="tag">UML</a>,<a href="http://technorati.com/tags/Class+Diagram" rel="tag">Class Diagram</a>,<a href="http://technorati.com/tags/Sequence+Diagram" rel="tag">Sequence Diagram</a>,<a href="http://technorati.com/tags/SilverLight" rel="tag">SilverLight</a>,<a href="http://technorati.com/tags/NDepend" rel="tag">NDepend</a>,<a href="http://technorati.com/tags/C%23" rel="tag">C#</a>,<a href="http://technorati.com/tags/2010" rel="tag">2010</a></div>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:7d8f632d-16da-4bfb-b749-d88355671050" class="wlWriterSmartContent">del.icio.us Tags: <a href="http://del.icio.us/popular/Visual+Studio+2010" rel="tag">Visual Studio 2010</a>,<a href="http://del.icio.us/popular/UML" rel="tag">UML</a>,<a href="http://del.icio.us/popular/Class+Diagram" rel="tag">Class Diagram</a>,<a href="http://del.icio.us/popular/Sequence+Diagram" rel="tag">Sequence Diagram</a>,<a href="http://del.icio.us/popular/SilverLight" rel="tag">SilverLight</a>,<a href="http://del.icio.us/popular/NDepend" rel="tag">NDepend</a>,<a href="http://del.icio.us/popular/C%23" rel="tag">C#</a>,<a href="http://del.icio.us/popular/2010" rel="tag">2010</a></div>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/C#">C#</a>
<ul>
<li><a href="http://technorati.com/posts/TFQtx20taGKRBpdjrmUT9WJQc%2BRnMKMOJPttqoST4nQ%3D">Technorati: Discussion about “JetBrains Releases ReSharper 4.01 Beta 1 as EAP Build 917 – Download Here”</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/11/undocumented-linq-net-35-sp1-gold-forgot-to-mention-these-critical-changes-that-might-break-your-code/">Undocumented Linq! .NET 3.5 SP1 Gold Forgot to Mention these Critical Changes that might Break your Code « ubiquitous fluency</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/">NHibernate 2.0 gold Released – Must Wait for ‘Linq to NHibernate’ « ubiquitous fluency</a> </li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx">Design Guidelines for Developing Class Libraries</a> </li>
<li><a href="http://desktop.google.com/feeds/gadgets.xml?hl=en&amp;type=rss">Google Desktop&#8217;s Latest Gadgets</a> </li>
<li><a href="http://damon.agilefactor.com/2008/06/27/master-generic-type-constrains-a-critical-success-factor-in-linq-development/">Master Generic Type Constrains : A critical success factor in Linq Development</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/08/22/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization/">Linq to Financial Markets : Optimizing Provider to Real-Time Quotes, Analytics, and Silverlight-WPF Visualization « ubiquitous fluency</a> </li>
<li><a href="http://feeds.feedburner.com/DanielCazzulino">Daniel Cazzulino&#8217;s Blog</a> </li>
<li><a href="http://damon.agilefactor.com/2007/10/collision-of-software-project.html">The Collision of Software Project Management and Agile</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/">Linq to Gac : Use Linq to Power Query your Gac via this C# Bridge to Fusion « team domain.dot.net</a> </li>
<li><a href="http://blog.domaindotnet.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/">Expose New Linq Operations from the Fastest Collection Type in .NET Ever « team domain.dot.net</a> </li>
<li><a href="http://damon.agilefactor.com/2008/05/27/advanced-c-30-part-3-new-language-features-as-domain-specific-as-well-as-general-purpose-extensions/">Advanced C# 3.0: Part 3 &#8211; New Language Features as ‘Domain Specific’ as well as General Purpose Extensions « damon wilder carr</a> </li>
</ul>
<p><a href="http://del.icio.us/damoncarr/C#">(more..)</a></p>
</p></div>
<div class="wlw_related_posts"></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f&amp;title=Visual+Studio+2010+Gets+Serious+about+Visual+Metrics+%e2%80%93+Screen+Shots+Here+Look+Promising+but+still+no+NDepend%e2%80%a6."><img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /></a></div>
<br />Posted in Framework Design, Industry News, Software Factories, Software Futures, Visual Studio 2010 Tagged: 2010, C#, Class Diagram, NDepend, Sequence Diagram, SilverLight, UML, Visual Studio 2010 <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/1024/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/1024/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/1024/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=1024&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/10/13/new_screen_shots_visual_studio_2010/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://download.microsoft.com/download/8/a/5/8a5cddff-e76f-4a41-927f-db1accbd9e00/Modeling%20Webcast%209.12.08.wmv" length="5042356" type="video/x-ms-wmv" />
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f10%2f13%2fnew_screen_shots_visual_studio_2010%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/bb725993layerdiagramenusmsdn102.jpg" medium="image">
			<media:title type="html">bb725993.LayerDiagram(en-us,MSDN.10)</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/bb725993arcexpl01enusmsdn103.jpg" medium="image">
			<media:title type="html">bb725993.ArcExpl01(en-us,MSDN.10)</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>SharePoint 2007 MOSS Update &#8211; New BDC Web Man</title>
		<link>http://team.pushbomb.com/2008/10/09/sharepoint_moss_2007_bdc/</link>
		<comments>http://team.pushbomb.com/2008/10/09/sharepoint_moss_2007_bdc/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 02:49:18 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[sharepoint]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[2007]]></category>
		<category><![CDATA[BDC]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Domain Driven]]></category>
		<category><![CDATA[LighteningTools]]></category>
		<category><![CDATA[MOSS]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/10/02/sharepoint_moss_2007_bdc/</guid>
		<description><![CDATA[By dragging and dropping your database tables onto a design surface you can easily generate WCF BasicHttp web service methods that easily integrate with the Business Data Catalog. This product is currently in beta and you can download and give it a go from here:<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=974&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Our friends at lightening tools have made some great new innovations in their offerings:</p>
<p><a href="http://www.lightningtools.com/default.aspx"><img style="border-bottom:0;border-left:0;display:inline;margin-left:0;border-top:0;margin-right:0;border-right:0;" title="logo" src="http://dcarr.files.wordpress.com/2008/10/logo1.png?w=244&#038;h=84" border="0" alt="logo" width="244" height="84" /></a></p>
<h2>BDC Web Man</h2>
<p>We really like this time saver in the ‘often cause of pain’ BDC. (note: the comments below are marketingspeak but as most (some) of it, it&#8217;s technically literally correct). But we like where this is going!</p>
<blockquote><p>By dragging and dropping your database tables onto a design surface you can easily generate WCF BasicHttp web service methods that easily integrate with the Business Data Catalog. This product is currently in beta and you can download and give it a go from here:</p></blockquote>
<p><a title="http://www.lightningtools.com/bdc-web-man/default.aspx" href="http://www.lightningtools.com/bdc-web-man/default.aspx">http://www.lightningtools.com/bdc-web-man/default.aspx</a></p>
<p>We dig into this product and our own attempts which it&#8217;s nice to know will be offered in a more predictable and market oriented way then &#8216;when we get to it for open source&#8217;. I live open source but sometimes you need a market for the last mile (grin).</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6c7866c6-258c-4c2d-8a34-9aaf01927bd9" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/SharePoint">SharePoint</a>,<a rel="tag" href="http://technorati.com/tags/MOSS">MOSS</a>,<a rel="tag" href="http://technorati.com/tags/2007">2007</a>,<a rel="tag" href="http://technorati.com/tags/BDC">BDC</a>,<a rel="tag" href="http://technorati.com/tags/LighteningTools">LighteningTools</a>,<a rel="tag" href="http://technorati.com/tags/C%23">C#</a>,<a rel="tag" href="http://technorati.com/tags/Domain+Driven">Domain Driven</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:5fd505c1-3300-4829-8ef7-09830a7e68e6" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/SharePoint">SharePoint</a>,<a rel="tag" href="http://del.icio.us/popular/MOSS">MOSS</a>,<a rel="tag" href="http://del.icio.us/popular/2007">2007</a>,<a rel="tag" href="http://del.icio.us/popular/BDC">BDC</a>,<a rel="tag" href="http://del.icio.us/popular/LighteningTools">LighteningTools</a>,<a rel="tag" href="http://del.icio.us/popular/C%23">C#</a>,<a rel="tag" href="http://del.icio.us/popular/Domain+Driven">Domain Driven</a></div>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/SharePoint">SharePoint</a></div>
<ul>
<li><a href="http://msdn2.microsoft.com/en-us/library/aa660698.aspx">How to Create a Minimal Master Page</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/C#">C#</a></p>
<ul>
<li><a href="http://damon.agilefactor.com/2008/06/27/master-generic-type-constrains-a-critical-success-factor-in-linq-development/">Master Generic Type Constrains : A critical success factor in Linq Development</a></li>
<li><a href="http://technorati.com/posts/TFQtx20taGKRBpdjrmUT9WJQc%2BRnMKMOJPttqoST4nQ%3D">Technorati: Discussion about “JetBrains Releases ReSharper 4.01 Beta 1 as EAP Build 917 – Download Here”</a></li>
<li><a href="http://feeds.engadget.com/weblogsinc/engadget">Engadget</a></li>
<li><a href="http://code.msdn.microsoft.com/rss.ashx">MSDN Code Gallery</a></li>
<li><a href="http://www.domaindotnet.com/">domain driven .net 3.5+ software development</a></li>
<li><a href="http://blog.domaindotnet.com/2008/07/24/linq-c-30-enumerable-extension-method-reference/">Linq C# 3.0 Enumerable Extension Method Reference « don’t give up on software just yet</a></li>
<li><a href="http://desktop.google.com/feeds/gadgets.xml?hl=en&amp;type=rss">Google Desktop&#8217;s Latest Gadgets</a></li>
<li><a href="http://damon.agilefactor.com/2008/05/27/advanced-c-30-part-3-new-language-features-as-domain-specific-as-well-as-general-purpose-extensions/">Advanced C# 3.0: Part 3 &#8211; New Language Features as ‘Domain Specific’ as well as General Purpose Extensions « damon wilder carr</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ms229042.aspx">Design Guidelines for Developing Class Libraries</a></li>
<li><a href="http://blog.domaindotnet.com/2008/08/11/undocumented-linq-net-35-sp1-gold-forgot-to-mention-these-critical-changes-that-might-break-your-code/">Undocumented Linq! .NET 3.5 SP1 Gold Forgot to Mention these Critical Changes that might Break your Code « ubiquitous fluency</a></li>
<li><a href="http://feed43.com/e-texteditor-releases.xml">E &#8211; TextEditor | New Release Feed</a></li>
</ul>
<p><a href="http://del.icio.us/damoncarr/C#">(more..)</a></p>
<p><a href="http://m1e.net/c?73236238-LSKJtxyqROS.A%403657022-USu5ekEy.ObDk"></a></p>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f10%2f02%2fsharepoint_moss_2007_bdc%2f&amp;title=SharePoint+2007+MOSS+Update+%e2%80%93+New+BDC+Web+Man"><img style="border:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="rdo">Legacy Fun Facts:</a></div>
<br />Posted in sharepoint, software as strategic, Technology Tagged: 2007, BDC, C#, Domain Driven, LighteningTools, MOSS, sharepoint <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/974/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/974/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/974/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/974/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/974/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/974/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=974&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/10/09/sharepoint_moss_2007_bdc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/10/logo1.png" medium="image">
			<media:title type="html">logo</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Linq to Gac : Use Linq to Power Query your Gac via this C# Bridge to Fusion</title>
		<link>http://team.pushbomb.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/</link>
		<comments>http://team.pushbomb.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/#comments</comments>
		<pubDate>Sun, 21 Sep 2008 00:43:45 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Generics]]></category>
		<category><![CDATA[Proof Driven Development]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[Software Futures]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[concepts implemented]]></category>
		<category><![CDATA[Lambada]]></category>
		<category><![CDATA[IEnumerable]]></category>
		<category><![CDATA[Linq to Objects]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Fusion]]></category>
		<category><![CDATA[Global Assembly Cache]]></category>
		<category><![CDATA[IEnumerator]]></category>
		<category><![CDATA[Linq to Gac]]></category>
		<category><![CDATA[Registry]]></category>
		<category><![CDATA[Machine]]></category>
		<category><![CDATA[Internals]]></category>
		<category><![CDATA[GAC]]></category>
		<category><![CDATA[CSharp]]></category>
		<category><![CDATA[DomainDriven]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/</guid>
		<description><![CDATA[Now we attach the Gac Here we provide a full Linq to Objects IEnumerable wrapper over the Fusion API to allow you to have all the power of Linq queries over your entire GAC (as well as most other parts of you computer you can now join on!). This is a post to get you the GAC info now, as many have asked for it (and it might be the most widely used of this work). Things do get fun however when you start joining your GAC with your files with you registry....<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=928&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f09%2f20%2ffusion_c_sharp_wrapper_for_linq_to_gac_access%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f09%2f20%2ffusion_c_sharp_wrapper_for_linq_to_gac_access%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
<p><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f09%2f20%2ffusion_c_sharp_wrapper_for_linq_to_gac_access%2f&amp;title=%e2%80%98Linq+to+Gac%e2%80%99+%3a+Use+Linq+to+Power+Query+your+Gac+via+this+C%23+Bridge+to+Fusion"><img style="border-width:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" /></a></p>
<h4>This post gets you <a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" target="_blank">Linq</a> access to the GAC with no fuss.</h4>
<p>Fusion is wrapped for you so no need to understand the unmanaged stuff unless you want to. Your up and running with GAC as a new Linq to Objects source in minutes.</p>
<h2>The Big Picture of the Project (You can skip to the next section if you just want the GAC code)</h2>
<p>Note: The reason both the Gac and MyEnvironment IEnumerable&lt;T&gt; references below are different? See the reference on the bottom right of the picture into the entry point to all of it (ThisBox)?</p>
<h2>Introduction to the Fusion  IEnumerable Wrapper</h2>
<p>A simple case. I want to know how my GAC is broken into ‘Major Vendors’. We assume this is roughly the first part of the name. (i.e. Microsoft.System = Microsoft).</p>
<p>Oh yeah. Exclude the assemblies that only occur once. We are looking for the larger view here.</p>
<p>Here is an easy solution:</p>
<pre class="code"><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">        [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Fact</span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">]
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public void </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">should_show_gac_by_vendor()
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">result = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">from </span><span style="background:black none repeat scroll 0 0;color:white;">matchedAssembly </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ThisBox</span><span style="background:black none repeat scroll 0 0;color:white;">.By&lt;</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">AssemblyDetail</span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">&gt;()
                         </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">group </span><span style="background:black none repeat scroll 0 0;color:white;">matchedAssembly </span></span><span style="background:black none repeat scroll 0 0;color:#ecc03e;"><span style="font-size:x-small;">by
                             </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">matchedAssembly.MajorName
                             </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">into </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">grouping
                             </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">where </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">grouping.Count() &gt; 1
                             </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">orderby </span><span style="background:black none repeat scroll 0 0;color:white;">grouping.Count() </span></span><span style="background:black none repeat scroll 0 0;color:#ecc03e;"><span style="font-size:x-small;">descending
                             select </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">grouping;

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">TotalSum = result.Sum(ad =&gt; ad.Count());

            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"** ASSEMBLIES BY NAME WITH &gt; 1 REGISTERED  = {0} ***"</span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">, TotalSum);

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">foreach </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">firstGroup </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">result)
            {
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span></span><span style="font-size:x-small;"><span style="background:black none repeat scroll 0 0;color:white;">groupCount = firstGroup.Count();
                </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Group '{0}' Assemblies={1} Percent={2} Public Keys Used={3}"</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;">,
                                    firstGroup.Key,
                                    groupCount,
                                    groupCount.ToPctString(TotalSum),
                                    firstGroup.Select(ad =&gt; ad.PublicKey).Distinct().Count()
                                    );
            }
        }</span></span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h2>** ASSEMBLIES BY NAME WITH &gt; 1 REGISTERED  = 664 ***</h2>
<p>Group &#8216;Microsoft&#8217; Assemblies=466 Percent=70.18% Public Keys Used=5<br />
Group &#8216;DevExpress&#8217; Assemblies=73 Percent=10.99% Public Keys Used=2<br />
Group &#8216;System&#8217; Assemblies=71 Percent=10.69% Public Keys Used=4<br />
Group &#8216;Policy&#8217; Assemblies=14 Percent=2.11% Public Keys Used=2<br />
Group &#8216;FSharp&#8217; Assemblies=11 Percent=1.66% Public Keys Used=1<br />
Group &#8216;VLinq&#8217; Assemblies=10 Percent=1.51% Public Keys Used=1<br />
Group &#8216;policy&#8217; Assemblies=6 Percent=0.9% Public Keys Used=2<br />
Group &#8216;PresentationFramework&#8217; Assemblies=5 Percent=0.75% Public Keys Used=1<br />
Group &#8216;mscorcfg&#8217; Assemblies=2 Percent=0.3% Public Keys Used=1<br />
Group &#8216;WebDev&#8217; Assemblies=2 Percent=0.3% Public Keys Used=1<br />
Group &#8216;VSTADTEProvider&#8217; Assemblies=2 Percent=0.3% Public Keys Used=1<br />
Group &#8216;VsWebSite&#8217; Assemblies=2 Percent=0.3% Public Keys Used=1</p>
<p><span style="font-size:x-small;"><span style="font-size:x-small;">Try that with GacUtil (grin)..</span></span></p>
<h2>C# GAC IEnumerable&lt;Assembly&gt; implementation</h2>
<p>Ah yes the GAC Fusion wrapper code.  Thanks to <a href="http://dotnetjunkies.com/WebLog/debasish/" target="_blank">Debasish Bose</a> for his help here.</p>
<h1>C# Fusion Gac Enumerable : <a href="http://blog.domaindotnet.com/">Domain.Dot.Net</a> Team</h1>
<p><a href="http://dcarr.files.wordpress.com/2008/09/classdiagram21.png"><img style="display:inline;border-width:0;" title="ClassDiagram2" src="http://dcarr.files.wordpress.com/2008/09/classdiagram2-thumb1.png?w=684" border="0" alt="ClassDiagram2" width="684" /></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Just to have some room to breath
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public class </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">AssemblyDetail </span><span style="background:black none repeat scroll 0 0;color:white;">: </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">AssemblyDetailBase
    </span><span style="background:black none repeat scroll 0 0;color:white;">{
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public </span><span style="background:black none repeat scroll 0 0;color:white;">AssemblyDetail(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">currentAssembly) : </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">base</span><span style="background:black none repeat scroll 0 0;color:white;">(currentAssembly) {}

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String </span><span style="background:black none repeat scroll 0 0;color:white;">FullName
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_fullName;
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override string </span><span style="background:black none repeat scroll 0 0;color:white;">Version
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_versionString;
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override int </span><span style="background:black none repeat scroll 0 0;color:white;">Major
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">VersionComponent(0);
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override int </span><span style="background:black none repeat scroll 0 0;color:white;">Minor
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">VersionComponent(1);
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override int </span><span style="background:black none repeat scroll 0 0;color:white;">Revision
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">VersionComponent(2);
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override int </span><span style="background:black none repeat scroll 0 0;color:white;">Build
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">VersionComponent(3);
            }
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override string </span><span style="background:black none repeat scroll 0 0;color:white;">PublicKey
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_pkey;
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public override string </span><span style="background:black none repeat scroll 0 0;color:white;">MajorName
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_majorName;
            }
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String </span><span style="background:black none repeat scroll 0 0;color:white;">Name
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
            </span><span style="background:black none repeat scroll 0 0;color:white;">{
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_fullName;
            }
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">VersionComponent(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">position)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_version.Length &lt;= position + 1
                           ? </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Convert</span><span style="background:black none repeat scroll 0 0;color:white;">.ToInt32(_version[position]) : 0;
        }
    }</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">    #region

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;

    #endregion

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Alpha - Comment and Add Regressions
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract class </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">AssemblyDetailBase
    </span><span style="background:black none repeat scroll 0 0;color:white;">{
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected string </span><span style="background:black none repeat scroll 0 0;color:white;">_fullName;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected string </span><span style="background:black none repeat scroll 0 0;color:white;">_majorName;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string</span><span style="background:black none repeat scroll 0 0;color:white;">[] _nameSplit;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected string </span><span style="background:black none repeat scroll 0 0;color:white;">_pkey;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">_rawname;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected string</span><span style="background:black none repeat scroll 0 0;color:white;">[] _version;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected string </span><span style="background:black none repeat scroll 0 0;color:white;">_versionString;

        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Initializes a new instance of the </span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;see cref=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"AssemblyDetailBase"</span><span style="background:black none repeat scroll 0 0;color:gray;">/&gt; </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">class.
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"Current"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The current.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">protected </span><span style="background:black none repeat scroll 0 0;color:white;">AssemblyDetailBase(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">Current)
        {
            ExtractParsedDetail(Current);
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract string </span><span style="background:black none repeat scroll 0 0;color:white;">FullName
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract string </span><span style="background:black none repeat scroll 0 0;color:white;">Version
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract int </span><span style="background:black none repeat scroll 0 0;color:white;">Major
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract int </span><span style="background:black none repeat scroll 0 0;color:white;">Minor
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract int </span><span style="background:black none repeat scroll 0 0;color:white;">Revision
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract int </span><span style="background:black none repeat scroll 0 0;color:white;">Build
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract string </span><span style="background:black none repeat scroll 0 0;color:white;">PublicKey
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public abstract string </span><span style="background:black none repeat scroll 0 0;color:white;">MajorName
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }

        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">I do not want to persist the IAssemblyName
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">as it might introduce a COM reference when
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">we just can extract what we need and let it
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">pass away into whatever...
        </span><span style="background:black none repeat scroll 0 0;color:gray;">///
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Extracts the parsed detail.
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"Current"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The current.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">ExtractParsedDetail(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">Current)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">const int </span><span style="background:black none repeat scroll 0 0;color:white;">stongKeyPosition = 3;
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">const int </span><span style="background:black none repeat scroll 0 0;color:white;">versionPosition = 1;

            </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Main Work Happens Here
            </span><span style="background:black none repeat scroll 0 0;color:white;">_fullName = GetDisplayName(Current);

            </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Simply parse the ", " that seperates the full
            // name
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">_parsedDetails = _fullName.Split(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">new</span><span style="background:black none repeat scroll 0 0;color:white;">[]
                                                 {
                                                         </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">", "
                                                 </span><span style="background:black none repeat scroll 0 0;color:white;">}, </span><span style="background:black none repeat scroll 0 0;color:#b8a223;">StringSplitOptions</span><span style="background:black none repeat scroll 0 0;color:white;">.RemoveEmptyEntries);

            ExtractVersionInfo(versionPosition, _parsedDetails);
            ExtractAddition(stongKeyPosition, _parsedDetails);
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">ExtractAddition(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">stongKeyPosition, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string</span><span style="background:black none repeat scroll 0 0;color:white;">[] parsedDetails)
        {
            _pkey = parsedDetails[stongKeyPosition];
            _rawname = parsedDetails[0].Trim();
            _nameSplit = _rawname.Split(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">'.'</span><span style="background:black none repeat scroll 0 0;color:white;">);
            _majorName = _nameSplit[0].Trim();
        }

        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Gets the display name from the unmanaged pointer
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"aName"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">A name.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">static string </span><span style="background:black none repeat scroll 0 0;color:white;">GetDisplayName(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">aName)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">displayFlags = </span><span style="background:black none repeat scroll 0 0;color:#b8a223;">AssemblyNameDisplayFlags</span><span style="background:black none repeat scroll 0 0;color:white;">.ALL;

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">uiLen = 0;

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">_displayAssemblyName = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">null</span><span style="background:black none repeat scroll 0 0;color:white;">;

            </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Get the length
            </span><span style="background:black none repeat scroll 0 0;color:white;">aName.GetDisplayName(</span><span style="background:black none repeat scroll 0 0;color:#76a38a;">IntPtr</span><span style="background:black none repeat scroll 0 0;color:white;">.Zero, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref </span><span style="background:black none repeat scroll 0 0;color:white;">uiLen, (</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint</span><span style="background:black none repeat scroll 0 0;color:white;">) displayFlags);

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">if </span><span style="background:black none repeat scroll 0 0;color:white;">(uiLen &gt; 0)
            {
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">byteBuffer = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">new byte</span><span style="background:black none repeat scroll 0 0;color:white;">[(uiLen + 1)*2];
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">unsafe </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">//turn on sunsafe in project properties
                </span><span style="background:black none repeat scroll 0 0;color:white;">{
                    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">fixed </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">byte</span><span style="background:black none repeat scroll 0 0;color:white;">* numRef1 = byteBuffer)
                    {
                        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">ptr1 = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">new </span><span style="background:black none repeat scroll 0 0;color:#76a38a;">IntPtr</span><span style="background:black none repeat scroll 0 0;color:white;">(numRef1);
                        aName.GetDisplayName(ptr1, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref </span><span style="background:black none repeat scroll 0 0;color:white;">uiLen, (</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint</span><span style="background:black none repeat scroll 0 0;color:white;">) displayFlags);
                        _displayAssemblyName = </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Marshal</span><span style="background:black none repeat scroll 0 0;color:white;">.PtrToStringUni(ptr1);
                    }
                }
            }

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_displayAssemblyName;
        }

        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Extracts the version info.
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"versionPosition"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The version position.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"parsedDetails"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The parsed details.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">ExtractVersionInfo(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">versionPosition, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string</span><span style="background:black none repeat scroll 0 0;color:white;">[] parsedDetails)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">versionLiteral = parsedDetails[versionPosition];
            _versionString = ToCoreVersion(versionPosition, versionLiteral);
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">if </span><span style="background:black none repeat scroll 0 0;color:white;">(_versionString != </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String</span><span style="background:black none repeat scroll 0 0;color:white;">.Empty)
                _version = _versionString.Split(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">'.'</span><span style="background:black none repeat scroll 0 0;color:white;">);
        }

        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Gets the nice clean x.x.x.x string
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"versionPosition"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The version position.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"versionLiteral"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The version literal.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">static string </span><span style="background:black none repeat scroll 0 0;color:white;">ToCoreVersion(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">versionPosition, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">versionLiteral)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">returnVal = </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String</span><span style="background:black none repeat scroll 0 0;color:white;">.Empty;

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">if </span><span style="background:black none repeat scroll 0 0;color:white;">(!</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String</span><span style="background:black none repeat scroll 0 0;color:white;">.IsNullOrEmpty(versionLiteral))
            {
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">_indexOf = versionLiteral.IndexOf(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"="</span><span style="background:black none repeat scroll 0 0;color:white;">);

                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">if </span><span style="background:black none repeat scroll 0 0;color:white;">(_indexOf != -1)
                    returnVal = versionLiteral.Substring(_indexOf + versionPosition);
            }

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">returnVal;
        }
    }</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">#region

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;

#endregion

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">class </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">GAC
</span><span style="background:black none repeat scroll 0 0;color:white;">{
    GAC() {}

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">DllImport</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Fusion.dll"</span><span style="background:black none repeat scroll 0 0;color:white;">, CharSet = </span><span style="background:black none repeat scroll 0 0;color:#b8a223;">CharSet</span><span style="background:black none repeat scroll 0 0;color:white;">.Auto)]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static extern int </span><span style="background:black none repeat scroll 0 0;color:white;">CreateAssemblyEnum(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyEnum </span><span style="background:black none repeat scroll 0 0;color:white;">ppEnum,
                                                </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IApplicationContext </span><span style="background:black none repeat scroll 0 0;color:white;">pAppCtx,
                                                </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">pName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwFlags,
                                                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">pvReserved);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">#region

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Security;

#endregion

[</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">SuppressUnmanagedCodeSecurity</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ComImport</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Guid</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"7C23FF90-33AF-11D3-95DA-00A024A85B51"</span><span style="background:black none repeat scroll 0 0;color:white;">),
 </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">InterfaceType</span><span style="background:black none repeat scroll 0 0;color:white;">(1)]
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public interface </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IApplicationContext
</span><span style="background:black none repeat scroll 0 0;color:white;">{
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">SetContextNameObject(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">pName);

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">GetContextNameObject([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">ppName);

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">Set([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">MarshalAs</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#b8a223;">UnmanagedType</span><span style="background:black none repeat scroll 0 0;color:white;">.LPWStr)] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">szName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">pvValue, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">cbValue,
             </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwFlags);

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">Get([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">MarshalAs</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#b8a223;">UnmanagedType</span><span style="background:black none repeat scroll 0 0;color:white;">.LPWStr)] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">szName, [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out int </span><span style="background:black none repeat scroll 0 0;color:white;">pvValue,
             </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref uint </span><span style="background:black none repeat scroll 0 0;color:white;">pcbValue, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwFlags);

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:white;">GetDynamicDirectory([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out int </span><span style="background:black none repeat scroll 0 0;color:white;">wzDynamicDir, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref uint </span><span style="background:black none repeat scroll 0 0;color:white;">pdwSize);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">#region

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Security;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Text;

#endregion

</span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">IAssemblyName from Fusion
</span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
</span><span style="background:black none repeat scroll 0 0;color:white;">[</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">SuppressUnmanagedCodeSecurity</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ComImport</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Guid</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"CD193BC0-B4BC-11D2-9833-00C04FC31D2E"</span><span style="background:black none repeat scroll 0 0;color:white;">),
 </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">InterfaceType</span><span style="background:black none repeat scroll 0 0;color:white;">(1)]
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public interface </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName
</span><span style="background:black none repeat scroll 0 0;color:white;">{
    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">SetProperty(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">PropertyId, </span><span style="background:black none repeat scroll 0 0;color:#76a38a;">IntPtr </span><span style="background:black none repeat scroll 0 0;color:white;">pvProperty, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">cbProperty);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">GetProperty(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">PropertyId, </span><span style="background:black none repeat scroll 0 0;color:#76a38a;">IntPtr </span><span style="background:black none repeat scroll 0 0;color:white;">pvProperty, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref uint </span><span style="background:black none repeat scroll 0 0;color:white;">pcbProperty);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">Finalize();

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">GetDisplayName(</span><span style="background:black none repeat scroll 0 0;color:#76a38a;">IntPtr </span><span style="background:black none repeat scroll 0 0;color:white;">szDisplayName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref uint </span><span style="background:black none repeat scroll 0 0;color:white;">pccDisplayName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwDisplayFlags);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">BindToObject(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">object </span><span style="background:black none repeat scroll 0 0;color:white;">refIID, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">object </span><span style="background:black none repeat scroll 0 0;color:white;">pAsmBindSink,
                     </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IApplicationContext </span><span style="background:black none repeat scroll 0 0;color:white;">pApplicationContext,
                     [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">MarshalAs</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#b8a223;">UnmanagedType</span><span style="background:black none repeat scroll 0 0;color:white;">.LPWStr)] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string </span><span style="background:black none repeat scroll 0 0;color:white;">szCodeBase, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">long </span><span style="background:black none repeat scroll 0 0;color:white;">llFlags,
                     </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">pvReserved, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">cbReserved, [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out int </span><span style="background:black none repeat scroll 0 0;color:white;">ppv);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">GetName(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">ref uint </span><span style="background:black none repeat scroll 0 0;color:white;">lpcwBuffer,
                [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">MarshalAs</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#b8a223;">UnmanagedType</span><span style="background:black none repeat scroll 0 0;color:white;">.LPWStr)] </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">StringBuilder </span><span style="background:black none repeat scroll 0 0;color:white;">pwzName);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">GetVersion([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out uint </span><span style="background:black none repeat scroll 0 0;color:white;">pdwVersionHi, [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out uint </span><span style="background:black none repeat scroll 0 0;color:white;">pdwVersionLow);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">IsEqual(</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">pName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwCmpFlags);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">Clone([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">pName);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">#region

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Security;

#endregion

[</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">SuppressUnmanagedCodeSecurity</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ComImport</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Guid</span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"21B8916C-F28E-11D2-A473-00C04F8EF448"</span><span style="background:black none repeat scroll 0 0;color:white;">),
 </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">InterfaceType</span><span style="background:black none repeat scroll 0 0;color:white;">(1)]
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">interface </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyEnum
</span><span style="background:black none repeat scroll 0 0;color:white;">{
    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">GetNextAssembly([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IApplicationContext </span><span style="background:black none repeat scroll 0 0;color:white;">ppAppCtx,
                        [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">ppName, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint </span><span style="background:black none repeat scroll 0 0;color:white;">dwFlags);

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">Reset();

    [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">PreserveSig</span><span style="background:black none repeat scroll 0 0;color:white;">]
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">Clone([</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Out</span><span style="background:black none repeat scroll 0 0;color:white;">] </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyEnum </span><span style="background:black none repeat scroll 0 0;color:white;">ppEnum);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">#region

</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Collections;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Collections.Generic;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">using </span><span style="background:black none repeat scroll 0 0;color:white;">System.Runtime.InteropServices;

#endregion

</span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Fairly basic stuff once the
</span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">unmanaged stuff is all mapped
</span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public class </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">GacEnumerable </span><span style="background:black none repeat scroll 0 0;color:white;">: </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator</span><span style="background:black none repeat scroll 0 0;color:white;">&lt;</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName</span><span style="background:black none repeat scroll 0 0;color:white;">&gt;, </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerable</span><span style="background:black none repeat scroll 0 0;color:white;">&lt;</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName</span><span style="background:black none repeat scroll 0 0;color:white;">&gt;
{
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">readonly </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyEnum </span><span style="background:black none repeat scroll 0 0;color:white;">_enumeration;
    </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">_enumCurrentAssembly;

    GacEnumerable()
    {
        HandleCom(</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">GAC</span><span style="background:black none repeat scroll 0 0;color:white;">.CreateAssemblyEnum(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:white;">_enumeration, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">null</span><span style="background:black none repeat scroll 0 0;color:white;">, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">null</span><span style="background:black none repeat scroll 0 0;color:white;">,
                                         (</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">uint</span><span style="background:black none repeat scroll 0 0;color:white;">) </span><span style="background:black none repeat scroll 0 0;color:#b8a223;">AssemblyCacheFlags</span><span style="background:black none repeat scroll 0 0;color:white;">.GAC, 0));
    }

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">GacEnumerable </span><span style="background:black none repeat scroll 0 0;color:white;">New
    {
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
        </span><span style="background:black none repeat scroll 0 0;color:white;">{
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return new </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">GacEnumerable</span><span style="background:black none repeat scroll 0 0;color:white;">();
        }
    }

    #region IEnumerable&lt;IAssemblyName&gt; Members

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Returns an enumerator that iterates through the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    /// &lt;returns&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">A </span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;see cref=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"T:System.Collections.Generic.IEnumerator`1"</span><span style="background:black none repeat scroll 0 0;color:gray;">/&gt; </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">that can be used to iterate through the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/returns&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator</span><span style="background:black none repeat scroll 0 0;color:white;">&lt;</span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName</span><span style="background:black none repeat scroll 0 0;color:white;">&gt; GetEnumerator()
    {
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return this</span><span style="background:black none repeat scroll 0 0;color:white;">;
    }

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Returns an enumerator that iterates through a collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    /// &lt;returns&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">An </span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;see cref=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"T:System.Collections.IEnumerator"</span><span style="background:black none repeat scroll 0 0;color:gray;">/&gt; </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">object that can be used to iterate through the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/returns&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator IEnumerable</span><span style="background:black none repeat scroll 0 0;color:white;">.GetEnumerator()
    {
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">GetEnumerator();
    }

    #endregion

    #region IEnumerator&lt;IAssemblyName&gt; Members

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Advances the enumerator to the next element of the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    /// &lt;returns&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">true if the enumerator was successfully advanced to the next element; false if the enumerator has passed the end of the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/returns&gt;
    /// &lt;exception cref=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"T:System.InvalidOperationException"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The collection was modified after the enumerator was created. </span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/exception&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">bool </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator</span><span style="background:black none repeat scroll 0 0;color:white;">.MoveNext()
    {
        </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IApplicationContext </span><span style="background:black none repeat scroll 0 0;color:white;">context1;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">(0 ==
                _enumeration.GetNextAssembly(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:white;">context1, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">out </span><span style="background:black none repeat scroll 0 0;color:white;">_enumCurrentAssembly, 0));
    }

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Sets the enumerator to its initial position, which is before the first element in the collection.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    /// &lt;exception cref=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"T:System.InvalidOperationException"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The collection was modified after the enumerator was created. </span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/exception&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">void </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator</span><span style="background:black none repeat scroll 0 0;color:white;">.Reset()
    {
        _enumeration.Reset();
    }

    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">IAssemblyName is a Fusion interface
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Gets the element in the collection at the current position of the enumerator.
    </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
    /// &lt;value&gt;&lt;/value&gt;
    /// &lt;returns&gt;</span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">The element in the collection at the current position of the enumerator.</span><span style="background:black none repeat scroll 0 0;color:gray;">&lt;/returns&gt;
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IAssemblyName </span><span style="background:black none repeat scroll 0 0;color:white;">Current
    {
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
        </span><span style="background:black none repeat scroll 0 0;color:white;">{
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">_enumCurrentAssembly;
        }
    }
    </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Properties
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">object </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerator</span><span style="background:black none repeat scroll 0 0;color:white;">.Current
    {
        </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Go to the other darn Current not this one
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">get
        </span><span style="background:black none repeat scroll 0 0;color:white;">{
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">Current;
        }
    }
    </span><span style="background:black none repeat scroll 0 0;color:#bcf5c9;">// Fields
    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public void </span><span style="background:black none repeat scroll 0 0;color:white;">Dispose()
    {
        _enumCurrentAssembly = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">null</span><span style="background:black none repeat scroll 0 0;color:white;">;
    }

    #endregion

    </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">internal static void </span><span style="background:black none repeat scroll 0 0;color:white;">HandleCom(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">hResult)
    {
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">if </span><span style="background:black none repeat scroll 0 0;color:white;">(hResult &lt; 0)
            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Marshal</span><span style="background:black none repeat scroll 0 0;color:white;">.ThrowExceptionForHR(hResult);
    }
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p><span style="font-size:x-small;"> </span></p>
<pre class="code"><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">[</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Flags</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">]
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">enum </span></span><span style="background:black none repeat scroll 0 0;color:#b8a223;"><span style="font-size:x-small;font-family:Consolas;">AssemblyCacheFlags
</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">{
    NGenCache = 0x1,
    GAC = 0x2,
    DownloadCache = 0x4
}</span></span></pre>
<p><span style="font-size:x-small;"><br />
</span></p>
<pre class="code"><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">[</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Flags</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">]
</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public enum </span></span><span style="background:black none repeat scroll 0 0;color:#b8a223;"><span style="font-size:x-small;font-family:Consolas;">AssemblyNameDisplayFlags
</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">{
    VERSION = 0x01,
    CULTURE = 0x02,
    PUBLIC_KEY_TOKEN = 0x04,
    PROCESSORARCHITECTURE = 0x20,
    RETARGETABLE = 0x80,
    ALL = VERSION |
        CULTURE | PROCESSORARCHITECTURE |
        PUBLIC_KEY_TOKEN | RETARGETABLE
}</span></span></pre>
<h2>More to Come</h2>
<p>This is the tip of the iceberg so to speak. Here is a test case to show you what this now is doing and perhaps you can give us ideas where to take it. There is a lot of code. Should it be up on CodePlex? Google Code?  Your Environment Variables:</p>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">    <span style="font-size:x-small;font-family:Consolas;">   [</span></span><span style="background:black none repeat scroll 0 0;color:#2b91af;"><span style="font-size:x-small;font-family:Consolas;">Fact</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">]
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public void </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">should_show_my_env()
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">sw = </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Stopwatch</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">.StartNew();
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">dirs = </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">from </span><span style="background:black none repeat scroll 0 0;color:white;">env </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ThisBox</span><span style="background:black none repeat scroll 0 0;color:white;">.By&lt;</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">EnvironmentVariable</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">&gt;()
                       </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">select </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">env;
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">foreach </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">s </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">dirs)
            {
                </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(s.TypeOfEnv + </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">" " </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ s.KeyName);
                </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"  ==&gt;" </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ s.Value);
            }
            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Count : " </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ dirs.Count());
            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Search Took : " </span><span style="background:black none repeat scroll 0 0;color:white;">+ sw.ElapsedMilliseconds + </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">" ms"</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">);
            sw.Stop();
        }</span></span></pre>
<p><span style="font-size:x-small;font-family:Consolas;">Let’s join our GAC with our registry!</span></p>
<p><span style="font-size:x-small;font-family:Consolas;">NOTE: we get 592 hits in 20 or so seconds… </span></p>
<pre class="code"><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">        [</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Fact</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">]
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public void </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">should_join_policy_registry_section()
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">sw = </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Stopwatch</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">.StartNew();

            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">result = </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:#ecc03e;">from
                             </span><span style="background:black none repeat scroll 0 0;color:white;">gac </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ThisBox</span><span style="background:black none repeat scroll 0 0;color:white;">.By&lt;</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">AssemblyDetail</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">&gt;()
                         </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:#ecc03e;">join
                             </span><span style="background:black none repeat scroll 0 0;color:white;">registryKey </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">ThisBox</span><span style="background:black none repeat scroll 0 0;color:white;">.By&lt;</span><span style="background:black none repeat scroll 0 0;color:#2b91af;">RegistryKey</span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">&gt;() 

                         </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">on </span><span style="background:black none repeat scroll 0 0;color:white;">gac.MajorName </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">equals </span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">registryKey.FirstRegValue()

                         </span></span><span style="background:black none repeat scroll 0 0;color:#ecc03e;"><span style="font-size:x-small;font-family:Consolas;">select new
                                </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">{
                                        gac, RegVal=registryKey.FirstRegValue()
                                };

            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Count : " </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ result.Count());
            sw.Stop();
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">foreach </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">a </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">result)
            {
                </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(a.gac.MajorName + </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">" == " </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ a.RegVal);
                </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">" ==&gt;" </span></span><span style="font-family:Consolas;"><span style="background:black none repeat scroll 0 0;color:white;">+ a.gac.FullName);
            }

            </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Console</span><span style="background:black none repeat scroll 0 0;color:white;">.WriteLine(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"Search Took : " </span><span style="background:black none repeat scroll 0 0;color:white;">+ sw.ElapsedMilliseconds + </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">" ms"</span></span><span style="background:black none repeat scroll 0 0;color:white;"><span style="font-size:x-small;font-family:Consolas;">);
        }</span>
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h2>Appendix : A Few Extension Methods we Use<span style="background:black none repeat scroll 0 0;color:white;"> </span></h2>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">  </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">static class </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">LinqProviderTestExtensions
    </span><span style="background:black none repeat scroll 0 0;color:white;">{
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Will perform each action for each
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">'row' in the included collection
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Each 'row' is of Type TTreeNode
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// </span><span style="background:black none repeat scroll 0 0;color:#9ff5fd;">Will typically only be one action
        </span><span style="background:black none repeat scroll 0 0;color:gray;">/// &lt;/summary&gt;
        /// &lt;typeparam name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"T"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;&lt;/typeparam&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"items"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;&lt;/param&gt;
        /// &lt;param name=</span><span style="background:black none repeat scroll 0 0;color:#9feca5;">"actions"</span><span style="background:black none repeat scroll 0 0;color:gray;">&gt;&lt;/param&gt;
        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">static internal void </span><span style="background:black none repeat scroll 0 0;color:white;">ForEach&lt;T&gt;(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">this </span><span style="background:black none repeat scroll 0 0;color:#9185fa;">IEnumerable</span><span style="background:black none repeat scroll 0 0;color:white;">&lt;T&gt; items, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">params </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Action</span><span style="background:black none repeat scroll 0 0;color:white;">&lt;T&gt;[] actions)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">foreach </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">t </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:white;">items)
                </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">foreach </span><span style="background:black none repeat scroll 0 0;color:white;">(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">var </span><span style="background:black none repeat scroll 0 0;color:white;">act </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">in </span><span style="background:black none repeat scroll 0 0;color:white;">actions)
                    act.Invoke(t);
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static string </span><span style="background:black none repeat scroll 0 0;color:white;">FirstRegValue(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">this </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">RegistryKey </span><span style="background:black none repeat scroll 0 0;color:white;">registryKey)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">registryKey.ValueCount &gt; 0
                           ? (</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">string</span><span style="background:black none repeat scroll 0 0;color:white;">) registryKey.GetValueNames().GetValue(0) : </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String</span><span style="background:black none repeat scroll 0 0;color:white;">.Empty;
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static double </span><span style="background:black none repeat scroll 0 0;color:white;">ToPercent(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">this int </span><span style="background:black none repeat scroll 0 0;color:white;">target, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">total)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">target.ToPercent((</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">double</span><span style="background:black none repeat scroll 0 0;color:white;">) total);
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">String </span><span style="background:black none repeat scroll 0 0;color:white;">ToPctString(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">this int </span><span style="background:black none repeat scroll 0 0;color:white;">target, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">int </span><span style="background:black none repeat scroll 0 0;color:white;">total)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:white;">target.ToPercent((</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">double</span><span style="background:black none repeat scroll 0 0;color:white;">) total) + </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">"%"</span><span style="background:black none repeat scroll 0 0;color:white;">;
        }

        </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">public static double </span><span style="background:black none repeat scroll 0 0;color:white;">ToPercent(</span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">this int </span><span style="background:black none repeat scroll 0 0;color:white;">target, </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">double </span><span style="background:black none repeat scroll 0 0;color:white;">total)
        {
            </span><span style="background:black none repeat scroll 0 0;color:#ecc03e;">return </span><span style="background:black none repeat scroll 0 0;color:#2b91af;">Math</span><span style="background:black none repeat scroll 0 0;color:white;">.Round((target/total)*100, 2);
        }
    }</span></pre>
<pre class="code"><span style="background:black none repeat scroll 0 0;color:white;">A huge Thanks:</span></pre>
<pre class="code"><a title="http://dotnetjunkies.com/WebLog/debasish/" href="http://dotnetjunkies.com/WebLog/debasish/" target="_blank">Debasish Bose</a></pre>
<pre class="code">
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4996f79e-bdd5-4823-85e8-11fd4c706280" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/Advanced+C%23">Advanced C#</a>,<a rel="tag" href="http://del.icio.us/popular/C%23+Unmanaged+Wrapper">C# Unmanaged Wrapper</a>,<a rel="tag" href="http://del.icio.us/popular/Fusion">Fusion</a>,<a rel="tag" href="http://del.icio.us/popular/GAC">GAC</a>,<a rel="tag" href="http://del.icio.us/popular/Global+Assembly+Cache">Global Assembly Cache</a>,<a rel="tag" href="http://del.icio.us/popular/IEnumerable">IEnumerable</a>,<a rel="tag" href="http://del.icio.us/popular/IEnumerator">IEnumerator</a>,<a rel="tag" href="http://del.icio.us/popular/Internals">Internals</a>,<a rel="tag" href="http://del.icio.us/popular/Lambada">Lambada</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+Gac">Linq to Gac</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+Objects">Linq to Objects</a>,<a rel="tag" href="http://del.icio.us/popular/Machine">Machine</a>,<a rel="tag" href="http://del.icio.us/popular/Registry">Registry</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:d890b055-0d6b-4680-a4e0-6f7fb6c20546" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/Advanced+C%23">Advanced C#</a>,<a rel="tag" href="http://technorati.com/tags/C%23+Unmanaged+Wrapper">C# Unmanaged Wrapper</a>,<a rel="tag" href="http://technorati.com/tags/Fusion">Fusion</a>,<a rel="tag" href="http://technorati.com/tags/GAC">GAC</a>,<a rel="tag" href="http://technorati.com/tags/Global+Assembly+Cache">Global Assembly Cache</a>,<a rel="tag" href="http://technorati.com/tags/IEnumerable">IEnumerable</a>,<a rel="tag" href="http://technorati.com/tags/IEnumerator">IEnumerator</a>,<a rel="tag" href="http://technorati.com/tags/Internals">Internals</a>,<a rel="tag" href="http://technorati.com/tags/Lambada">Lambada</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+Gac">Linq to Gac</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+Objects">Linq to Objects</a>,<a rel="tag" href="http://technorati.com/tags/Machine">Machine</a>,<a rel="tag" href="http://technorati.com/tags/Registry">Registry</a></div>
</pre>
<h3>Related Posts</h3>
<div class="wlw_related_posts">from tag <a href="http://del.icio.us/damoncarr/Fusion">Fusion</a></p>
<ul>
<li><a href="http://blog.domaindotnet.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/">Linq to Gac : Use Linq to Power Query your Gac via this C# Bridge to Fusion « team domain.dot.net</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/Lambada">Lambada</a></p>
<ul>
<li><a href="http://blog.domaindotnet.com/2008/07/24/linq-c-30-enumerable-extension-method-reference/">Linq C# 3.0 Enumerable Extension Method Reference « don’t give up on software just yet</a></li>
</ul>
<p>from tag <a href="http://del.icio.us/damoncarr/Linq">Linq</a></p>
<ul>
<li><a href="http://www.istartedsomething.com/20061029/royale-noir/">Royale Noir: secret XP theme uncovered (download) &#8211; istartedsomething</a></li>
<li><a href="/cifs/opt">linux</a></li>
<li><a href="http://www.google.co.uk/search?hl=en&amp;ie=UTF-8&amp;q=%s&amp;meta=cr%3DcountryUK%7CcountryGB">guk</a></li>
<li><a href="http://msdn2.microsoft.com/en-us/library/ms345135.aspx">Managed Data Access Inside SQL Server with ADO.NET and SQLCLR</a></li>
<li><a href="http://damon.agilefactor.com/feed">where(dev=&gt; Is.Broken(dev)).tryinject(commonsense)</a></li>
<li><a href="http://www.daveandal.net/articles/esbdocs/">Microsoft ESB Guidance (August 2007 CTP Release)</a></li>
<li><a href="http://pinguy.infogami.com/blog/210ee">What to Install After a Fresh XP Install (PinGUY&#8217;s Website)</a></li>
<li><a href="http://evanhoff.com/archive/2007/07/23/39.aspx">NHibernate SysCache Issues &#8211; Solved</a></li>
<li><a href="http://nightweed.com/printableusavotefacts.html">20 Amazing Facts About  Voting in the USA</a></li>
<li><a href="http://cdimage.ubuntu.com/kubuntu-kde4/releases/8.04/release/kubuntu-kde4-8.04.1-desktop-i386.iso">http://cdimage.ubuntu.com/kubuntu-kde4/releases/8.04/release/kubuntu-kde4-8.04.1-desktop-i386.iso</a></li>
<li><a href="http://feeds.feedburner.com/adaptiveblue/feed">BlueBlog</a></li>
<li><a href="http://damoncarr.freepolls.com/cgi-bin/util/site_admin">free Web polls</a></li>
<li><a href="http://code.google.com/">Developer Home &#8211; Google Code</a></li>
<li><a href="http://www.xmllab.net/mvpxml/">Mvp.Xml Library Documentation &#8211; Mvp.Xml.Common Namespace</a></li>
<li><a href="http://www.codeplex.com/esb">patterns &amp; practices Enterprise Service Bus Guidance &#8211; Home</a></li>
<li><a href="http://www.ifcfilms.com/">IFC Entertainment</a></li>
<li><a href="http://www.buildinglink.com/default.asp">BuildingLink</a></li>
<li><a href="http://msdn.microsoft.com/msdnmag/issues/07/02/SQLRegex/default.aspx">SQL Server 2005 Regular Expressions Make Pattern Matching</a></li>
</ul>
<p><a href="http://del.icio.us/damoncarr/Linq">(more..)</a></p>
</div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f09%2f20%2ffusion_c_sharp_wrapper_for_linq_to_gac_access%2f&amp;title=Linq+to+Gac+%3a+Use+Linq+to+Power+Query+your+Gac+via+this+C%23+Bridge+to+Fusion"><img style="border:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br />Posted in C# 3.0 Enhancements, C# 3.0 for Internal DSL, concepts implemented, Framework Design, Generics, Proof Driven Development, Software Design, Software Futures, Technology Tagged: CSharp, DomainDriven, Fusion, GAC, Global Assembly Cache, IEnumerable, IEnumerator, Internals, Lambada, Linq, Linq to Gac, Linq to Objects, Machine, Registry <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/928/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/928/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/928/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/928/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/928/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/928/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/928/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/928/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/928/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/928/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=928&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/09/20/fusion_c_sharp_wrapper_for_linq_to_gac_access/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<georss:point>30.196311 -97.730807</georss:point>
		<geo:lat>30.196311</geo:lat>
		<geo:long>-97.730807</geo:long>
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f09%2f20%2ffusion_c_sharp_wrapper_for_linq_to_gac_access%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/09/classdiagram2-thumb1.png" medium="image">
			<media:title type="html">ClassDiagram2</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Linq .NET 3.5 Set Operations &#8211; Quick Reference</title>
		<link>http://team.pushbomb.com/2008/09/20/linq-c-30-enumerable-extension-method-reference/</link>
		<comments>http://team.pushbomb.com/2008/09/20/linq-c-30-enumerable-extension-method-reference/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 15:41:00 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Enumerable]]></category>
		<category><![CDATA[extended clauses]]></category>
		<category><![CDATA[HashSet]]></category>
		<category><![CDATA[IEnumerable]]></category>
		<category><![CDATA[Lambada]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[linq clauses]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[select clause syntax]]></category>

		<guid isPermaLink="false">http://blog.domaindotnet.com/?p=505</guid>
		<description><![CDATA[Reference to bassic select clause style as well as extnded enumerable extension method style (for in-line non-sql style synax)<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=505&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<table style="height:416px;" border="0" width="417">
<tbody>
<tr>
<th></th>
</tr>
<tr>
<td align="right" valign="top"><a id="ctl00_mainContentContainer_ctl23" href="http://msdn.microsoft.com/en-us/library/bb383978%28printer%29.aspx">from</a></td>
<td width="369" valign="top">Specifies a data source and a range variable (similar to an iteration variable).</td>
</tr>
<tr>
<td align="right" valign="top"><a id="ctl00_mainContentContainer_ctl24" href="http://msdn.microsoft.com/en-us/library/bb311043%28printer%29.aspx">where</a></td>
<td width="369" valign="top">Filters source elements based on one or more Boolean expressions separated by logical AND and OR operators ( &amp;&amp; or || ).</td>
</tr>
<tr>
<td align="right" valign="top"><a id="ctl00_mainContentContainer_ctl25" href="http://msdn.microsoft.com/en-us/library/bb384087%28printer%29.aspx">select</a></td>
<td valign="top">Specifies the type and shape that the elements in the returned sequence will have when the query is executed.</td>
</tr>
<tr>
<td align="right" valign="top"><a id="ctl00_mainContentContainer_ctl26" href="http://msdn.microsoft.com/en-us/library/bb384063%28printer%29.aspx">group</a></td>
<td valign="top">Groups query results according to a specified key value.</td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl27" href="http://msdn.microsoft.com/en-us/library/bb311045%28printer%29.aspx">into</a></td>
<td width="369" valign="top">Provides an identifier that can serve as a reference to the results of a join, group or select clause.</td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl28" href="http://msdn.microsoft.com/en-us/library/bb383982%28printer%29.aspx">orderby</a></td>
<td width="369" valign="top">Sorts query results in ascending or descending order based on the default comparer for the element type.</td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl29" href="http://msdn.microsoft.com/en-us/library/bb311040%28printer%29.aspx">join</a></td>
<td width="369" valign="top">Joins two data sources based on an equality comparison between two specified matching criteria. from category in categories join prod in products on category.ID equals prod.CategoryID select new { ProductName = prod.Name, Category = category.Name };</td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl30" href="http://msdn.microsoft.com/en-us/library/bb383976%28printer%29.aspx">let</a></td>
<td width="369" valign="top">Introduces a range variable to store sub-expression results in a query expression.</td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl31" href="http://msdn.microsoft.com/en-us/library/cc713603%28printer%29.aspx">in</a></td>
<td width="369" valign="top">Contextual in a <a id="ctl00_mainContentContainer_ctl32" href="http://msdn.microsoft.com/en-us/library/bb311040%28printer%29.aspx">join</a></td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl33" href="http://msdn.microsoft.com/en-us/library/cc713588%28printer%29.aspx">on</a></td>
<td width="369" valign="top">Contextual in a <a id="ctl00_mainContentContainer_ctl34" href="http://msdn.microsoft.com/en-us/library/bb311040%28printer%29.aspx">join</a></td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl35" href="http://msdn.microsoft.com/en-us/library/cc713644%28printer%29.aspx">equals</a></td>
<td width="369" valign="top">Contextual in a <a id="ctl00_mainContentContainer_ctl36" href="http://msdn.microsoft.com/en-us/library/bb311040%28printer%29.aspx">join</a></td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl37" href="http://msdn.microsoft.com/en-us/library/cc713645%28printer%29.aspx">by</a></td>
<td width="369" valign="top">Contextual in a <a id="ctl00_mainContentContainer_ctl38" href="http://msdn.microsoft.com/en-us/library/bb384063%28printer%29.aspx">group</a></td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl39" href="http://msdn.microsoft.com/en-us/library/cc713606%28printer%29.aspx">ascending</a></td>
<td width="369" valign="top">Contextual in an <a id="ctl00_mainContentContainer_ctl40" href="http://msdn.microsoft.com/en-us/library/bb383982%28printer%29.aspx">orderby</a></td>
</tr>
<tr>
<td width="185" align="right" valign="top"><a id="ctl00_mainContentContainer_ctl41" href="http://msdn.microsoft.com/en-us/library/cc713622%28printer%29.aspx">descending</a></td>
<td width="369" valign="top">Contextual in an <a id="ctl00_mainContentContainer_ctl42" href="http://msdn.microsoft.com/en-us/library/bb383982%28printer%29.aspx">orderby</a></td>
</tr>
</tbody>
</table>
<table style="height:1588px;" border="0" width="416">
<tbody>
<tr>
<td style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.aggregate.aspx">Aggregate</a></td>
<td>Applies an accumulator function over a sequence.</td>
</tr>
<tr>
<td style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb548541.aspx">All&lt;TSource&gt;</a></td>
<td style="padding-left:8px;padding-right:8px;" width="398">Determines whether all elements of a sequence satisfy a condition.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.any.aspx">Any</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Determines whether any element of a sequence exists or satisfies a condition.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb335435.aspx">AsEnumerable&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the input typed as <a>IEnumerable&lt;T&gt;.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.average.aspx">Average</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Computes the average of a sequence of numeric values.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb341406.aspx">Cast&lt;TResult&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Converts the elements of an <a>IEnumerable to the specified type.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb302894.aspx">Concat&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Concatenates two sequences.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.contains.aspx">Contains</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Determines whether a sequence contains a specified element.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.count.aspx">Count</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the number of elements in a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.defaultifempty.aspx">DefaultIfEmpty</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the elements of an <a>IEnumerable&lt;T&gt;, or a default valued singleton collection if the sequence is empty.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx">Distinct</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns distinct elements from a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb299233.aspx">ElementAt&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the element at a specified index in a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb494386.aspx">ElementAtOrDefault</a></p>
<p>&lt;TSource&gt;</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the element at a specified index in a sequence or a default value if the index is out of range.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb341042.aspx">Empty&lt;TResult&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns an empty <a>IEnumerable&lt;(Of &lt;(T&gt;)&gt;) that has the specified type argument.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx">Except</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Produces the set difference of two sequences.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.first.aspx">First</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the first element of a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.firstordefault.aspx">FirstOrDefault</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the first element of a sequence, or a default value if no element is found.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupby.aspx">GroupBy</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Groups the elements of a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.groupjoin.aspx">GroupJoin</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Correlates the elements of two sequences based on key equality, and groups the results.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx">Intersect</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Produces the set intersection of two sequences.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.join.aspx">Join</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">
<p style="text-align:left;">Correlates the elements of two sequences based on matching keys.</p>
</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.last.aspx">Last</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the last element of a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.lastordefault.aspx">LastOrDefault</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the last element of a sequence, or a default value if no element is found.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.longcount.aspx">LongCount</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns an <a>Int64 that represents the number of elements in a sequence.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.max.aspx">Max</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the maximum value in a sequence of values.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.min.aspx">Min</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns the minimum value in a sequence of values.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb360913.aspx">OfType&lt;TResult&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Filters the elements of an <a>IEnumerable based on a specified type.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.orderby.aspx">OrderBy</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Sorts the elements of a sequence in ascending order.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.orderbydescending.aspx">OrderByDescending</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Sorts the elements of a sequence in descending order.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx">Range</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Generates a sequence of integral numbers within a specified range.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb348899.aspx">Repeat&lt;TResult&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Generates a sequence that contains one repeated value.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb358497.aspx">Reverse&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Inverts the order of the elements in a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.select.aspx">Select</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Projects each element of a sequence into a new form.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.selectmany.aspx">SelectMany</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Projects each element of a sequence to an <a>IEnumerable&lt;T&gt; and flattens the resulting sequences into one sequence.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.sequenceequal.aspx">SequenceEqual</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Determines whether two sequences are equal according to an equality comparer.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.single.aspx">Single</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns a single, specific element of a sequence of values.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.singleordefault.aspx">SingleOrDefault</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns a single, specific element of a sequence of values, or a default value if no such element is found.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb358985.aspx">Skip&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Bypasses a specified number of elements in a sequence and then returns the remaining elements.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.skipwhile.aspx">SkipWhile</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Bypasses elements in a sequence as long as a specified condition is true and then returns the remaining elements.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.sum.aspx">Sum</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Computes the sum of a sequence of numeric values.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;">Take&lt;TSource&gt;</p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns a specified number of contiguous elements from the start of a sequence.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.takewhile.aspx">TakeWhile</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Returns elements from a sequence as long as a specified condition is true, and then skips the remaining elements.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.thenby.aspx">ThenBy</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Performs a subsequent ordering of the elements in a sequence in ascending order.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.thenbydescending.aspx">ThenByDescending</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Performs a subsequent ordering of the elements in a sequence in descending order.</td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb298736.aspx">ToArray&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Creates an array from a <a>IEnumerable&lt;T&gt;.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.todictionary.aspx">ToDictionary</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Creates a <a>Dictionary&lt;TKey, TValue&gt; from an </a><a>IEnumerable&lt;T&gt;.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/bb342261.aspx">ToList&lt;TSource&gt;</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Creates a <a>List&lt;T&gt; from an </a><a>IEnumerable&lt;T&gt;.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.tolookup.aspx">ToLookup</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Creates a generic <a>Lookup&lt;TKey, TElement&gt; from an </a><a>IEnumerable&lt;T&gt;.</a></td>
</tr>
<tr style="height:26px;">
<td style="padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx">Union</a></p>
</td>
<td style="padding-left:8px;padding-right:8px;" width="398">Produces the set union of two sequences.</td>
</tr>
<tr style="height:5px;">
<td style="border-bottom:#f79646 1pt solid;padding-left:8px;padding-right:8px;" width="157" align="right">
<p style="text-align:right;"><a href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.where.aspx">Where</a></p>
</td>
<td style="border-bottom:#f79646 1pt solid;padding-left:8px;padding-right:8px;" width="398">Filters a sequence of values based on a predicate.</td>
</tr>
</tbody>
</table>
<p><a href="http://en.wikipedia.org/wiki/Linq" target="_blank">Linq</a> on Wikipedia</p>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:14ea0115-bcad-4409-87b5-213082fe0f68" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/Linq+to+Objects">Linq to Objects</a>,<a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/Expressions">Expressions</a>,<a rel="tag" href="http://technorati.com/tags/Enumerable">Enumerable</a>,<a rel="tag" href="http://technorati.com/tags/IEnumerable%3cT%3e">IEnumerable&lt;T&gt;</a>,<a rel="tag" href="http://technorati.com/tags/C%23">C#</a>,<a rel="tag" href="http://technorati.com/tags/.NET+3.5">.NET 3.5</a>,<a rel="tag" href="http://technorati.com/tags/Fluent+API">Fluent API</a></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f09%2f20%2flinq-c-30-enumerable-extension-method-reference%2f&amp;title=Linq+.NET+3.5+Set+Operations+-+Quick+Reference"><img style="border:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br />Posted in C# 3.0 Enhancements, C# 3.0 for Internal DSL, Framework Design, Technology Tagged: .NET 3.5, C# 3.0, Enumerable, extended clauses, HashSet, IEnumerable, Lambada, Linq, linq clauses, nhibernate, select clause syntax <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/505/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/505/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/505/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=505&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/09/20/linq-c-30-enumerable-extension-method-reference/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Linq to Financial Markets : Optimizing Provider to Real-Time Quotes, Analytics, and Silverlight-WPF Visualization</title>
		<link>http://team.pushbomb.com/2008/09/18/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization/</link>
		<comments>http://team.pushbomb.com/2008/09/18/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization/#comments</comments>
		<pubDate>Thu, 18 Sep 2008 15:36:20 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Financial Services]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[Batched]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Custom Provider]]></category>
		<category><![CDATA[Domain Specific Language]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[Expression Tree Parse]]></category>
		<category><![CDATA[Financial Engineering]]></category>
		<category><![CDATA[Lambada]]></category>
		<category><![CDATA[Nasdaq]]></category>
		<category><![CDATA[Parsed Expressions]]></category>
		<category><![CDATA[Portfolio Optimization]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Visitor]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[XIgnite]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/?p=727</guid>
		<description><![CDATA[The Linq to Financial Markets provider An easier way to consume, visualize, understand and quantify just about any information you can imagine from the world of global financial services. Real-Time stock quotes to Complex Analytics of Multi-Asset Class Portfolios  Monte-Carlo simulation with Optional Quantitative Add-Ins Efficient frontier Optimization based on Constraints you Set User defined heuristics from strategic rebalancing to day-trading<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=727&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h3><a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" target="_blank"><strong>Linq</strong></a><strong> to Financial Markets</strong></h3>
<p>An easier way to consume, visualize, understand and quantify just about any information you can imagine from the world of global financial services.</p>
<ul>
<li>Delayed Quotes to Real-Time Portfolio Analytics</li>
<li>Simulation Engine with Strategy Add-Ins (Monte-Carlo, etc)</li>
<li>Efficient Frontier Optimization : N-Dimension Constraint Option</li>
<li>User defined heuristics from strategic rebalancing to day-trading</li>
</ul>
<p><em></em></p>
<p>Thanks to <a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx">Microsoft&#8217;s Linq technology (introduced in the .NET 3.5 platform)</a>, the code in the image is real. It&#8217;s<a href="http://blogs.msdn.com/charlie/archive/2008/06/16/cut-development-time-use-linq.aspx"> well established that by making things easier and more &#8216;declarative&#8217; overall productivity goes up</a>.</p>
<p><a href="http://www.xignite.com/"><img class="alignnone size-full wp-image-748" style="display:inline;margin:10px 0 10px 20px;" src="http://dcarr.files.wordpress.com/2008/08/xignite_logo_anim.gif?w=336&#038;h=80" alt="" width="336" height="80" align="right" /></a></p>
<blockquote>
<p align="right"><span style="font-size:x-small;">Quality improves and most importantly bandwidth increases significantly in focusing on ‘what is important’ not ‘what is tedious’.</span></p>
</blockquote>
<p><em>In the case above we get the items in our portfolio now priced (using a real-time feed) below their 90 day moving average. You can &#8216;inject&#8217; added information as we do above for history. Another option would be to inject some &#8216;predictive&#8217; numbers using a simulation technique.</em></p>
<p><em></em></p>
<p><a href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx">There are many Linq providers</a>, however most are &#8216;technology focused&#8217; such as dealing with protocols or platform APIs. We have always been the most interested in solving the harder problems driven from the business perspective. Although there are many technologies involved here, the larger difficulty is making it available in whatever way you would like to see it, across a broad set of dimensions well beyond any technology constraint.</p>
<p>We support more then just &#8216;detail&#8217; information, You can use aggregate style commands (say you want to to get you assets for a pie chart that displays asset class holdings in percent).</p>
<p>If you then wanted to drill-down, you could use the same asset class information in a &#8216;where&#8217; clause to limit the detail to just what you own in that class. But moving well beyond &#8216;SQL&#8217; type logic, you can set up monitoring alerts that take action if/when a trigger is met.</p>
<p>The key is the same simple syntax is used for all data providers across all levels of information, including full-text scans and a new feature we&#8217;re working on now for a future release incorporating an even easier natural language syntax.</p>
<p>This platform is not a fundamentally new way to calculate or retrieve this information. We&#8217;ve had access to many frameworks, API&#8217;s, data providers, etc. for a long time now.<img class="alignright size-full wp-image-700" style="display:inline;margin:15px 0 10px 35px;" src="http://dcarr.files.wordpress.com/2008/08/techsmithwor5c.png?w=238&#038;h=131" alt="" width="238" height="131" align="right" /></p>
<p>What this Linq provider does however, it change the dynamics of complexity, time to market, assumed costs in maintenance and testing, and much more. This offering&#8217;s goal is to make problems in this domain become utterly trivial. Our goal is to empower your team to make trivial what was previously arduous.</p>
<p>You&#8217;re about to &#8216;declare&#8217; what you want, rather then describe each step in the process. If your thinking it looks a lot like &#8216;SQL&#8217; you&#8217;re 100% correct. However SQL could never achieve what Linq provides.</p>
<blockquote>
<p style="text-align:center;"> </p>
</blockquote>
<h5>Due to the nature of the access to this information, we are still working out the details for the open-source version we plan to offer soon. The world of the owners of this data has not caught up to the philosophy we have for transparency and shared value. <a href="mailto:damon@domaindotnet.com">Send us an email for updates </a>or simply register with us. Also if your in the industry and have an interest we are looking for innovative early adopters. Also, we&#8217;ll be posting on many of the challenges we faced and a few innovative solutions we applied to the emerging and highly strategic domain of intelligent Linq Parser development.</h5>
<h3>Links</h3>
<ul>
<li><a title="http://msdn.microsoft.com/netframework/future/linq/" rel="nofollow" href="http://msdn.microsoft.com/netframework/future/linq/"><span style="color:#ffffff;">Official Microsoft LINQ Project</span></a></li>
<li><a class="external text" title="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx" rel="nofollow" href="http://msdn2.microsoft.com/en-us/vcsharp/aa336746.aspx"><span style="color:#ffffff;">101 C# LINQ Samples</span></a></li>
<li><a class="external text" title="http://msdn2.microsoft.com/en-us/vbasic/bb688088.aspx" rel="nofollow" href="http://msdn2.microsoft.com/en-us/vbasic/bb688088.aspx"><span style="color:#ffffff;">101 Visual Basic LINQ Samples</span></a></li>
<li><a class="external text" title="http://msdn2.microsoft.com/en-us/library/bb387098.aspx" rel="nofollow" href="http://msdn2.microsoft.com/en-us/library/bb387098.aspx"><span style="color:#ffffff;">LINQ to XML Documentation</span></a></li>
<li><a class="external text" title="http://forums.microsoft.com/msdn/showforum.aspx?forumid=123&amp;siteid=1" rel="nofollow" href="http://forums.microsoft.com/msdn/showforum.aspx?forumid=123&amp;siteid=1"><span style="color:#ffffff;">Microsoft LINQ forum</span></a></li>
<li><a class="external text" title="http://www.netfxguide.com/guide/linq.aspx" rel="nofollow" href="http://www.netfxguide.com/guide/linq.aspx"><span style="color:#ffffff;">LINQ page on NetFXGuide.com</span></a></li>
<li><a class="external text" title="http://www.hookedonlinq.com/" rel="nofollow" href="http://www.hookedonlinq.com/"><span style="color:#ffffff;">LINQ wiki</span></a></li>
<li><a class="external text" title="http://blogs.msdn.com/charlie/archive/2008/02/17/linq-books.aspx" rel="nofollow" href="http://blogs.msdn.com/charlie/archive/2008/02/17/linq-books.aspx"><span style="color:#ffffff;">LINQ books</span></a></li>
<li><a class="external text" title="http://www.codeplex.com/clinq" rel="nofollow" href="http://www.codeplex.com/clinq"><span style="color:#ffffff;">Continuous LINQ</span></a></li>
<li><a class="external text" title="http://www.codeplex.com/LINQtoSharePoint" rel="nofollow" href="http://www.codeplex.com/LINQtoSharePoint"><span style="color:#ffffff;">LINQ To Sharepoint</span></a></li>
<li><a class="external text" title="http://www.codeplex.com/LINQtoAD" rel="nofollow" href="http://www.codeplex.com/LINQtoAD"><span style="color:#ffffff;">LINQ To Active Directory</span></a></li>
<li><a class="external text" title="http://www.linqhelp.com/" rel="nofollow" href="http://www.linqhelp.com/"><span style="color:#ffffff;">Linq Tutorials and Active Articles</span></a></li>
<li><a class="external text" title="http://reddevnews.com/features/article.aspx?editorialsid=707" rel="nofollow" href="http://reddevnews.com/features/article.aspx?editorialsid=707"><span style="color:#ffffff;">Looking to LINQ &#8211; Will Microsoft&#8217;s Language Integrated Query transform programmatic data access?</span></a></li>
<li><a class="external text" title="http://www.codeplex.com/obtics" rel="nofollow" href="http://www.codeplex.com/obtics"><span style="color:#ffffff;">Obtics (Observable Object LINQ)</span></a></li>
<li><a class="external text" title="http://www.nstrument.net/Products/SnmpLibrary/tabid/70/Default.aspx" rel="nofollow" href="http://www.nstrument.net/Products/SnmpLibrary/tabid/70/Default.aspx"><span style="color:#ffffff;">LINQ to SNMP</span></a></li>
<li><a class="external text" title="http://www.onedotnetway.com/different-ways-of-retrieving-data-from-collections/" rel="nofollow" href="http://www.onedotnetway.com/different-ways-of-retrieving-data-from-collections/"><span style="color:#ffffff;">Different Ways Of Retrieving Data From Collections</span></a></li>
<li><a class="external text" title="http://blog.linqexchange.com" rel="nofollow" href="http://blog.linqexchange.com"><span style="color:#ffffff;">LINQ Exchange &#8211; Learn LINQ and Lambda Expressions</span></a></li>
</ul>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:be681d48-faa8-4d98-a98a-d8e9f96c6310" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;"><span style="font-size:xx-small;">Technorati Tags: </span><a rel="tag" href="http://technorati.com/tags/Batched"><span style="font-size:xx-small;">Batched</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/C%23+3.0"><span style="font-size:xx-small;">C# 3.0</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Custom+Provider"><span style="font-size:xx-small;">Custom Provider</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Domain+Specific+Language"><span style="font-size:xx-small;">Domain Specific Language</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/dsl"><span style="font-size:xx-small;">dsl</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Expression+Tree+Parse"><span style="font-size:xx-small;">Expression Tree Parse</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Financial+Engineering"><span style="font-size:xx-small;">Financial Engineering</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Financial+Services"><span style="font-size:xx-small;">Financial Services</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Lambada"><span style="font-size:xx-small;">Lambada</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Linq"><span style="font-size:xx-small;">Linq</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Nasdaq"><span style="font-size:xx-small;">Nasdaq</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Parsed+Expressions"><span style="font-size:xx-small;">Parsed Expressions</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Portfolio+Optimization"><span style="font-size:xx-small;">Portfolio Optimization</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/SOA"><span style="font-size:xx-small;">SOA</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Visitor"><span style="font-size:xx-small;">Visitor</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/Web+Services"><span style="font-size:xx-small;">Web Services</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://technorati.com/tags/XIgnite"><span style="font-size:xx-small;">XIgnite</span></a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:408d275a-5b87-425b-9c32-bc9686da1703" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;"><span style="font-size:xx-small;">del.icio.us Tags: </span><a rel="tag" href="http://del.icio.us/popular/Batched"><span style="font-size:xx-small;">Batched</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/C%23+3.0"><span style="font-size:xx-small;">C# 3.0</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Custom+Provider"><span style="font-size:xx-small;">Custom Provider</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Domain+Specific+Language"><span style="font-size:xx-small;">Domain Specific Language</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/dsl"><span style="font-size:xx-small;">dsl</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Expression+Tree+Parse"><span style="font-size:xx-small;">Expression Tree Parse</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Financial+Engineering"><span style="font-size:xx-small;">Financial Engineering</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Financial+Services"><span style="font-size:xx-small;">Financial Services</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Lambada"><span style="font-size:xx-small;">Lambada</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Linq"><span style="font-size:xx-small;">Linq</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Nasdaq"><span style="font-size:xx-small;">Nasdaq</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Parsed+Expressions"><span style="font-size:xx-small;">Parsed Expressions</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Portfolio+Optimization"><span style="font-size:xx-small;">Portfolio Optimization</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/SOA"><span style="font-size:xx-small;">SOA</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Visitor"><span style="font-size:xx-small;">Visitor</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/Web+Services"><span style="font-size:xx-small;">Web Services</span></a><span style="font-size:xx-small;">,</span><a rel="tag" href="http://del.icio.us/popular/XIgnite"><span style="font-size:xx-small;">XIgnite</span></a></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f09%2f18%2flinq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization%2f&amp;title=Linq+to+Financial+Markets+%3a+Optimizing+Provider+to+Real-Time+Quotes%2c+Analytics%2c+and+Silverlight-WPF+Visualization"><img style="border:0;" title="Digg This" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br />Posted in C# 3.0 Enhancements, C# 3.0 for Internal DSL, Financial Services, Framework Design, Linq, software as strategic, Technology Tagged: Batched, C# 3.0, Custom Provider, Domain Specific Language, dsl, Expression Tree Parse, Financial Engineering, Financial Services, Lambada, Linq, Nasdaq, Parsed Expressions, Portfolio Optimization, SOA, Visitor, Web Services, XIgnite <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/727/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/727/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/727/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/727/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/727/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/727/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=727&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/09/18/linq-to-financial-markets-optimizing-provider-to-real-time-quotes-analytics-and-silverlight-wpf-visualization/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/08/xignite_logo_anim.gif" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithwor5c.png" medium="image" />

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Expose New Linq Operations from the Screaming HashSet&lt;T&gt; Collection</title>
		<link>http://team.pushbomb.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/</link>
		<comments>http://team.pushbomb.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 01:36:20 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Generics]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[concepts implemented]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[.NET 3.5]]></category>
		<category><![CDATA[Functional Programming]]></category>
		<category><![CDATA[HashSet]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Linq to NHibernate]]></category>
		<category><![CDATA[Linq Undocumented]]></category>
		<category><![CDATA[ORM]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/</guid>
		<description><![CDATA[Linq is not just about databases. It’s about reading the registry, your hard-disk, or even a list of function pointers to be invoked. Linq is about more event then sets (collections). It’s about making tasks easier in many cases and vastly more powerful (and most importantly your code more readable and maintainable at the same time).<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=874&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>&#160;</p>
<p><a target="_blank" href="http://en.wikipedia.org/wiki/Language_Integrated_Query">Linq</a> is not just about databases. It’s about reading the registry, your hard-disk, or even a list of function pointers to be invoked. Linq is about more even then sets (collections). It’s about making tasks easier in many cases and vastly more powerful (and most importantly your code more readable and maintainable at the same time).     <br /><a href="http://dcarr.files.wordpress.com/2008/09/premature-6.jpg"><img style="border-width:0;margin:0 0 15px 20px;" title="premature_optimization" border="0" alt="premature_optimization" align="right" src="http://dcarr.files.wordpress.com/2008/09/premature-6-thumb.jpg?w=244&#038;h=181" width="244" height="181" /></a></p>
<blockquote><h3>It’s astounding just how fast the <a target="_blank" href="http://msdn.microsoft.com/en-us/library/bb397727.aspx">HashSet&lt;T&gt;</a> collection is.</h3>
</blockquote>
<p>This post will show how to gain additional power that is fully supported from Microsoft which is often overlooked, yet it can solve some of the hardest problems (especially around performance however don’t prematurely optimize!).</p>
<p>&#160; <br />There are tons of cases where we need a real powerhouse to manage super-large sets (in this example we will use the registry). An entire part of the registry actually. </p>
<p>Here is the API we want to use to query the HKLM part of our registry:</p>
<pre class="code"><span style="background:black;color:white;">            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">FindFontsColors = </span><span style="background:black;color:#ecc03e;">from </span><span style="background:black;color:white;">rk </span><span style="background:black;color:#ecc03e;">in </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.Hklm
                                  </span><span style="background:black;color:#ecc03e;">where
                                          </span><span style="background:black;color:white;">rk.Name.Contains(</span><span style="background:black;color:#ecc03e;">&quot;VisualStudio&quot;</span><span style="background:black;color:white;">) &amp;&amp;
                                          rk.Name.EndsWith(</span><span style="background:black;color:#ecc03e;">&quot;FontsAndColors&quot;</span><span style="background:black;color:white;">) &amp;&amp;
                                          rk.ValueCount &gt; 0

                                  </span><span style="background:black;color:#ecc03e;">select </span><span style="background:black;color:white;">rk.Name;

</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<ul>
  </ul>
<ul>
<li>
<div align="left">The core win here is &#8216;ease of development and maintenance’ without the typical trade-off<br />
        <br />in performance. The entire equation is shifted actually so the tradeoff becomes irrelevant. </div>
</li>
<li>
<div align="left">Sure you could do this with a lot more code perhaps even a few ms faster. But at what real cost over the life of your code?</div>
</li>
<li>
<div align="left">The entire point of this post is the far greater win in maintenance and ease of understanding, without the assumed loss of things like performance.</div>
</li>
</ul>
<p>&#160;</p>
<p>When there is no intelligence available on a ‘back-end’ to parse your requests, yet you need the power of finding complex conditional results and much more, there is one recently introduced superstar that is often not described in terms of Linq:</p>
<h2>HashSet&lt;T&gt;</h2>
<p>Let’s start with some code. You know you can call ToList, ToArray, ToDictionary &amp; ToLookup on your collections (we’ll call them Sequences to stay in line with Linq terms).</p>
<ul>
<li>
<div align="right">You will see ‘sets’, ‘collections’ &amp; sequences used together in documentation today. The differences are mostly academic, however the HashSet does illustrate some of those semantic differences which we point out.</div>
</li>
</ul>
<p>We are going to add an extension method to provide us a ToHashSet capability off any IEnumerable&lt;T&gt; (in exactly the same implementation style Microsoft used internally).</p>
<p>Here is how we gain access to this type in the easiest way:</p>
<pre class="code"><span style="background:black;color:white;">    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Collections.Generic;

    </span><span style="background:black;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black;color:#9ff5fd;">This extension method class will add a ToHashSet</span><span style="background:black;color:gray;">&lt;typeparamref name=</span><span style="background:black;color:#9feca5;">&quot;&gt;&quot;</span><span style="background:black;color:gray;">/&gt;
    /// </span><span style="background:black;color:#9ff5fd;">in exactly the same way it is provided by the others:
    </span><span style="background:black;color:gray;">///
    /// </span><span style="background:black;color:#9ff5fd;">ToList(), ToArray(), ToDictionary().. Now ToHashSet() is available
    </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
    </span><span style="background:black;color:#ecc03e;">public static class </span><span style="background:black;color:#2b91af;">HashSetLinqAccess
    </span><span style="background:black;color:white;">{
        </span><span style="background:black;color:#ecc03e;">public static </span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;T&gt; ToHashSet&lt;T&gt;(</span><span style="background:black;color:#ecc03e;">this </span><span style="background:black;color:#9185fa;">IEnumerable</span><span style="background:black;color:white;">&lt;T&gt; fromEnumerable,
            </span><span style="background:black;color:#9185fa;">IEqualityComparer</span><span style="background:black;color:white;">&lt;T&gt; comparer)
        {
            </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(fromEnumerable == </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">)
                </span><span style="background:black;color:#ecc03e;">throw new </span><span style="background:black;color:#2b91af;">ArgumentNullException</span><span style="background:black;color:white;">(</span><span style="background:black;color:#ecc03e;">&quot;fromEnumerable&quot;</span><span style="background:black;color:white;">);

            </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(comparer == </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">)
                comparer = </span><span style="background:black;color:#2b91af;">EqualityComparer</span><span style="background:black;color:white;">&lt;T&gt;.Default;

            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">!</span><span style="background:black;color:#ecc03e;">typeof</span><span style="background:black;color:white;">(</span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;T&gt;).IsAssignableFrom(fromEnumerable.GetType())
                           ? </span><span style="background:black;color:#ecc03e;">new </span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;T&gt;(fromEnumerable, comparer)
                           : (</span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;T&gt;)fromEnumerable;
        }

        </span><span style="background:black;color:#ecc03e;">public static </span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;T&gt; ToHashSet&lt;T&gt;(</span><span style="background:black;color:#ecc03e;">this </span><span style="background:black;color:#9185fa;">IEnumerable</span><span style="background:black;color:white;">&lt;T&gt; fromEnumerable) {

            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">ToHashSet(fromEnumerable, </span><span style="background:black;color:#2b91af;">EqualityComparer</span><span style="background:black;color:white;">&lt;T&gt;.Default);
        }
    }</span></pre>
<p>Ok so what are we going to do with the HashSet&lt;T&gt; and why?</p>
<p>The benefit comes when we have in-memory large sequences to deal with. I will be using the following code as the ‘server’ here. This is code that provides a ‘Registry Server’ to our application. We will populate up a HashSet&lt;T&gt; with RegistryKey instances and then see just how fast it is.</p>
<p>In the next post we will cover all of the additional methods the HashSet&lt;T&gt; exposes. </p>
<p>Here is the code for our Registry Server. NOTE: Please do not try to modify this to change your registry unless you know what you are doing. This is an immutable (read-only) projection from the registry for a very good reason: You can thrash your machine otherwise.</p>
<p>&#160;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<pre class="code"><span style="background:black;color:#ecc03e;">namespace </span><span style="background:black;color:white;">domaindotnet.LinqToRegistry {
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Collections;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Collections.Generic;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Linq;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Runtime.CompilerServices;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Threading;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">Castle.Core;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">LinqToCore;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">Microsoft.Win32;

    </span><span style="background:black;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black;color:#9ff5fd;">Provider immutable projections from the registry
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">of the machine, as well as events for status and errors
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">via a singeton wrapper on the .NET Registry
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">singleton.
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">Here we are only exposing the HKLM area
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">subkey but you can see it is easily extensible
    </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
    </span><span style="background:black;color:#ecc03e;">public class </span><span style="background:black;color:#2b91af;">RegistryServer </span><span style="background:black;color:white;">: </span><span style="background:black;color:#9185fa;">IEqualityComparer</span><span style="background:black;color:white;">&lt;</span><span style="background:black;color:#2b91af;">RegistryKey</span><span style="background:black;color:white;">&gt;, </span><span style="background:black;color:#9185fa;">IInitializable</span><span style="background:black;color:white;">,
                                  </span><span style="background:black;color:#9185fa;">IEnumerable</span><span style="background:black;color:white;">&lt;</span><span style="background:black;color:#2b91af;">RegistryKey</span><span style="background:black;color:white;">&gt; {
        </span><span style="background:black;color:#f5f01f;">// IInitializable is from Castle.Core Contractually
        // saying we need a call on our Initialize() method
        // before we can be given out as a service to
        // others

        </span><span style="background:black;color:#ecc03e;">private static readonly </span><span style="background:black;color:#2b91af;">RegistryServer </span><span style="background:black;color:white;">_instance;
        </span><span style="background:black;color:#ecc03e;">private static int </span><span style="background:black;color:white;">iCounter;
        </span><span style="background:black;color:#ecc03e;">private </span><span style="background:black;color:#2b91af;">HashSet</span><span style="background:black;color:white;">&lt;</span><span style="background:black;color:#2b91af;">RegistryKey</span><span style="background:black;color:white;">&gt; allKeys;
        </span><span style="background:black;color:#ecc03e;">private </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">eventArgStatus;
        </span><span style="background:black;color:#ecc03e;">private bool </span><span style="background:black;color:white;">isInitialized;
</span></pre>
<pre class="code"><span style="background:black;color:white;">        </span><span style="background:black;color:#ecc03e;">private </span><span style="background:black;color:#2b91af;">PopulateProgressDelegateError </span><span style="background:black;color:white;">populateError = </span><span style="background:black;color:#ecc03e;">delegate </span><span style="background:black;color:white;">{ };
        </span><span style="background:black;color:#ecc03e;">private </span><span style="background:black;color:#2b91af;">PopulateProgressDelegate </span><span style="background:black;color:white;">populateEventOk = </span><span style="background:black;color:#ecc03e;">delegate </span><span style="background:black;color:white;">{ };</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black;color:white;">
        </span><span style="background:black;color:#ecc03e;">static </span><span style="background:black;color:white;">RegistryServer() {
          </span></pre>
<pre class="code"><span style="background:black;color:white;">            _instance = </span><span style="background:black;color:#ecc03e;">new </span><span style="background:black;color:#2b91af;">RegistryServer
            </span><span style="background:black;color:white;">{eventArgStatus = </span><span style="background:black;color:#ecc03e;">new </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs</span><span style="background:black;color:white;">()};</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black;color:white;"></span><span style="background:black;color:white;">        }

        </span><span style="background:black;color:#ecc03e;">private </span><span style="background:black;color:white;">RegistryServer() {}

        </span><span style="background:black;color:#ecc03e;">public static long </span><span style="background:black;color:white;">Count {
            </span><span style="background:black;color:#ecc03e;">get </span><span style="background:black;color:white;">{
                </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(!_instance.isInitialized)
                    </span><span style="background:black;color:#ecc03e;">throw new </span><span style="background:black;color:#2b91af;">InvalidOperationException</span><span style="background:black;color:white;">(
                            </span><span style="background:black;color:#ecc03e;">&quot;Please initialize the backing store first&quot;</span><span style="background:black;color:white;">);

                </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">_instance.allKeys.Count;
            }
        }

        </span><span style="background:black;color:#ecc03e;">public static </span><span style="background:black;color:#2b91af;">RegistryServer </span><span style="background:black;color:white;">Hklm {
            </span><span style="background:black;color:#ecc03e;">get </span><span style="background:black;color:white;">{
                </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(!_instance.isInitialized)
                    </span><span style="background:black;color:#ecc03e;">throw new </span><span style="background:black;color:#2b91af;">InvalidOperationException</span><span style="background:black;color:white;">(
                            </span><span style="background:black;color:#ecc03e;">&quot;Please initialize the backing store first&quot;</span><span style="background:black;color:white;">);

                </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">_instance;
            }
        }

        #region IEnumerable&lt;RegistryKey&gt; Members

        </span><span style="background:black;color:#ecc03e;">public </span><span style="background:black;color:#9185fa;">IEnumerator</span><span style="background:black;color:white;">&lt;</span><span style="background:black;color:#2b91af;">RegistryKey</span><span style="background:black;color:white;">&gt; GetEnumerator() {
            </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(!isInitialized)
                </span><span style="background:black;color:#ecc03e;">throw new </span><span style="background:black;color:#2b91af;">InvalidOperationException</span><span style="background:black;color:white;">(
                        </span><span style="background:black;color:#ecc03e;">&quot;Please initialize the backing store first&quot;</span><span style="background:black;color:white;">);

            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">allKeys.GetEnumerator();
        }

        </span><span style="background:black;color:#9185fa;">IEnumerator IEnumerable</span><span style="background:black;color:white;">.GetEnumerator() {
            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">GetEnumerator();
        }

        #endregion

        #region IEqualityComparer&lt;RegistryKey&gt; Members

        </span><span style="background:black;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black;color:#9ff5fd;">If either contains a null, the result is false (actually it is
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">null be we do not have that option. It is 'unknown and indeterminant'.
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">An emptry string however is treated as 'known to be empty'
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">where null is 'could be anything we have no idea'.
        </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black;color:#9feca5;">&quot;x&quot;</span><span style="background:black;color:gray;">&gt;&lt;/param&gt;
        /// &lt;param name=</span><span style="background:black;color:#9feca5;">&quot;y&quot;</span><span style="background:black;color:gray;">&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="background:black;color:#ecc03e;">public bool </span><span style="background:black;color:white;">Equals(</span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">x, </span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">y) {
            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">x.Name != </span><span style="background:black;color:#ecc03e;">null </span><span style="background:black;color:white;">&amp;&amp; y.Name != </span><span style="background:black;color:#ecc03e;">null </span><span style="background:black;color:white;">&amp;&amp; x.Name == y.Name;
        }

        </span><span style="background:black;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black;color:#9ff5fd;">For null names here we will calculate a funky random number
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">as null != null
        </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
        /// &lt;param name=</span><span style="background:black;color:#9feca5;">&quot;obj&quot;</span><span style="background:black;color:gray;">&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="background:black;color:#ecc03e;">public int </span><span style="background:black;color:white;">GetHashCode(</span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">obj) {
            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">obj.Name != </span><span style="background:black;color:#ecc03e;">null
                           </span><span style="background:black;color:white;">? obj.Name.GetHashCode()
                           : </span><span style="background:black;color:#2b91af;">RuntimeHelpers</span><span style="background:black;color:white;">.GetHashCode(</span><span style="background:black;color:#ecc03e;">new object</span><span style="background:black;color:white;">());
        }

        #endregion

        #region IInitializable Members

        </span><span style="background:black;color:#ecc03e;">void </span><span style="background:black;color:#9185fa;">IInitializable</span><span style="background:black;color:white;">.Initialize() {
            Initialize();
        }

        #endregion

        </span><span style="background:black;color:#ecc03e;">public static event </span><span style="background:black;color:#2b91af;">PopulateProgressDelegate </span><span style="background:black;color:white;">PopulateProgress {
            </span><span style="background:black;color:#ecc03e;">add </span><span style="background:black;color:white;">{ _instance.populateEventOk += </span><span style="background:black;color:#ecc03e;">value</span><span style="background:black;color:white;">; }
            </span><span style="background:black;color:#ecc03e;">remove </span><span style="background:black;color:white;">{ _instance.populateEventOk -= </span><span style="background:black;color:#ecc03e;">value</span><span style="background:black;color:white;">; }
        }

        </span><span style="background:black;color:#ecc03e;">private void </span><span style="background:black;color:white;">InvokePopulateProgress() {
            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">PopulateProgressDelegate = _instance.populateEventOk;
</span><span style="background:black;color:white;">                eventArgStatus.ItemCount = </span><span style="background:black;color:#2b91af;">Interlocked</span><span style="background:black;color:white;">.Increment(</span><span style="background:black;color:#ecc03e;">ref </span><span style="background:black;color:white;">iCounter);
                PopulateProgressDelegate(</span><span style="background:black;color:#ecc03e;">this</span><span style="background:black;color:white;">, eventArgStatus);

        }

        </span><span style="background:black;color:#ecc03e;">public static event </span><span style="background:black;color:#2b91af;">PopulateProgressDelegateError </span><span style="background:black;color:white;">PopulateProgressItemError {
            </span><span style="background:black;color:#ecc03e;">add </span><span style="background:black;color:white;">{ _instance.populateError += </span><span style="background:black;color:#ecc03e;">value</span><span style="background:black;color:white;">; }
            </span><span style="background:black;color:#ecc03e;">remove </span><span style="background:black;color:white;">{ _instance.populateError -= </span><span style="background:black;color:#ecc03e;">value</span><span style="background:black;color:white;">; }
        }

        </span><span style="background:black;color:#ecc03e;">private static void </span><span style="background:black;color:white;">InvokePopulateProgressItemError(</span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">args) {
         </span><span style="background:black;color:white;">  _instance.populateError(_instance, args);
        }

        </span><span style="background:black;color:#ecc03e;">public static void </span><span style="background:black;color:white;">Initialize() {
            Initialize(</span><span style="background:black;color:#2b91af;">Registry</span><span style="background:black;color:white;">.LocalMachine);
        }

        </span><span style="background:black;color:#ecc03e;">private static void </span><span style="background:black;color:white;">Initialize(</span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">RegistryStartKey) {
            </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(_instance.isInitialized)
                </span><span style="background:black;color:#ecc03e;">throw new </span><span style="background:black;color:#2b91af;">InvalidOperationException</span><span style="background:black;color:white;">(
                        </span><span style="background:black;color:#ecc03e;">&quot;Already Initialized. Cannot perform twice&quot;</span><span style="background:black;color:white;">);

          </span><span style="background:black;color:white;">
            _instance.allKeys = GetAllSubkeys(RegistryStartKey, </span><span style="background:black;color:#ecc03e;">&quot;&quot;</span><span style="background:black;color:white;">).ToHashSet(_instance);

            _instance.isInitialized = </span><span style="background:black;color:#ecc03e;">true</span><span style="background:black;color:white;">;
        }

        </span><span style="background:black;color:#ecc03e;">private static </span><span style="background:black;color:#9185fa;">IEnumerable</span><span style="background:black;color:white;">&lt;</span><span style="background:black;color:#2b91af;">RegistryKey</span><span style="background:black;color:white;">&gt; GetAllSubkeys(</span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">StartkeyIn,
                                                              </span><span style="background:black;color:#2b91af;">String </span><span style="background:black;color:white;">NodeKey) {
            _instance.InvokePopulateProgress();

            </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(StartkeyIn != </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">) {
                </span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">SubItemRoot;

                </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(TryOpenSubKey(StartkeyIn, NodeKey, </span><span style="background:black;color:#ecc03e;">out </span><span style="background:black;color:white;">SubItemRoot)) {
                    </span><span style="background:black;color:#ecc03e;">yield return </span><span style="background:black;color:white;">SubItemRoot;

                    </span><span style="background:black;color:#ecc03e;">foreach </span><span style="background:black;color:white;">(</span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">sub </span><span style="background:black;color:#ecc03e;">in

                            </span><span style="background:black;color:white;">SubItemRoot.GetSubKeyNames().SelectMany( </span><span style="background:black;color:#f5f01f;">// Recursion back into this method
                                    </span><span style="background:black;color:white;">s =&gt; GetAllSubkeys(SubItemRoot, s)))

                        </span><span style="background:black;color:#ecc03e;">yield return </span><span style="background:black;color:white;">sub;
                }
            }
        }

        </span><span style="background:black;color:#ecc03e;">private static bool </span><span style="background:black;color:white;">TryOpenSubKey(</span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">StartFrom, </span><span style="background:black;color:#2b91af;">String </span><span style="background:black;color:white;">Name,
                                          </span><span style="background:black;color:#ecc03e;">out </span><span style="background:black;color:#2b91af;">RegistryKey </span><span style="background:black;color:white;">itemOut) {
            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">bIsOK = </span><span style="background:black;color:#ecc03e;">false</span><span style="background:black;color:white;">;
            itemOut = </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">;

            </span><span style="background:black;color:#ecc03e;">try </span><span style="background:black;color:white;">{
                itemOut = StartFrom.OpenSubKey(Name,
                        </span><span style="background:black;color:#b8a223;">RegistryKeyPermissionCheck</span><span style="background:black;color:white;">.ReadSubTree);
                </span><span style="background:black;color:#ecc03e;">if </span><span style="background:black;color:white;">(itemOut != </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">)
                    bIsOK = </span><span style="background:black;color:#ecc03e;">true</span><span style="background:black;color:white;">;
            }
            </span><span style="background:black;color:#ecc03e;">catch </span><span style="background:black;color:white;">(</span><span style="background:black;color:#2b91af;">Exception </span><span style="background:black;color:white;">ex) {
                InvokePopulateProgressItemError(</span><span style="background:black;color:#ecc03e;">new </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs</span><span style="background:black;color:white;">(-1,
                        ex.Message + </span><span style="background:black;color:#2b91af;">Environment</span><span style="background:black;color:white;">.NewLine + </span><span style="background:black;color:#ecc03e;">&quot;Key=&quot; </span><span style="background:black;color:white;">+ StartFrom.Name + </span><span style="background:black;color:#ecc03e;">&quot; failed trying &quot; </span><span style="background:black;color:white;">+ Name));
            }

            </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">bIsOK;
        }
                                  }

    </span><span style="background:black;color:#ecc03e;">public delegate void </span><span style="background:black;color:#2b91af;">PopulateProgressDelegateError</span><span style="background:black;color:white;">(
            </span><span style="background:black;color:#ecc03e;">object </span><span style="background:black;color:white;">sender, </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">args);

    </span><span style="background:black;color:#ecc03e;">public delegate void </span><span style="background:black;color:#2b91af;">PopulateProgressDelegate</span><span style="background:black;color:white;">(
            </span><span style="background:black;color:#ecc03e;">object </span><span style="background:black;color:white;">sender, </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">args);
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code">&#160;</pre>
<pre class="code"><span style="background:black;color:#ecc03e;">namespace </span><span style="background:black;color:white;">domaindotnet.LinqToRegistry {
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System;

    </span><span style="background:black;color:gray;">/// &lt;summary&gt;
    /// </span><span style="background:black;color:#9ff5fd;">Simple EventArg for the two progress events
    </span><span style="background:black;color:gray;">///
    /// </span><span style="background:black;color:#9ff5fd;">NOTE: There will typically be some errors
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">which is fine as some parts of the Registry are
    </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">not accessible with standard security
    </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
    </span><span style="background:black;color:#ecc03e;">public class </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">: </span><span style="background:black;color:#2b91af;">EventArgs </span><span style="background:black;color:white;">{

        </span><span style="background:black;color:#ecc03e;">private readonly string </span><span style="background:black;color:white;">_keyName;

        </span><span style="background:black;color:#ecc03e;">public </span><span style="background:black;color:white;">PopulateProgressEventArgs(</span><span style="background:black;color:#ecc03e;">int </span><span style="background:black;color:white;">itemCount) : </span><span style="background:black;color:#ecc03e;">this</span><span style="background:black;color:white;">(itemCount, </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">) {}

        </span><span style="background:black;color:#ecc03e;">public </span><span style="background:black;color:white;">PopulateProgressEventArgs(</span><span style="background:black;color:#ecc03e;">int </span><span style="background:black;color:white;">itemCount, </span><span style="background:black;color:#2b91af;">String </span><span style="background:black;color:white;">KeyName) {

            ItemCount = itemCount;
            _keyName = KeyName;

        }

        </span><span style="background:black;color:#ecc03e;">public </span><span style="background:black;color:white;">PopulateProgressEventArgs() : </span><span style="background:black;color:#ecc03e;">this</span><span style="background:black;color:white;">(-1, </span><span style="background:black;color:#ecc03e;">null</span><span style="background:black;color:white;">) {}

        </span><span style="background:black;color:#ecc03e;">public string </span><span style="background:black;color:white;">KeyName {
            </span><span style="background:black;color:#ecc03e;">get </span><span style="background:black;color:white;">{ </span><span style="background:black;color:#ecc03e;">return </span><span style="background:black;color:white;">_keyName; }
        }

        </span><span style="background:black;color:#ecc03e;">public int </span><span style="background:black;color:white;">ItemCount { </span><span style="background:black;color:#ecc03e;">get</span><span style="background:black;color:white;">; </span><span style="background:black;color:#ecc03e;">internal set</span><span style="background:black;color:white;">; }
    }
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code">&#160;</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Although not required, if you want to use this Registry Server (it makes a fantastic ‘mock’ server – although not really a Mock at all) put all the code above in a separate assembly for ease of use.</p>
<p>It’s great for trying our many variants of Linq queries over objects (as we do here) as the Registry – although a bit dangerous to muck about with – is a nice hierarchical source with enough interesting turns to make it fun. </p>
<p>In practice we rarely need to change the registry but if we did, it would be though this (we would carefully evolve it so it could perform controlled updates).</p>
<p>&#160;</p>
<h2>The Regression Tests</h2>
<p>&#160;</p>
<p>So we are using xUnit because we like it. Use whatever you want. The code shown next is the abstract base class our real test cases will use:</p>
<p>&#160;</p>
<pre class="code"><span style="background:black;color:#ecc03e;">namespace </span><span style="background:black;color:white;">LinqToORMValidation {
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">domaindotnet.LinqToRegistry;

    </span><span style="background:black;color:#ecc03e;">public abstract class </span><span style="background:black;color:#2b91af;">BaseTestContext </span><span style="background:black;color:white;">{

        </span><span style="background:black;color:#ecc03e;">private static void </span><span style="background:black;color:white;">RegistryServer_OnPopulateProgress(</span><span style="background:black;color:#ecc03e;">object </span><span style="background:black;color:white;">sender, </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">args)
        {
            </span><span style="background:black;color:#f5f01f;">//Console.WriteLine(&quot;Processed &quot; + args.ItemCount + &quot; items&quot;);

        </span><span style="background:black;color:white;">}

        </span><span style="background:black;color:#ecc03e;">private static void </span><span style="background:black;color:white;">RegistryServer_OnPopulateProgressError(</span><span style="background:black;color:#ecc03e;">object </span><span style="background:black;color:white;">sender, </span><span style="background:black;color:#2b91af;">PopulateProgressEventArgs </span><span style="background:black;color:white;">args)
        {
            </span><span style="background:black;color:#2b91af;">Console</span><span style="background:black;color:white;">.WriteLine(</span><span style="background:black;color:#ecc03e;">&quot;Error : &quot; </span><span style="background:black;color:white;">+ args.KeyName);
        }
        </span><span style="background:black;color:#ecc03e;">protected </span><span style="background:black;color:white;">BaseTestContext() {

            </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.PopulateProgress += RegistryServer_OnPopulateProgress;
            </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.PopulateProgressItemError += RegistryServer_OnPopulateProgressError;
            </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.Initialize();

            </span><span style="background:black;color:#2b91af;">Console</span><span style="background:black;color:white;">.WriteLine(</span><span style="background:black;color:#ecc03e;">&quot;Initialization Complete. Total Records = &quot; </span><span style="background:black;color:white;">+ </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.Count);
        }

    }
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a><a href="http://11011.net/software/vspaste"></a></p>
<p>NOTE: Un-Comment the Console.WriteLine in the OnPopulateProgress to view the status as it runs.</p>
<blockquote>
<p>The main area to see is the protected constructor. It’s clear that the Singleton is exposing a separate Initialize() method (we did this on purpose as it can take a little while for all those keys to get inside the HashSet&lt;T&gt; and debugging things if they go wrong in say a static constructor is harder then making a long-running initialization explicit. In general a good design decision we believe.</p>
</blockquote>
<p>&#160;</p>
<p>So the final part of code for this post at least is the first test which indeed shows the exact query from the beginning working:&quot;</p>
<pre class="code"><span style="background:black;color:white;"></span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<pre class="code"><span style="background:black;color:#ecc03e;">namespace </span><span style="background:black;color:white;">LinqToORMValidation {
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Diagnostics;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">System.Linq;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">domaindotnet.LinqToRegistry;
    </span><span style="background:black;color:#ecc03e;">using </span><span style="background:black;color:white;">Xunit;

    </span><span style="background:black;color:#ecc03e;">public class </span><span style="background:black;color:#2b91af;">RegistryServerValidation </span><span style="background:black;color:white;">: </span><span style="background:black;color:#2b91af;">BaseTestContext </span><span style="background:black;color:white;">{

        </span><span style="background:black;color:gray;">/// &lt;summary&gt;
        /// </span><span style="background:black;color:#9ff5fd;">As a Linq IEnumerable</span><span style="background:black;color:gray;">&lt;T&gt; </span><span style="background:black;color:#9ff5fd;">result
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">if anything changed, the
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">underlying HashSet</span><span style="background:black;color:gray;">&lt;T&gt; </span><span style="background:black;color:#9ff5fd;">would not change. However if this
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">were a direct reference to the HashSet the values ARE
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">changeable. The idea is to project out immutable results
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">from the Registry server and indeed treat all the data
        </span><span style="background:black;color:gray;">/// </span><span style="background:black;color:#9ff5fd;">as read only
        </span><span style="background:black;color:gray;">/// &lt;/summary&gt;
        </span><span style="background:black;color:white;">[</span><span style="background:black;color:#2b91af;">Fact</span><span style="background:black;color:white;">]
        </span><span style="background:black;color:#ecc03e;">public void </span><span style="background:black;color:white;">should_prove_basic() {

            </span><span style="background:black;color:#f5f01f;">// Find the registry key(s) that have
            // VisualStudo in the name and end in
            // 'FontsAndColors' that also have at least
            // one value defined inside they key

            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">sw =</span><span style="background:black;color:#2b91af;">Stopwatch</span><span style="background:black;color:white;">.StartNew();

            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">FindFontsColors = </span><span style="background:black;color:#ecc03e;">from </span><span style="background:black;color:white;">rk </span><span style="background:black;color:#ecc03e;">in </span><span style="background:black;color:#2b91af;">RegistryServer</span><span style="background:black;color:white;">.Hklm
                                  </span><span style="background:black;color:#ecc03e;">where
                                          </span><span style="background:black;color:white;">rk.Name.Contains(</span><span style="background:black;color:#ecc03e;">&quot;VisualStudio&quot;</span><span style="background:black;color:white;">) &amp;&amp;
                                          rk.Name.EndsWith(</span><span style="background:black;color:#ecc03e;">&quot;FontsAndColors&quot;</span><span style="background:black;color:white;">) &amp;&amp;
                                          rk.ValueCount &gt; 0

                                  </span><span style="background:black;color:#ecc03e;">select </span><span style="background:black;color:white;">rk.Name;

            </span><span style="background:black;color:#ecc03e;">var </span><span style="background:black;color:white;">countMatched = FindFontsColors.Count();

            sw.Stop();

            </span><span style="background:black;color:#2b91af;">Console</span><span style="background:black;color:white;">.WriteLine(</span><span style="background:black;color:#ecc03e;">&quot;Total Records Matched = &quot; </span><span style="background:black;color:white;">+ countMatched);
            </span><span style="background:black;color:#2b91af;">Console</span><span style="background:black;color:white;">.WriteLine(</span><span style="background:black;color:#ecc03e;">&quot;Search Took : &quot; </span><span style="background:black;color:white;">+ sw.ElapsedMilliseconds + </span><span style="background:black;color:#ecc03e;">&quot; ms&quot;</span><span style="background:black;color:white;">);

            </span><span style="background:black;color:#f5f01f;">// Assert it took less then one second
            </span><span style="background:black;color:#2b91af;">Assert</span><span style="background:black;color:white;">.True(sw.ElapsedMilliseconds &lt; 1000);
            </span><span style="background:black;color:#2b91af;">ObjectDumper</span><span style="background:black;color:white;">.Write(FindFontsColors);
        }

    }
}</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>&#160;</p>
<p>&#160;</p>
<p>For this test cases we are very specifically finding any keys across any in HKLM matching the conditions: </p>
<ul>
<li>The key name ‘VisualStudio’ somewhere. </li>
<li>The key ends with &#8216;FontsAndColors’ </li>
<li>The key has at least one value inside (you’ll see why in the next post when things get harder) </li>
</ul>
<p>We also introduce a time to show off the speed of the HashSet&lt;T&gt;.</p>
<p>&#160;</p>
<p>Here I am making the assumption that the name of the key holds identity, and if null, we use standard null semantics (as defined in relational algebra).</p>
<p>The only few interesting points are the use of the static RuntimeHelpers class from .NET as the fact we are using the singleton static instance as the Equality instance.</p>
<p>&#160;</p>
<h2>Running the Code</h2>
<p>&#160;</p>
<p><a href="http://dcarr.files.wordpress.com/2008/09/image1.png"><img style="border-width:0;" title="image" border="0" alt="image" src="http://dcarr.files.wordpress.com/2008/09/image-thumb1.png?w=700&#038;h=526" width="700" height="526" /></a> </p>
<p>As expected we received a few errors, but they make sense as they are protected areas of the registry.</p>
<h3>So we matched across 233142 instances of RegistryKey with three conditions in 746ms. Try that in RegEdt32!!</h3>
<p>&#160;</p>
<div align="right">
<table border="1" cellspacing="4" cellpadding="4" width="400" align="right">
<tbody>
<tr>
<td valign="top" width="390">
<p align="center">MSDN Facts</p>
<p>The HashSet&lt;T&gt; class provides high performance set operations. A set is a collection that contains no duplicate elements, and whose elements are in no particular order. </p>
<p>The capacity of a HashSet&lt;T&gt; object is the number of elements that the object can hold. A HashSet&lt;T&gt; object&#8217;s capacity automatically increases as elements are added to the object. </p>
<p>The HashSet&lt;T&gt; class is a set collection that implements the <a href="http://msdn.microsoft.com/en-us/library/system.collections.icollection.aspx">ICollection</a> interface and the <a href="http://msdn.microsoft.com/en-us/library/92t2ye13.aspx">ICollection&lt;(Of &lt;(T&gt;)&gt;)</a> generic interface. </p>
<p><img src="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" /> Set Collections </p>
<p><a name="sectionToggle0"></a></p>
<p>In mathematics, a set is a collection of distinct objects that is usually defined by a rule that determines whether an element is a member of a particular set. For example, a set could be defined to contain &quot;all the odd numbers between 1 and 21&quot; or the numbers &quot;1, 3, 5 and 7&quot;. </p>
<p><img src="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" /> The HashSet Class </p>
<p><a name="sectionToggle1"></a></p>
<p>The <a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(Of &lt;(T&gt;)&gt;)</a> class is based on the model of mathematical sets and provides high-performance set operations similar to accessing the keys of the <a href="http://msdn.microsoft.com/en-us/library/xfhwa508.aspx">Dictionary&lt;(Of &lt;(TKey, TValue&gt;)&gt;)</a> or <a href="http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx">Hashtable</a> collections. In simple terms, the <a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(Of &lt;(T&gt;)&gt;)</a> class can be thought of as a <a href="http://msdn.microsoft.com/en-us/library/xfhwa508.aspx">Dictionary&lt;TKey, TValue&gt;</a> collection without values. </p>
<p>A <a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(Of &lt;(T&gt;)&gt;)</a> collection is not sorted and cannot contain duplicate elements. If order or element duplication is more important than performance for your application, consider using the <a href="http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx">List&lt;(Of &lt;(T&gt;)&gt;)</a> class together with the <a href="http://msdn.microsoft.com/en-us/library/3da4abas.aspx">Sort</a> method. </p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(Of &lt;(T&gt;)&gt;)</a> provides many mathematical set operations, such as set addition (unions) and set subtraction. The following table lists the provided <a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(Of &lt;(T&gt;)&gt;)</a> operations and their mathematical equivalents. </p>
<p>HashSet(Of T) operation </p>
<p>Mathematical equivalent </p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb342097.aspx">UnionWith</a></p>
<p>Union or set addition </p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb293080.aspx">IntersectWith</a></p>
<p>Intersection </p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb299875.aspx">ExceptWith</a></p>
<p>Set subtraction </p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb336848.aspx">SymmetricExceptWith</a></p>
<p>Symmetric difference </p>
<p>In addition to the listed set operations, the <a href="http://msdn.microsoft.com/en-us/library/bb359438.aspx">HashSet&lt;(T&gt;</a> class also provides methods for determining set equality, overlap of sets, and whether a set is a subset or superset of another set. </p>
<p>&#160;</p>
</p>
</td>
</tr>
</tbody>
</table>
</div>
<p>So far this has only set a baseline for the next exploration into these new methods provided in the HashSet&lt;T&gt; you might not have been aware of which we can now easily use: </p>
<p>&#160;</p>
<div id="contents">
<div style="height:607px;" id="ctl00_rs1_ra1" class="resizableArea">
<div id="ctl00_rs1_raRight" class="rightSection">
<div class="RightPanel">
<div class="ContentArea">
<div class="topic">
<div id="mainSection">
<div id="mainBody">
<div id="ctl00_rs1_mainContentContainer_cpe804725" class="MTPS_CollapsibleRegion">
<div style="width:auto;display:block;height:auto;overflow:visible;" id="ctl00_rs1_mainContentContainer_cpe804725_c" class="MTPS_CollapsibleSection">
<div style="border-bottom:medium none;border-left:medium none;display:block;border-top:medium none;border-right:medium none;" class="MTPS_CollapsibleSection">
<div class="tableSection">
<table width="50%">
<tbody>
<tr>
<th width="172">
<p>HashSet(Of T) operation </p>
</th>
<th width="176">
<p>LINQ equivalent </p>
</th>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl84" href="http://msdn.microsoft.com/en-us/library/bb342097.aspx">UnionWith</a></span> </p>
</td>
<td width="176">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl85" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.union.aspx">Union</a></span> </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl86" href="http://msdn.microsoft.com/en-us/library/bb293080.aspx">IntersectWith</a></span> </p>
</td>
<td width="176">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl87" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.intersect.aspx">Intersect</a></span> </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl88" href="http://msdn.microsoft.com/en-us/library/bb299875.aspx">ExceptWith</a></span> </p>
</td>
<td width="176">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl89" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.except.aspx">Except</a></span> </p>
</td>
</tr>
<tr>
<td width="172">
<p>Not Provided </p>
</td>
<td width="176">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl90" href="http://msdn.microsoft.com/en-us/library/system.linq.enumerable.distinct.aspx">Distinct</a></span> </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl91" href="http://msdn.microsoft.com/en-us/library/bb336848.aspx">SymmetricExceptWith</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl92" href="http://msdn.microsoft.com/en-us/library/bb355623.aspx">Overlaps</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl93" href="http://msdn.microsoft.com/en-us/library/bb358446.aspx">IsSubsetOf</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl94" href="http://msdn.microsoft.com/en-us/library/bb351418.aspx">IsProperSubsetOf</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl95" href="http://msdn.microsoft.com/en-us/library/bb346923.aspx">IsSupersetOf</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl96" href="http://msdn.microsoft.com/en-us/library/bb299734.aspx">IsProperSupersetOf</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
<tr>
<td width="172">
<p><span><a id="ctl00_rs1_mainContentContainer_ctl97" href="http://msdn.microsoft.com/en-us/library/bb346516.aspx">SetEquals</a></span> </p>
</td>
<td width="176">
<p>Not Provided. </p>
</td>
</tr>
</tbody>
</table></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
</p></div>
<p>&#160;</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:57bcd4fd-45be-4e95-9e9b-7dba54a771c6" class="wlWriterSmartContent">Technorati Tags: <a href="http://technorati.com/tags/Linq" rel="tag">Linq</a>,<a href="http://technorati.com/tags/HashSet" rel="tag">HashSet</a>,<a href="http://technorati.com/tags/ORM" rel="tag">ORM</a>,<a href="http://technorati.com/tags/NHibernate" rel="tag">NHibernate</a>,<a href="http://technorati.com/tags/Linq+to+NHibernate" rel="tag">Linq to NHibernate</a>,<a href="http://technorati.com/tags/Linq+Undocumented" rel="tag">Linq Undocumented</a>,<a href="http://technorati.com/tags/Functional+Programming" rel="tag">Functional Programming</a>,<a href="http://technorati.com/tags/.NET+3.5" rel="tag">.NET 3.5</a></div>
<div class="wlWriterHeaderFooter" style="text-align:left;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f09%2f08%2fthe_fastest_dot_net_hash_set_collection_with_linq_extended_features%2f&amp;title=Expose+New+Linq+Operations+from+the+Screaming+HashSet%3cT%3e+Collection"><img src="http://digg.com/img/badges/100x20-digg-button.png" width="100" height="20" alt="Digg This" title="Digg This" border="0" style="border:0;" /></a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/874/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/874/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/874/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/874/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/874/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/874/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/874/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/874/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/874/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/874/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/874/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/874/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=874&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/09/08/the_fastest_dot_net_hash_set_collection_with_linq_extended_features/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/09/premature-6-thumb.jpg" medium="image">
			<media:title type="html">premature_optimization</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/09/image-thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" medium="image" />

		<media:content url="http://i.msdn.microsoft.com/platform/Controls/CollapsibleArea/resources/minus.gif" medium="image" />

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>NHibernate 2.0 gold Released &#8211; Must Wait for &#8216;Linq to NHibernate&#8217;</title>
		<link>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/</link>
		<comments>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/#comments</comments>
		<pubDate>Sun, 24 Aug 2008 18:00:54 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[Industry News]]></category>
		<category><![CDATA[ORM]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[Advanced .NET]]></category>
		<category><![CDATA[C# 3.0]]></category>
		<category><![CDATA[Linq]]></category>
		<category><![CDATA[Linq to Entities]]></category>
		<category><![CDATA[Linq to NHibernate]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/</guid>
		<description><![CDATA[As expected, NHibernate 2.0 went gold yesterday and is available for download. This is official release 2.0.0 GA. Please ensure you review this list of breaking changes from the release notes. Linq to NHibernate is available for now only via the NHibernate Contrib project and is not included in this NHibernate release.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=762&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f"><img class="alignright" style="border:0 none;" src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f" border="0" alt="kick it on DotNetKicks.com" width="82" height="18" /></a></p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank">NHibernate 2.0</a> went gold yesterday and is available for download from <a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank">here</a>.</p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank"></a></p>
<p>This is official release 2.0.0 GA. Please ensure you review this list of breaking changes from the release notes (also main items briefly listed below).</p>
<h2><strong>NOTE: Correction/clarification made 8/26 on Linq to NHibernate location.</strong></h2>
<p style="text-align:center;">The much anticipated <a href="http://en.wikipedia.org/wiki/Language_Integrated_Query" target="_blank">Linq</a> to NHibernate is available for now only via the NHibernate Contrib project and is not included in this NHibernate release.<br />
<em><br />
Although likely to change, there does not appear to be an installer for Linq to NHibernate so it must be accessed from the source code. To gain access to this, you will need a <a href="http://tortoisesvn.tigris.org/" target="_blank">subversion client such as Tortoise</a>, and then download the code.</em></p>
<blockquote>
<h3>To download ‘Linq to NHibernate&#8217; from <a href="http://sourceforge.net/svn/?group_id=216446" target="_blank">the Trunk go here</a></h3>
</blockquote>
<p>The location of the bits can be found under the repository at this location:</p>
<p><a title="http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/" href="http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/" target="_blank">http://nhcontrib.svn.sourceforge.net/viewvc/nhcontrib/trunk/src/NHibernate.Linq/</a><br />
NOTE: Pictures Below Generated from <a href="http://www.ndepend.com/" target="_blank">NDepend</a>, a must-have tool for .NET Development</p>
<h1>gold release 2.0.0.GA</h1>
<h2>BREAKING CHANGES from NH1.2.1GA to NH2.0.0</h2>
<ul>
<li>
<h2>Infrastructure</h2>
<ul>
<li>.NET 1.1 is no longer supported</li>
<li>Nullables.NHibernate is no longer supported (use nullable types of .NET 2.0)</li>
<li>Contrib moved. New Location</li>
</ul>
</li>
</ul>
<div class="mceTemp mceIEcenter"><a title="NDepend Analysis" href="http://dcarr.files.wordpress.com/2008/08/componentdependenciesdiagram1.png" target="_blank"><img class="aligncenter" src="http://dcarr.files.wordpress.com/2008/08/techsmithwor48f.png?w=437&#038;h=625" alt="NDepend Analysis" width="437" height="625" /></a></div>
<div id="attachment_764" class="wp-caption aligncenter" style="width: 456px"><a href="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png"><img class="size-medium wp-image-764" style="border:2px solid black;" src="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png?w=446&#038;h=446" alt="" width="446" height="446" /></a><p class="wp-caption-text">NDepend Analysis</p></div>
<p><a href="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png"><img class="alignright" style="border:2px solid black;margin:10px;" src="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png?w=668&#038;h=368" alt="" width="668" height="368" align="left" /></a></p>
<ul>
<li>
<ul>
<li>
<ul>
<li><a href="http://sourceforge.net/projects/nhcontrib">http://sourceforge.net/projects/nhcontrib</a></li>
</ul>
</li>
</ul>
</li>
<li>
<h2>Compile time</h2>
<ul>
<li>NHibernate.Expression namespace was renamed to NHibernate.Criterion</li>
<li>IInterceptor have additional methods. (IsUnsaved was renamed IsTransient)</li>
<li>INamingStrategy</li>
<li>IType</li>
<li>IEntityPersister</li>
<li>IVersionType</li>
<li>IBatcher</li>
<li>IUserCollectionType</li>
<li>IEnhancedUserType</li>
<li>IPropertyAccessor</li>
<li>ValueTypeType renamed to PrimitiveType</li>
</ul>
</li>
<li>
<h2>Possible Breaking Changes for external frameworks</h2>
</li>
</ul>
<ul>
<li>Various classes were moved between namespaces</li>
<li>Various classes have been renamed (to match Hibernate 3.2 names)</li>
<li>ISession interface have additional methods</li>
<li>ICacheProvider</li>
<li>ICriterion</li>
<li>CriteriaQueryTranslator</li>
</ul>
<li>
<h2>Initialization time</h2>
</li>
<ul>
<li>&lt;nhibernate&gt; section, in App.config, is no longer supported and will be ignored. Configuration schema for configuration file and App.config is now identical, and the App.config section name is: &lt;hibernate-configuration&gt;</li>
<li>&lt;hibernate-configuration&gt; have a different schema and all properties names are cheked</li>
<li>configuration properties are no longer prefixed by &#8220;hibernate.&#8221;, if before you would specify &#8220;hibernate.dialect&#8221;, now you specify just &#8220;dialect&#8221;</li>
<li>All named queries will be validated at initialization time, an exception will be thrown if any is not valid (can be disabled if needed)</li>
<li>Stricter checks for proxying classes (all public methods must be virtual)</li>
</ul>
<li>
<h2>Run time</h2>
<ul>
<li>SaveOrUpdateCopy() returns a new instance of the entity without changing the original</li>
<li>AutoFlush will not occur outside a transaction &#8211; Database transactions are never optional, all communication with the database must occur inside a transaction, whatever you read or write data.</li>
<li>NHibernate will return long for count(*) queries on SQL Server</li>
<li>&lt;formula&gt; must contain parenthesis when needed</li>
<li>These HQL function names may cause conflict in your HQL reserved names are:
<ul>
<li>substring</li>
<li>locate</li>
<li>trim</li>
<li>length</li>
<li>bit_length</li>
<li>coalesce</li>
<li>nullif</li>
<li>abs</li>
<li>mod</li>
<li>sqrt</li>
<li>upper</li>
<li>lower</li>
<li>cast</li>
<li>extract</li>
<li>concat</li>
<li>current_timestamp</li>
<li>sysdate</li>
<li>second</li>
<li>minute</li>
<li>hour</li>
<li>day</li>
<li>month</li>
<li>year</li>
<li>str</li>
</ul>
</li>
<li>&lt;any&gt; when meta-type=&#8221;class&#8221; the persistent type is a string containing the Class.FullName
<ul>
<li>In order to set a parameter in a query you must use SetParameter(&#8220;paraName&#8221;, typeof(YourClass).FullName, NHibernateUtil.ClassMetaType)</li>
</ul>
</li>
</ul>
</li>
<li>
<h2>Mapping</h2>
</li>
<ul>
<li>&lt;any&gt; : default meta-type is &#8220;string&#8221; (was &#8220;class&#8221;)</li>
</ul>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a1ce0c86-dec5-47df-ba81-a24c347edbb9" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/NHibernate">NHibernate</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://del.icio.us/popular/Linq">Linq</a>,<a rel="tag" href="http://del.icio.us/popular/ORM">ORM</a>,<a rel="tag" href="http://del.icio.us/popular/C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://del.icio.us/popular/.NET">.NET</a>,<a rel="tag" href="http://del.icio.us/popular/Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://del.icio.us/popular/Linq+to+Entities">Linq to Entities</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0941deb9-3263-47de-aa30-cc955dabfc9b" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/NHibernate">NHibernate</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/ORM">ORM</a>,<a rel="tag" href="http://technorati.com/tags/C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://technorati.com/tags/.NET">.NET</a>,<a rel="tag" href="http://technorati.com/tags/Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://technorati.com/tags/Linq+to+Entities">Linq to Entities</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:e70e71ec-da6c-4189-8c18-67b3923acdf5" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">LiveJournal Tags: <a rel="tag" href="http://www.livejournal.com/interests.bml?int=NHibernate">NHibernate</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq+to+NHibernate">Linq to NHibernate</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq">Linq</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=ORM">ORM</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=C%23+3.0">C# 3.0</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=.NET">.NET</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Advanced+.NET">Advanced .NET</a>,<a rel="tag" href="http://www.livejournal.com/interests.bml?int=Linq+to+Entities">Linq to Entities</a></div>
<div class="wlWriterHeaderFooter" style="text-align:right;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f&amp;title=NHibernate+2.0+gold+Released+%e2%80%93+Must+Wait+for+%e2%80%98Linq+to+NHibernate%e2%80%99"><img style="border:0;" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<p><a href="http://www.stumbleupon.com/submit?url=http://blog.domaindotnet.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/%26title%3DNHibernate%2BGold%2BReleased"><img class="alignleft" style="border:0;" src="http://www.stumbleit.com/images/120x20_su_white.gif" border="0" alt="" width="120" height="20" /> Stumble It!</a></p>
<p><a href="https://sourceforge.net/project/showfiles.php?group_id=73818&amp;package_id=73969" target="_blank"><img class="alignleft" style="border:0;" src="http://dcarr.files.wordpress.com/2008/08/techsmithworcfb.png?w=483&#038;h=114" border="0" alt="nhibernate" width="483" height="114" align="right" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/762/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/762/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/762/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/762/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/762/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=762&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/08/24/nhibernate-20-gold-released-must-wait-for-linq-to-nhibernate/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fblog.domaindotnet.com%2f2008%2f08%2f24%2fnhibernate-20-gold-released-must-wait-for-linq-to-nhibernate%2f" medium="image">
			<media:title type="html">kick it on DotNetKicks.com</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithwor48f.png" medium="image">
			<media:title type="html">NDepend Analysis</media:title>
		</media:content>

		<media:content url="http://dcarr.files.wordpress.com/2008/08/visualndependview1.png?w=400" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithword00.png" medium="image" />

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>

		<media:content url="http://www.stumbleit.com/images/120x20_su_white.gif" medium="image" />

		<media:content url="http://dcarr.files.wordpress.com/2008/08/techsmithworcfb.png" medium="image">
			<media:title type="html">nhibernate</media:title>
		</media:content>
	</item>
		<item>
		<title>The Real Agile from 1973 : Expanded Discussion of the factual basis for Software as &#8216;Wicked Problem&#8217;</title>
		<link>http://team.pushbomb.com/2008/08/12/the-real-agile-from-1973-expanded-discussion-of-the-factual-basis-for-software-as-wicked-problem/</link>
		<comments>http://team.pushbomb.com/2008/08/12/the-real-agile-from-1973-expanded-discussion-of-the-factual-basis-for-software-as-wicked-problem/#comments</comments>
		<pubDate>Tue, 12 Aug 2008 22:29:35 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[agile practices]]></category>
		<category><![CDATA[software as strategic]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[software improvement]]></category>
		<category><![CDATA[software ROI]]></category>
		<category><![CDATA[wicked problem]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/2008/08/12/the-real-agile-from-1973-expanded-discussion-of-the-factual-basis-for-software-as-wicked-problem/</guid>
		<description><![CDATA[Ask yourself personally your opinion on the genesis for a software process/method. What made waterfall become a shared mental belief system in millions of minds yet fail so consistently, and indeed provide the only level of 'predictability' in software at that time (an expectation of predictable disaster). I could continue on the facts above for a few pages but it merely is an example of our need to carefully choose a belief system that actually has the added value of being correct.
Ask yourself personally your opinion on the genesis for a software process/method.  What made waterfall become a shared mental belief system in millions of minds yet fail so consistently, and indeed provide the only level of 'predictability' in software at that time (an expectation of predictable disaster). I could continue on the facts above for a few pages but it merely is an example of our need to carefully choose a belief system that actually has the added value of being correct.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=658&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p align="left">
<h1><a href="http://knol.google.com/-/-/29dmrtp9mkh0f/ffovaa/firstagile1.gif"><img style="display:inline;float:right;margin:0 0 15px 15px;" src="http://knol.google.com/k/-/-/29dmrtp9mkh0f/ffovaa/firstagile1.gif" border="0" alt="" /></a></h1>
<p>What&#8217;s your opinion on the genesis for a new software process/method entering the mainstream?</p>
<p>They don&#8217;t emerge as collective practice from air.</p>
<p>What made waterfall become a shared mental belief system in millions of minds yet fail so consistently, and indeed provide the only level of &#8216;predictability&#8217; in software at that time (an expectation of predictable disaster).</p>
<p>I could continue on the facts above for a few pages but it merely is an example of our need to carefully choose a belief system that actually has the added value of being correct.</p>
<p>in terms likely unseen (and unknown by most)    What do you believe the memes for successful adoption are? Why did waterfall dominate for so long and at such pain?</p>
<p>For this discussion, your opinion of why Agile succeeded yet while it also brings impassioned opposition from others is a focus of thought.</p>
<p>Yet indeed while software is filled with so many amazing minds why do we fail on the most basic and fundamental topics more as a rule then exception (code reuse for example is still an utter failure for no reason other than human constraints. The technology has existed for well over a decade if not more).</p>
<p>Mental models/belief systems around software development drive &#8216;methods/methodologies&#8217; for implementation. Unfortunately, many fallacies define the standard for how others perceive &#8216;how the work should be performed&#8217;.</p>
<div style="margin-left:40px;background-color:#073763;">
<ul>
<li>The needs of our stakeholders are perfectly reasonable given their perspective and perhaps not always wrong (but clearly so historically).</li>
<li>Their amazement at our inability to perform to their expectations are not new and in most cases would be expected if the facts discussed here were made explicit.</li>
</ul>
</div>
<p>This has been the shame of software for decades, as we seem to have a terrible time growing into a mature field of science. There is far too much failure, lack of predictability, and utter frustration at the highest levels of corporations globally. What happened and why is Agile / Wicked Problem thinking so helpful?</p>
<p>What are some of the reasons this disconnect exists?</p>
<p><a class="knol-anchor-headings" name="H1-Enter-Agile"></a></p>
<h2>Enter Agile</h2>
<p>Agile was and mostly is the best approach to resolve the most painful aspects of fitting an artisan’s model into an assembly line mentality. Agile reconciles organizational needs in software around previously unrealistic demands around predictability, verifiable estimations, and planning.</p>
<p>Buzzwords and industry hyperbole aside, Agile has moved our industry forward in fundamental ways. We believe this is mostly around its focus on team-centric behaviors and simply not watering down the statement of facts around software most in the &#8216;methods&#8217; world could never do as it would sever their ability to be embraced! Agile simply told the truth and said &#8216;enough is enough&#8217; let us do this using some common sense.</p>
<p><a class="knol-anchor-headings" name="H2-Wicked-Problems"></a></p>
<h2>&#8216;Wicked Problems&#8217;</h2>
<p>Now consider a model already used in many domains that goes back to 1973. This model has already defined the very drivers of &#8216;what is software development&#8217; we assert. Consider the following:</p>
<p>NOTE: For a more complete listing and discussion please see <a href="http://knol.google.com/k/damon-wilder-carr/software-development-as-wicked-problem/#references">[3]</a></p>
<p>If you cannot admit 90% of these statements below about software, why would you believe Agile would work for you?</p>
<div style="margin-left:40px;">
<ul>
<li>You do not understand the problem until you have developed a solution.There is no definitive statement of “The Problem.” The problem is ill structured and composed of an evolving set of interlocking issues and constraints.</li>
<li>Wicked problems have no stopping ruleSince there is global/definitive “Problem” (for example a software system is often perceived as different depending on the context of the stakeholder/user being asked), there is also no definitive “Solution” as each perspective has a different &#8216;optimal&#8217; end-state. The problem solving process ends when you run out of resources. and/or a &#8216;good enough&#8217; compromise is met for all the drivers behind a project.</li>
<li>Every wicked problem is essentially unique and novel.There are so many factors and conditions, all embedded in a dynamic social context, that no two wicked problems are alike, and the solutions to them will always be custom designed and fitted.</li>
</ul>
</div>
<p>Every solution to a wicked problem is a “one-shot operation,” every attempt has consequences.</p>
<p>This is not around all code being written from scratch in the least. This means that the delivered software for a wicked problem is unique but almost always composed of other &#8216;non-wicked&#8217; solutions..</p>
<p>Who would even consider delivering a strategic application where nothing is leveraged from others?</p>
<p>Wicked problems have no given alternative solutions.</p>
<p>There may be no solutions, or there may be a host of potential solutions that are devised, and another host that are never even considered. This is the nature of solving complex and &#8216;moving target&#8217; type concerns</p>
<p><a class="knol-anchor-headings" name="H3-Mock-Frameworks-are-a-Mandate"></a></p>
<p>Mock Frameworks are a Mandate</p>
<p>Although a side discussion, we believe it merits your attention as we simply have no idea how anyone can succeed at Agile without a Mock-Centric world.</p>
<p>Consider an &#8216;API&#8217; you require but is now ill defined and not even built. Do succeed this API must &#8216;appear to exist and indeed appear to be working&#8217; to our system as we evolve items around it. For example, a complex API for financial calculations is assumed, but at iteration three we only required a few aspects of that API.</p>
<p>For more discussion on this critical yet later stage topic <a href="http://blog.domaindotnet.com/agile-best-practices/mock-frameworks-are-predicates-to-success-aka-no-argument-from-those-succeeding-but-much-from-those-failing/">go here for our deeper discussion</a></p>
<p><a class="knol-anchor-headings" name="H4-Facts-will-not-Save-Us"></a></p>
<p>Facts will not Save Us</p>
<p>1) It is irrelevant how correct the above is until external, internal or a combination of forces move the collective thought.</p>
<p>Typically, the competitive market and legislation protecting shareholders should resolve the glaring nature of this issue. However, it is ignorant for we technologists to believe the ‘objective truth’ of our knowledge will directly drive cultural shifts. It does not happen that way in most cases. If it did we would all have OS/2 running on our machines and beta-max machines.</p>
<p>2) Most cannot actually act on these facts or even acknowledge their reality.</p>
<p>This is of course due to their having to ‘change everything’ in how their fiefdoms execute, not to mention trying to explain this to the other stakeholders of IT. I see disastrous practices perpetuated rather than trying to actually be viewed strategically in the value they could offer their organization.</p>
<p><a class="knol-anchor-headings" name="H5-Conclusion-for-Now"></a></p>
<h2>Conclusion for Now</h2>
<p>Ask yourself these questions at the most fundamental:</p>
<ul>
<li>Does your culture understand and nurture ‘software as iterative learning and Wicked Problem’.</li>
<li>If so can you only acknowledge this fact with your team (that’s fine, as good luck explaining this to most C-Level execs. In fact we recommend not mentioning Agile unless they mention it to you first.</li>
<li>How do you treat short-term failures from iterative development (assuming a strong set of feedback loops allowing constant course correction and validation)?</li>
</ul>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:6b81b8ac-fbb4-4ada-96f7-a9116bca52e8" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/agile">agile</a>,<a rel="tag" href="http://del.icio.us/popular/wicked+problem">wicked problem</a>,<a rel="tag" href="http://del.icio.us/popular/software+engineering">software engineering</a>,<a rel="tag" href="http://del.icio.us/popular/software+improvement">software improvement</a>,<a rel="tag" href="http://del.icio.us/popular/software+ROI">software ROI</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:ce5839be-8691-448c-8907-ede44808be9f" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/agile">agile</a>,<a rel="tag" href="http://technorati.com/tags/wicked+problem">wicked problem</a>,<a rel="tag" href="http://technorati.com/tags/software+engineering">software engineering</a>,<a rel="tag" href="http://technorati.com/tags/software+improvement">software improvement</a>,<a rel="tag" href="http://technorati.com/tags/software+ROI">software ROI</a></div>
<div class="wlWriterHeaderFooter" style="text-align:right;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f08%2f12%2fthe-real-agile-from-1973-expanded-discussion-of-the-factual-basis-for-software-as-wicked-problem%2f&amp;title=The+Real+Agile+from+1973+%3a+Expanded+Discussion+of+the+factual+basis+for+Software+as+%e2%80%98Wicked+Problem%e2%80%99"><img style="border:0;" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/658/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/658/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/658/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/658/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/658/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=658&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/08/12/the-real-agile-from-1973-expanded-discussion-of-the-factual-basis-for-software-as-wicked-problem/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://knol.google.com/k/-/-/29dmrtp9mkh0f/ffovaa/firstagile1.gif" medium="image" />

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
		<item>
		<title>Linq Framework Design Guidelines : don&#8217;t wait for the book update</title>
		<link>http://team.pushbomb.com/2008/07/27/linq-framework-design-guidelines-great-content-from-the-upcoming-book/</link>
		<comments>http://team.pushbomb.com/2008/07/27/linq-framework-design-guidelines-great-content-from-the-upcoming-book/#comments</comments>
		<pubDate>Sun, 27 Jul 2008 15:00:36 +0000</pubDate>
		<dc:creator>Damon Wilder Carr</dc:creator>
				<category><![CDATA[C# 3.0 Enhancements]]></category>
		<category><![CDATA[C# 3.0 for Internal DSL]]></category>
		<category><![CDATA[Framework Design]]></category>
		<category><![CDATA[Software Design]]></category>
		<category><![CDATA[.NET 3.0]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Domain Driven]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[Fluent API]]></category>
		<category><![CDATA[Linq]]></category>

		<guid isPermaLink="false">http://dcarr.wordpress.com/?p=557</guid>
		<description><![CDATA[Do not implement IQueryable

without understanding all the performance tradeoffs. 



·     Building and parsing expression trees is expensive and many queries can actually get slower when IQueryable

is implemented. 



·     

The trade-off is acceptable in the LINQ to SQL case, since the alternative overhead of performing queries in memory would have been far greater than the transformation of the expression to an SQL statement and the delegation of the query processing to the database server.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=557&subd=dcarr&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>This is from the team that brought you <a href="http://www.amazon.com/dp/0321246756?tag=cwalina-20&amp;camp=14573&amp;creative=327641&amp;linkCode=as1&amp;creativeASIN=0321246756&amp;adid=16XTFVZSF2T2H97M2AWS&amp;">‘Framework Design Guidelines’</a> led by <a href="http://blogs.msdn.com/kcwalina/">Krzysztof Cwalina</a>, an individual we are not shy to recognize as an amazing mind.</p>
<p>Look for this content (as shared here from their internal work) in the next version of the book</p>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<h2>A Quick Overview</h2>
<ul>
<li>
<div><span style="color:#ffffff;"><span style="font-family:batang;">The Query Pattern, a specification of the set of methods a type must provide in order to be considered as a LINQ provider. The names of these methods can be found in </span><span>System.Linq.Enumerable</span><span style="font-family:batang;"> (found in </span><span>System.Core</span><span style="font-family:batang;">). Their signature follows a pattern that will be discussed later in this chapter.<br />
</span></span></div>
</li>
<li>
<div><span style="color:#ffffff;"><span style="font-family:batang;">A definition of a new interface,<strong> </strong></span><span><strong>IQueryable&lt;T&gt; :I Enumerable&lt;T&gt;<br />
</strong></span></span></div>
</li>
<li>
<div><span style="color:#ffffff;"><span style="font-family:symbol;"><span><span> </span></span></span><span style="font-family:batang;">New types representing generic delegates: </span><span>Func&lt;&gt; </span><span style="font-family:batang;">and </span><span>Action&lt;&gt;<br />
</span></span></div>
</li>
<li>
<div><span style="font-family:batang;"><span style="color:#ffffff;">Lambda expressions, a language feature in VB and C# for defining anonymous delegate </span></span><span style="color:#ffffff;"><span style="font-family:batang;">types representing the notion of a delay-compiled delegate, the </span><span>Expression&lt;&gt;</span><span style="font-family:batang;"> family of types.<br />
</span></span></div>
</li>
<li>
<div><span style="font-family:batang;"><span style="color:#ffffff;">An extension to the C# and VB syntax allowing for queries to be expressed in an alternative, SQL-like format. For example (C#):</span></span></div>
</li>
</ul>
<table style="height:241px;" border="1" cellspacing="5" cellpadding="5" width="841">
<tbody>
<tr>
<td width="485" valign="top"><span><span style="font-family:courier;"> </span></span><span><span style="font-family:courier;"> </span></span><span><span style="font-family:courier;"><strong> </strong></span></span></p>
<p><span><span style="font-family:courier;"><strong>//using extension methods: </strong></span></span></p>
<p><span><span style="font-family:courier;"> </span></span></p>
<p><span><span style="font-family:courier;"><strong>IEnumerable&lt;string&gt; names = set.Where(x=&gt;x.Age&gt;20).Select(x=&gt;x.Name); </strong></span></span></p>
<p><span><span style="font-family:courier;"> </span><span style="font-family:courier;"><strong> </strong></span></span><strong> </strong></p>
<p><span><span style="font-family:courier;"><strong>//using SQL-like syntax: </strong></span></span></p>
<p><span><span style="font-family:courier;"> </span></span></p>
<p><span><span style="font-family:courier;"><strong>IEnumerable&lt;string&gt; names = from x in set where x.Age&gt;20 </strong></span></span></p>
<p><span><span style="font-family:courier;"> </span></span></p>
<p><span><span style="font-family:courier;"><strong><span> </span>select x.Name; </strong></span></span></p>
<p><span><span style="font-family:courier;"> </span></span></td>
</tr>
</tbody>
</table>
<p class="DO-codefirstCxSpFirst" style="margin:5pt 0 0 30.25pt;">
<div class="DO-codefirstCxSpFirst" style="margin:5pt 0 0 30.25pt;"><span><span style="font-family:courier;"> </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p><span><span style="font-family:courier;"> </span></span><span style="font-family:courier;"> </span></p>
<blockquote><p><span>The interplay between these features is the following: any </span><span>IEnumerable&lt;&gt;</span><span style="font-family:batang;"> can be queried upon using the LINQ extension methods, most of which require one or more lambda expressions as parameters; this leads to an in-memory, generic evaluation of the queries. For cases where the set of data is not in memory (e.g. in a database), and/or queries may be optimized, the set of data is presented as an </span><span>IQueryable&lt;&gt;</span><span style="font-family:batang;">. If lambda expressions are given as parameters, they are transformed by the compiler to </span><span>Expression&lt;&gt;</span><span style="font-family:batang;"> objects. The implementation of </span><span>IQueryable&lt;&gt;</span><span style="font-family:batang;"> is responsible for processing said expressions. For example, the implementation of an </span><span>IQueryable&lt;&gt;</span><span style="font-family:batang;"> representing a database table would translate </span><span>Expression&lt;&gt;</span><span> objects to SQL queries.</span></p></blockquote>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-family:batang;"> </span></p>
<h2 style="margin:24pt 0 12pt .25in;"><span style="color:#4f81bd;"><span><span><span style="font-size:medium;font-family:cambria;">2.</span><span> </span></span></span><span style="font-size:medium;font-family:cambria;">Extension Methods, Func&lt;&gt;, Action&lt;&gt;, and Expression&lt;&gt;</span></span></h2>
<p class="BodyFirst" style="margin:10pt 0 0;"><span style="font-family:batang;"><strong><span style="font-size:11pt;">Extension methods</span></strong><span style="font-size:11pt;"> constitute a language feature that allows static methods to be invoked on instance variables. These methods must take at least one parameter, which represents the instance the method is to operate on. For example, in C#, this is done by using the </span></span><span style="font-size:11pt;">this</span><span style="font-size:11pt;"><span style="font-family:batang;"> modifier on such a parameter, when defining the method:</span></span></p>
<p class="BodyFirst" style="margin:10pt 0 0;">
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"> </span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;">
<div class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;"><span><span style="font-family:courier;">public static bool IsPalindrome(<strong>this</strong> string s){ </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpMiddle" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpMiddle" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;"><span> </span>//implementation follows here </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;">}</span></span></p>
<p class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;"><span> </span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="Body" style="margin:10pt 0 6pt;">
<div class="Body" style="margin:10pt 0 6pt;"><span style="font-size:11pt;"><span style="font-family:batang;">This example allows one to write, for example: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="CodeFirst" style="margin:6pt 0 0 15.1pt;">
<div class="CodeFirst" style="margin:6pt 0 0 15.1pt;"><span>“some string”.IsPalindrome(); </span></div>
<p><span> </span></p>
<p class="BodyCxSpFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="margin:0;"><span style="font-size:11pt;"><span style="font-family:batang;">&#8230;which in this case would result in </span></span><span style="font-size:11pt;">false</span></p>
<div class="BodyCxSpMiddle" style="margin:0;"><span style="font-size:11pt;"><span style="font-family:batang;">being displayed on the console. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="margin:0;"><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="margin:0;">
<div class="BodyCxSpMiddle" style="margin:0;"><span style="font-size:11pt;"><span style="font-family:batang;">The class that defines such extension methods is referred to in this text as “sponsor” class, and it must be declared as static. To use extension methods, one must import the namespace defining their sponsor class. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="margin:0;"><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpLast" style="margin:0 0 6pt;">
<div class="BodyCxSpLast" style="margin:0 0 6pt;"><span style="font-family:batang;"><strong><span style="font-size:11pt;">Func&lt;&gt;</span></strong></p>
<div class="BodyCxSpLast" style="margin:0 0 6pt;"><span style="font-size:11pt;">objects represent a generic delegate. For example: </span></div>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;">
<div class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;"><span><span style="font-family:courier;">Func&lt;int,int,double&gt; divide=(x,y)=&gt;(double)x/(double)y; </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;">Console.WriteLine(divide(2,3)); </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="Body" style="margin:10pt 0 6pt;"><span style="font-size:11pt;"><span style="font-family:batang;">In this example, divide is a function that takes two integers and returns a double. The last parameter in the generic definition of a </span></span><span style="font-size:11pt;">Func&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;"> is always the return type. To represent void-returning functions, use </span></span><span style="font-size:11pt;">Action&lt;&gt;</span></p>
<div class="Body" style="margin:10pt 0 6pt;"><span style="font-size:11pt;"><span style="font-family:batang;">instead. For example: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;">
<div class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;"><span><span style="font-family:courier;">Action&lt;double&gt; write=(aDouble)=&gt;Console.WriteLine(aDouble); </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;">write(divide(2,3)); </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="Body" style="margin:10pt 0 6pt;">
<div class="Body" style="margin:10pt 0 6pt;"><span style="font-family:batang;"><strong><span style="font-size:11pt;">Expression&lt;&gt;</span></strong></p>
<div class="Body" style="margin:10pt 0 6pt;"><span style="font-size:11pt;">objects represent function definitions that can be compiled and subsequently invoked at runtime. Continuing with our example: </span></div>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;">
<div class="CodeFirstCxSpFirst" style="margin:6pt 0 0 15.1pt;"><span><span style="font-family:courier;">Expression&lt;Func&lt;int,int,double&gt;&gt; divideBody=(x,y)=&gt;(double)x/(double)y; </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpMiddle" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpMiddle" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;">Func&lt;int,int,double&gt; divide2=divideBody.Compile(); </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;">
<div class="CodeFirstCxSpLast" style="margin:0 0 0 15.1pt;"><span><span style="font-family:courier;">write(divide2(2,3)); </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="BodyCxSpFirst" style="margin:14pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">Notice how the syntax for constructing an </span></span><span style="font-size:11pt;">Expression&lt;&gt; </span><span style="font-size:11pt;"><span style="font-family:batang;">object is very similar to the one used to construct a </span></span><span style="font-size:11pt;">Func&lt;&gt; </span><span style="font-size:11pt;"><span style="font-family:batang;">object; in fact, the only difference is the static type declaration of the variable (</span></span><span style="font-size:11pt;">Expression&lt;&gt; </span><span style="font-size:11pt;"><span style="font-family:batang;">instead of </span></span><span style="font-size:11pt;">Func&lt;&gt;</span></p>
<div class="BodyCxSpFirst" style="margin:14pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">). </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="margin:14pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpLast" style="margin:14pt 0 6pt;"><span style="font-size:11pt;"><span style="font-family:batang;">Expressions may also be constructed programmatically, using the predefined static methods of the non-generic </span></span><span style="font-size:11pt;">Expression</span></p>
<div class="BodyCxSpLast" style="margin:14pt 0 6pt;"><span style="font-size:11pt;"><span style="font-family:batang;">class, however, this is a topic that does not need to be covered for our purposes here. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Avoid</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">frivolous use of the extension methods feature when defining methods on a new type. Use the canonical, language-specific means for defining type members. </span></div>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">There are a few reasons for this. The main one is that liberal use of extension methods has the potential of cluttering the API of types. Another reason is that extension methods are a compile-time facility, and not all languages provide support for them. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">There are, of course, scenarios in which extension methods should be employed. These are outlined in what follows. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Consider</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">using extension methods in any of the following scenarios: </span></div>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="DOFirst" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;font-family:symbol;"><span>·<span> </span></span></span><span style="font-size:11pt;"><span style="font-family:batang;">to provide helper functionality relevant to every implementation of an interface, if said functionality can be written in terms of the core interface. This is because concrete implementations cannot otherwise be assigned to interfaces. For example, the LINQ to Objects operators are implemented as extension methods for all </span></span><span style="font-size:11pt;">IEnumerable&lt;T&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;"> types. Thus, any </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span></p>
<div class="DOFirst" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">implementation is automatically LINQ-enabled </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;font-family:symbol;"><span>·<span> </span></span></span></p>
<div class="DOFirst" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">when object model considerations would dictate taking a dependency on some assembly, but taking such a dependency would break dependency management rules. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="text-indent:0;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">For example, consider the domain of telecommunications. Let us consider that a core domain-specific model is that of network nodes. A library is defined for this domain, called </span></span><span style="font-size:11pt;">nodes.dll</span><span style="font-size:11pt;"><span style="font-family:batang;">. The library contains types such as </span></span><span style="font-size:11pt;">Node</span><span style="font-size:11pt;"><span style="font-family:batang;">. </span></span><span style="font-size:11pt;">Node</span><span style="font-size:11pt;"><span style="font-family:batang;"> may have properties such as “address” and “manufacturer”, etc. Now consider the problem of establishing communication paths through such a network (i.e. routing). A second library, </span></span><span style="font-size:11pt;">routing.dll</span><span style="font-size:11pt;"><span style="font-family:batang;">, is thus developed, taking a dependency on </span></span><span style="font-size:11pt;">nodes.dll</span><span style="font-size:11pt;"><span style="font-family:batang;">. Good engineering practice dictates that </span></span><span style="font-size:11pt;">nodes.dll </span><span style="font-size:11pt;"><span style="font-family:batang;">not take a dependency on </span></span><span style="font-size:11pt;">routing.dll</span><span style="font-size:11pt;"><span style="font-family:batang;">. <span> </span>However, it could be imagined that, in the domain of path routing, the model for network nodes may have new characteristics, namely, that of being or not a path endpoint, and that of being associated with a number of paths. To maintain clean dependencies, a possibility is to have static methods defined in </span></span><span style="font-size:11pt;">routing.dll</span><span style="font-size:11pt;"><span style="font-family:batang;">, e.g. </span></span><span style="font-size:11pt;">Paths.IsNodePathEndpoint(Node n)</span><span style="font-size:11pt;"><span style="font-family:batang;"> or </span></span><span style="font-size:11pt;">Paths.GetListOfPathsCrossingNode(Node n)</span><span style="font-size:11pt;"><span style="font-family:batang;">. However, it may be considered more natural to simply have methods like </span></span><span style="font-size:11pt;">IsEndpoint()</span><span style="font-size:11pt;"><span style="font-family:batang;"> defined on </span></span><span style="font-size:11pt;">Node</span></p>
<div class="DOFirst" style="text-indent:0;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">. Defining extension methods on the Node type in the paths library is, thus, the option to be considered. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Avoid</span></span></strong></span><span style="font-size:11pt;"> defining extension methods on </span></span><span style="font-size:11pt;">System.Object</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">, unless absolutely necessary. When doing so, be aware that VB users will not be able to use thus-defined extension methods and, as such, they will not be able to take advantage of usability/syntax benefits that come with extension methods. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">This is because, in VB, declaring a variable as </span></span><span style="font-size:11pt;">object</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">forces all method invocations on it to be late bound – while bindings to extension methods are compile-time determined (early bound). For example: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">public static class SomeExtensions{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>static void Foo(this object o){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">… </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">Object o = … </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">o.Foo(); </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;"><span style="font-family:batang;">In this example, the call to </span></span><span style="font-size:11pt;">Foo</span></p>
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;"><span style="font-family:batang;">will fail in VB. Instead, the VB syntax should simply be: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">SomeExtensions.Foo(o) </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;"><span style="font-family:batang;">Note that the guideline applies to other languages where the same binding behavior is present, or where extension methods are not supported. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do not</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">put extension methods in the same namespace as the extended type, unless it is for adding methods to interfaces, or for dependency management. In the latter case, the type would be in a different assembly. </span></div>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Avoid</span></span></strong></span><span style="font-size:11pt;"> redefining extension methods on a type </span></span><span style="font-size:11pt;">T</span></p>
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">with extension methods on the same type. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;">
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">For example, in C#, if two different namespaces defined the same extension method on the same type, it would be impossible to import both namespaces in the same file – the compiler would report an ambiguity. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><strong><span style="font-size:8pt;">&lt;file 1&gt; </span></strong></div>
<p><strong><span style="font-size:8pt;"> </span></strong></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">namespace A{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public static class ExtMethodsInA{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public static void ExtMethod(this T obj){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><strong><span style="font-size:8pt;">&lt;file 2&gt; </span></strong></div>
<p><strong><span style="font-size:8pt;"> </span></strong></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">namespace B{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public static class ExtMethodsInB{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>static void ExtMethod(this T obj){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><strong><span style="font-size:8pt;">&lt;file 3&gt; </span></strong></div>
<p><strong><span style="font-size:8pt;"> </span></strong></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">using A; </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">using B; </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;"><span style="font-family:batang;">This will fail at compile time, since </span></span><span style="font-size:11pt;">ExtMethod</span></p>
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;"><span style="font-family:batang;">is considered to be defined twice. This may break valid reusability scenarios; if the scenarios occur late in the development cycle, refactoring namespaces may prove costly. It is thus preferable to avoid this form of overriding methods. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyFirst" style="margin:10pt 0 0;">
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-family:batang;"><span style="font-size:11pt;"><span> </span></span></span></div>
<p><span style="font-family:batang;"><span style="font-size:8pt;font-family:courier;"> </span></span></p>
<table class="MsoNormalTable" style="border-collapse:collapse;margin:auto auto auto 9pt;" border="0" cellspacing="5" cellpadding="5" width="497">
<tbody>
<tr style="height:132pt;">
<td style="border:3pt solid black;background:#e6e6e6 none repeat scroll 0 0;width:351pt;height:132pt;padding:9pt;" width="485">
<p class="AnnotationHead" style="margin:6pt 0 0 .25in;"><span><span style="font-size:small;"><strong> </strong></span></span></p>
<div><span><span style="font-size:small;"></p>
<div><strong><span style="color:#000000;">Mircea Trofin </span></strong></div>
<p></span></span></div>
<p><span><span style="font-size:small;"><strong><span style="color:#000000;"> </span></strong> </span></span></p>
<div><span style="font-size:11pt;"><strong><span style="color:#000000;">Such a situation may occur when using a mix of third-party libraries. To resolve it, import in a file only one namespace defining extension methods on a type, and use fully-qualified static method calls for extension methods defined on the same type in a different namespace. </span></strong></span></div>
<p><span style="font-size:11pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:11pt;"><strong><span style="color:#000000;">Using the example before: </span></strong></span></div>
<p><span style="font-size:11pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:8pt;"></p>
<div><strong><span style="color:#000000;">&lt;file 3&gt; </span></strong></div>
<p></span></div>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:8pt;"></p>
<div><strong><span style="color:#000000;">using A; </span></strong></div>
<p></span></div>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:8pt;"></p>
<div><strong><span style="color:#000000;">… </span></strong></div>
<p></span></div>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:8pt;"></p>
<div><strong><span style="color:#000000;">T someObj=… </span></strong></div>
<p></span></div>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<div><span style="font-size:8pt;"></p>
<div><strong><span style="color:#000000;">someObj.ExtMethod(); //this calls A.ExtMethodsInA.ExtMethod </span></strong></div>
<p></span></div>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;"> </span></strong> </span></p>
<p><span style="font-size:8pt;"><strong><span style="color:#000000;">B.<span> B.</span>ExtMethodsInB.ExtMethod(someObj); //to avoid compilation errors of file 3, we call explicitly the extension method defined in namespace B</span></strong></span></td>
</tr>
</tbody>
</table>
<p class="NL" style="text-indent:0;margin:2pt 0 0;"><span style="font-size:8pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">define extension methods in the same namespace as the extended type, if the type is an interface, and if the extension methods are meant to be used in most or all cases. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do not</span></span></strong></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">define extension methods pertaining to a feature in namespaces normally associated with other features. Instead, define them in the namespace associated with the feature they belong to, or a namespace of it. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For example, do not define extension methods for </span><span style="font-size:11pt;">Telecom.Node </span><span style="font-size:11pt;">in the </span><span style="font-size:11pt;">Telecom </span><span style="font-size:11pt;">namespace, but in a separate namespace, e.g. </span><span style="font-size:11pt;">Routing</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Avoid</span></span></strong></span><span style="font-size:11pt;"> generic naming of namespaces dedicated to extension methods (e.g. “Extensions”) – rather, use a descriptive name – e.g. “</span><span style="font-size:11pt;">Routing</span></p>
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">”. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span><span style="font-size:11pt;"> use the new LINQ types “</span><span style="font-size:11pt;">Func&lt;&gt;</span><span style="font-size:11pt;">” and “</span><span style="font-size:11pt;">Expression&lt;&gt;</span><span style="font-size:11pt;">” instead of custom delegates and predicates, when defining new APIs. The example below illustrates this point</span><span style="font-size:11pt;"><span style="font-family:batang;">:</span></span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">//rather than: </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">delegate bool Tester(int i); </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">class AClass{ </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;"><span> </span><span> </span>public Tester MyTester{get;set;} </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">} </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">//use this: </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">class AClass{ </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;"><span> </span><span> </span>public Func&lt;int,bool&gt; MyTester{get;set;} </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">} </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">Benefits of using </span></span><span style="font-size:11pt;">Func&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;">, in this case, include minimizing the concept count by employing an existing abstraction, as well as eliminating the dependency on the definition of </span></span><span style="font-size:11pt;">Tester</span><span style="font-size:11pt;"><span style="font-family:batang;">.</span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"> </span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<h2 style="margin:24pt 0 12pt .25in;"><span style="color:#4f81bd;"><span><span><span style="font-size:medium;font-family:cambria;">3.</span><span> </span></span></span><span style="font-size:medium;font-family:cambria;">Extending on LINQ</span></span></h2>
<p class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"> </span></p>
<p class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">There are three means by which a type can be designed to participate in LINQ queries: implementing </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;"> (or interfaces derived from it), implementing </span></span><span style="font-size:11pt;">IQueryable&lt;&gt;</span></p>
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">, or by defining the Query Pattern on the type, with no relationship to these two interfaces. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyFirst" style="margin:10pt 0 0;">
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">To preface the guidelines, the choice can be made as follows: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpFirst" style="text-indent:-.25in;margin:10pt 0 0 .5in;"><span style="font-size:11pt;"><span><span style="font-family:batang;">-</span><span> </span></span></span><span style="font-size:11pt;"><span style="font-family:batang;">Extend </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span></p>
<div class="BodyCxSpFirst" style="text-indent:-.25in;margin:10pt 0 0 .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">(or interfaced derived from it) if the default, LINQ to Objects support provided in the framework is sufficient </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 1in;"><span style="font-size:11pt;"><span>o<span> </span></span></span></p>
<div class="BodyCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 1in;"><span style="font-size:11pt;"><span style="font-family:batang;">Override some/all LINQ methods if optimizations are required, but access to the query expression is not necessary </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 .5in;"><span style="font-size:11pt;"><span><span style="font-family:batang;">-</span><span> </span></span></span><span style="font-size:11pt;"><span style="font-family:batang;">Extend </span></span><span style="font-size:11pt;">IQueryable&lt;&gt;</span></p>
<div class="BodyCxSpMiddle" style="text-indent:-.25in;margin:0 0 0 .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">if access to the query expression is necessary </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="BodyCxSpLast" style="text-indent:-.25in;margin:0 0 6pt .5in;"><span style="font-size:11pt;"><span><span style="font-family:batang;">-</span><span> </span></span></span><span style="font-size:11pt;"><span style="font-family:batang;">Define the Query Pattern on the new type if the domain makes it impossible or undesirable to implement </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;"> or </span></span><span style="font-size:11pt;">IQueryable&lt;&gt;</span></p>
<div class="BodyCxSpLast" style="text-indent:-.25in;margin:0 0 6pt .5in;"><span style="font-size:11pt;"> </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">The query methods are those defined by the sponsor class </span></span><span style="font-size:11pt;">System.Linq.Enumerable</span><span style="font-size:11pt;"><span style="font-family:batang;">, as extension methods to </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span></p>
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">. Regardless of the means by which a type participates in LINQ queries, the following guideline applies: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> respect the signature pattern in </span><span style="font-family:batang;">Figure <span>1</span></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">when overriding LINQ methods. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">We use </span><span style="font-size:11pt;">S </span><span style="font-size:11pt;">with or without subscript to indicate a collection type (e.g. </span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;">, </span><span style="font-size:11pt;">ICollection&lt;&gt;</span><span style="font-size:11pt;">) and </span><span style="font-size:11pt;">T</span><span style="font-size:11pt;">, with or without subscript, to indicate the type of elements in that collection. Additionally, we use </span><span>O&lt;T&gt;</span><span><span style="font-family:batang;"> </span></span><span style="font-size:11pt;">to represent subtypes of </span><span style="font-size:11pt;">S&lt;T&gt;</span><span style="font-size:11pt;"> that are ordered. For example, </span><span style="font-size:11pt;">S&lt;T&gt;</span><span style="font-size:11pt;"> is a notation that could be substituted with </span><span style="font-size:11pt;">IEnumerable&lt;int&gt;</span><span style="font-size:11pt;">. The first parameter of all the methods is the type of the object the method is applied on, and it is marked accordingly by prefixing with “</span><span style="font-size:11pt;">this</span><span style="font-size:11pt;">” – whether one chooses to implement these methods as extension methods or as member methods. Also, anywhere </span><span style="font-size:11pt;">Func&lt;&gt;</span><span style="font-size:11pt;"> is being used, one may substitute accordingly with </span><span style="font-size:11pt;">Expression&lt;Func&lt;&gt;&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">- the guidelines indicate where that is preferable. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">Please note that the notation is not meant to be valid code in any particular language, but simply present the type signature pattern. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<table class="MsoNormalTable" style="border-right:medium none;border-top:medium none;border-left:medium none;border-bottom:medium none;border-collapse:collapse;margin:auto auto auto 24pt;" border="1" cellspacing="5" cellpadding="5" width="499">
<tbody>
<tr>
<td style="border:1pt solid black;width:361.8pt;background-color:transparent;padding:0 5.4pt;" width="487" valign="top">
<p class="DO-codelastCxSpFirst" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpFirst" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T&gt; Where(this S&lt;T&gt;, Func&lt;T,bool&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T2&gt; Select(this S&lt;T1&gt;,Func&lt;T1,T2&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">O&lt;T&gt; OrderBy(this S&lt;T&gt;, Func&lt;T,K&gt;), where K is  IComparable </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">O&lt;T&gt; ThenBy(this O&lt;T&gt;,Func&lt;T,K&gt;), where K is  IComparable </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T&gt; Union(this S&lt;T&gt;, S&lt;T&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T&gt; Skip(this S&lt;T&gt;,int) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T&gt; Take(this S&lt;T&gt;,int) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T&gt; SkipWhile(this S&lt;T&gt;, Func&lt;T,bool&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">T ElementAt(this S&lt;T&gt;,int) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T3&gt; Join(this S&lt;T1&gt;, S&lt;T2&gt;,</span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">Func&lt;T1,K1&gt;,Func&lt;T2,K2&gt;,</span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">Func&lt;T1,T2,T3&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<p class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;">
<div class="DO-codelastCxSpMiddle" style="margin:0 0 0 30.25pt;"><span><span style="font-family:courier;">S&lt;T3&gt; SelectMany(this   S&lt;T1&gt;,Func&lt;T1,S&lt;T2&gt;&gt;,Func&lt;T1,T2,T3&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></p>
<p class="DO-codelastCxSpLast" style="margin:0 0 6pt 30.25pt;">
<p class="DO-codelastCxSpLast" style="margin:0 0 6pt 30.25pt;">
<div class="DO-codelastCxSpLast" style="margin:0 0 6pt 30.25pt;"><span><span style="font-family:courier;">S&lt;T2&gt; SelectMany(this S&lt;T1&gt;,Func&lt;T1,S&lt;T2&gt;&gt;) </span></span></div>
<p><span><span style="font-family:courier;"> </span></span></td>
</tr>
</tbody>
</table>
<p class="MsoCaption" style="margin:0 0 10pt;" align="center"><a title="_Ref185215760" name="_Ref185215760"></a><strong><span style="color:#4f81bd;font-family:times new roman;">Figure </span></strong><strong><span style="color:#4f81bd;"><span style="font-family:times new roman;"><span><span>1</span></span> Query Pattern Method Signatures</span></span></strong></p>
<p class="MsoCaption" style="margin:0 0 10pt;" align="center"><strong> </strong></p>
<h3 style="margin:10pt 0 0;"><span style="font-size:small;color:#4f81bd;font-family:cambria;">Extending IEnumerable&lt;&gt;</span></h3>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> implement </span><span style="font-size:11pt;">IEnumerable&lt;T&gt; </span><span style="font-size:11pt;">to enable basic LINQ support. Such basic support should be sufficient for most in-memory data sets. The basic LINQ support will use the default -provided extension methods on </span><span style="font-size:11pt;">IEnumerable&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For example, simply defining: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">public class RangeOfInts:IEnumerable&lt;int&gt;{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public IEnumerator&lt;int&gt; GetEnumerator() {…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public IEnumerator GetEnumerator() {…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">Allows for the following code: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">p</span><span> </span></p>
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">var a=new RangeOfInts(); </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">var b=a.Where(x=&gt;x&gt;10); </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;">Although </span><span style="font-size:11pt;">RangeOfInts</span><span style="font-size:11pt;"> did not implement a “</span><span style="font-size:11pt;">Where</span></p>
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:11pt;">” method. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Consider</span></span></strong></span></span><span style="font-size:11pt;"> redefining the methods in the LINQ pattern on new types implementing </span><span style="font-size:11pt;">IEnumerable&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">, if it is desirable to override the default implementation – e.g. for optimization. It is preferred that one redefines them as type members, rather than extension methods. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For example, rather than: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">public class MyDataSet&lt;T&gt;:IEnumerable&lt;T&gt;{…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">… </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">public static class MyDataSetExtensions{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public static MyDataSet&lt;T&gt; Where(this MyDataSet&lt;T&gt; o,Func&lt;T,bool&gt; f){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">}; </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">Opt for this: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">public class MyDataSet&lt;T&gt;:IEnumerable&lt;T&gt;{ </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;"><span> </span>public MyDataSet&lt;T&gt; Where(Func&lt;T,bool&gt; f){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">… </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Consider</span></span></strong></span></span><span style="font-size:11pt;"> implementing </span><span style="font-size:11pt;">ICollection&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">to improve performance of query operators. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For example, the </span><span style="font-size:11pt;">Count&lt;&gt;</span><span style="font-size:11pt;"> method default behavior (as defined in </span><span style="font-size:11pt;">System.Linq</span><span style="font-size:11pt;">) is to simply walk the </span><span style="font-size:11pt;">IEnumerable</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">. Collection types can optimize their implementation of this method, since they typically offer an <em>O(1)</em> &#8211; complexity mechanism for finding the size of the collection. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<h3 style="margin:10pt 0 0;"><span style="font-size:small;color:#4f81bd;font-family:cambria;">Extending IQueryable&lt;&gt;</span></h3>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Consider</span></span></strong></span></span><span style="font-size:11pt;"> implementing </span><span style="font-size:11pt;">IQueryable&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">when access to the query expression is necessary. For example, this applies for types representing potentially large data sets generated by remote processes, or for certain optimizations. An example of such a dataset is a database, the filesystem, or an in-memory dictionary that needs to be optimized for searching<span> </span>for values (rather than keys). </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;">
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">The following guidelines detail this further: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do not</span></span></strong></span><span style="font-size:11pt;"> implement </span></span><span style="font-size:11pt;">IQueryable&lt;T&gt;</span></p>
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">without understanding all the performance tradeoffs. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DO" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;font-family:symbol;"><span>·<span> </span></span></span><span style="font-size:11pt;"><span style="font-family:batang;">Building and parsing expression trees is expensive and many queries can actually get slower when </span></span><span style="font-size:11pt;">IQueryable&lt;T&gt;</span></p>
<div class="DO" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;"><span style="font-family:batang;">is implemented. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DO" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-size:11pt;font-family:symbol;"><span>·<span> </span></span></span></p>
<div class="DO" style="text-indent:-.25in;margin:12pt 0 6pt .5in;"><span style="font-family:batang;"><span style="font-size:11pt;">The trade-off is acceptable in the LINQ to SQL case, since the alternative overhead of performing queries in memory would have been far greater than the transformation of the expression to an SQL statement and the delegation of the query processing to the database server</span>.</p>
<p></span></div>
<p><span style="font-family:batang;"><span style="font-size:11pt;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> throw </span><span style="font-size:11pt;">NotSupportedException</span><span style="font-size:11pt;"> from </span><span style="font-size:11pt;">IQueryable&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">methods that cannot be logically supported by your data source. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For example, imagine representing a media stream (like internet radio) as an </span><span style="font-size:11pt;">IQueryable&lt;&gt;</span><span style="font-size:11pt;">. The </span><span style="font-size:11pt;">Count</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">method is not logically supported – the stream can be considered as infinite. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<h3 style="margin:10pt 0 0;"><span style="font-size:small;color:#4f81bd;font-family:cambria;">Implementing the Query Pattern</span></h3>
<p class="BodyFirst" style="margin:10pt 0 0;"><span style="font-family:batang;"><span style="font-size:11pt;">The Query Pattern refers to defining the methods in </span>Figure <span>1</span><span style="font-size:11pt;"> without implemeting the </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;"> or </span></span><span style="font-size:11pt;">IQueryable&lt;&gt;</span></p>
<div class="BodyFirst" style="margin:10pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">interfaces. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> implement at least the enumerable pattern (i.e. provide a </span><span style="font-size:11pt;">GetEnumerator</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">method) for types representing collections of data. This is because the expectation is that the result of the query methods be foreach-able. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">implement the Query Pattern as instance members on the new type, if the members make sense on the type even outside of the context of LINQ. Otherwise, use extension methods. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> represent ordered sequences as a separate type. Define on this type the “</span><span style="font-size:11pt;">ThenBy</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">” method. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">This follows the current pattern in the LINQ-to objects implementation, as well as allows for early (compile-time) detection of errors such as applying “</span><span style="font-size:11pt;">ThenBy</span><span style="font-size:11pt;">” to a not “</span><span style="font-size:11pt;">OrderBy</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">”-ed sequence. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">For <span> </span>example, the framework provides the </span><span style="font-size:11pt;">IOrderedEnumerable&lt;&gt; </span><span style="font-size:11pt;">type, which is returned by “</span><span style="font-size:11pt;">OrderBy</span><span style="font-size:11pt;">”. The “</span><span style="font-size:11pt;">ThenBy</span><span style="font-size:11pt;">” extension method is defined for this type, and not for </span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Consider</span></span></strong></span></span><span style="font-size:11pt;"> designing the LINQ operators to return specific enumerable types for domains that should be restricted. Essentially, one is free to return anything from a </span><span style="font-size:11pt;">Select</span><span style="font-size:11pt;"> query method, however, the expectation is that the query result type should be at least enumerable in a </span><span style="font-size:11pt;">foreach</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">loop &#8211; see the example below, as well as the next guideline: </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">var set1=… </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">var set2=set1.Select(x=&gt;x.SomeIntProperty); </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;">foreach(int i in set2){…} </span></div>
<p><span style="font-size:8pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">defer execution of query operator implementations. The expected behavior of most of the Query Pattern members is that they simply construct a new object which, upon enumeration, produces the elements of the set which match the query. The evaluation time is, then, at enumeration. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">The following methods are exception from this rule: </span><span style="font-size:11pt;">All, Any, Average, Contains, Count, ElementAt, Empty, First, FirstOrDefault, Last, LastOrDefault, Max, Min, Single, Sum.</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"> </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">In the example above, the expectation is that the time necessary for evaluating the second line be be independent from the size or nature (e.g. in-memory or remote server) of </span><span style="font-size:11pt;">set1</span><span style="font-size:11pt;">. The general expectation is that this line simply prepares </span><span style="font-size:11pt;">set2</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">, delaying the determination of its composition to the time of its enumeration. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="Body" style="margin:10pt 0 6pt;"><span style="font-family:batang;"> </span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;"><span><span><span style="font-family:batang;"> </span></span></span><span class="DO1"><span style="font-size:11pt;color:#ff0000;font-family:wingdings;"><span>ý</span></span></span><span style="font-family:batang;"><span class="DO1"><span style="font-size:11pt;color:#ff0000;"> </span></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Avoid</span></span></strong></span><span style="font-size:11pt;"> implementing just a part of the Query Pattern, if fallback to the basic </span></span><span style="font-size:11pt;">IEnumerable&lt;T&gt;</span></p>
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">implementations is undesirable. </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">For example, consider a user-defined type T, which implements </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;">. T has an override for </span></span><span style="font-size:11pt;">Count</span><span style="font-size:11pt;"><span style="font-family:batang;">, but not for </span></span><span style="font-size:11pt;">Where</span></p>
<div class="DO" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;"><span style="font-family:batang;">. Consider then the following example: </span></span></div>
<p><span style="font-size:11pt;"><span style="font-family:batang;"> </span></span></p>
<p class="NL" style="margin:2pt 0 0 24pt;">
<div class="NL" style="margin:2pt 0 0 24pt;"><span style="font-size:8pt;font-family:courier;">var query=someT.Where(f2).Count(); </span></div>
<p><span style="font-size:8pt;font-family:courier;"> </span></p>
<p class="NL" style="margin:2pt 0 0 24pt;"><span style="font-family:batang;"> </span></p>
<p class="NL" style="text-indent:0;margin:2pt 0 0;"><span style="font-size:11pt;"><span style="font-family:batang;">In this example, any opportunities for optimization are lost after the </span></span><span style="font-size:11pt;">Where </span><span style="font-size:11pt;"><span style="font-family:batang;">call. The </span></span><span style="font-size:11pt;">Count </span><span style="font-size:11pt;"><span style="font-family:batang;">version used is the one defined for </span></span><span style="font-size:11pt;">IEnumerable&lt;&gt;</span><span style="font-size:11pt;"><span style="font-family:batang;">.</span></span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> place query extensions methods in a “</span><span style="font-size:11pt;">Linq</span><span style="font-size:11pt;">” sub-namespace of the main namespace. For example, extension methods for </span><span style="font-size:11pt;">System.Data</span><span style="font-size:11pt;"> features reside in </span><span style="font-size:11pt;">System.Data.Linq</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">namespace. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;font-family:wingdings;"><span>þ</span></span></strong></span><span style="font-family:batang;"><span class="DO1"><strong><span style="font-size:11pt;color:#00b050;"> </span></strong></span><span class="DO1"><strong><span style="text-decoration:underline;"><span style="font-size:11pt;">Do</span></span></strong></span></span><span style="font-size:11pt;"> use </span><span style="font-size:11pt;">Expression&lt;Func&lt;&gt;&gt;</span><span style="font-size:11pt;"> as a parameter instead of </span><span style="font-size:11pt;">Func&lt;&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">when it is necessary to inspect the query. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">As it was discussed, interacting with an SQL database is already done through </span><span style="font-size:11pt;">IQueryable&lt;T&gt;</span><span style="font-size:11pt;"> rather than </span><span style="font-size:11pt;">IEnumerable&lt;T&gt;</span></p>
<div class="DOFirst" style="margin:12pt 0 6pt 12.25pt;"><span style="font-size:11pt;">, since this gives an opportunity to translate lambda expressions to SQL expressions. </span></div>
<p><span style="font-size:11pt;"> </span></p>
<p class="MsoNormal" style="margin:0 0 10pt;"><span style="font-size:11pt;line-height:115%;">An alternative reason for implementing </span><span style="font-size:11pt;line-height:115%;">IQueryable&lt;T&gt;</span><span style="font-size:11pt;line-height:115%;"> is performing optimizations. For example, a sorted list can implement lookup (“</span><span style="font-size:11pt;line-height:115%;">Where</span><span style="font-size:11pt;line-height:115%;">” clauses) with binary search, which can be much more efficient than the standard </span><span style="font-size:11pt;line-height:115%;">IEnumerable&lt;T&gt;</span><span style="font-size:11pt;line-height:115%;"> or </span><span style="font-size:11pt;line-height:115%;">IQueryable&lt;T&gt;</span><span style="font-size:11pt;line-height:115%;"> implementations.</span></p>
<p class="MsoNormal" style="margin:0 0 10pt;">
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:dbb41ede-8f5a-4b8f-8c8e-3de592784595" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">Technorati Tags: <a rel="tag" href="http://technorati.com/tags/Linq">Linq</a>,<a rel="tag" href="http://technorati.com/tags/Fluent+API">Fluent API</a>,<a rel="tag" href="http://technorati.com/tags/Frawork+Design">Frawork Design</a>,<a rel="tag" href="http://technorati.com/tags/Adaptable+Software">Adaptable Software</a>,<a rel="tag" href="http://technorati.com/tags/DSLs">DSLs</a>,<a rel="tag" href="http://technorati.com/tags/C%23+3.0">C# 3.0</a></div>
<div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:a166856f-521d-414d-9627-046f41895c0d" class="wlWriterSmartContent" style="display:inline;float:none;margin:0;padding:0;">del.icio.us Tags: <a rel="tag" href="http://del.icio.us/popular/Linq">Linq</a>,<a rel="tag" href="http://del.icio.us/popular/Fluent+API">Fluent API</a>,<a rel="tag" href="http://del.icio.us/popular/Frawork+Design">Frawork Design</a>,<a rel="tag" href="http://del.icio.us/popular/Adaptable+Software">Adaptable Software</a>,<a rel="tag" href="http://del.icio.us/popular/DSLs">DSLs</a>,<a rel="tag" href="http://del.icio.us/popular/C%23+3.0">C# 3.0</a></div>
<div class="wlWriterHeaderFooter" style="text-align:right;margin:0;padding:4px 0;"><a href="http://digg.com/submit?url=http%3a%2f%2fdcarr.wordpress.com%2f2008%2f07%2f27%2flinq-framework-design-guidelines-great-content-from-the-upcoming-book%2f&amp;title=Linq+Framework+Design+Guidelines+%3a+don%e2%80%99t+wait+for+the+book+update"><img style="border:0;" src="http://digg.com/img/badges/100x20-digg-button.png" border="0" alt="Digg This" width="100" height="20" /></a></div>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/dcarr.wordpress.com/557/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/dcarr.wordpress.com/557/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/dcarr.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/dcarr.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/dcarr.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/dcarr.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/dcarr.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/dcarr.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/dcarr.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/dcarr.wordpress.com/557/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/dcarr.wordpress.com/557/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/dcarr.wordpress.com/557/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=team.pushbomb.com&blog=2366446&post=557&subd=dcarr&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://team.pushbomb.com/2008/07/27/linq-framework-design-guidelines-great-content-from-the-upcoming-book/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7b572cbcda5a17fe984e7dd1ddc9c3d6?s=96&#38;d=&#38;r=PG" medium="image">
			<media:title type="html">pushbomb</media:title>
		</media:content>

		<media:content url="http://digg.com/img/badges/100x20-digg-button.png" medium="image">
			<media:title type="html">Digg This</media:title>
		</media:content>
	</item>
	</channel>
</rss>