<?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>Relentless Development</title>
	<atom:link href="http://relentlessdevelopment.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://relentlessdevelopment.wordpress.com</link>
	<description>Keeping up with software developments using .Net</description>
	<lastBuildDate>Tue, 24 Jan 2012 21:16:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='relentlessdevelopment.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/11af6970b5863bed853419955d7bf036?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Relentless Development</title>
		<link>http://relentlessdevelopment.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://relentlessdevelopment.wordpress.com/osd.xml" title="Relentless Development" />
	<atom:link rel='hub' href='http://relentlessdevelopment.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Golden NuGet!</title>
		<link>http://relentlessdevelopment.wordpress.com/2011/03/29/golden-nuget/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2011/03/29/golden-nuget/#comments</comments>
		<pubDate>Tue, 29 Mar 2011 16:36:07 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=464</guid>
		<description><![CDATA[For anyone using VS2010, one tool you need to try out is NuGet (actually pronounced new-get according to Microsoft, but what do they know?!). What is it? NuGet is Microsoft&#8217;s answer to the much-lamented gap in the .Net space for a package management tool like Ruby&#8217;s Gems or Linux&#8217;s RPM. NuGet simply looks after the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=464&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For anyone using VS2010, one tool you need to try out is NuGet (actually pronounced new-get according to Microsoft, but what do they know?!).</p>
<p><strong>What is it?</strong></p>
<p>NuGet is Microsoft&#8217;s answer to the much-lamented gap in the .Net space for a package management tool like Ruby&#8217;s Gems or Linux&#8217;s RPM.</p>
<p>NuGet simply looks after the download and installation of tools and libraries you use in your projects.  It will get the appropriate version of all needed DLLs, configuration files, and related tools, put them in a folder, and do any configuration if needed.  Simple!  Also useful is the fact that it will download any dependencies &#8211; so for example if we want to install <a title="Relentless Development: Shouldly" href="http://relentlessdevelopment.wordpress.com/2010/10/19/shouldly-nice-up-those-assertions/">Shouldly</a>, which uses Rhino Mocks, NuGet will get the appropriate version of that as well.</p>
<p>And that&#8217;s about it.  So it won&#8217;t change your world, but it will save you a good few hours each year hunting for, downloading, and installing tools.</p>
<p><strong>History</strong></p>
<p>NuGet<a title="Haacked - NuPack rename" href="http://haacked.com/archive/2010/10/29/nupack-is-now-nuget.aspx?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+haacked+%28you%27ve+been+HAACKED%29"> started out as NuPack</a>, which <a title="Devlicious - Evolution of Package Management" href="http://devlicio.us/blogs/rob_reynolds/archive/2010/10/06/the-evolution-of-package-management-for-net.aspx">kind of took over from</a> the Nu open source project.  Indeed, <a title="Codeplex: NuGet" href="http://nuget.codeplex.com/">NuGet</a> is itself open source, continuing Microsoft&#8217;s trend of a more transparent and community-involving future, which is nice.</p>
<p>There are other package managers for .Net, including:</p>
<ul>
<li><a title="GitHub: OpenWrap" href="https://github.com/openrasta/openwrap">OpenWrap</a></li>
<li><a title="GitHub: HornGet" href="https://github.com/dagda1/horn_src">Horn</a></li>
<li><a title="Bricks project" href="http://bricksproject.org/">Bricks</a></li>
<li><a title="Google Code: NGems" href="http://code.google.com/p/ngems/">NGems</a></li>
</ul>
<p>However, as usual, things don&#8217;t tend to take off in the .Net community until Microsoft makes their version, which then becomes king. I haven&#8217;t tried any of those package managers, but I wouldn&#8217;t want to bet on them being too successful now NuGet&#8217;s out.</p>
<p>Anyway, enough of the history lesson, how do I use this thing?!</p>
<p><strong>Installation</strong></p>
<p>Firstly, you need to get it installed, which is simple as it&#8217;s in the Visual Studio Extension Manager (Tools -&gt; Extension Manager).  Search the Online Gallery for &#8216;NuGet&#8217; and you should find it:</p>
<div id="attachment_466" class="wp-caption aligncenter" style="width: 600px"><a href="http://relentlessdevelopment.files.wordpress.com/2011/03/extensionmanager.jpg"><img class="size-full wp-image-466" title="Extension Manager" src="http://relentlessdevelopment.files.wordpress.com/2011/03/extensionmanager.jpg?w=600" alt="VS2010 Extension Manager Screenshot"   /></a><p class="wp-caption-text">VS2010 Extension Manager</p></div>
<p>A couple of clicks later and you&#8217;re ready to go!</p>
<p><strong>Putting it to Use</strong></p>
<p>There are two interfaces.  You can either right-click on a project and select &#8216;Add Library Reference&#8217;, and find what you need with a handy visual interface (the same as the Extension Manager):</p>
<div id="attachment_467" class="wp-caption aligncenter" style="width: 600px"><a href="http://relentlessdevelopment.files.wordpress.com/2011/03/nuget-visual-interface.jpg"><img class="size-full wp-image-467" title="NuGet Visual Interface" src="http://relentlessdevelopment.files.wordpress.com/2011/03/nuget-visual-interface.jpg?w=600" alt="NuGet Visual Interface screenshot"   /></a><p class="wp-caption-text">NuGet Visual Interface</p></div>
<p>Or, by selecting Tools -&gt; Library Package Manager -&gt; Package Manager Console,  you can use the Powershell-based console version, like a real developer!</p>
<div id="attachment_469" class="wp-caption aligncenter" style="width: 600px"><a href="http://relentlessdevelopment.files.wordpress.com/2011/03/console.jpg"><img class="size-full wp-image-469" title="Console" src="http://relentlessdevelopment.files.wordpress.com/2011/03/console.jpg?w=600" alt="NuGet console screenshot"   /></a><p class="wp-caption-text">NuGet Console</p></div>
<p>(Check out some <a title="CodePlex: NuGet Console Commands" href="http://nuget.codeplex.com/wikipage?title=Package%20Manager%20Console%20Command%20Reference">NuGet Console Commands</a>, if that&#8217;s how you want to roll.)</p>
<p>Either way, you&#8217;ll end up with a new &#8216;packages&#8217; folder in your solution, containing the bits you need (as well as having references automatically added to your project, and configuration set):</p>
<div id="attachment_471" class="wp-caption aligncenter" style="width: 441px"><a href="http://relentlessdevelopment.files.wordpress.com/2011/03/packages-folder1.jpg"><img class="size-full wp-image-471" title="Packages Folder" src="http://relentlessdevelopment.files.wordpress.com/2011/03/packages-folder1.jpg?w=600" alt="Packages Folder screenshot"   /></a><p class="wp-caption-text">Packages Folder</p></div>
<p>Et voilá!  You&#8217;re ready to log/unit test/mock/whatever to your heart&#8217;s content.</p>
<p>You can also delete packages, update packages, and so on &#8211; it&#8217;s all pretty straightforward, so I&#8217;ll leave you to work that out.</p>
<p>So what are you waiting for?  Go and nu-get it now!!  (sorry..)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/464/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/464/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/464/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=464&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2011/03/29/golden-nuget/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2011/03/extensionmanager.jpg" medium="image">
			<media:title type="html">Extension Manager</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2011/03/nuget-visual-interface.jpg" medium="image">
			<media:title type="html">NuGet Visual Interface</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2011/03/console.jpg" medium="image">
			<media:title type="html">Console</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2011/03/packages-folder1.jpg" medium="image">
			<media:title type="html">Packages Folder</media:title>
		</media:content>
	</item>
		<item>
		<title>Books Page</title>
		<link>http://relentlessdevelopment.wordpress.com/2011/01/28/books-page/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2011/01/28/books-page/#comments</comments>
		<pubDate>Fri, 28 Jan 2011 11:34:50 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=457</guid>
		<description><![CDATA[I just put up a page with a load of book reviews.  It&#8217;s not finished yet but there are a fair few on there.  Check it out if you&#8217;re looking for a good read!<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=457&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I just put up a <a title="Relentless development: Books" href="http://relentlessdevelopment.wordpress.com/books/">page with a load of book reviews</a>.  It&#8217;s not finished yet but there are a fair few on there.  Check it out if you&#8217;re looking for a good read!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/457/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/457/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/457/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=457&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2011/01/28/books-page/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>
	</item>
		<item>
		<title>Nice up those Assertions with Shouldly!</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/10/19/shouldly-nice-up-those-assertions/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/10/19/shouldly-nice-up-those-assertions/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 16:38:30 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Unit Testing]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[TDD]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=416</guid>
		<description><![CDATA[One thing I noticed while having a play with Ruby was that the syntax for their testing tools is quite a lot more natural-language like and easier to read &#8211; here&#8217;s an example from an RSpec tutorial: describe User do it "should be in any roles assigned to it" do user = User.new user.assign_role("assigned role") [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=416&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One thing I noticed while having a play with <a title="Ruby-Lang" href="http://www.ruby-lang.org/en/">Ruby</a> was that the syntax for their testing tools is quite a lot more natural-language like and easier to read &#8211; here&#8217;s an example from an <a title="David Chelimsky RSpec Tutorial" href="http://blog.davidchelimsky.net/2007/05/14/an-introduction-to-rspec-part-i/">RSpec tutorial</a>:</p>
<pre><code>describe User do
  it "should be in any roles assigned to it" do
    user = User.new
    user.assign_role("assigned role")
    <span style="color:#0000ff;"><strong>user.should be_in_role("assigned role")</strong></span>
  end</code>
<code>it "should NOT be in any roles not assigned to it" do
    <span style="color:#0000ff;"><strong>user.should_not be_in_role("unassigned role")</strong></span>
  end
end</code></pre>
<p>Aside from the test name being a string, you can see the actual assertions in the format &#8216;variable.should be_some_value&#8217;, which is kind of more readable than it might be in C#:</p>
<blockquote><p>Assert.Contains(user, unassignedRoles);</p></blockquote>
<p>or</p>
<blockquote><p>Assert.That(unassignedRoles.Contains(user));</p></blockquote>
<p>Admittedly, the second example is nicer to read &#8211; the trouble with that is that you&#8217;re checking a true/false result, so the feedback you get from NUnit isn&#8217;t great:</p>
<blockquote><p>Test &#8216;Access_Tests.TestAddUser&#8217; failed:  Expected: True  But was:  False</p></blockquote>
<p>Fortunately, there are a few tools coming out for .net now which address this situation in a bit more of a ruby-like way.  The one I&#8217;ve been using recently is <a title="SnappyCo.de's Shouldly page" href="http://snappyco.de/articles/2010-02-02-shouldly">Shouldly</a>, an open source project on <a title="Shouldly on GitHub" href="http://github.com/shouldly/shouldly">GitHub</a>.</p>
<p>Using Shouldly (which is basically just a wrapper around <a title="NUnit website" href="http://www.nunit.org/">NUnit </a>and <a title="Ayende's Rhino Mocks page" href="http://www.ayende.com/projects/rhino-mocks.aspx">Rhino Mocks</a>), you can go wild with should-style assertions:</p>
<blockquote><p>age.ShouldBe(3);</p>
<p>family.ShouldContain(&#8220;mum&#8221;);</p>
<p>greetingMessage.ShouldStartWith(&#8220;Sup y&#8217;all&#8221;);</p></blockquote>
<p>And so on.  Not bad, not bad, not sure if it&#8217;s worth learning another API for though.  However, the real beauty of Shouldly is what you get when an assertion fails.  Instead of an NUnit-style</p>
<blockquote><p>Expected: 3</p>
<p>But was:  2</p></blockquote>
<p>- which gives you a clue, but isn&#8217;t terribly helpful &#8211; you get:</p>
<blockquote><p><span style="color:#0000ff;">age</span></p>
<p>should be    3</p>
<p>but was    2</p></blockquote>
<p>See that small but important difference?  The variable name is there in the failure message, which makes working out what went wrong a fair bit easier &#8211; particularly when a test fails that you haven&#8217;t seen for a while.</p>
<p>Even more useful is what you get with checking calls in Rhino Mocks.  Instead of calling</p>
<blockquote><p>fileMover.AssertWasCalled(fm =&gt; fm.MoveFile(&#8220;test.txt&#8221;, &#8220;processed\\test.txt&#8221;));</p></blockquote>
<p>and getting a rather ugly and unhelpful</p>
<blockquote><p>Rhino.Mocks.Exceptions.ExpectationViolationException : IFileMover.MoveFile(&#8220;test.txt&#8221;, &#8220;processed\test.txt&#8221;); Expected #1, Actual #0.</p></blockquote>
<p>With Shouldly, you call</p>
<blockquote><p>fileMover.ShouldHaveBeenCalled(fm =&gt; fm.MoveFile(&#8220;test.txt&#8221;, &#8220;processed\\test.txt&#8221;));</p></blockquote>
<p>and end up with</p>
<blockquote><p>*Expecting*</p>
<p>MoveFile(&#8220;test.txt&#8221;, &#8220;processed\test.txt&#8221;)</p>
<p><span style="color:#0000ff;">*Recorded*</span></p>
<p><span style="color:#0000ff;">0: MoveFile(&#8220;test1.txt&#8221;, &#8220;unprocessed\test1.txt&#8221;)</span></p>
<p><span style="color:#0000ff;">1: MoveFile(&#8220;test2.txt&#8221;, &#8220;unprocessed\test2.txt&#8221;)</span></p></blockquote>
<p>As you can see, it&#8217;s not only much more obvious what&#8217;s happening, but you actually get a list of all of the calls that were made on the mock object, including parameters!  That&#8217;s about half my unit test debugging gone right there.  Sweet!</p>
<p>Shouldly isn&#8217;t a 1.0 yet, and still has some missing functionality, but I&#8217;d already find it hard to work without it.  And it&#8217;s open source, so get yourself on GitHub, fork a branch, and see if you can make my life even easier!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/416/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/416/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/416/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=416&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/10/19/shouldly-nice-up-those-assertions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>
	</item>
		<item>
		<title>Programming Magazines &#8211; on Paper!</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/07/19/programming-magazines-on-paper/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/07/19/programming-magazines-on-paper/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 11:45:16 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Books]]></category>
		<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=377</guid>
		<description><![CDATA[Perhaps strangely for a developer, I much prefer reading from actual, physical books &#38; magazines than a computer screen.  This is a bit problematic these days, as what with the rise of the Internet, nobody seems to be printing programming magazines any more (in the UK at least). As such, I was most pleased to [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=377&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Perhaps strangely for a developer, I much prefer reading from actual, physical books &amp; magazines than a computer screen.  This is a bit problematic these days, as what with the rise of the Internet, nobody seems to be printing programming magazines any more (in the UK at least).</p>
<p>As such, I was most pleased to hear about <a href="http://magcloud.com/">MagCloud</a>, an online service which offers printed magazines in a FUBU (For Us By Us) style.  Basically, anyone can upload a magazine in PDF format, and for a charge of around $0.20 a page, MagCloud will print it out and send it to you.  This works out at around £5-6 for a magazine of 40 pages, which is a little expensive but not too bad.  (There&#8217;s a delivery charge of $2-3 too, so you&#8217;re better off getting a couple at a time).  While the authors can make money from this (by adding on an extra charge per page), none of the ones I was looking at did so.</p>
<p>The two I checked out are well written and informative:</p>
<div id="attachment_378" class="wp-caption aligncenter" style="width: 164px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/07/hackermonthly.jpg"><img class="size-full wp-image-378" title="Hacker Monthly" src="http://relentlessdevelopment.files.wordpress.com/2010/07/hackermonthly.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Hacker Monthly</p></div>
<p><a title="Hacker Monthly" href="http://magcloud.com/browse/Issue/95394">Hacker Monthly</a>, a general programming magazine, and</p>
<div id="attachment_379" class="wp-caption aligncenter" style="width: 164px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/07/railsmagazine.jpg"><img class="size-full wp-image-379" title="Rails Magazine" src="http://relentlessdevelopment.files.wordpress.com/2010/07/railsmagazine.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Rails Magazine</p></div>
<p><a title="Rails Magazine" href="http://magcloud.com/browse/Issue/94410">Rails Magazine</a>, about Ruby/Rails.  I couldn&#8217;t find any specific .Net ones when I looked, but it&#8217;s pretty new so I&#8217;m sure one will appear at some point.  So if anyone fancies starting a .Net mag, here&#8217;s your chance!</p>
<p>Now, many of these are available as PDFs for you to download as well, so you could quite easily print them off yourself and save a few quid.  Personally, I&#8217;m too lazy/disorganised for that, and I like to have a proper magazine and not a scruffy collection of stapled sheets, but that&#8217;s just me.</p>
<p>Check it out.  What have you got to lose?!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/377/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/377/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/377/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=377&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/07/19/programming-magazines-on-paper/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/07/hackermonthly.jpg" medium="image">
			<media:title type="html">Hacker Monthly</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/07/railsmagazine.jpg" medium="image">
			<media:title type="html">Rails Magazine</media:title>
		</media:content>
	</item>
		<item>
		<title>WPF MVVM Example App</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/06/08/wpf-mvvm-example-app/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/06/08/wpf-mvvm-example-app/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 09:13:54 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=360</guid>
		<description><![CDATA[I&#8217;ve been writing a simple app to try out Windows Presentation Foundation (WPF) using the Model-View-ViewModel (MVVM) pattern, so I thought I&#8217;d post it in case anyone found it useful &#8211; there don&#8217;t seem to be many end-to-end examples using MVVM around.  I&#8217;ve tried to stick to good practices, although there&#8217;s still a fair bit [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=360&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been writing a simple app to try out <a href="http://msdn.microsoft.com/en-us/library/ms754130.aspx">Windows Presentation Foundation (WPF)</a><a title="Microsoft WPF Page" href="http://msdn.microsoft.com/en-us/library/ms754130.aspx"> </a>using the <a title="Josh Smith MVVM Article on MSDN" href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx">Model-View-ViewModel (MVVM)</a> pattern, so I thought I&#8217;d post it in case anyone found it useful &#8211; there don&#8217;t seem to be many end-to-end examples using MVVM around.  I&#8217;ve tried to stick to good practices, although there&#8217;s still a fair bit of discussion in some areas about what the best way to do things is.</p>
<p>Before you read any further, if you&#8217;re looking for an example of a decent WPF UI, stop now!  I can assure you, you&#8217;ll only be disappointed..  I used a theme so it wasn&#8217;t grey, but that&#8217;s about it.  It&#8217;s all about the code!</p>
<p><strong>The Code</strong></p>
<p>The source code is here: <a href="http://code.google.com/p/wpf-diet-recorder/">http://code.google.com/p/wpf-diet-recorder/</a></p>
<p><a href="http://code.google.com/p/wpf-diet-recorder/"></a>If you have a SubVersion client such as <a href="http://tortoisesvn.tigris.org/">TortoiseSVN</a>, you can download the latest <a href="http://code.google.com/p/wpf-diet-recorder/source/checkout">Source</a>, otherwise you can go to <a href="http://code.google.com/p/wpf-diet-recorder/downloads/list">Downloads </a>and get a handy Zip file with it in.  You&#8217;ll need Visual Studio 2008 and above to use this (I haven&#8217;t tried it with 2010, but it should work Ok).</p>
<p>I&#8217;ve marked this example as version 1.0.0.0 &#8211; I may or may not continue doing anything with it afterwards.  (Although I&#8217;ll undoubtedly find an issue with it and have to put a version 1.0.0.1 out shortly..)</p>
<p><strong>The App</strong></p>
<p>The app lets you record your weight and some notes on the Measurements screen:</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/06/measurements.jpg"><img class="aligncenter size-full wp-image-368" title="measurements" src="http://relentlessdevelopment.files.wordpress.com/2010/06/measurements.jpg?w=600" alt="measurements screenshot"   /></a></p>
<p>This can be done for multiple users, which are set up on the Users screen:</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/06/users.jpg"><img class="aligncenter size-full wp-image-369" title="users" src="http://relentlessdevelopment.files.wordpress.com/2010/06/users.jpg?w=600" alt="users screenshot"   /></a></p>
<p>(You might notice the Users screen allows you to define custom measurements for the users &#8211; these aren&#8217;t used anywhere at the moment, as putting that in was making it too complex for this example).</p>
<p><strong>Features</strong></p>
<p>A couple of interesting things in there are:</p>
<ul>
<li>Automated Unit Testing (of course!)</li>
<li>Composite views (the &#8216;custom measurements&#8217; part of the Users screen is a separate user control with its own ViewModel)</li>
<li>No code-behind</li>
<li>Commands using <a title="RelentlessDevelopment - Delegate Command" href="http://relentlessdevelopment.wordpress.com/2010/03/30/simplified-mvvm-commanding-with-delegatecommand/">DelegateCommand</a></li>
<li>ValueConverters</li>
</ul>
<p><strong>Unit Testing</strong></p>
<p>Although there aren&#8217;t as many unit tests as I would like, there should be at least examples of the main things you&#8217;d want to test.  (My only excuse for the lack of tests is this was my first WPF app, and as such basically a prototype, so I was working it out as I went along).</p>
<p>I&#8217;ve used <a title="ISerializable - Naming standards for unit tests" href="http://weblogs.asp.net/rosherove/archive/2005/04/03/TestNamingStandards.aspx">Roy Osherove&#8217;s naming convention</a> for the unit tests (MethodName_StateUnderTest_ExpectedBehaviour), as I like it.  I&#8217;ve also stuck with the AAA pattern for the test layout (Arrange, Act, Assert), and when I&#8217;ve used Rhino Mocks for test isolation, that&#8217;s been in &#8216;AAA mode&#8217;.</p>
<p><strong>ValueConverters</strong></p>
<p>There is still <a title="Josh Smith Blog Article" href="http://joshsmithonwpf.wordpress.com/2008/12/01/the-philosophies-of-mvvm/">much discussion</a> in MVVM circles about whether ValueConverters should be used, or if the ViewModel in MVVM should render them unnecessary.  I&#8217;ve used ValueConverters as I don&#8217;t want to have too View-specific things (such as Visibilities and Colours) in my ViewModel, but some people (including <a title="Josh Smith's Blog" href="http://joshsmithonwpf.wordpress.com/">Josh Smith</a>, the father of MVVM) disagree.  To be honest, it doesn&#8217;t matter much (especially if you&#8217;re just starting out), but it&#8217;s good to be aware of your options.</p>
<p><strong>Validation</strong></p>
<p>Always tricky to know where to put the validation &#8211; in this case, I&#8217;ve gone for validating the data type in the ViewModel, and any more complex validation (string lengths, max and min value, etc) in the model itself.</p>
<p><strong>Libraries / Tools</strong></p>
<p>The things I&#8217;ve used to build this (aside from VS2008) are:</p>
<ul>
<li><a href="http://www.nunit.org/">NUnit</a> for unit testing</li>
<li><a href="http://www.ayende.com/projects/rhino-mocks.aspx">RhinoMocks</a> for isolation (mocking)</li>
<li><a href="http://www.db4o.com/">Versant DB4O</a> for the data store (it&#8217;s an Object Database, so don&#8217;t go looking for the SQL!)</li>
<li><a href="http://wpf.codeplex.com/">WPF Toolkit</a> for the theme</li>
<li><a href="http://blogsprajeesh.blogspot.com/2009/12/wpf-messagebox-custom-control.html">WPFMessageBox</a> for the message box</li>
</ul>
<p><strong>Further Development</strong></p>
<p>If I was to continue developing this example, there are a couple of things I&#8217;d probably want to do:</p>
<ul>
<li>Make some kind of Application Controller, which would contain the ugly startup code from App.xaml.cs and be in charge of opening forms</li>
<li>Use an <a title="Martin Fowler - Inversion of Control Containers" href="http://martinfowler.com/articles/injection.html">IoC container</a> such an <a href="http://ninject.org/">Ninject </a>to resolve those dependencies</li>
<li>Probably take the data loading/saving logic out of the ViewModels and find somewhere more appropriate for it</li>
</ul>
<p><strong>That&#8217;s It!</strong></p>
<p>Hopefully someone might find that useful.  If you have any questions, feel free to get in touch.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/360/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/360/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/360/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=360&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/06/08/wpf-mvvm-example-app/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/06/measurements.jpg" medium="image">
			<media:title type="html">measurements</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/06/users.jpg" medium="image">
			<media:title type="html">users</media:title>
		</media:content>
	</item>
		<item>
		<title>TekPub Videos</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/05/29/tekpub-videos/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/05/29/tekpub-videos/#comments</comments>
		<pubDate>Sat, 29 May 2010 14:25:09 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[Source Control]]></category>
		<category><![CDATA[Unit Testing]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=354</guid>
		<description><![CDATA[TekPub is a website set up by Rob Conery and James Avery, two very respected named in the world of development, to deliver video content on many development-related subjects.  Rob&#8217;s one of my development heroes, who previously worked for Microsoft on ASP.Net MVC, gave us the SubSonic data access framework, and has much good content [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=354&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>TekPub is a website set up by <a title="Rob's Blog" href="http://blog.wekeroad.com/">Rob Conery</a> and <a title="James's Blog" href="http://averyblog.com/">James Avery</a>, two very respected named in the world of development, to deliver video content on many development-related subjects.  Rob&#8217;s one of my development heroes, who previously worked for Microsoft on ASP.Net MVC, gave us the <a title="SubSonic" href="http://subsonicproject.com/">SubSonic </a>data access framework, and has much good content on the web already in video and blog form.</p>
<p>Anyway, TekPub isn&#8217;t free, a year&#8217;s subscription costs $200 (or you can pay on a per video or monthly basis), but there are several free videos on there which are well worth watching.  (I luckily won a year&#8217;s free subscription at a <a title="Next Generation User Group" href="http://www.nxtgenug.net/">NxtGenUG</a> user group meeting, which is what took me there in the first place).</p>
<p>There are two free series of videos, which are both useful. <a title="TekPub - Coder to developer 2009" href="http://www.tekpub.com/production/coder">One is based on Mike Gunderloy&#8217;s book &#8216;Coder to Developer&#8217;</a> and basically discussed how to move from a cowboy to a professional developer, making proper use of things like source control and project organisation tools.  Not much new for a seasoned developer, but useful for many currently making the journey.</p>
<p>The other free series is called &#8216;<a title="TekPub - Concepts" href="http://www.tekpub.com/production/concepts">Concepts</a>&#8216;, which (using C#) covers a lot of the things a growing developer needs to learn &#8211; IOC Containers, Unit Testing, Interfaces, and even Behaviour Driven Design (BDD).</p>
<p>And if you&#8217;re willing to fork out, there are tens if not hundreds of hours of content on subjects from ASP.Net MVC to iPhone development, jQuery, Git, Ruby, and many more.</p>
<p>So instead of turning on the TV tonight, get over to TekPub and learn something useful instead!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/354/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/354/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/354/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=354&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/05/29/tekpub-videos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>
	</item>
		<item>
		<title>Snoop for WPF</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/04/06/snoop-for-wpf/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/04/06/snoop-for-wpf/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 13:34:33 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=334</guid>
		<description><![CDATA[A must-have tool for WPF development Anyone who&#8217;s been working with WPF for any length of time will probably already know about this, but for anyone else, one of the tools you have to check out is Snoop, originally posted by Pete Blois and now hosted on CodePlex. Snoop is basically a debugging aid which [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=334&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>A must-have tool for WPF development</strong></p>
<p>Anyone who&#8217;s been working with WPF for any length of time will probably already know about this, but for anyone else, one of the tools you have to check out is <a title="CodePlex: Snoop WPF" href="http://snoopwpf.codeplex.com/">Snoop</a>, originally posted by Pete Blois and now hosted on CodePlex.</p>
<p>Snoop is basically a debugging aid which allows you to see exactly what&#8217;s happening in your running WPF app.  This can be very handy, as XAML can get a bit confusing after more than a couple of buttons, and there are also problems like binding errors (when you miss-spell a property name in your XAML) not making themselves apparent.</p>
<p>Snoop runs against your running application, so if you do anything fancy with dynamic control generation, it will be included.  One of the more useful aspects is the ability to see everything in the visual tree:</p>
<div id="attachment_335" class="wp-caption aligncenter" style="width: 574px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/04/visual-tree.jpg"><img class="size-full wp-image-335" title="Visual Tree" src="http://relentlessdevelopment.files.wordpress.com/2010/04/visual-tree.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Snoop showing the visual tree of my WPF app</p></div>
<p>Aside from all of the properties of the selected control being shown, you might also notice the selected UserGrid being displayed, which is handy &#8211; Snoop also cleverly highlights the selected visual component on your running app:</p>
<div id="attachment_339" class="wp-caption aligncenter" style="width: 310px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/04/highlighted-app2.jpg"><img class="size-full wp-image-339" title="Highlighted App" src="http://relentlessdevelopment.files.wordpress.com/2010/04/highlighted-app2.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Snoop highlighting the selected control</p></div>
<p>You can also use this to show any controls which have binding errors (a common issue in WFP if ur spellin is bad like wat mine is):</p>
<div id="attachment_340" class="wp-caption aligncenter" style="width: 572px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/04/binding-errors.jpg"><img class="size-full wp-image-340" title="Binding Errors" src="http://relentlessdevelopment.files.wordpress.com/2010/04/binding-errors.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Binding Errors highlighted in Snoop</p></div>
<p>As well as those genuinely useful features, there are a couple of really cool things which are good for showing off &#8211; the first is the ability to magnify your app (so you can prove WPF <em>really is</em> using vector graphics!):</p>
<div id="attachment_341" class="wp-caption aligncenter" style="width: 588px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/04/zoom.jpg"><img class="size-full wp-image-341" title="Zoom" src="http://relentlessdevelopment.files.wordpress.com/2010/04/zoom.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Zooming with Snoop</p></div>
<p>Check out them corners.. Sweet!</p>
<p>And last but not least, watch in amazement as Snoop explodes your app into a magnificent 3D masterpiece!</p>
<div id="attachment_342" class="wp-caption aligncenter" style="width: 426px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/04/app-in-3d.jpg"><img class="size-full wp-image-342" title="App in 3D" src="http://relentlessdevelopment.files.wordpress.com/2010/04/app-in-3d.jpg?w=600" alt=""   /></a><p class="wp-caption-text">Mum, my app exploded!</p></div>
<p>And that&#8217;s not just a static image either, you can spin it around and all sorts.  Now come on, who&#8217;s not going to be impressed by that?!</p>
<p>So, to summarise, Snoop for WPF &#8211; if you haven&#8217;t got it, go get it now!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/334/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/334/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/334/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=334&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/04/06/snoop-for-wpf/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/04/visual-tree.jpg" medium="image">
			<media:title type="html">Visual Tree</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/04/highlighted-app2.jpg" medium="image">
			<media:title type="html">Highlighted App</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/04/binding-errors.jpg" medium="image">
			<media:title type="html">Binding Errors</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/04/zoom.jpg" medium="image">
			<media:title type="html">Zoom</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/04/app-in-3d.jpg" medium="image">
			<media:title type="html">App in 3D</media:title>
		</media:content>
	</item>
		<item>
		<title>Simplified MVVM Commanding with DelegateCommand</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/03/30/simplified-mvvm-commanding-with-delegatecommand/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/03/30/simplified-mvvm-commanding-with-delegatecommand/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 22:32:38 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[MVVM]]></category>
		<category><![CDATA[Patterns]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=312</guid>
		<description><![CDATA[The MVVM (Model-Miew-ViewModel) pattern for WPF works really well, but for me has one big disadvantage &#8211; the sheer verbosity of it.  There&#8217;s just so much code to type!  Especially when you&#8217;re going for the &#8216;pure&#8217; approach of no code in your code-behind. One of the worst offenders for this is the Command model, whereby [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=312&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>The <a title="Wikipedia: MVVM" href="http://en.wikipedia.org/wiki/Model_View_ViewModel">MVVM</a> (Model-Miew-ViewModel) pattern for WPF works really well, but for me has one big disadvantage &#8211; the sheer verbosity of it.  There&#8217;s just so much code to type!  Especially when you&#8217;re going for the &#8216;pure&#8217; approach of no code in your code-behind.</p>
<p>One of the worst offenders for this is the Command model, whereby in your ViewModel you define a class which implements ICommand.  This is made available to the View via a property, and when called, calls some method in your ViewModel.</p>
<p>(<strong>Note</strong>:  This only applies to WPF.  Silverlight doesn&#8217;t currently support commands in the same way.)</p>
<p>Here&#8217;s an example, from inside my ViewModel (MeasurementViewModel):</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/custom-command.jpg"><img class="alignnone size-full wp-image-314" title="Custom Command" src="http://relentlessdevelopment.files.wordpress.com/2010/03/custom-command.jpg?w=600" alt=""   /></a></p>
<p>(This is set up in the XAML as follows:)</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/command-xaml.jpg"><img class="alignnone size-full wp-image-318" title="Command XAML" src="http://relentlessdevelopment.files.wordpress.com/2010/03/command-xaml.jpg?w=600" alt=""   /></a></p>
<p>You can see the custom ICommand (AddDefinitionCommand), a local variable to hold it, and a property getter for the view to find it.  Now considering that this doesn&#8217;t even have the code which performs the action (which is viewModel.AddMeasurementDefinition), that&#8217;s lot of overhead.  And you have to do that for every single command!  That&#8217;s button clicks, selection changes, and so on.</p>
<p>One of the problems is that the Command model provides a lot of flexibility by defining the CanExecute() method and CanExecuteChanged event, but I don&#8217;t need those in my simple scenario.</p>
<p>So, how to write a bit less code?  Of course, you could make some good use of <a title="Relentless Development - Visual Studio Code Snippets" href="http://relentlessdevelopment.wordpress.com/2009/10/01/visual-studio-code-snippets/">Code Snippets</a>, but there are better solutions.  The best one I&#8217;ve found is the DelegateCommand approach used in Microsoft&#8217;s <a title="Composite Application Library " href="http://msdn.microsoft.com/en-gb/library/cc707890.aspx">Composite Application Library</a> (a.k.a Prism), also discussed in <a title="MVVM Article" href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx#id0090030">Josh Smith&#8217;s MVVM article</a> (where he calls it a RelayCommand).  This involves defining an ICommand which uses delegates, and means you have less boilerplate code to write.</p>
<p>As I&#8217;m not interested in using the full features of the ICommand, my simple DelegateCommand goes like this:</p>
<div id="attachment_317" class="wp-caption aligncenter" style="width: 441px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/delegatecommand.jpg"><img class="size-full wp-image-317" title="DelegateCommand" src="http://relentlessdevelopment.files.wordpress.com/2010/03/delegatecommand.jpg?w=600" alt="DelegateCommand class definition"   /></a><p class="wp-caption-text">DelegateCommand.cs</p></div>
<p>And to call it, you simply need the following:</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/delegate-command-use1.jpg"><img class="alignnone size-full wp-image-321" title="Delegate Command Use" src="http://relentlessdevelopment.files.wordpress.com/2010/03/delegate-command-use1.jpg?w=600" alt=""   /></a></p>
<p>You can see the local member for the DelegateCommand, the ViewModel constructor where we define the method to call, and the property to make it available to the View.  Much simpler, I&#8217;m sure you&#8217;ll agree!</p>
<p>Of course, if you want to include the rest of the Command functionality, you can just extend the DelegateCommand.  So there you have it, all of your MVVM problems solved!  Well, nearly..</p>
<p><strong>The Code</strong></p>
<p>(As I don&#8217;t seem to be able to upload DelegateCommand.cs for you to download, here&#8217;s the text for you to copy &amp; paste.  I&#8217;ll work WordPress out one of these days&#8230;)</p>
<div id="_mcePaste">using System;</div>
<div id="_mcePaste">using System.Windows.Input;</div>
<div id="_mcePaste">namespace CommandUtils</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">public class DelegateCommand: ICommand</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">private Action _executeMethod;</div>
<div id="_mcePaste">public DelegateCommand(Action executeMethod)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">_executeMethod = executeMethod;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">public bool CanExecute(object parameter)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">return true;</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">public event EventHandler CanExecuteChanged;</div>
<div id="_mcePaste">public void Execute(object parameter)</div>
<div id="_mcePaste">{</div>
<div id="_mcePaste">_executeMethod.Invoke();</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div id="_mcePaste">}</div>
<div></div>
<div><strong>Edit</strong>: To see this in action, check out my <a title="MVVM Example App on RelentlessDevelopment.net" href="http://relentlessdevelopment.wordpress.com/2010/06/08/wpf-mvvm-example-app/">MVVM Example App</a></div>
<div></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/312/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/312/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/312/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=312&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/03/30/simplified-mvvm-commanding-with-delegatecommand/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/custom-command.jpg" medium="image">
			<media:title type="html">Custom Command</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/command-xaml.jpg" medium="image">
			<media:title type="html">Command XAML</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/delegatecommand.jpg" medium="image">
			<media:title type="html">DelegateCommand</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/delegate-command-use1.jpg" medium="image">
			<media:title type="html">Delegate Command Use</media:title>
		</media:content>
	</item>
		<item>
		<title>WCF Overview</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/03/30/wcf-overview/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/03/30/wcf-overview/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 12:56:25 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=297</guid>
		<description><![CDATA[I did an introductory WCF workshop the other week so I thought I&#8217;d post the basics here.  This diagram shows the usage of WCF (excuse the crappy PowerPoint art) &#8211; brief explanations below: Service This is your actual service, which is just made up of standard .Net code, usually an interface and the implementation.  The [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=297&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I did an introductory WCF workshop the other week so I thought I&#8217;d post the basics here.  This diagram shows the usage of WCF (excuse the crappy PowerPoint art) &#8211; brief explanations below:</p>
<div id="attachment_299" class="wp-caption aligncenter" style="width: 461px"><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-usage-diagram.jpg"><img class="size-full wp-image-299" title="WCF Usage Diagram" src="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-usage-diagram.jpg?w=600" alt="WCF Usage Diagram"   /></a><p class="wp-caption-text">WCF Usage Diagram</p></div>
<p><strong>Service</strong></p>
<p>This is your actual service, which is just made up of standard .Net code, usually an interface and the implementation.  The interface has a couple of attributes on it to make itself known to WCF as a service, e.g.:</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/service-interface2.jpg"><img class="alignnone size-full wp-image-306" title="WCF Service Interface" src="http://relentlessdevelopment.files.wordpress.com/2010/03/service-interface2.jpg?w=600" alt=""   /></a></p>
<p>In VS2008, you can create this by adding a new &#8216;WCF Service Library&#8217; project, which includes some example code.</p>
<p><strong>Host</strong></p>
<p>The host is whatever runs the service, making it available on a particular address.  In most cases this will be IIS, but it could be a Windows Service or even just a console/winforms app.</p>
<p>Either way, you&#8217;ll need some config to specify the Address, Binding and Contracts (known as the ABC), which in it&#8217;s most basic form will look something like this:</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-service-config.jpg"><img class="alignnone size-full wp-image-304" title="WCF Service Config" src="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-service-config.jpg?w=600" alt=""   /></a></p>
<p>These are collectively known as an &#8216;endpoint&#8217;.  If you created a WCF Service Library for your service, Visual Studio will actually have created this for you in an App.config file, which you can just copy into your host application.</p>
<p>Then to run the service, just stick this in your main():</p>
<p><a href="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-host-code.jpg"><img class="alignnone size-full wp-image-307" title="WCF Host Code" src="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-host-code.jpg?w=600" alt=""   /></a></p>
<p><strong>Client</strong></p>
<p>Here&#8217;s where you actually call your service, again just a standard application of your choosing.  The point at which it turns into a WCF client is when you select &#8216;Add Service Reference&#8217; in Visual Studio, and give it the address of your running service.  This does a load of magic, and the important things you and up with are:</p>
<ul>
<li>A config file with the relevant WCF endpoint in it</li>
<li>A service proxy</li>
</ul>
<p>The proxy is basically a local version of the service that you created.  If you look at all the files in the service reference, you will see &#8216;reference.cs&#8217;, which contains your service methods.  When we want to call the service from the client, we just make a call to this proxy, which goes away and handles all of the tricky networking stuff in the background so you don&#8217;t have to worry about it.</p>
<p>How simple is it?  Here&#8217;s the code:<a href="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-client-code.jpg"><img class="alignnone size-full wp-image-309" title="WCF Client Code" src="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-client-code.jpg?w=600" alt=""   /></a></p>
<p><strong>Conclusion</strong></p>
<p>So, WCF&#8217;s pretty easy to use.  The main issue you&#8217;ll face are probably with config, and firewalls (addresses not matching, remote machines not responding, and so on).  Once you get into it, WCF&#8217;s a massive technology, but at a basic level it&#8217;s pretty straightforward.</p>
<p>Apologies if this was a little short, but I thought it was about time to feed the blog!  Feel free to get in touch for more details.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/297/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/297/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/297/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=297&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/03/30/wcf-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-usage-diagram.jpg" medium="image">
			<media:title type="html">WCF Usage Diagram</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/service-interface2.jpg" medium="image">
			<media:title type="html">WCF Service Interface</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-service-config.jpg" medium="image">
			<media:title type="html">WCF Service Config</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-host-code.jpg" medium="image">
			<media:title type="html">WCF Host Code</media:title>
		</media:content>

		<media:content url="http://relentlessdevelopment.files.wordpress.com/2010/03/wcf-client-code.jpg" medium="image">
			<media:title type="html">WCF Client Code</media:title>
		</media:content>
	</item>
		<item>
		<title>Podcast Rundown</title>
		<link>http://relentlessdevelopment.wordpress.com/2010/03/16/podcast-rundown/</link>
		<comments>http://relentlessdevelopment.wordpress.com/2010/03/16/podcast-rundown/#comments</comments>
		<pubDate>Tue, 16 Mar 2010 14:37:17 +0000</pubDate>
		<dc:creator>relentless development</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://relentlessdevelopment.wordpress.com/?p=281</guid>
		<description><![CDATA[One of my favourite ways of keeping up with development is listening to podcasts, which I usually do in my car &#8211; a stereo with a USB port comes in very handy here.  (Note:  Only do this while alone!  The dulcet tones of Scot Hanseman might increase your knowledge, but they&#8217;re unlikely to impress the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=281&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>One of my favourite ways of keeping up with development is listening to podcasts, which I usually do in my car &#8211; a stereo with a USB port comes in very handy here.  (Note:  Only do this while alone!  The dulcet tones of Scot Hanseman might increase your knowledge, but they&#8217;re unlikely to impress the chicks..)</p>
<p>Anyway, audio tips and sexism aside, here are all of the podcasts I&#8217;ve been listening to and what I think of them, in order of greatness:</p>
<p><a title="Herding Code" href="http://herdingcode.com/"><strong>Herding Code</strong></a></p>
<p>Rating: 10/10</p>
<p>Technology: Mainly .Net</p>
<p>Sound Quality: Average</p>
<p>Hosted by four smart and fairly amusing guys, the beauty of this podcast is that you always get to hear all sides of the argument on any given topic.  And unlike some of the other podcasts, the topics are nearly always interesting &#8211; I rarely skip an episode.  They get some top guests too.</p>
<p><strong><a title=".Net Rocks!" href="http://www.dotnetrocks.com/default.aspx">.Net Rocks!</a></strong></p>
<p>Rating: 9/10</p>
<p>Technology: .Net</p>
<p>Sound Quality: Excellent</p>
<p>Probably the best-known and longest-running podcast out there, .Net Rocks is perhaps the most professionally produced show out there &#8211; you could easily mistake it for a radio show.  The presenters are funny and knowledgeable, get good guests and always ask pertinent questions (although you don&#8217;t get the same level of  discussion as with Herding Code).</p>
<p><strong><a title="ElegantCode Cast" href="http://elegantcode.com/category/codecast/">ElegantCode Cast</a></strong></p>
<p>Rating: 8/10</p>
<p>Technology: Mainly .Net</p>
<p>Sound Quality: Poor &#8211; Average</p>
<p>Run by some of the ElegantCode bloggers, this podcast is similar to Herding Code in it&#8217;s style, usually with multiple presenters leading to interesting discussions.  It seems to have died since David Starr left for the PluralCast (see below), but I&#8217;m hoping it might get resurrected.</p>
<p><strong><a title="Alt.Net Podcast" href="http://www.altnetpodcast.com/episodes/">Alt.Net Podcast</a></strong></p>
<p>Rating: 7/10</p>
<p>Technology: Mainly .Net</p>
<p>Sound Quality: Average</p>
<p>Although this only lasted a short while, the few podcasts it created covered some really useful subjects, in good detail.  And being Alt.Net (if you&#8217;re aware of that movement), there are also some interesting debates and disagreements in there.  Well worth a listen.</p>
<p><strong><a title="Pluralcast" href="http://www.pluralsight-training.net/microsoft/pluralcast/default.aspx">Pluralcast</a></strong></p>
<p>Rating: 7/10</p>
<p>Technology: .Net</p>
<p>Sound Quality: Good</p>
<p>Having recently taking over from the Elegant Code Cast, the Pluralcast has made a good start, covering some interesting subjects.  Although run by a commercial company (PluralSight Training), the shows don&#8217;t feel like they&#8217;re trying to sell you anything.  The interviews are sometimes a little one-sided, and the shows don&#8217;t always flow as well as they might, but definitely one to try out.</p>
<p><strong><a title="HanselMinutes" href="http://www.hanselminutes.com/default.aspx">HanselMinutes</a></strong></p>
<p>Rating: 6/10</p>
<p>Technology: .Net</p>
<p>Sound Quality: Excellent</p>
<p>Alongside .Net Rocks, HanselMinutes is the other well-produced, long running podcast.  Scott is currently a Senior Program Manager at Microsoft, which means he gets some great guests and inside scoops, but sometimes the interviews are again a little one-sided.  Scott&#8217;s a really smart guy and knowledgeable developer, and I feel bad for only giving a 6, but the subject is often web development (which I&#8217;m not really into), and I often skip shows because I&#8217;m not that interested in the guest/subject.</p>
<p><strong><a title="SE Radio" href="http://www.se-radio.net/">Software Engineering Radio</a></strong></p>
<p>Rating: 6/10</p>
<p>Technology: All</p>
<p>Sound Quality: Good</p>
<p>I&#8217;ve really only just started listening to this so it&#8217;s a little early to give my opinion &#8211; but when did that ever stop a reviewer?!  So, as you might imagine from the title, it covers general software engineering in all languages, often with clever academic people being interviewed by other clever academic people.  Ok, perhaps I undersell it there, it&#8217;s not all academic &#8211; and it is good to break out of .Net every now and again.</p>
<p><strong><a title="The Thirsty Developer" href="http://thirstydeveloper.com/">The Thirsty Developer</a></strong></p>
<p>Rating: 5/10</p>
<p>Technology: .Net</p>
<p>Sound Quality: Average</p>
<p>A show run my a couple of Microsoft evangelists, this has some good content, but the shows are fairly infrequent and I often skip them.  The subjects and interviews can be a little Microsoft-heavy.</p>
<p><strong><a title="The Pragmatic Bookshelf" href="http://pragprog.com/podcasts?page=1">The Pragmatic Bookshelf</a></strong></p>
<p>Rating: 5/10</p>
<p>Technology: All</p>
<p>Sound Quality: Good</p>
<p>Run (although not hosted) by The Pragmatic Programmers, this podcast consists of interviews with the authors of various books on the Prag Pub label.  It&#8217;s kind of commercial in that respect, but interesting nonetheless.</p>
<p><strong><a title="Polymorphic Podcast" href="http://polymorphicpodcast.com/shows/">Polymorphic Podcast</a></strong></p>
<p>Rating: 4/10</p>
<p>Technology: .Net</p>
<p>Sound Quality: Good</p>
<p>Again I feel bad about giving this such a low rating, as it&#8217;s not a bad podcast, I just don&#8217;t like it personally.  I only listened to the first few, but the topics are usually web-based, and were often covered fairly simplistically, and I didn&#8217;t really like the presenter.  I think I&#8217;ll give it another try soon, as everyone else seems to rate it.</p>
<p>So there you go, plenty to keep you occupied on your lonely commute there!  Obviously those ratings are just my opinion, so don&#8217;t take my advice &#8211; go and try them for yourself!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/relentlessdevelopment.wordpress.com/281/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/relentlessdevelopment.wordpress.com/281/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/relentlessdevelopment.wordpress.com/281/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=relentlessdevelopment.wordpress.com&amp;blog=8849519&amp;post=281&amp;subd=relentlessdevelopment&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://relentlessdevelopment.wordpress.com/2010/03/16/podcast-rundown/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/875a9e04d412b9b74ea0e3aa800a6597?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">relentlessdevelopment</media:title>
		</media:content>
	</item>
	</channel>
</rss>
