<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Simon on Software</title>
	
	<link>http://si-w.co.uk/blog</link>
	<description>Occasional thoughts on .net development. In particular C#, UI Patterns, Agile practices and software development in general</description>
	<lastBuildDate>Wed, 21 Mar 2012 22:07:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/si_software" /><feedburner:info uri="si_software" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>SQL – find by text</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/m-D0K7x8HcU/</link>
		<comments>http://si-w.co.uk/blog/2012/03/21/sql-find-by-text/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 22:07:22 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=289</guid>
		<description><![CDATA[Many moons ago (at least 18 months ago), I had a stored procedure that let me search for text in DML in the databases. Yeah, so I could search for &#8220;Order&#8221; and it would find all mentions in SPs, functiosn &#8230; <a href="http://si-w.co.uk/blog/2012/03/21/sql-find-by-text/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Many moons ago (at least 18 months ago), I had a stored procedure that let me search for text in DML in the databases. Yeah, so I could search for &#8220;Order&#8221; and it would find all mentions in SPs, functiosn etc.</p>
<p>Here is my new version:</p>
<pre class="brush: sql; title: ; notranslate">
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 

SELECT
        SUBSTRING (qt.text,(qs.statement_start_offset/2) + 1,
        ((CASE WHEN qs.statement_end_offset = -1
        THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
        ELSE qs.statement_end_offset
        END - qs.statement_start_offset)/2) + 1) AS [Individual Query]
, qt.text AS [Parent Query]
, DB_NAME(qt.dbid) AS DatabaseName
, qp.query_plan
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp
WHERE SUBSTRING (qt.text,(qs.statement_start_offset/2) + 1,
        ((CASE WHEN qs.statement_end_offset = -1
        THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2
        ELSE qs.statement_end_offset
        END - qs.statement_start_offset)/2) + 1)
LIKE '@searchtext'
and DB_NAME(qt.dbid) = @database
</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F&amp;title=SQL+-+find+by+text" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F&amp;title=SQL+-+find+by+text" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F&amp;title=SQL+-+find+by+text" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F&amp;headline=SQL+-+find+by+text" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=SQL+-+find+by+text&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=SQL+-+find+by+text&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=SQL+-+find+by+text&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=SQL+-+find+by+text&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=SQL+-+find+by+text&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F&amp;title=SQL+-+find+by+text&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F21%2Fsql-find-by-text%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/m-D0K7x8HcU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2012/03/21/sql-find-by-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2012/03/21/sql-find-by-text/</feedburner:origLink></item>
		<item>
		<title>Dependency Injection with Unity: passing runtime parameters</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/eXaANYMMLRQ/</link>
		<comments>http://si-w.co.uk/blog/2012/03/19/dependency-injection-with-unity-passing-runtime-parameters/#comments</comments>
		<pubDate>Mon, 19 Mar 2012 20:54:35 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=270</guid>
		<description><![CDATA[Today, I had a problem of how to construct an object passing a specific date into the constructor. Normally, this is not an issue encountered frequently as only &#8220;services&#8221; are passed via constructor injection. This time however, I needed to &#8230; <a href="http://si-w.co.uk/blog/2012/03/19/dependency-injection-with-unity-passing-runtime-parameters/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today, I had a problem of how to construct an object passing a specific date into the constructor. Normally, this is not an issue encountered frequently as only &#8220;services&#8221; are passed via constructor injection. This time however, I needed to make sure a date was passed when the object was created, and this date needs to be evaluated each time.</p>
<p>I&#8217;m not a fan of the <a href="http://10rem.net/blog/2011/10/03/choices-i-hate-to-make-constructor-exceptions-vs-initialize-patterns">&#8220;initialise&#8221; pattern</a>, so that was out. Here is how I solved the problem using <a href="http://unity.codeplex.com/">Unity DI Container</a>.</p>
<p>First, I defined a dependency and an implementation:</p>
<pre class="brush: csharp; title: ; notranslate">
    public interface IService
    {
        void DoSomething();
    }

    public class Service : IService
    {
        private readonly DateTime date;

        public Service(DateTime date)
        {
            this.date = date;
        }        

        public void DoSomething()
        {
            Console.WriteLine(date);
        }
    }
</pre>
<p>Then, configure the container, and attempt to make some calls:</p>
<pre class="brush: csharp; title: ; notranslate">
IUnityContainer container = new UnityContainer();
container.RegisterType&lt;IService, Service&gt;(
  new InjectionConstructor(
    new InjectionParameter&lt;DateTime&gt;(DateTime.Now)
  ));

var dateService = container.Resolve&lt;IService&gt;();
// prints datetime container was configured
dateService.DoSomething(); 

Console.Read();
// still datetime container was configured
dateService.DoSomething();
</pre>
<p>Ok, so this is not doing what I wanted. The DateTime is being captured. This is not surprising, as the value is copied into the constructor.</p>
<p>If we resolve the item from the container again, we still get the same value:</p>
<pre class="brush: csharp; title: ; notranslate">
dateService = container.Resolve&lt;IService&gt;();
// still datetime container was configured with
dateService.DoSomething();
</pre>
<p>This was annoying, it seems we need some sort of factory or delegate that is resolved each time the object is constructed:</p>
<pre class="brush: csharp; title: ; notranslate">
    public interface IDateFetchingFactory
    {
        DateTime GetDate();
    }

    public class DateFetchingFactory : IDateFetchingFactory
    {
        public DateTime GetDate()
        {
            return DateTime.Now;
        }
    }

    public class Service2 : IService
    {
        private readonly IDateFetchingFactory dateFetchingFactory;        

        public Service2(IDateFetchingFactory dateFetchingFactory)
        {
            this.dateFetchingFactory = dateFetchingFactory;
        }

        public void DoSomething()
        {
            Console.WriteLine(dateFetchingFactory.GetDate());
        }
    }
</pre>
<p>Now we can register our new type:</p>
<pre class="brush: csharp; title: ; notranslate">
container.RegisterType&lt;IService, Service2&gt;(&quot;Service2&quot;);
container.RegisterType&lt;IDateFetchingFactory, DateFetchingFactory&gt;();
</pre>
<p>and each time we make a call, we get the behaviour we wanted:</p>
<pre class="brush: csharp; title: ; notranslate">
dateService.DoSomething(); // datetime when method call was made via factory
Console.Read();

dateService.DoSomething(); // a different datetime from factory
</pre>
<p>There must be other ways of achieving this, is there a better way?</p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F&amp;title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F&amp;title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F&amp;title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F&amp;headline=Dependency+Injection+with+Unity%3A+passing+runtime+parameters" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F&amp;title=Dependency+Injection+with+Unity%3A+passing+runtime+parameters&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F19%2Fdependency-injection-with-unity-passing-runtime-parameters%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/eXaANYMMLRQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2012/03/19/dependency-injection-with-unity-passing-runtime-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2012/03/19/dependency-injection-with-unity-passing-runtime-parameters/</feedburner:origLink></item>
		<item>
		<title>Flexible layout with WPF GridSplitter</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/HZTfMoh-L8Q/</link>
		<comments>http://si-w.co.uk/blog/2012/03/06/flexible-layout-with-wpf-gridsplitter/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 21:08:23 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=257</guid>
		<description><![CDATA[Here is a quick sample showing how it is possible to create a flexible resizeable layout in WPF with a GridSplitter. Here we see how you can change the size of panes in a vertical and horizontal direction. And the &#8230; <a href="http://si-w.co.uk/blog/2012/03/06/flexible-layout-with-wpf-gridsplitter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Here is a quick sample showing how it is possible to create a flexible resizeable layout in WPF with a GridSplitter. Here we see how you can change the size of panes in a vertical and horizontal direction.<br />
<a href="http://si-w.co.uk/blog/wp-content/uploads/2012/03/grid_splitter.png"><img src="http://si-w.co.uk/blog/wp-content/uploads/2012/03/grid_splitter.png" alt="" title="grid_splitter" width="478" height="330" class="alignnone size-full wp-image-263" /></a></p>
<p>And the Xaml:</p>
<pre class="brush: xml; light: true; title: ; notranslate">
&lt;Page xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot; xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;&gt;
   &lt;Grid&gt;
      &lt;Grid.RowDefinitions&gt;
         &lt;RowDefinition Height=&quot;*&quot;/&gt;
         &lt;RowDefinition Height=&quot;Auto&quot;/&gt;
         &lt;RowDefinition Height=&quot;*&quot;/&gt;
      &lt;/Grid.RowDefinitions&gt;
      &lt;Grid Grid.Row=&quot;0&quot;&gt;
         &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
            &lt;ColumnDefinition/&gt;
         &lt;/Grid.ColumnDefinitions&gt;
         &lt;Label Grid.Column=&quot;0&quot;&gt;Row 0, Column 0&lt;/Label&gt;
         &lt;GridSplitter
            Width=&quot;5&quot;
            Grid.Column=&quot;0&quot;
            Background=&quot;Blue&quot;
            ShowsPreview=&quot;True&quot;/&gt;
         &lt;Label Grid.Column=&quot;2&quot;&gt;Row 0 Column 2&lt;/Label&gt;
      &lt;/Grid&gt;
      &lt;GridSplitter
         Height=&quot;5&quot;
         Grid.ColumnSpan=&quot;3&quot;
         Grid.Row=&quot;1&quot;
         HorizontalAlignment=&quot;Stretch&quot;
         VerticalAlignment=&quot;Stretch&quot;
         Background=&quot;Black&quot;
         ResizeDirection=&quot;Rows&quot;
         ShowsPreview=&quot;true&quot;/&gt;
      &lt;Grid Grid.Row=&quot;2&quot;&gt;
         &lt;Grid.ColumnDefinitions&gt;
            &lt;ColumnDefinition Width=&quot;Auto&quot;/&gt;
            &lt;ColumnDefinition/&gt;
         &lt;/Grid.ColumnDefinitions&gt;
         &lt;Label Grid.Column=&quot;0&quot;&gt;Row 2, Column 0&lt;/Label&gt;
         &lt;GridSplitter
            Width=&quot;5&quot;
            Grid.Column=&quot;0&quot;
            Background=&quot;Blue&quot;
            ShowsPreview=&quot;True&quot;/&gt;
         &lt;Label Grid.Column=&quot;2&quot;&gt;Row 2 Column 2&lt;/Label&gt;
      &lt;/Grid&gt;
   &lt;/Grid&gt;
&lt;/Page&gt;
</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F&amp;title=Flexible+layout+with+WPF+GridSplitter" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F&amp;title=Flexible+layout+with+WPF+GridSplitter" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F&amp;title=Flexible+layout+with+WPF+GridSplitter" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F&amp;headline=Flexible+layout+with+WPF+GridSplitter" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Flexible+layout+with+WPF+GridSplitter&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Flexible+layout+with+WPF+GridSplitter&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Flexible+layout+with+WPF+GridSplitter&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Flexible+layout+with+WPF+GridSplitter&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Flexible+layout+with+WPF+GridSplitter&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F&amp;title=Flexible+layout+with+WPF+GridSplitter&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F03%2F06%2Fflexible-layout-with-wpf-gridsplitter%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/HZTfMoh-L8Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2012/03/06/flexible-layout-with-wpf-gridsplitter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2012/03/06/flexible-layout-with-wpf-gridsplitter/</feedburner:origLink></item>
		<item>
		<title>NUnit Constraints</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/SjPaGg83MwY/</link>
		<comments>http://si-w.co.uk/blog/2012/01/15/nunit-constraints/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 22:37:40 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=249</guid>
		<description><![CDATA[For some reason, I have ignored the NUnit syntax around Assert.That up to now. I thought it was one of these experiments around a fluent interface which didn&#8217;t offer any advantages over the existing API. I wanted to write a &#8230; <a href="http://si-w.co.uk/blog/2012/01/15/nunit-constraints/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>For some reason, I have ignored the NUnit syntax around Assert.That up to now. I thought it was one of these experiments around a fluent interface which didn&#8217;t offer any advantages over the existing API.</p>
<p>I wanted to write a test that tested whether a value was as expected, but within a certain range. I had previously used Assert.Equals with the overload that takes a delta.</p>
<p>Here is an alternative implementation:<br />
<code><br />
[Test]<br />
public void MinValue_IsCloseToMinimum_OfAllBids()<br />
{<br />
var lowPrice = new Price(10, 20);<br />
var otherPrice = new Price(11, 20);</code></p>
<p><code>var priceViewModel =<br />
new PriceViewModel(new List {lowPriceTolerance, otherPriceTolerance});</code></p>
<p><code>//old api<br />
Assert.AreEqual(10, Convert.ToDouble(priceViewModel.MinValue), 0.2);<br />
</code><br />
<code>// new api<br />
Assert.That(priceViewModel.MinValue, Is.EqualTo(10).Within(0.2));<br />
}</code></p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F&amp;title=NUnit+Constraints" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F&amp;title=NUnit+Constraints" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F&amp;title=NUnit+Constraints" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F&amp;headline=NUnit+Constraints" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=NUnit+Constraints&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=NUnit+Constraints&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=NUnit+Constraints&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=NUnit+Constraints&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=NUnit+Constraints&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F&amp;title=NUnit+Constraints&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2012%2F01%2F15%2Fnunit-constraints%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/SjPaGg83MwY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2012/01/15/nunit-constraints/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2012/01/15/nunit-constraints/</feedburner:origLink></item>
		<item>
		<title>Javascript Learning Resources</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/NsmRoAAOlJU/</link>
		<comments>http://si-w.co.uk/blog/2011/11/21/javascript-learning-resources/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 14:59:29 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=242</guid>
		<description><![CDATA[I am making a concerted effort to really *learn* javascript at the moment. There are a load of great resources out there. Here is the beginnings of a list: Douglas Crockford&#8217;s Home Page JavaScript Garden &#8211; advanced topics Learn JavaScript &#8230; <a href="http://si-w.co.uk/blog/2011/11/21/javascript-learning-resources/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am making a concerted effort to really *learn* javascript at the moment.<br />
There are a load of great resources out there.</p>
<p>Here is the beginnings of a list:</p>
<p><a href="http://javascript.crockford.com" target="_blank">Douglas Crockford&#8217;s Home Page</a><br />
<a href="http://bonsaiden.github.com/JavaScript-Garden" target="_blank">JavaScript Garden &#8211; advanced topics</a><br />
<a href="https://github.com/liammclennan/JavaScript-Koans" target="_blank">Learn JavaScript by making tests pass</a><br />
<a href="https://developer.mozilla.org/en/JavaScript/Guide" target="_blank">Mozilla JavaScript reference</a><br />
<a href="http://jqfundamentals.com/" target="_blank">JQuery Guide</a><br />
<a href="http://jsfiddle.net/" target="_blank">Run JavaScript in your browser with jsfiddle</a><br />
<a href="http://c9.io/" target="_blank">Another online IDE</a></p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F&amp;title=Javascript+Learning+Resources" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F&amp;title=Javascript+Learning+Resources" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F&amp;title=Javascript+Learning+Resources" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F&amp;headline=Javascript+Learning+Resources" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Javascript+Learning+Resources&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Javascript+Learning+Resources&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Javascript+Learning+Resources&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Javascript+Learning+Resources&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Javascript+Learning+Resources&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F&amp;title=Javascript+Learning+Resources&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F11%2F21%2Fjavascript-learning-resources%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/NsmRoAAOlJU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/11/21/javascript-learning-resources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/11/21/javascript-learning-resources/</feedburner:origLink></item>
		<item>
		<title>Contrawhatywho – nicer generics in C# 4.0</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/uqtBpePuP58/</link>
		<comments>http://si-w.co.uk/blog/2011/10/14/contrawhatywho-nicer-generics-in-c-4-0/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 08:25:51 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=238</guid>
		<description><![CDATA[Everyone probably knows this already, but it&#8217;s probably easy to miss as *stuff now just works*. Contravariance, or covariance is now improved to make working with generics that little bit simpler. The following code now compiles fine in .net 4, &#8230; <a href="http://si-w.co.uk/blog/2011/10/14/contrawhatywho-nicer-generics-in-c-4-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Everyone probably knows this already, but it&#8217;s probably easy to miss as *stuff now just works*. Contravariance, or covariance is now improved to make working with generics that little bit simpler.</p>
<p>The following code now compiles fine in .net 4, but won&#8217;t compile against .net 3.5:</p>
<p><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;">class Program</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"><br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;">{<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> static void Main(string[] args)<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> {<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> Animal a = new Animal();<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> Bear b = new Bear();<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> IList&lt;Bear&gt; bears = new List&lt;Bear&gt;();<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> bears.Add(b);<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> IEnumerable&lt;IAnimal&gt; animals = bears;<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> }</span></p>
<p><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> class Animal : IAnimal<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> {<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> public override string ToString()<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> {<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> return &#8220;I am an animal&#8221;;<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> }<br />
</span><span class="Apple-style-span" style="color: #222222; font-family: 'Courier 10 Pitch', Courier, monospace; font-size: 15px; line-height: 21px; white-space: pre; background-color: #f7f7f7;"> } </span></p>
<pre>   class Bear : IAnimal
   {
       public override string ToString()
       {
           return "I am a bear";
       }
    } 

    internal interface IAnimal
    {
    }
}</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F&amp;title=Contrawhatywho+-+nicer+generics+in+C%23+4.0" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F&amp;title=Contrawhatywho+-+nicer+generics+in+C%23+4.0" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F&amp;title=Contrawhatywho+-+nicer+generics+in+C%23+4.0" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F&amp;headline=Contrawhatywho+-+nicer+generics+in+C%23+4.0" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F&amp;title=Contrawhatywho+-+nicer+generics+in+C%23+4.0&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F10%2F14%2Fcontrawhatywho-nicer-generics-in-c-4-0%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/uqtBpePuP58" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/10/14/contrawhatywho-nicer-generics-in-c-4-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/10/14/contrawhatywho-nicer-generics-in-c-4-0/</feedburner:origLink></item>
		<item>
		<title>Console2 and Cygwin – how to setup</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/9gSSuIB3vMw/</link>
		<comments>http://si-w.co.uk/blog/2011/06/10/console2-and-cygwin-how-to-setup/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 18:04:09 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=233</guid>
		<description><![CDATA[So, I&#8217;ve set up my console how Scott Hanselman recommended. This is how I managed to get Cygwin to work correctly as a shell. You just need to set your shell to: %cygwin-path%\bin\bash.exe --login -i]]></description>
			<content:encoded><![CDATA[<p><a href="http://si-w.co.uk/blog/wp-content/uploads/2011/06/cygwin.png"><img class="size-medium wp-image-234 alignleft" title="cygwin" src="http://si-w.co.uk/blog/wp-content/uploads/2011/06/cygwin-290x300.png" alt="" width="290" height="300" /></a>So, I&#8217;ve set up my console how <a href="http://www.hanselman.com/blog/Console2ABetterWindowsCommandPrompt.aspx" target="_blank">Scott Hanselman</a> recommended.</p>
<p>This is how I managed to get Cygwin to work correctly as a shell.</p>
<p>You just need to set your shell to:</p>
<pre>%cygwin-path%\bin\bash.exe --login -i</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F&amp;title=Console2+and+Cygwin+-+how+to+setup" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F&amp;title=Console2+and+Cygwin+-+how+to+setup" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F&amp;title=Console2+and+Cygwin+-+how+to+setup" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F&amp;headline=Console2+and+Cygwin+-+how+to+setup" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Console2+and+Cygwin+-+how+to+setup&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Console2+and+Cygwin+-+how+to+setup&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Console2+and+Cygwin+-+how+to+setup&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Console2+and+Cygwin+-+how+to+setup&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Console2+and+Cygwin+-+how+to+setup&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F&amp;title=Console2+and+Cygwin+-+how+to+setup&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F10%2Fconsole2-and-cygwin-how-to-setup%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/9gSSuIB3vMw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/06/10/console2-and-cygwin-how-to-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/06/10/console2-and-cygwin-how-to-setup/</feedburner:origLink></item>
		<item>
		<title>XCopy your dependencies in a pre-build step</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/1mQ9GEGbGrk/</link>
		<comments>http://si-w.co.uk/blog/2011/06/08/xcopy-your-dependencies-in-a-pre-build-step/#comments</comments>
		<pubDate>Wed, 08 Jun 2011 18:00:58 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=230</guid>
		<description><![CDATA[Ok, again &#8211; this isn&#8217;t really ground breaking or anything, but if you have a load of dependencies that you need to copy at build time to your bin folder, this is a nice script that goes into the pre-build &#8230; <a href="http://si-w.co.uk/blog/2011/06/08/xcopy-your-dependencies-in-a-pre-build-step/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Ok, again &#8211; this isn&#8217;t really ground breaking or anything, but if you have a load of dependencies that you need to copy at build time to your bin folder, this is a nice script that goes into the pre-build events section of visual studio.</p>
<pre>xcopy ..\..\..\lib\whateverframework\*.* . /E /D</pre>
<p>The really neat part, is the /D switch  - this only copies files that have changed since they were last modified.</p>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F&amp;title=XCopy+your+dependencies+in+a+pre-build+step" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F&amp;title=XCopy+your+dependencies+in+a+pre-build+step" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F&amp;title=XCopy+your+dependencies+in+a+pre-build+step" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F&amp;headline=XCopy+your+dependencies+in+a+pre-build+step" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=XCopy+your+dependencies+in+a+pre-build+step&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=XCopy+your+dependencies+in+a+pre-build+step&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=XCopy+your+dependencies+in+a+pre-build+step&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=XCopy+your+dependencies+in+a+pre-build+step&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=XCopy+your+dependencies+in+a+pre-build+step&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F&amp;title=XCopy+your+dependencies+in+a+pre-build+step&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F06%2F08%2Fxcopy-your-dependencies-in-a-pre-build-step%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/1mQ9GEGbGrk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/06/08/xcopy-your-dependencies-in-a-pre-build-step/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/06/08/xcopy-your-dependencies-in-a-pre-build-step/</feedburner:origLink></item>
		<item>
		<title>Distinct in Linq</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/H53OK2YBKzU/</link>
		<comments>http://si-w.co.uk/blog/2011/05/28/distinct-in-linq/#comments</comments>
		<pubDate>Sat, 28 May 2011 09:38:57 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=226</guid>
		<description><![CDATA[Sometimes, in .net it can get a bit confusing about which interface you need to implement for to get object equality to work correctly. When using the Distinct extension method in Linq, IEqualityComparer&#60;T&#62; is very useful var items = new &#8230; <a href="http://si-w.co.uk/blog/2011/05/28/distinct-in-linq/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Sometimes, in .net it can get a bit confusing about which interface you need to implement for to get object equality to work correctly. When using the Distinct extension method in Linq, IEqualityComparer&lt;T&gt; is very useful</p>
<pre>var items = new List&lt;Cheese&gt;();
items.Add(new Cheese { Name = "Cheddar" });
items.Add(new Cheese { Name = "Cheddar" });
items.Add(new Cheese { Name = "Red Leicester" });
items.Add(new Cheese { Name = "Stilton" });
var distinct = items.Distinct();	

foreach (var item in distinct) {
    Console.WriteLine (item.Name);
}

//outputs
// Cheddar
// Cheddar
// Red Leicester
// Stilton</pre>
<p>The key part is implementing GetHashCode so that the two objects will return the <strong>same hash code</strong>.</p>
<p>An example implementation:</p>
<pre>class CheeseNameComparer : IEqualityComparer&lt;Cheese&gt; {	

 public bool Equals (Cheese x, Cheese y)	{
  return x.Name == y.Name;
 }

 public int GetHashCode (Cheese obj) {
  return obj.Name.GetHashCode();
 }
}

distinct = items.Distinct(new CheeseNameComparer());
foreach (var item in distinct) {
  Console.WriteLine (item.Name);
} 
//outputs
// Cheddar
// Red Leicester
// Stilton</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F&amp;title=Distinct+in+Linq" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F&amp;title=Distinct+in+Linq" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F&amp;title=Distinct+in+Linq" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F&amp;headline=Distinct+in+Linq" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Distinct+in+Linq&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Distinct+in+Linq&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Distinct+in+Linq&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Distinct+in+Linq&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Distinct+in+Linq&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F&amp;title=Distinct+in+Linq&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2Fdistinct-in-linq%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/H53OK2YBKzU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/05/28/distinct-in-linq/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/05/28/distinct-in-linq/</feedburner:origLink></item>
		<item>
		<title>Finding Stuff</title>
		<link>http://feedproxy.google.com/~r/si_software/~3/d9L5leiq-LM/</link>
		<comments>http://si-w.co.uk/blog/2011/05/28/219/#comments</comments>
		<pubDate>Sat, 28 May 2011 09:00:42 +0000</pubDate>
		<dc:creator>simon</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://si-w.co.uk/blog/?p=219</guid>
		<description><![CDATA[A little bit of unix command knowledge can often save a stack of time even on a windows box. This little snippet was really useful when I was trying to find out which file a function was declared in: find &#8230; <a href="http://si-w.co.uk/blog/2011/05/28/219/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A little bit of unix command knowledge can often save a stack of time even on a windows box. This little snippet was really useful when I was trying to find out which file a function was declared in:</p>
<pre>find . -name "*.h" | xargs grep textToSearchFor</pre>
<div class="lightsocial_container"><a class="lightsocial_a" href="http://digg.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F&amp;title=Finding+Stuff" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/digg.png" alt="Digg This" title="Digg This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.reddit.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F&amp;title=Finding+Stuff" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/reddit.png" alt="Reddit This" title="Reddit This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.stumbleupon.com/submit?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F&amp;title=Finding+Stuff" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/stumbleupon.png" alt="Stumble Now!" title="Stumble Now!" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://buzz.yahoo.com/buzz?targetUrl=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F&amp;headline=Finding+Stuff" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/yahoo_buzz.png" alt="Buzz This" title="Buzz This" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dzone.com/links/add.html?title=Finding+Stuff&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dzone.png" alt="Vote on DZone" title="Vote on DZone" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.facebook.com/sharer.php?t=Finding+Stuff&amp;u=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/facebook.png" alt="Share on Facebook" title="Share on Facebook" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://delicious.com/save?title=Finding+Stuff&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/delicious.png" alt="Bookmark this on Delicious" title="Bookmark this on Delicious" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.dotnetkicks.com/kick/?title=Finding+Stuff&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetkicks.png" alt="Kick It on DotNetKicks.com" title="Kick It on DotNetKicks.com" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://dotnetshoutout.com/Submit?title=Finding+Stuff&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/dotnetshoutout.png" alt="Shout it" title="Shout it" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F&amp;title=Finding+Stuff&amp;summary=&amp;source=" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/linkedin.png" alt="Share on LinkedIn" title="Share on LinkedIn" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.technorati.com/faves?add=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/technorati.png" alt="Bookmark this on Technorati" title="Bookmark this on Technorati" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://twitter.com/home?status=Reading+http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/twitter.png" alt="Post on Twitter" title="Post on Twitter" /></a>&nbsp;&nbsp;<a class="lightsocial_a" href="http://www.google.com/buzz/post?url=http%3A%2F%2Fsi-w.co.uk%2Fblog%2F2011%2F05%2F28%2F219%2F" ><img class="lightsocial_img" src="http://si-w.co.uk/blog/wp-content/plugins/light-social/google_buzz.png" alt="Google Buzz (aka. Google Reader)" title="Google Buzz (aka. Google Reader)" /></a>&nbsp;&nbsp;</div><img src="http://feeds.feedburner.com/~r/si_software/~4/d9L5leiq-LM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://si-w.co.uk/blog/2011/05/28/219/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://si-w.co.uk/blog/2011/05/28/219/</feedburner:origLink></item>
	</channel>
</rss>
