<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Building Blocks</title>
	
	<link>http://www.morkeleb.com</link>
	<description>Simple design for advanced constructions</description>
	<lastBuildDate>Thu, 02 Sep 2010 13:54:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/morkeleb/eDpR" /><feedburner:info uri="morkeleb/edpr" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Blink</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/lSplAqgScvM/</link>
		<comments>http://www.morkeleb.com/2010/09/02/blink/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 13:54:56 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/09/02/blink/</guid>
		<description><![CDATA[I recently finished reading Blink. It’s about how we are programmed to make quick decisions. The driving force behind prejudices, but also our inherited ability to make quick and accurate decisions. It’s funny, the book was mentioned in an episode of “In treatment”, and 60 seconds later I had purchased the book and had it [...]]]></description>
			<content:encoded><![CDATA[<p><img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://www.psychologytoday.com/files/u107/blink.jpg" width="161" height="240" />I recently finished reading Blink. It’s about how we are programmed to make quick decisions. The driving force behind prejudices, but also our inherited ability to make quick and accurate decisions.</p>
<p>It’s funny, the book was mentioned in an episode of “In treatment”, and 60 seconds later I had purchased the book and had it on my Kindle.</p>
<p>Malcolm describes how we all make initial assessments of everything and everyone. The book explains when this ability is not to be trusted and when it is to be trusted. </p>
<p>I found it especially interesting how, for example packaging can change our entire perception of a product. It also explains how we often let our first impression of a person unconsciously affect our interactions with that person. </p>
<p>In essence the book is about decision making, a process that I’ve find to be hard to capture in text. It’s an interesting read and very inspiring, but it is more of a food for thought book than a practically focused guide.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/rD37aj_NBFvMW6ahVSwjId0MwiQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/rD37aj_NBFvMW6ahVSwjId0MwiQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/rD37aj_NBFvMW6ahVSwjId0MwiQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/rD37aj_NBFvMW6ahVSwjId0MwiQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/lSplAqgScvM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/09/02/blink/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/09/02/blink/</feedburner:origLink></item>
		<item>
		<title>Agile Testing: A Practical Guide for Testers and Agile Teams</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/z99NBZFgT_0/</link>
		<comments>http://www.morkeleb.com/2010/08/10/agile-testing-a-practical-guide-for-testers-and-agile-teams/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 18:32:07 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/08/10/agile-testing-a-practical-guide-for-testers-and-agile-teams/</guid>
		<description><![CDATA[I finished reading Agile Testing, on the recommendation of Mary Poppendick. It’s a thick book, and it took me longer to read than I originally thought it would. I found it too long, to be honest. It covers both testing and agile principles. For me a better fit would have been if it only focused [...]]]></description>
			<content:encoded><![CDATA[<p><img style="display: inline; margin-left: 0px; margin-right: 0px" alt="Agile Testing" align="right" src="http://www.adlibris.com/se/covers/M/0/32/0321534468.jpg" />I finished reading Agile Testing, on the recommendation of Mary Poppendick. It’s a thick book, and it took me longer to read than I originally thought it would.</p>
<p>I found it too long, to be honest. It covers both testing and agile principles. For me a better fit would have been if it only focused on testing, implying that I am not the target audience. For the Agile part I would recommend other books on the subject.</p>
<p>The testing parts, however, worked as a muse for my thoughts. It wasn’t long before I was thinking of how I could apply the different aspects mentioned in the book. For instance the book suggests that if the test suite start taking too long to run, it could be split into a quicker suite run each check-in (or my preference each compile) and a longer suite that runs in a build. I realized that most teams I know of would have a hard time splitting their test suites up into quick feedback suites run each time the code compiles and a longer list which run each night. This ties back to some of the problems with TDD where early practitioners risk just producing test after test without considering their value.</p>
<p>Another idea I had while reading the book was that it could be quite easy to produce a test suite for a REST-api using curl and a set of script-files. This suite could easily be automated as well, without need of much programming experience. Then again, it’s not difficult programming either.</p>
<p>The book suggests thinking of different types of tests as features are implemented. Which is good to have as a sort of checklist, and I agree that features should be considered from as many angles as possible for risks or if they can be implemented simpler. However I do not see this as a tester activity or a “programmer” activity. I see it as an obligation for everyone in the team. I do greatly agree with “the power of Three”. </p>
<p>I believe that the book could have been shorter and more concise. Also I could argue that the book isn’t a practical guide, but rather an introduction to agile testing. With this I mean that you shouldn’t expect concrete examples of how to set-up an automated regression test suite. It will however greatly describe the benefits of one and suggest that not every test is suitable for automation (I can see how it’s easy to get carried away with automation).</p>
<p>Despite the fact that I didn’t enjoy the book as much as I had hoped for I would still recommend reading it. However I would recommend readers whom want to focus on the Agile processes to read other books on Agile instead of the chapters discussing processes.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/JWd2RYKzdmfljDFLKFn4YDelfws/0/da"><img src="http://feedads.g.doubleclick.net/~a/JWd2RYKzdmfljDFLKFn4YDelfws/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/JWd2RYKzdmfljDFLKFn4YDelfws/1/da"><img src="http://feedads.g.doubleclick.net/~a/JWd2RYKzdmfljDFLKFn4YDelfws/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/z99NBZFgT_0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/08/10/agile-testing-a-practical-guide-for-testers-and-agile-teams/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/08/10/agile-testing-a-practical-guide-for-testers-and-agile-teams/</feedburner:origLink></item>
		<item>
		<title>Specifying tests</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/lQFhBYbYRaw/</link>
		<comments>http://www.morkeleb.com/2010/08/06/specifying-tests/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 06:59:30 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/08/06/specifying-tests/</guid>
		<description><![CDATA[The latest post on the Google Testing blog is quite interesting. Philip Zembrod discusses the readability of code developed by TDD and found that sometimes reading the test first didn’t always help to understand the written code. He makes a valid point. I started objecting to using mocks when it was pointed out to me [...]]]></description>
			<content:encoded><![CDATA[<p>The <a href="http://googletesting.blogspot.com/2010/08/test-driven-code-review.html?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed:+blogspot/RLXA+(Google+Testing+Blog)&amp;utm_content=Google+Feedfetcher" target="_blank">latest post</a> on the Google Testing blog is quite interesting. Philip Zembrod discusses the readability of code developed by TDD and found that sometimes reading the test first didn’t always help to understand the written code.</p>
<p>He makes a valid point. I started objecting to using mocks when it was pointed out to me that most of the tests produced with mocks weren’t readable. They typically don’t follow AAA (Arrange Act Assert), and thus work poorly as specifications. But it’s not the mocks, it’s how understandable the test is as a specification. Is it easy to understand what the test does?</p>
<p>If I look at a test 5 months from now, and it is unclear what its testing and how its testing it. Then the ROI of developing that test is lower than it could be.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/4XgLHqEZ9CAuLq-dFu9eCrypcCU/0/da"><img src="http://feedads.g.doubleclick.net/~a/4XgLHqEZ9CAuLq-dFu9eCrypcCU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4XgLHqEZ9CAuLq-dFu9eCrypcCU/1/da"><img src="http://feedads.g.doubleclick.net/~a/4XgLHqEZ9CAuLq-dFu9eCrypcCU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/lQFhBYbYRaw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/08/06/specifying-tests/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/08/06/specifying-tests/</feedburner:origLink></item>
		<item>
		<title>Synchronizing Tasks in Shuffle</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/-qo9po7P1CY/</link>
		<comments>http://www.morkeleb.com/2010/07/31/synchronizing-tasks-in-shuffle/#comments</comments>
		<pubDate>Sat, 31 Jul 2010 19:32:58 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Shuffle]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/07/31/synchronizing-tasks-in-shuffle/</guid>
		<description><![CDATA[As of the writing of this blog post there I’m finalizing the last part of how the new synchronization. The changes to Shuffle is that we introduce a hidden state for Tasks, Contexts and Projects. Hidden entities are in essence deleted, but the state is maintained even when it’s deleted. This change allows the synchronization [...]]]></description>
			<content:encoded><![CDATA[<p>As of the writing of this blog post there I’m finalizing the last part of how the new synchronization. The changes to Shuffle is that we introduce a hidden state for Tasks, Contexts and Projects. Hidden entities are in essence deleted, but the state is maintained even when it’s deleted. </p>
<p>This change allows the synchronization to ignore hidden projects, contexts and tasks.</p>
<p>For Contexts and Projects this is straight forward. However in Tracks, completed and hidden tasks are left out of the listing of tasks. This means that a task that is left out in Tracks is either deleted or completed. </p>
<p>Previously in Shuffle we just marked these tasks as completed. However now we can handle them properly. Below is a flowchart of how the suggested synchronization process of tasks works.</p>
<p>The flow-chart starts in a state where the tasks are downloaded from Tracks, then it’s compared to the entities in Shuffle by the chart.</p>
<p>&#160;<a href="http://www.morkeleb.com/img/Shufflesynchronization_12C30/trackstasksync1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="trackstasksync (1)" border="0" alt="trackstasksync (1)" src="http://www.morkeleb.com/img/Shufflesynchronization_12C30/trackstasksync1_thumb.png" width="640" height="368" /></a> </p>
<p>The interesting part here is that the check if a task is completed or deleted is a remote check, which means it’s slower. Also any task not in Shuffle but in Tracks is naturally added to Shuffle.</p>
<p>I’d appreciate feedback on this, before I mark the task as Completed in Shuffle. <img src='http://www.morkeleb.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<p><a href="http://feedads.g.doubleclick.net/~a/tzWdDM30vP0Pz3l2uYR10Yj9Zc0/0/da"><img src="http://feedads.g.doubleclick.net/~a/tzWdDM30vP0Pz3l2uYR10Yj9Zc0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tzWdDM30vP0Pz3l2uYR10Yj9Zc0/1/da"><img src="http://feedads.g.doubleclick.net/~a/tzWdDM30vP0Pz3l2uYR10Yj9Zc0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/-qo9po7P1CY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/07/31/synchronizing-tasks-in-shuffle/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/07/31/synchronizing-tasks-in-shuffle/</feedburner:origLink></item>
		<item>
		<title>What’s happening with Shuffle?</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/GoLEY5W3MiA/</link>
		<comments>http://www.morkeleb.com/2010/07/21/whats-happening-with-shuffle/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 06:39:54 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[Shuffle]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/07/21/whats-happening-with-shuffle/</guid>
		<description><![CDATA[It’s summer! Which leaves some time for some development on Shuffle. This is what’s coming: Support for small screens, such as the HTC Tattoo You can change Synchronization settings without having connection. Previously settings were verified by connecting to Tracks before saving. Now there is a test button to test the settings. Allowing you to [...]]]></description>
			<content:encoded><![CDATA[<p>It’s summer! Which leaves some time for some development on Shuffle.</p>
<p>This is what’s coming:</p>
<ul>
<li>Support for small screens, such as the HTC Tattoo </li>
<li>You can change Synchronization settings without having connection.
<ul>
<li>Previously settings were verified by connecting to Tracks before saving. Now there is a test button to test the settings. Allowing you to change them when offline. </li>
</ul>
</li>
<p> There’s also some work in progress that hopefully will be in the same release. We’re working on a&#160; model change that will help the synchronization process. No longer should the synchronization process cause un-recoverable deletes, and support for ignoring hidden and completed contexts and projects is underway with it as well.</ul>
<ul>There’s a lot of work to do still, but I wanted to give a heads up that something is happening.</ul>

<p><a href="http://feedads.g.doubleclick.net/~a/lcO2HMU5FhocjdwPuaMjhFSfnQo/0/da"><img src="http://feedads.g.doubleclick.net/~a/lcO2HMU5FhocjdwPuaMjhFSfnQo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/lcO2HMU5FhocjdwPuaMjhFSfnQo/1/da"><img src="http://feedads.g.doubleclick.net/~a/lcO2HMU5FhocjdwPuaMjhFSfnQo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/GoLEY5W3MiA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/07/21/whats-happening-with-shuffle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/07/21/whats-happening-with-shuffle/</feedburner:origLink></item>
		<item>
		<title>Testing on Google AppEngine (Python SDK)</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/6uCkp09eA_g/</link>
		<comments>http://www.morkeleb.com/2010/06/28/testing-on-google-appengine-python-sdk/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 20:18:25 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[AppEngine]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/06/28/testing-on-google-appengine-python-sdk/</guid>
		<description><![CDATA[Testing in Python and Django is pretty straight forward. However I wanted to write tests that assert email sending, URL fetching and other external sources. Making sure the intended code is executed and allowing me to write fuller tests. These external actions are accessed through Google’s API, and there are some posts about how to [...]]]></description>
			<content:encoded><![CDATA[<p>Testing in Python and Django is pretty straight forward. However I wanted to write tests that assert email sending, URL fetching and other external sources. Making sure the intended code is executed and allowing me to write fuller tests.</p>
<p>These external actions are accessed through Google’s API, and there are some posts about how to test on Google AppEngine.</p>
<p><a href="http://blog.appenginefan.com/2008/06/unit-tests-for-google-app-engine-apps.html" target="_blank">Here</a> is an example by AppEngine Fan where he uses Mocker to mock out the external API calls. An approach that shows the power of the mocking library, but to my taste it results in too much code, and too much details about the mocking framework in the test making it harder to read. This ties back to a previous post I wrote about <a href="http://www.morkeleb.com/2010/01/12/testing-without-mocking-framework/" target="_blank">testing without Mocks</a>.</p>
<p>What I wanted was some way to keep my original code intact and still have a pretty self explanatory test.</p>
<p>After some more research I found out that all API calls in the Python SDK are done through a proxy map. Allowing you to replace the behavior of AppEngine with your own, stubbed behavior. This method is used in <a href="http://appengineguy.blogspot.com/2008_06_01_archive.html" target="_blank">this example</a> (that still uses the mocking framework), and also <a href="http://groups.google.com/group/google-appengine/browse_thread/thread/b0c64063b2c4c2c5" target="_blank">this post</a> on the user group was that location where I first noticed it.</p>
<p>This made me dig through the source code available in the SDK about how exactly this stub map worked. What I noticed was that if you started using the stub map, you needed to setup all the stubs.</p>
<p><em>As far as I could tell there was not means to replace just a single stub and let the map remain otherwise intact. Which was a bit of a trouble for me. One of the reasons I researched it was because I didn’t want to have tons of setup code in my tests.</em></p>
<p>Since my test code is important I thought I’d show how I want my tests to look like.</p>
<p>Requirements for good test-code:</p>
<ul>
<li>Easy to read (Arrange-Act-Assert,Minimal setup code in the test) </li>
<li>Fast execution </li>
<li>non-fragile (black box testing the most external interface accessible for testing) </li>
</ul>
<p>I want specific events in <a href="http://www.js-analytics.com" target="_blank">JS-Analytics</a> to send an email to the administrators of JS-Analytics. The use case is covered with testing, but I wanted to add a test for this new requirement.</p>
<p>Here is what the test looks like:</p>
<pre>    def test_given_a_new_project_an_email_is_sent_informing_the_admins(self):
      request = HttpRequest()
      request.user = User(username=&quot;…&quot;, user=users.User(&quot;…&quot;))
      request.method = &quot;POST&quot;
      request.POST = {&quot;title&quot;:&quot;test&quot;}
      index(request)
      self.assertEqual(&quot;project created&quot;, self.getMessages()[0].subject())
      </pre>
<p>As you can see I wish to use the Log pattern for test sent messages. This allows me to check the sent messages in order. There is a method that allows me to access a copy of all sent emails, with their complete structure. Allowing me to assert different aspects of the emails. </p>
<p>To support this I created a base-class that adds the behavior I want as setup code. This setup code is generic and only specific for AppEngine aspects of the code. Here is the structure:</p>
<p><a href="http://www.morkeleb.com/img/TestingonGoogleAppEnginePythonSDK_131D5/image.png"><img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="image" border="0" alt="image" src="http://www.morkeleb.com/img/TestingonGoogleAppEnginePythonSDK_131D5/image_thumb.png" width="484" height="241" /></a> The base-class called ServiceTest sets up the stub map. I added two stubs that change the behavior from the normal stubs. These add support for setting content that will be accessed through the URLFetch service, and the logging of email messages.</p>
<p>Since no call ever cross the service boundary to actually do anything, the execution time isn’t compromised.</p>
<p>Here is an example of the setContent usage:</p>
<pre>    def test_fetching_arrangement_example(self):
      self.setResponse(&quot;http://url-to-be-fetched&quot;, &quot;fake-content&quot;)
      request = HttpRequest()
      result = view_that_does_fetching(request)
      self.assertEqual(result.content, &quot;fake-content&quot;)</pre>
<p>As you can see its pretty straight forward to Arrange the which content should be returned where.</p>
<p>This structure should be so generic that anyone could use it, so I added a copy of my base-class free to use by others.</p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8eb9d37f-1541-4f29-b6f4-1eea890d4876:64676e67-b051-4ef4-a409-d01cf7734d08" class="wlWriterEditableSmartContent">
<div><a href="http://www.morkeleb.com/img/TestingonGoogleAppEnginePythonSDK_131D5/ServiceTestCase.py" target="_self">ServiceTestCase.py</a></div>
</p>
</div>

<p><a href="http://feedads.g.doubleclick.net/~a/yak0eRjQVEgPH7Fjaa3hKDolgWs/0/da"><img src="http://feedads.g.doubleclick.net/~a/yak0eRjQVEgPH7Fjaa3hKDolgWs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/yak0eRjQVEgPH7Fjaa3hKDolgWs/1/da"><img src="http://feedads.g.doubleclick.net/~a/yak0eRjQVEgPH7Fjaa3hKDolgWs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/6uCkp09eA_g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/06/28/testing-on-google-appengine-python-sdk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/06/28/testing-on-google-appengine-python-sdk/</feedburner:origLink></item>
		<item>
		<title>MSBuild fails to compile WPF with: error MC2000: Unkown build error ‘…’ does not have an implementation</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/uRMxrqVSuFU/</link>
		<comments>http://www.morkeleb.com/2010/06/14/msbuild-fails-to-compile-wpf-with-error-mc2000-unkown-build-error-does-not-have-an-implementation/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 09:38:49 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[MSBuild]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/06/14/msbuild-fails-to-compile-wpf-with-error-mc2000-unkown-build-error-does-not-have-an-implementation/</guid>
		<description><![CDATA[My initial solution in this post was WRONG, it just changed the compile order of our build which made the error occur later after other issues were resolved. I’ve updated the post accordingly. I’m sorry if anyone had to read this post twice. We have been struggling with a build error lately, where the compilation [...]]]></description>
			<content:encoded><![CDATA[<p><strong>My initial solution in this post was WRONG, it just changed the compile order of our build which made the error occur later after other issues were resolved. I’ve updated the post accordingly. I’m sorry if anyone had to read this post twice.</strong></p>
<p>We have been struggling with a build error lately, where the compilation works perfectly in Visual Studio, and in our case it also works in some MSBuild builds but not in this specific build. By that I mean that two builds are compiling the same code, with the same dependencies and compilation flags, yet one fails and the other doesn&#8217;t.</p>
<p>The error message given is:</p>
<pre>D:\Invoicing\UQList.xaml(55,167): error MC2000: Unknown build error, 'Method 'add_PropertyChanged' in type 'UsageQuantityPresenter' from assembly 'ServiceManagementApplication' does not have an implementation. Line 55 Position 167.' </pre>
<p>If we look at the buildlog.txt produced by MSBuild in the failing build, we can find something similar to this:</p>
<pre class="csharpcode">  Input file <span class="str">'D:\Invoicing\UQList.xaml'</span> is resolved to new relative path <span class="str">'Invoicing\UQList.xaml'</span> at directory <span class="str">'D:\'.
D:\Invoicing\UQList.xaml(55,167): error MC2000: Unknown build error, '</span>Method <span class="str">'add_PropertyChanged'</span> <span class="kwrd">in</span> type <span class="str">'UsageQuantityPresenter'</span> from assembly <span class="str">'ServiceManagementApplication'</span> does not have an implementation. Line 55 Position 167.<span class="str">'
  Input file '</span>D:\Trait\TraitsView.xaml<span class="str">' is resolved to new relative path '</span>Trait\TraitsView.xaml<span class="str">' at directory '</span>D:\<span class="str">'.
...
  Generated BAML file: '</span>D:\obj\Release\Themes\luna.normalcolor.baml<span class="str">'.
  Generated BAML file: '</span>D:\obj\Release\Trait\TraitsView.baml'.
  Markup compilation is done.
Done executing task <span class="str">&quot;MarkupCompilePass2&quot;</span> -- FAILED.
Done building target <span class="str">&quot;MarkupCompilePass2&quot;</span> <span class="kwrd">in</span> project <span class="str">&quot;ServiceMangementApplication.csproj&quot;</span> -- FAILED.</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>In the XAML we are depending on the UsageQuantityPresenter to implement INotifyPropertyChanged, which it does. However it also implements other interfaces and does inheritance of a base-class.</p>
<p>This is what it looked for for us:</p>
<pre class="csharpcode"><span class="rem">/// &lt;summary&gt;</span>
<span class="rem">/// UsageQuantityPresenter</span>
<span class="rem">/// &lt;/summary&gt;</span>
<span class="kwrd">public</span> <span class="kwrd">class</span> UsageQuantityPresenter : EntityViewPresenterBase, IUsageQuantity
{
...</pre>
<p>The EntityViewPresenterBase (I hate that class name by the way) implements INotifyPropertyChanged.</p>
<p>The solution was found in the following forum tread: <a title="http://social.msdn.microsoft.com/Forums/en/wpf/thread/00907c94-c6b2-4bf1-98f9-113c5c4392d8" href="http://social.msdn.microsoft.com/Forums/en/wpf/thread/00907c94-c6b2-4bf1-98f9-113c5c4392d8">http://social.msdn.microsoft.com/Forums/en/wpf/thread/00907c94-c6b2-4bf1-98f9-113c5c4392d8</a></p>
<p>It states that you should add:</p>
<pre>&lt;AlwaysCompileMarkupFilesInSeparateDomain&gt;true&lt;/AlwaysCompileMarkupFilesInSeparateDomain&gt;</pre>
<p>to the .csproj file with the XAML files. Doing this makes MSBuild happy again.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/OWQUm3CT3QPaVmjnbpdCrTpTsWo/0/da"><img src="http://feedads.g.doubleclick.net/~a/OWQUm3CT3QPaVmjnbpdCrTpTsWo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/OWQUm3CT3QPaVmjnbpdCrTpTsWo/1/da"><img src="http://feedads.g.doubleclick.net/~a/OWQUm3CT3QPaVmjnbpdCrTpTsWo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/uRMxrqVSuFU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/06/14/msbuild-fails-to-compile-wpf-with-error-mc2000-unkown-build-error-does-not-have-an-implementation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/06/14/msbuild-fails-to-compile-wpf-with-error-mc2000-unkown-build-error-does-not-have-an-implementation/</feedburner:origLink></item>
		<item>
		<title>The Checklist manifesto</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/uca772dsT44/</link>
		<comments>http://www.morkeleb.com/2010/06/14/the-checklist-manifesto/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 08:47:12 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Books]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/06/14/the-checklist-manifesto/</guid>
		<description><![CDATA[When Mary and Tom Poppendick was in Stockholm a few weeks ago, Mary recommended the Checklist Manifesto by Atul Gawande. And now I finished reading it. In general it was a good read. Since it’s American it tends not to be very concise, sometimes over elaborating or using constructs of words that could have been [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.morkeleb.com/wp-content/image33.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.morkeleb.com/wp-content/image_thumb34.png" width="163" height="244" /></a>When Mary and Tom Poppendick was in Stockholm a few weeks ago, Mary recommended the Checklist Manifesto by Atul Gawande. And now I finished reading it. </p>
<p>In general it was a good read. Since it’s American it tends not to be very concise, sometimes over elaborating or using constructs of words that could have been shorter. This is normal. </p>
<p>It describes among others how a Checklist somehow can unite the team for the task ahead. </p>
<p>Around chapter 6 it gets really interesting. It’s where it starts discussing what constitutes a good Check-list. Where it divides checklists into two different types: Read-do and do-confirm. To be used in different scenarios. The Read-do is a simple follow this checklist and do the things on it. The do-confirm list is a do some work, then verify that it has been done. In a team verification is done verbally.</p>
<p>It also explains how checklists are used in different industries. What I found interesting was the air-line industry that tests the checklists in flight-simulators. Which begs the question: When did you last execute tests on your software documentation?</p>
<p>The book also describes, among other benefits of checklists, how checklists can increase the communication in the team, by adding communication check-points. One thing that I found missing, was that checklists can help team-members to focus. By having items written down, they don’t have to worry about “not remembering them”, thus freeing up memory space for the task at hand. At least this is the Getting Things Done theory for checklists freeing up focus.</p>
<p>It’s remarkable, the results these checklists demonstrate when used in surgery. And for the question “Would you want the checklist to be used if you were the patient”, my answer is “yes”.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/hvP6T---VEXKAGNJIKPDa-ixiKs/0/da"><img src="http://feedads.g.doubleclick.net/~a/hvP6T---VEXKAGNJIKPDa-ixiKs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/hvP6T---VEXKAGNJIKPDa-ixiKs/1/da"><img src="http://feedads.g.doubleclick.net/~a/hvP6T---VEXKAGNJIKPDa-ixiKs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/uca772dsT44" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/06/14/the-checklist-manifesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/06/14/the-checklist-manifesto/</feedburner:origLink></item>
		<item>
		<title>On Google-TV</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/uDwzczl4e4U/</link>
		<comments>http://www.morkeleb.com/2010/06/03/on-google-tv/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 20:40:00 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Thoughts]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/06/03/on-google-tv/</guid>
		<description><![CDATA[It hit me last night that Google’s move into the TV-market has a significant meaning to where the Internet is heading. I work with distributed systems, flaky connections and clients capable of being online to collect data to then take it offline. Most clients work with the assumption, you cannot be online all the time. [...]]]></description>
			<content:encoded><![CDATA[<p>It hit me last night that Google’s move into the TV-market has a significant meaning to where the Internet is heading.</p>
<p>I work with distributed systems, flaky connections and clients capable of being online to collect data to then take it offline. Most clients work with the assumption, you cannot be online all the time.</p>
<p>Now Google’s move into the TV-market marks the beginning of an era where the Internet is just as available in homes as the TV-network. With that I mean that homes have stable available Internet with enough bandwidth to stream video and audio just like the TV-network. </p>
<p>It’s been predicted that just like the radio and TV, the Internet will become a Utility service, and I think that Google’s market entry marks the beginning of just that.</p>
<p>It will be interesting to see how software services will change as this becomes a reality.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/lpc0ALqlHBfxxbk1ZwvdDBXrZzo/0/da"><img src="http://feedads.g.doubleclick.net/~a/lpc0ALqlHBfxxbk1ZwvdDBXrZzo/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/lpc0ALqlHBfxxbk1ZwvdDBXrZzo/1/da"><img src="http://feedads.g.doubleclick.net/~a/lpc0ALqlHBfxxbk1ZwvdDBXrZzo/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/uDwzczl4e4U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/06/03/on-google-tv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/06/03/on-google-tv/</feedburner:origLink></item>
		<item>
		<title>Localizing Telerik components</title>
		<link>http://feedproxy.google.com/~r/morkeleb/eDpR/~3/ZtLXZpEB-Mc/</link>
		<comments>http://www.morkeleb.com/2010/06/02/localizing-telerik-components/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 20:22:16 +0000</pubDate>
		<dc:creator>Morten</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Telerik]]></category>
		<category><![CDATA[UI]]></category>

		<guid isPermaLink="false">http://www.morkeleb.com/2010/06/02/localizing-telerik-components/</guid>
		<description><![CDATA[We’re using Telerik components in some of our software at RemoteX. Telerik components are localized using resx-files, but we don’t use resx-files so we need the localization to work with our system. So this is how to do it: First we create a ResourceManager that will handle our localization class LocalizedResourceManager : ResourceManager { public [...]]]></description>
			<content:encoded><![CDATA[<p>We’re using <a href="http://www.telerik.com/" target="_blank">Telerik</a> components in some of our software at RemoteX. Telerik components are localized using resx-files, but we don’t use resx-files so we need the localization to work with our system.</p>
<p>So this is how to do it:</p>
<p>First we create a ResourceManager that will handle our localization</p>
<pre>class LocalizedResourceManager : ResourceManager
{
  public override string GetString(string name)
  {
    return String.Concat(&quot;Client.Telerik.&quot;, name).Localize();
  }
}</pre>
<p>And then, in an appropriate location we set the default Resource Manager for localization:</p>
<pre>LocalizationManager.DefaultResourceManager = new LocalizedResourceManager();</pre>
<p>There you have it, short post, but someone pointed out to me that people would like to know these things before they purchase component libraries.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/FTlXP2d5Hi-VOU6aagRojcVIb8g/0/da"><img src="http://feedads.g.doubleclick.net/~a/FTlXP2d5Hi-VOU6aagRojcVIb8g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/FTlXP2d5Hi-VOU6aagRojcVIb8g/1/da"><img src="http://feedads.g.doubleclick.net/~a/FTlXP2d5Hi-VOU6aagRojcVIb8g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/morkeleb/eDpR/~4/ZtLXZpEB-Mc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.morkeleb.com/2010/06/02/localizing-telerik-components/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.morkeleb.com/2010/06/02/localizing-telerik-components/</feedburner:origLink></item>
	</channel>
</rss>
