<?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/" version="2.0">

<channel>
	<title>planetgeek.ch</title>
	
	<link>http://www.planetgeek.ch</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 08 Mar 2010 07:21:05 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/planetgeekch" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="planetgeekch" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Test Lint: Find common problems in your unit test code</title>
		<link>http://www.planetgeek.ch/2010/03/08/test-lint-find-common-problems-in-your-unit-test-code/</link>
		<comments>http://www.planetgeek.ch/2010/03/08/test-lint-find-common-problems-in-your-unit-test-code/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 07:20:34 +0000</pubDate>
		<dc:creator>Daniel Marbach</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Roy Osherove]]></category>
		<category><![CDATA[Test Lint]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1457</guid>
		<description><![CDATA[
		
		
		
		The creators of typemock have recently published Test Lint. Test Lint is a free extension for Visual Studio 2010 which looks for common problems in your unit test code as you type.
Currently  Test Lint finds a set of common problems:

Missing  asserts in your tests
Multiple  asserts / verifications on different objects in the [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/03/08/test-lint-find-common-problems-in-your-unit-test-code/";
		var dzone_title = "Test Lint: Find common problems in your unit test code";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>The creators of typemock have recently published <a href="http://site.typemock.com/test-lint" target="_blank">Test Lint</a>. <a href="http://site.typemock.com/test-lint" target="_blank">Test Lint</a> is a free extension for Visual Studio 2010 which looks for common problems in your unit test code as you type.</p>
<p><span id="more-1457"></span>Currently <a href="http://site.typemock.com/test-lint" target="_blank"> Test Lint</a> finds a set of common problems:</p>
<ul>
<li>Missing  asserts in your tests</li>
<li>Multiple  asserts / verifications on different objects in the same test</li>
<li>Tests  that invoke other test methods</li>
<li>Logic  inside unit tests (loops, Ifs Switches..)<br />
More rules will be added soon, and in upcoming versions,  you will even be able to write your own rules based on our parsing  infrastructure.</li>
</ul>
<p><a href="http://site.typemock.com/test-lint" target="_blank"> Test Lint</a> will notify you on the spot about each possible issue  with a   visible queue right inside your editor, right next to the link  where   the issue appears.</p>
<p>Works with all  major frameworks, <a href="http://site.typemock.com/test-lint" target="_blank"> Test Lint</a> will detect issues in tests written with:</p>
<ul>
<li>Microsoft  Test Framework</li>
<li>NUnit</li>
<li>MbUnit</li>
<li>XUnit.NET</li>
<li>CsUnit</li>
</ul>
<p>The hints provided by the plugin are extracted from Roy Osherove&#8217;s book the art of unit testing. Unfortunately this wonderful plugin is only available for Visual Studio 2010.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/03/08/test-lint-find-common-problems-in-your-unit-test-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>TDD is more than Red-Green-Refactor</title>
		<link>http://www.planetgeek.ch/2010/03/03/tdd-is-more-than-red-green-refactor/</link>
		<comments>http://www.planetgeek.ch/2010/03/03/tdd-is-more-than-red-green-refactor/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 20:32:59 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Test Driven Development]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1412</guid>
		<description><![CDATA[
		
		
		
		Test Driven Development (TDD) is often reduced to the three phases

Red &#8211; write a test
Green &#8211; make it run
Refactor &#8211; clean up code

There is nothing wrong about these three steps. But there is more involved in test-driving your development.
Where to Start?
Red-Green-Refactor tells you nothing about how to get started. The question is: which test should [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/03/03/tdd-is-more-than-red-green-refactor/";
		var dzone_title = "TDD is more than Red-Green-Refactor";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Test Driven Development (TDD) is often reduced to the three phases</p>
<ol>
<li>Red &#8211; write a test</li>
<li>Green &#8211; make it run</li>
<li>Refactor &#8211; clean up code</li>
</ol>
<p>There is nothing wrong about these three steps. But there is more involved in test-driving your development.</p>
<h3><span id="more-1412"></span>Where to Start?</h3>
<p>Red-Green-Refactor tells you nothing about how to get started. The question is: which test should I write first?</p>
<p>When I start programming a new component or class then I first have to understand why I&#8217;m programming the new functionality. The very first step is to understand the problem and the desired behaviour (call it requirements if you want to).</p>
<p>Only after I understood what behaviour is expected, I&#8217;m able to think about a design that could solve the problem.</p>
<h3>Hey but wait! Designing? I thought we were talking about TDD here?</h3>
<p>It is true that we do not want to invest a lot of time in an up-front design. However, without a bit of initial design, the changes to get something functional are very low. The inital design consists of a very coarse decomposition of the problem in probably several building blocks (e.g. components, classes).</p>
<p>But keep in mind, this is only an initial design and will change. Sometimes this takes only a couple of minutes and happens inside my head &#8211; sometimes this takes several workshops with co-workers to get done.</p>
<p>The goal of this phase is to know where to start writing the first test.</p>
<h3>One last thing before getting lost in Tests</h3>
<p>Why wait, I know where to start? Let&#8217;s go coding then.</p>
<p>Unfortunately, most TDDers start with a randomly chosen first test. Followed by any test that comes to their minds next. This behaviour often results in sub-optimal designs, needing additional refactoring time afterwards.</p>
<p>A better approach is to first gather several tests for the behaviour to implement, and to put them on a TODO list. Side-note: I keep my TODO list as // TODO: in my unit test source code files.</p>
<p>Take a minute or two to write down all tests that come to your mind you probably will have to test to make sure the new functionality works as expected.</p>
<h3>Which Test to Pick First/Next</h3>
<p>Look at your TODO list and pick a test that you are confident of implementing and maximizes feedback for you.</p>
<h4>Confidence</h4>
<p>Only a test that can be fulfilled will take you step further. If there are too many open questions regarding a feature a test will check, wait until you have gathered more information with other tests.</p>
<h4>Maximize Feedback</h4>
<p>You should pick the test that provides maximal value. For example because it probably will have the biggest impact on the design. Or because it will rise your confidence in writing some other tests.</p>
<h4>Huh oh! That was not was I expected!</h4>
<p>If you&#8217;ve picked a test you were confident to get right and find out that there is more to it as expected then you may choose to step back. Either pick another (simpler) test or try to split the test into smaller sub-tests (if possible).</p>
<h4>Adding Tests along the Way</h4>
<p>Whenever I think of a new test then I add it to the TODO list. There may still be more &#8220;important&#8221; tests on the TODO list that I&#8217;ll pick before the test I just came up with. The TODO list makes sure that I won&#8217;t forget the new test.</p>
<h3>Example &#8211; Bowling Kata</h3>
<p>I assume you know Uncel Bob&#8217;s Bowling Kata (<a href="http://butunclebob.com/files/downloads/Bowling%20Game%20Kata.ppt">PPT</a>).</p>
<p>Here are the tests and the ordering that I would take to solve the problem:</p>
<ol>
<li>Throw one ball and get Score &#8211; tests basic interface and makes me confident to go to next test</li>
<li>Throw two balls (no spare/strike) and get Score &#8211; hey at least I can count something and I get even more confidence and knowledge about the problem domain</li>
<li>Strike &#8211; because a strike frame consists only of a single throw this has a bigger impact on design than a spare frame. I don&#8217;t want to get a solution that works perfectly for 2-ball-frames and then implement the special case of a single ball. The risk that my design has to be changed dramatically at that point is to high for me.</li>
<li>Spare &#8211; not much new in here after normal and strike frames</li>
<li>10th frame &#8211; the 10th frame is special because it may consist of three balls. Test normal/spare/strike in 10th frame.</li>
<li>Optimal/worst game &#8211; make sure that the algorithm works in extreme cases</li>
</ol>
<p>What is your TDD strategy? Write a comment! Thanks in advance.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/03/03/tdd-is-more-than-red-green-refactor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Books Page Online</title>
		<link>http://www.planetgeek.ch/2010/02/17/books-page-online/</link>
		<comments>http://www.planetgeek.ch/2010/02/17/books-page-online/#comments</comments>
		<pubDate>Wed, 17 Feb 2010 19:22:28 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1394</guid>
		<description><![CDATA[
		
		
		
		Dani and me have started to keep a list of software development and presentation skills related books that we have read.
Check it out here.
&#160;]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/02/17/books-page-online/";
		var dzone_title = "Books Page Online";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Dani and me have started to keep a list of software development and presentation skills related books that we have read.</p>
<p>Check it out <a href="http://www.planetgeek.ch/books/">here</a>.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/02/17/books-page-online/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Windows Phone 7: Hope has come</title>
		<link>http://www.planetgeek.ch/2010/02/16/windows-phone-7-hope-has-come/</link>
		<comments>http://www.planetgeek.ch/2010/02/16/windows-phone-7-hope-has-come/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 16:03:19 +0000</pubDate>
		<dc:creator>Daniel Marbach</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Smartphone]]></category>
		<category><![CDATA[Windows Phone 7]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1377</guid>
		<description><![CDATA[
		
		
		
		Finally the latest news about Windows Phone 7 is arrived and it seems that Microsoft has ultimately learned its lessons. Windows Phone 7 has a totally news concept regarding what we are used to have with the Windows Mobile editions. But the Windows Phone 7 concept is not only new for &#8220;Microsoftish&#8221; phones it is [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/02/16/windows-phone-7-hope-has-come/";
		var dzone_title = "Windows Phone 7: Hope has come";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Finally the latest news about Windows Phone 7 is arrived and it seems that Microsoft has ultimately learned its lessons. Windows Phone 7 has a totally news concept regarding what we are used to have with the Windows Mobile editions. But the Windows Phone 7 concept is not only new for &#8220;Microsoftish&#8221; phones it is also totally new for all smart phone operating systems on the market (including iPhone).</p>
<p><span id="more-1377"></span>Windows Phone 7 incorporates content services from various sources into a unique phone concept. The core operating system automatically updates live content from these services. Third party vendors have the possibility to provide their own service content. The synchronisation of the smart phone will in Windows Phone 7 take place with the Zune Player software and not with Active Sync/Mobile Device Center.</p>
<p><a href="http://www.planetgeek.ch/wp-content/uploads/2010/02/peoplescreen_web.jpg"  rel="lightbox[roadtrip]"><img class="size-medium wp-image-1380 alignnone" title="peoplescreen_web" src="http://www.planetgeek.ch/wp-content/uploads/2010/02/peoplescreen_web-300x197.jpg" alt="" width="300" height="197" /></a></p>
<p>More information and various screen shots can be found here:</p>
<p><a href="http://www.microsoft.com/presspass/presskits/windowsphone/imageGallery.aspx" target="_blank">http://www.microsoft.com/presspass/presskits/windowsphone/imageGallery.aspx</a></p>
<p><a href="http://www.windowsphone7series.com/" target="_blank">http://www.windowsphone7series.com/</a></p>
<p>Windows Phone 7 is definitely worth looking at!</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/02/16/windows-phone-7-hope-has-come/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Sprint in Scrum is not an Iteration</title>
		<link>http://www.planetgeek.ch/2010/02/13/a-sprint-in-scrum-is-not-an-iteration/</link>
		<comments>http://www.planetgeek.ch/2010/02/13/a-sprint-in-scrum-is-not-an-iteration/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 19:17:15 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[scrum]]></category>
		<category><![CDATA[Waterfall]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1354</guid>
		<description><![CDATA[
		
		
		
		When I talk with fellow developers new to Scrum, I often hear a fundamental misunderstanding about Sprints. These colleagues  are normally used to Waterfall or RUP methodologies. As a consequence, they think of Sprints as very short repetitions of the following phases: requirements (planning meeting), design, implementation, test (sprint review as acceptance).
And this is completely [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/02/13/a-sprint-in-scrum-is-not-an-iteration/";
		var dzone_title = "A Sprint in Scrum is not an Iteration";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>When I talk with fellow developers new to Scrum, I often hear a fundamental misunderstanding about Sprints. These colleagues  are normally used to Waterfall or RUP methodologies. As a consequence, they think of Sprints as very short repetitions of the following phases: requirements (planning meeting), design, implementation, test (sprint review as acceptance).</p>
<p>And this is completely wrong!</p>
<p>Let me tell you why.</p>
<p><span id="more-1354"></span></p>
<p>This misbelief has its root in a mixture of Waterfall and RUP.</p>
<p>In Waterfall there exist the following phases:</p>
<p><img class="alignnone" title="Waterfall" src="http://upload.wikimedia.org/wikipedia/en/thumb/e/e2/Waterfall_model.svg/500px-Waterfall_model.svg.png" alt="Phases in Waterfall" width="500" height="375" /></p>
<p>And in RUP there exist iterations as follows:</p>
<p><img class="alignnone" title="RUP" src="http://upload.wikimedia.org/wikipedia/en/0/05/Development-iterative.gif" alt="Phases in RUP" width="493" height="317" /></p>
<p>In Scrum however, there are neither phases following each other, nor iterations. There exists no hand-off from one phase to another (considered waste in lean software development). Everything is evolved continuously. The tester start testing on the same day the developers start coding. Of course, the requirements engineering has to be a little bit in front of the rest (otherwise, how would the team know what to build in the current Sprint). But the requirements analysis, as well as the architecture analysis, the design, the user interface usability engineering, the database schema modeller and so on are just a step in front of the rest of the team. And for sure, there is nobody limping behind.</p>
<p>That&#8217;s (one of ) the big difference(s) between agile and non-agile software development: continuum of work &#8211; everything is done always (sometimes a bit more, sometimes a bit less).</p>
<ul>
<li>Requirements are groomed throughout the project</li>
<li>Architecture and Design evolve together with working code</li>
<li>Testing happens from line one of code (Test Driven Development, Acceptance Test Driven Development, Test Automation, &#8230;)</li>
</ul>
<p>Please let me know what you think&#8230;</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/02/13/a-sprint-in-scrum-is-not-an-iteration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Found A New Agile Community</title>
		<link>http://www.planetgeek.ch/2010/01/17/found-a-new-agile-community/</link>
		<comments>http://www.planetgeek.ch/2010/01/17/found-a-new-agile-community/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 13:55:46 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1332</guid>
		<description><![CDATA[
		
		
		
		I found a promising community on agile software development created by Kelly Waters.
If you are interested in agile development then check it out (click on banner):

Visit Agile Community

Kelly Waters

&#160;]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/01/17/found-a-new-agile-community/";
		var dzone_title = "Found A New Agile Community";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>I found a promising community on agile software development created by Kelly Waters.</p>
<p>If you are interested in agile development then check it out (click on banner):</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="206" height="174" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="bgcolor" value="#FFFFFF" /><param name="flashvars" value="backgroundColor=0xFFFFFF&amp;textColor=0x000000&amp;config=http%3A%2F%2Fwww.agile-community.com%2Fmain%2Fbadge%2FshowPlayerConfig%3Fxg_source%3Dbadge%26size%3Dmedium%26username%3D0i2j97vfre5cw" /><param name="src" value="http://static.ning.com/socialnetworkmain/widgets/index/swf/badge.swf?v=201001141530" /><param name="wmode" value="opaque" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="206" height="174" src="http://static.ning.com/socialnetworkmain/widgets/index/swf/badge.swf?v=201001141530" allowfullscreen="true" wmode="opaque" flashvars="backgroundColor=0xFFFFFF&amp;textColor=0x000000&amp;config=http%3A%2F%2Fwww.agile-community.com%2Fmain%2Fbadge%2FshowPlayerConfig%3Fxg_source%3Dbadge%26size%3Dmedium%26username%3D0i2j97vfre5cw" bgcolor="#FFFFFF"></embed></object><br />
<small><a href="http://www.agile-community.com">Visit <em>Agile Community</em></a></small></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<h1>Kelly Waters</h1>
</div>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/01/17/found-a-new-agile-community/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Github: failed to push some refs</title>
		<link>http://www.planetgeek.ch/2010/01/14/github-failed-to-push-some-refs/</link>
		<comments>http://www.planetgeek.ch/2010/01/14/github-failed-to-push-some-refs/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 21:45:26 +0000</pubDate>
		<dc:creator>Daniel Marbach</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Failed]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[GitHub]]></category>
		<category><![CDATA[Push]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1328</guid>
		<description><![CDATA[
		
		
		
		I&#8217;m heavily experimenting with git using github.com. Just in case you&#8217;ll ever receive the following error message:
failed to push some refs
Don&#8217;t panic as I did! Just need to make a pull request first because there might be changes that we need to pull in. Afterwards it is easy possible to push your changes to github.com. [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/01/14/github-failed-to-push-some-refs/";
		var dzone_title = "Github: failed to push some refs";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>I&#8217;m heavily experimenting with git using github.com. Just in case you&#8217;ll ever receive the following error message:</p>
<blockquote><p>failed to push some refs</p></blockquote>
<p>Don&#8217;t panic as I did! Just need to make a pull request first because there might be changes that we need to pull in. Afterwards it is easy possible to push your changes to github.com. Have fun!</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/01/14/github-failed-to-push-some-refs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile UI Development in .NET: Nested Views</title>
		<link>http://www.planetgeek.ch/2010/01/02/agile-ui-development-in-net-nested-views/</link>
		<comments>http://www.planetgeek.ch/2010/01/02/agile-ui-development-in-net-nested-views/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 20:09:46 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1314</guid>
		<description><![CDATA[
		
		
		
		Updated: Something went wrong with the code snippets. Now it&#8217;s okay.
Today, we&#8221;l have a look at nested views in my series on agile UI development in .NET using an extended MVVM pattern (table of contents).
There are two kinds of nested views:

contextually nested views and
hierarchically nested views (master-detail scenarios)


ProCollEE
As always in this series, I use ProCollEE [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2010/01/02/agile-ui-development-in-net-nested-views/";
		var dzone_title = "Agile UI Development in .NET: Nested Views";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p><em>Updated: Something went wrong with the code snippets. Now it&#8217;s okay.</em></p>
<p>Today, we&#8221;l have a look at nested views in my series on agile UI development in .NET using an extended MVVM pattern (<a href="http://www.planetgeek.ch/2009/10/18/agile-ui-development-in-net-table-of-contents/">table of contents</a>).</p>
<p>There are two kinds of nested views:</p>
<ul>
<li>contextually nested views and</li>
<li>hierarchically nested views (master-detail scenarios)</li>
</ul>
<p><span id="more-1314"></span></p>
<h3>ProCollEE</h3>
<p>As always in this series, I use <a href="http://sourceforge.net/projects/procollee/">ProCollEE</a> as sample application. Note that ProCollEE is currently only an architectural prototype.</p>
<p>The UI looks like this:</p>
<p><a href="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEEUI.png"  rel="lightbox[roadtrip]"><img class="alignnone size-medium wp-image-1315" title="ProCollEEUI" src="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEEUI-300x174.png" alt="" width="300" height="174" /></a></p>
<h3>Contextually Nested Views</h3>
<p>The first form of nesting is a view containing another view as its child:</p>
<p><a href="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEE-Context.png"  rel="lightbox[roadtrip]"><img class="alignnone size-medium wp-image-1317" title="ProCollEE-Context" src="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEE-Context-300x176.png" alt="" width="300" height="176" /></a></p>
<p>In the above example, you can see that the main view (light green) contains the message entry view (blue) and the dashboard (gold). And the message entry view contains the channel selection view beside its own controls to enter the message to send.</p>
<h4>ViewModel</h4>
<pre class="brush: csharp;">
public class MessageEntryViewModel : ViewModelBase, IMessageEntryViewModel
{
    private readonly IChannelSelectionViewModel channelSelectionViewModel;

    public MessageEntryViewModel()
    {}

    public MessageEntryViewModel(IChannelSelectionViewModel channelSelectionViewModel)
    {
        this.channelSelectionViewModel = channelSelectionViewModel;
    }

    public IEnumerable Channels
    {
        get
        {
            return this.channelSelectionViewModel.SelectedChannels;
        }
    }
}
</pre>
<p>The ViewModel takes its child ViewModel as a paramter in the constructor. The call to the selected channels is delegated to the child ViewModel.</p>
<h4>View</h4>
<pre class="brush: csharp;">
public partial class MessageEntryView : IMessageEntryView
{
    // other stuff ...

    public void Initialize(IMessageEntryViewModel viewModel, IChannelSelectionView channelSelectionView)
    {
        this.DataContext = viewModel;

        this.channelSelection.Content = channelSelectionView.AsUserControl;
    }
}
</pre>
<pre class="brush: plain;">
&lt;UserControl x:Class=&quot;ProCollEE.WpfClient.MessageEntry.MessageEntryView&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:local=&quot;clr-namespace:ProCollEE.WpfClient.MessageEntry&quot;&gt;
    &lt;UserControl.DataContext&gt;
        &lt;local:MessageEntryViewModel Text=&quot;Hello ProCollEE World&quot;/&gt;
    &lt;/UserControl.DataContext&gt;

    &lt;StackPanel&gt;
        &lt;ContentControl Name=&quot;channelSelection&quot;&gt;&lt;/ContentControl&gt;
         &lt;Grid Margin=&quot;4,4,4,8&quot;&gt;
            &lt;Grid.ColumnDefinitions&gt;
                &lt;ColumnDefinition Width=&quot;*&quot;/&gt;
                &lt;ColumnDefinition Width=&quot;Auto&quot; MinWidth=&quot;47&quot; /&gt;
            &lt;/Grid.ColumnDefinitions&gt;
            &lt;TextBox AutomationProperties.AutomationId=&quot;message&quot; Text=&quot;{Binding Path=Text, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}&quot; Margin=&quot;0.001,0,8,0&quot; AutoWordSelection=&quot;True&quot; TextWrapping=&quot;WrapWithOverflow&quot; /&gt;
            &lt;Button AutomationProperties.AutomationId=&quot;sendButton&quot; Grid.Column=&quot;1&quot;  HorizontalAlignment=&quot;Right&quot; Padding=&quot;8,0,8,0&quot; Width=&quot;Auto&quot; Command=&quot;{Binding SendMessageCommand}&quot; IsDefault=&quot;True&quot;&gt;Send&lt;/Button&gt;
        &lt;/Grid&gt;
    &lt;/StackPanel&gt;

&lt;/UserControl&gt;
</pre>
<p>The view gets access to its child view by the parameter passed in the Initialize method (injected by Ninject &#8211; for those you have read the post about Ninject). The child view is set as the content of the ContentControl that is used as a placeholder.</p>
<h4>Presenter</h4>
<pre class="brush: csharp;">
public class MessageEntryPresenter : IMessageEntryPresenter
{
    // ...

    private readonly IChannelSelectionPresenter channelSelectionPresenter;

    public MessageEntryPresenter(
        IMessageEntryViewModel messageEntryViewModel,
        IChannelSelectionPresenter channelSelectionPresenter)
    {
        // ...

        this.channelSelectionPresenter = channelSelectionPresenter;
    }

    public void Show()
    {
        this.channelSelectionPresenter.Show();
    }
}
</pre>
<p>The presenter gets the presenter of the child view injected and relays the Show method to it.</p>
<h3>Hierarchically Nested Views (Master-Detail)</h3>
<p><a href="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEE-Hierarchie.png"  rel="lightbox[roadtrip]"><img class="alignnone size-medium wp-image-1316" title="ProCollEE-Hierarchie" src="http://www.planetgeek.ch/wp-content/uploads/2010/01/ProCollEE-Hierarchie-300x173.png" alt="" width="300" height="173" /></a></p>
<p>Above, you can see that the dashboard (green) is the master of the individual messages (red). And a message is the master of a list of channels the message was sent on (blue).</p>
<h4>Dashboar Message ViewModel</h4>
<pre class="brush: csharp;">
public class DashboardMessageViewModel : ViewModelBase, IDashboardMessageViewModel
{
    private readonly ObservableCollection channels;

    public DashboardMessageViewModel()
    {
        this.channels = new ObservableCollection();
    }

    // ... other properties ...

    public ObservableCollection Channels
    {
         get { return this.channels; } }
    }
</pre>
<p>The ViewModel provides an ObservableCollection of its ViewModel children.</p>
<h4>Dashboard View</h4>
<pre class="brush: plain;">
&lt;UserControl x:Class=&quot;ProCollEE.WpfClient.Dashboard.Dashboard&quot;
    xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
    xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
    xmlns:local=&quot;clr-namespace:ProCollEE.WpfClient.Dashboard&quot;
    HorizontalAlignment=&quot;Stretch&quot; VerticalAlignment=&quot;Top&quot; AutomationProperties.AutomationId=&quot;DashboardUserControl&quot;&gt;

    &lt;Grid HorizontalAlignment=&quot;Stretch&quot;&gt;

        &lt;StackPanel HorizontalAlignment=&quot;Stretch&quot;&gt;
            &lt;ListView ItemsSource=&quot;{Binding Path=Messages}&quot; VerticalContentAlignment=&quot;Top&quot; AutomationProperties.AutomationId=&quot;DashBoardListView&quot;&gt;
                &lt;ListView.ItemContainerStyle&gt;
                    &lt;Style TargetType=&quot;ListViewItem&quot;&gt;
                        &lt;Setter Property=&quot;VerticalContentAlignment&quot; Value=&quot;Top&quot; /&gt;
                    &lt;/Style&gt;
                &lt;/ListView.ItemContainerStyle&gt;
                &lt;ListView.View&gt;
                    &lt;GridView&gt;
                        &lt;GridViewColumn Header=&quot;Poster&quot; DisplayMemberBinding=&quot;{Binding Path=Poster}&quot; /&gt;
                        &lt;GridViewColumn Header=&quot;Text&quot;&gt;
                            &lt;GridViewColumn.CellTemplate&gt;
                                &lt;DataTemplate&gt;
                                    &lt;TextBlock Text=&quot;{Binding Path=Text}&quot; TextWrapping=&quot;WrapWithOverflow&quot; /&gt;
                                &lt;/DataTemplate&gt;
                            &lt;/GridViewColumn.CellTemplate&gt;
                        &lt;/GridViewColumn&gt;
                        &lt;GridViewColumn Header=&quot;Time&quot; DisplayMemberBinding=&quot;{Binding Path=SentTime}&quot;/&gt;
                        &lt;GridViewColumn Header=&quot;Channels&quot;&gt;
                            &lt;GridViewColumn.CellTemplate&gt;
                                &lt;DataTemplate&gt;
                                    &lt;ListBox ItemsSource=&quot;{Binding Path=Channels}&quot; BorderThickness=&quot;0&quot; Background=&quot;Transparent&quot;&gt;
                                        &lt;ListBox.ItemTemplate&gt;
                                            &lt;DataTemplate&gt;
                                                &lt;Label Content=&quot;{Binding Path=ChannelName}&quot; /&gt;
                                            &lt;/DataTemplate&gt;
                                        &lt;/ListBox.ItemTemplate&gt;
                                    &lt;/ListBox&gt;
                                &lt;/DataTemplate&gt;
                            &lt;/GridViewColumn.CellTemplate&gt;
                        &lt;/GridViewColumn&gt;
                    &lt;/GridView&gt;
                &lt;/ListView.View&gt;
            &lt;/ListView&gt;
        &lt;/StackPanel&gt;
    &lt;/Grid&gt;

&lt;/UserControl&gt;
</pre>
<p>The XAML uses the DashboardViewModel as its DataContext and can now use data binding and data templates to visualize the hierarchical data.</p>
<h3>Conclusions</h3>
<p>This post contains a lot of code and little comment. We have seen the differences between contextual and hierarchical nesting:</p>
<ul>
<li>contextual nesting: presenter-view-viewModel tripples are nested together</li>
<li>hierarchical nesting: a single presneter and view use several nested viewModels</li>
</ul>
<p>And how to achieve nesting in code.</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2010/01/02/agile-ui-development-in-net-nested-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>German .NET Magazin article published</title>
		<link>http://www.planetgeek.ch/2009/12/09/german-net-magazin-article-published/</link>
		<comments>http://www.planetgeek.ch/2009/12/09/german-net-magazin-article-published/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 21:10:30 +0000</pubDate>
		<dc:creator>Daniel Marbach</dc:creator>
				<category><![CDATA[Announcement]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[.NET Magazin]]></category>
		<category><![CDATA[Article]]></category>
		<category><![CDATA[Hybrid Mobile Application Development]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1300</guid>
		<description><![CDATA[
		
		
		
		Just a quick announcement. I wrote together with Alain Baumeler from bbv Software Services AG an article about hybrid application development targeting both .NET and .NET compact framework. The article is written in German and published in the .NET Magazin.
Here is the quick overview of the article:
Hybride Softwareentwicklung in .NET – Einführung in die Vorteile [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2009/12/09/german-net-magazin-article-published/";
		var dzone_title = "German .NET Magazin article published";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>Just a quick announcement. I wrote together with Alain Baumeler from bbv Software Services AG an article about hybrid application development targeting both .NET and .NET compact framework. The article is written in German and published in the .NET Magazin.</p>
<p>Here is the quick overview of the article:</p>
<blockquote><p><strong>Hybride Softwareentwicklung in .NET – Einführung in die Vorteile und Patterns der hybriden Softwareentwicklung für .NET Compact und .NET Framework</strong></p>
<p>Mobile Geräte mit Windows Mobile sind trotz zunehmender Konkurrenz bei Businessapplikationen vielfach die erste Wahl. Dieser Artikel führt in die Thematik der hybriden Softwareentwicklung ein und zeigt deren Vorteile und etablierte Patterns anhand von Praxisbeispielen in .NET.<br />
<em> von Daniel Marbach und Alain Baumeler</em></p></blockquote>
<p>For those who are interested in mobile application development and fluent in reading German language I really recommend our article! Buy the magazine <img src='http://www.planetgeek.ch/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Thanks for your support.</p>
<p><a href="../wp-content/uploads/2009/12/magazine.jpg"  rel="lightbox[roadtrip]"><img title="magazine" src="../wp-content/uploads/2009/12/magazine.jpg" alt="magazine" width="200" height="285" /></a></p>
<p><a href="http://it-republik.de/dotnet/dotnet-magazin-ausgaben/Parallel-Programming-000333.html" target="_blank">http://it-republik.de/dotnet/dotnet-magazin-ausgaben/Parallel-Programming-000333.html</a></p>
<p>I&#8217;m also happy about feedback. Leave comments either by email or by posting your comment on planetgeek!</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2009/12/09/german-net-magazin-article-published/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NMock2 Release with MockStyle.Stub?</title>
		<link>http://www.planetgeek.ch/2009/12/03/nmock2-release-with-mockstyle-stub/</link>
		<comments>http://www.planetgeek.ch/2009/12/03/nmock2-release-with-mockstyle-stub/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 19:48:24 +0000</pubDate>
		<dc:creator>Urs Enzler</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Ask a geek]]></category>
		<category><![CDATA[NMock2]]></category>

		<guid isPermaLink="false">http://www.planetgeek.ch/?p=1294</guid>
		<description><![CDATA[
		
		
		
		We got the following geek question from Henrik:
Hi,

Thanks for sharing this preview of the MockStyle.Stub feature!
Its exactly was I was looking for when I googled this page,
so now I just can't wait for a release with this included  

I tried to find some information on futre release plans but could not find any.
Could anybody [...]]]></description>
			<content:encoded><![CDATA[<!--S-ButtonZ 1.1.5 Start--><div style="float: left; width: 42px; padding-right: 10px; margin: 0 10px 0 0;">
		<script type="text/javascript">
		<!--
		var dzone_url = "http://www.planetgeek.ch/2009/12/03/nmock2-release-with-mockstyle-stub/";
		var dzone_title = "NMock2 Release with MockStyle.Stub?";
		var dzone_style = "1";
		var dzone_blurb = "";
		//-->
		</script>
		<script language="javascript" src="http://widgets.dzone.com/widgets/zoneit.js"></script></div><!--S-ButtonZ 1.1.5 End--><p>We got the following geek question from Henrik:</p>
<pre>Hi,

Thanks for sharing this preview of the MockStyle.Stub feature!
Its exactly was I was looking for when I googled this page,
so now I just can't wait for a release with this included <img src='http://www.planetgeek.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> 

I tried to find some information on futre release plans but could not find any.
Could anybody help me out? When could we3 expect a new NUnit
supporting MockStyle.Stub?

Cheers!

Henrik
</pre>
<p>The answer to this question is a bit complicated. Let me tell you why:</p>
<p>The current development team of NMock2 (Thomas, Peter and me) will not actively continue to develop NMock2. We&#8217;ll still provide basic support (bug fixes) but no new features. However, we have planned to make one last release (including the Stub feature) when we are sure that it works in our projects. This will be soon because we didn&#8217;t have a new defect in the last two months or so.</p>
<p>The reason why we have lost interest is that Moq has gained a lot of momentum and has a much broader community support. Furthermore, Moq provides some basic improvements that we cannot simply add to NMock2: besides the type safe, refactoring friendlier syntax, it allows very clean AAA (Arrange, Act, Assert) unit tests.</p>
<p>On the other side, there exists the NMock3 project on CodePlex that adds a type-safe syntax wrapper around NMock2. Check it out, when you already use NMock2 in your project.</p>
<p>So for short: the release including the Stub feature will be available soon, but it will also be the last release.</p>
<p>If you can&#8217;t wait until the official release then get the code from the subversion repository and start the build.release.cmd, et voila!</p>
<p>Happy mocking (whatever framework you use)</p>
<p>Urs</p>
<div style="clear:both;">&nbsp;</div>]]></content:encoded>
			<wfw:commentRss>http://www.planetgeek.ch/2009/12/03/nmock2-release-with-mockstyle-stub/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
