<?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:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>sfeldman.NET</title><link>http://weblogs.asp.net/sfeldman/default.aspx</link><description>.NET, code, personal thoughts</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/sfeldmannet" type="application/rss+xml" /><item><title>Tests Maintainability</title><link>http://weblogs.asp.net/sfeldman/archive/2009/07/13/tests-maintainability.aspx</link><pubDate>Tue, 14 Jul 2009 05:05:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7146935</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7146935</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7146935</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/07/13/tests-maintainability.aspx#comments</comments><description>&lt;p&gt;Write your test code as you would write your production code. In my opinion, a few of the most critical things are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Understanding (Readability and clarity of what the code is doing)&lt;/li&gt;    &lt;li&gt;Easy of change (be able to reflect changes)&lt;/li&gt;    &lt;li&gt;Quick safety net (understand what goes wrong and why)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;In &lt;a href="http://weblogs.asp.net/sfeldman/archive/2008/10/27/writing-a-test.aspx" target="_blank"&gt;one&lt;/a&gt; of my previous posts, I have blogged about test naming conventions, that is popular among BDD adopters, and starts to pick up among classic-TDD followers as well. Seven months later, I can see where all the bullet items are missing in classical TDD, and present in BDD.&lt;/p&gt;  &lt;h4&gt;True story example&lt;/h4&gt;  &lt;p&gt;In BDD we have Specifications and Observations breakdown. The classical TDD is missing this aspect. So a specification like the follows,&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; When_DomainService_is_asked_to_to_deliver_a_message_and_exception_is_thrown&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     [Observation]&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Should_recover_and_log_exception()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;     {}&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;looks as next in classic TDD.&lt;/p&gt;

&lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; overflow: auto; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; ShouldRecoverAndLogExceptionWhenDomainServiceThrowsFaultExceptionAndDeliveryQueueServiceThrowsFaultExceptionWhenAttemptingToDeliverMessage&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Readability / clarity is definitely compromised. A single word of 138 characters looks a bit complex.&lt;/p&gt;

&lt;p&gt;Ease of change is not quiet simple in classic TDD case – you first have to de-crypt what the test actually does before updating test/production code.&lt;/p&gt;

&lt;p&gt;Safety net – in this case we are on a thin ice – developers who have a problem to “de-crypt” the test code to figure out what went wrong, will eventually end-up either disabling tests for new code, or worse, removing old tests as well. And that happened in the past. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The moral of the post – BDD is all about the behaviour. Let the old habits of classic TDD-ism go away, accept that testing code is a first class citizen as the production code. &lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7146935" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/TDD/default.aspx">TDD</category></item><item><title>Lean Software Development: An Agile Toolkit - The Book</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/27/implementing-lean-software-development-the-book.aspx</link><pubDate>Sat, 27 Jun 2009 15:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7130086</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7130086</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7130086</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/27/implementing-lean-software-development-the-book.aspx#comments</comments><description>&amp;#160; &lt;p&gt;After reading “&lt;a href="http://weblogs.asp.net/sfeldman/archive/2009/06/19/implementing-lean-software-development-the-book.aspx" target="_blank"&gt;Implementing Lean Software Development&lt;/a&gt;: From Concept &lt;a href="http://www.amazon.ca/Lean-Software-Development-Agile-Toolkit/dp/0321150783" target="_blank"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="244" alt="image" src="http://weblogs.asp.net/blogs/sfeldman/image_65C48DA3.png" width="185" align="right" border="0" /&gt;&lt;/a&gt;to Cash”, I decided to look at the &lt;a href="http://www.amazon.ca/Implementing-Lean-Software-Development-Concept/dp/0321437381" target="_blank"&gt;original book&lt;/a&gt;. It is as good as the successor. IMO reading the original one first even better than just skipping to the new version.&lt;/p&gt;  &lt;p&gt;Mary and Tom Poppenieck have greatly captured so many aspects of software development and how to do those lean way.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7130086" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Books/default.aspx">Books</category></item><item><title>Building Software vs. Building a House</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/25/building-software-vs-building-a-house.aspx</link><pubDate>Thu, 25 Jun 2009 13:49:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7134088</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7134088</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7134088</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/25/building-software-vs-building-a-house.aspx#comments</comments><description>&lt;p&gt;Found this great excerpt in a book:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Principles are guiding ideas and insights about a discipline, while practices are what you actually do to carry out principles. Principles are universal, but it is not always easy to see how they apply to particular environments. Practices, on the other hand, give specific guidance on what to do, but they need to be adapted to the domain. We believe that there is no such thing as a &amp;quot;best&amp;quot; practice; practices must take context into account. In fact, the problems that arise when applying metaphors from other disciplines to software development are often the result of trying to transfer the practices rather than the principles of the other discipline.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;So true. How many times you’ve heard software development compared to constructions or any other discipline?&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7134088" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Books/default.aspx">Books</category></item><item><title>The Art of Unit Testing – The Book</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/24/the-art-of-unit-testing-the-book.aspx</link><pubDate>Wed, 24 Jun 2009 10:54:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7133403</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7133403</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7133403</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/24/the-art-of-unit-testing-the-book.aspx#comments</comments><description>&lt;p&gt;I have finished reading the book and wanted to write a short review, but &lt;a href="http://www.amazon.ca/Art-Unit-Testing-Examples-Net/dp/1933988274" target="_blank"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="244" alt="image" src="http://weblogs.asp.net/blogs/sfeldman/image_2E19B79A.png" width="196" align="right" border="0" /&gt;&lt;/a&gt; the best I could come up with is a list of cons and pros. Lame, I know, but this will give you a hint at least. &lt;/p&gt;  &lt;h5&gt;pros&lt;/h5&gt;  &lt;ol&gt;   &lt;li&gt;Smooth introduction, complexity is added step by step&lt;/li&gt;    &lt;li&gt;“Strict mocks are causing brittle tests” – more than that, it causes to get into the private details of execution, rather than overall design and behaviour&lt;/li&gt;    &lt;li&gt;“Method strings are bad inside tests” – absolutely&lt;/li&gt;    &lt;li&gt;“Mapping tests to projects” – very right decision to spend time on the subject and show a right example&lt;/li&gt;    &lt;li&gt;One-test-class-per-feature pattern is mentioned (music to BDD fan ears)&lt;/li&gt;    &lt;li&gt;Writing maintainable tests – critical topic that was covered&lt;/li&gt;    &lt;li&gt;DRY in test code – in general I agree that an unnecessary duplication should be removed from the test code. But there’s a think line that should not be crossed – tests should be readable and maintainable. For that, duplication sometimes is necessary. This is the less evil for a bigger cause – readability and maintainability. &lt;/li&gt;    &lt;li&gt;Row testing is showed&lt;/li&gt;    &lt;li&gt;“Integrating unit testing into the organization” – a very, very useful chapter, especially if you have to pioneer the field at your work place. Personally, I wish I would read this long time ago. &lt;/li&gt; &lt;/ol&gt;  &lt;h5&gt;cons&lt;/h5&gt;  &lt;ol&gt;   &lt;li&gt;Tests naming conventions&lt;/li&gt;    &lt;li&gt;Too much is dedicated to Stubs and manual Mocks&lt;/li&gt;    &lt;li&gt;Chapter 5 - Isolation (mock object) framework is explained with Rhino.Mocks Record/Playback rather that AAA that is more natural &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Note: AAA sample is showed, but after Record/Playback, which IMHO is a wrong way of teaching it. AAA is more intuitive and sticks more than the opponent.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;TypeMock promotion – &lt;a href="http://weblogs.asp.net/rosherove/" target="_blank"&gt;Roy&lt;/a&gt; is working for TypeMock that is a commercial tool. He could definitely use an OSS framework to show AAA mocking framework, like &lt;a href="http://code.google.com/p/moq/" target="_blank"&gt;Moq&lt;/a&gt; framework. In an absence of a free tool, I would accept TypeMock as an example, or as a part of available commercial tools. (Page 130 shows the distribution of popularity, and Rhino.Mocks with Moq are the two most popular free mocking frameworks). This was a promo for the tool… not nice.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Note: I am not a big fan of the fluent naming TypeMock is using. &lt;em&gt;Isolate.Fake&lt;/em&gt;.Instance&amp;lt;IWebService&amp;gt;() is two verbs that are not intuitive.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Naming conventions for tests – both unit tests and integration tests are suffixed with a single word “Test”. I would rather distinguish and use context “Spec” and “Integration” as an example.&lt;/li&gt;    &lt;li&gt;One-test-class-per-class pattern – for someone who’s doing BDD this is an anti-pattern. One big test class is a smell. It leads to brutal test code that is not only difficult to maintain, but even understand from it what it is doing. Very typical to the classical TDD.&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Note: Roy has provided a tip on this, politically correctly hinting that not everything from the big heads (&lt;a href="http://www.amazon.com/xUnit-Test-Patterns-Refactoring-Addison-Wesley/dp/0131495054" target="_blank"&gt;Meszaro&lt;/a&gt; in this case) is always an absolute must.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Assertion with Extension Methods to improve tests readability was not showed at all&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Note: IMO &lt;em&gt;Assert.AreEqual(found, expected)&lt;/em&gt; is confusing. I prefer to reveal intent with a code like &lt;em&gt;result.Should_Be_Equal_To(expected);&lt;/em&gt;&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;NO BDD SAMPLES – BAD BAD BAD. I strongly believe that just with classic TDD testing is not complete. BDD is the next step in the right direction, and skipping it entirely was a mistake.&lt;/li&gt; &lt;/ol&gt;  &lt;h5&gt;Conclusions&lt;/h5&gt;  &lt;p&gt;If you are a newbie in TDD or just “checking it out” – go for this book, worth it. In case you already have experience in TDD/BDD, and you are doing it for a while, it will not add much to your tool belt. Either way, the book is welcomed, and I am excited that more and more of this kind of literature is becoming available for .NET developers. I only wish the next version will be written &lt;strong&gt;BDD&lt;/strong&gt; style, right Roy? ;)&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7133403" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Books/default.aspx">Books</category></item><item><title>Breaking Myths</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/22/braking-myths.aspx</link><pubDate>Tue, 23 Jun 2009 04:20:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7132357</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7132357</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7132357</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/22/braking-myths.aspx#comments</comments><description>&lt;p&gt;I was chatting with an old mate of mine, &lt;a href="http://www.linkedin.com/profile?goback=.con&amp;amp;viewProfile=&amp;amp;key=2712421&amp;amp;jsstate=" mce_href="http://www.linkedin.com/profile?goback=.con&amp;amp;viewProfile=&amp;amp;key=2712421&amp;amp;jsstate=" target="_blank"&gt;Lev&amp;nbsp; Ozeryansky&lt;/a&gt;, with whom we graduated together computer science about 8 years ago (man, that was long time ago, but doesn’t feel like that). He’s a great developer, with lots of experience. Yesterday we have finally met and chatted a bit (guess about what). Two things I heard bothered me a lot.&lt;/p&gt;  &lt;p&gt;1. You need more than 2 developers to do pair programming and being effective.&lt;/p&gt;  &lt;p&gt;2. TDD is a waste of resources (where resources are developers, money, time, you name it) and only possible in big companies.&lt;/p&gt;  &lt;p&gt;Lev was doing TDD, but he was the only person to do so. Why didn’t this work for the entire company? It was considered a waste. Worse that that, it was mandated as a waste by the management to the point where developers believed in it. What a waste… Immediately I thought just about the &lt;a href="http://weblogs.asp.net/sfeldman/archive/2009/06/19/implementing-lean-software-development-the-book.aspx" mce_href="http://weblogs.asp.net/sfeldman/archive/2009/06/19/implementing-lean-software-development-the-book.aspx" target="_blank"&gt;blog published lately&lt;/a&gt; – management has got to buy into this and adopt, and it’s a developer role not to give up on change promotion.&lt;/p&gt;  &lt;p&gt;As to the first point, about pair programming, well… Personally I am a huge fan of pair programming for multiple reasons (final code quality, knowledge transfer, overall design, better testing in place, etc). I agree that it is impossible (and from the psychological point of view even not always desirable for certain individuals) to pair a 100% of time, but even 2 developers in a shop will do a huge difference by pairing.&lt;/p&gt;  &lt;p&gt;Along with that I am no longer surprised that bigger companies are adopting both. Not just because “they have more money to waste”, but since they have already “wasted enough to realize that something was absolutely wrong”. If I would be today in a position of a start-up, yes, I would think twice before throwing these two aspects into the game. In case of a running shop – no thinking. Just do it, unless you want to vanish quickly among piles of in-maintainable legacy code in the suffer-land.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7132357" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Personal/default.aspx">Personal</category><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Agile/default.aspx">Agile</category></item><item><title>Code Leader – The Book</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/19/code-leader-the-book.aspx</link><pubDate>Fri, 19 Jun 2009 06:57:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7129722</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7129722</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7129722</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/19/code-leader-the-book.aspx#comments</comments><description>&lt;p&gt;On my flight I had a chance to finish reading “&lt;a href="http://www.amazon.ca/gp/product/0470259248" target="_blank"&gt;Code Leader&lt;/a&gt;” by Patrick &lt;a href="http://weblogs.asp.net/blogs/sfeldman/image_5A62C6D6.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="208" alt="image" src="http://weblogs.asp.net/blogs/sfeldman/image_thumb_23291310.png" width="165" align="right" border="0" /&gt;&lt;/a&gt;Cauldwell. The book is a good source for ideas and concepts that “solid” developers should employ on a daily basis. Topics such as TDD, build vs. buy, CI, choosing the right tool for the right job, contract driven development, and much more.&lt;/p&gt;  &lt;p&gt;The book goes over subjects showing tidbits of everything, and could be probably expended and extended at least several times more. But then it would probably become “&lt;a href="http://www.amazon.ca/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882" target="_blank"&gt;Clean Code&lt;/a&gt;” and “&lt;a href="http://www.amazon.ca/Agile-Principles-Patterns-Practices-C/dp/0131857258" target="_blank"&gt;Agile Principles, Patterns, and Practices&lt;/a&gt;” clone, which author probably didn’t want to create. &lt;/p&gt;  &lt;p&gt;Overall, I liked the book as an introduction to so many “Alt .NET” concepts in a single source. What I missed in this book is the human leadership in the code, the human-factor in code creation, the behaviour and interaction between people that work on the same software. IMHO, code leadership is not only superiority in machine code, but also in the team environment. &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7129722" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Books/default.aspx">Books</category></item><item><title>Quality Software</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/13/quality-software.aspx</link><pubDate>Sun, 14 Jun 2009 03:39:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7115449</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7115449</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7115449</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/13/quality-software.aspx#comments</comments><description>&lt;p&gt;I am on my vacation, and not suppose to brag about software, but something has happened on my way to Israel, that just couldn’t go away silently. To get from Calgary to Tel-Aviv, I had to fly with Lufthansa for 9 hours first. The &lt;a href="http://en.wikipedia.org/wiki/Airbus_A340" mce_href="http://en.wikipedia.org/wiki/Airbus_A340"&gt;Airbus 340&lt;/a&gt; is a decent plain. It’s flying, and it’s as comfortable as a Economy class can be. What blew me away was the entertainment system. Let me break this down.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;As an airline customer, I want to be able to watch the movies on board, so my time on the boring flight could go faster.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Does this user story sounds too much to ask for? Nope, I think it’s a decent business case. As a customer “trapped” on board for more than a couple of hours, constrained in movement and in general ability to do what he/she wants, should be able at least to freely select a movie to watch from a limited list that is provided. Not in this case.&lt;/p&gt;  &lt;p&gt;First, the whole &lt;a href="http://www.flickr.com/photos/tims/3063573438/" mce_href="http://www.flickr.com/photos/tims/3063573438/"&gt;entertainment system crashed&lt;/a&gt; twice! &lt;strike&gt;(I apologize for not using my own image I took with my phone – the battery died on me and I wisely forgot the USB charger:)&lt;/strike&gt;. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/07062009280_1C3DEDE0.jpg"&gt;&lt;img title="07062009280" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="365" alt="07062009280" src="http://weblogs.asp.net/blogs/sfeldman/07062009280_thumb_15E6F185.jpg" width="484" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Was that an end? Nope.&lt;/p&gt;  &lt;p&gt;Second, when the system finally came back – any selected movie would yield “The selected content is not available at this moment”. Awesome work folks. Just what a client needs.&lt;/p&gt;  &lt;p&gt;Good that some people are hacky enough to go into flight information (crappy video with status of the flight) and at that time start zipping channels on the armrest (on the right side). That, surprisingly, was able to flip through the channels where movies were playing in an endless loop. Ha! Some entertainment, ladies and gentlemen.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Moral of the story – quality is just not there. To understand if your software is worth anything, become the client of your own software. Being techy is not enough. UX and usability are as important as the software itself. Bring value and not shame on our profession – that’s one of the things I realize in encounters like this.&lt;/p&gt;  &lt;p&gt;PS: Talking about usability – same entertainment system, the volume buttons seemed to be switched. Louder button was on left, and quieter button was on right… weird :) &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7115449" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Other/default.aspx">Other</category></item><item><title>Once You Have Tasted Flight, You Will Walk the Earth With Your Eyes Turned Skywards</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/13/once-you-have-tasted-flight-you-will-walk-the-earth-with-your-eyes-turned-skywards.aspx</link><pubDate>Sat, 13 Jun 2009 14:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7120599</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7120599</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7120599</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/13/once-you-have-tasted-flight-you-will-walk-the-earth-with-your-eyes-turned-skywards.aspx#comments</comments><description>
&lt;p&gt;Today, my friend Ran (no blog – boo!), has gave me a chance to feel what it is like to fly. Unfortunately, the weather conditions were not the best, and we could not do a lot, but the time spent up there was awesome. Feels great, and I wish I could do it more. Who knows, maybe I am discovering a new hobby in exploring the Z dimension :) Either way, a few pictures worth a long blog post.&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137801_23947F41.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137801_23947F41.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137801_thumb_458CB53A.jpg" title="P6137801" style="border: 0px none ; display: inline;" alt="P6137801" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137801_thumb_458CB53A.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137802_7C1A607E.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137802_7C1A607E.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137802_thumb_608538AE.jpg" title="P6137802" style="border: 0px none ; display: inline;" alt="P6137802" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137802_thumb_608538AE.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137806_64AF1073.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137806_64AF1073.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137806_thumb_03E1917A.jpg" title="P6137806" style="border: 0px none ; display: inline;" alt="P6137806" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137806_thumb_03E1917A.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137807_49C29ECD.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137807_49C29ECD.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137807_thumb_0D3A0456.jpg" title="P6137807" style="border: 0px none ; display: inline;" alt="P6137807" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137807_thumb_0D3A0456.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137812_48C9ED49.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137812_48C9ED49.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137812_thumb_6507099C.jpg" title="P6137812" style="border: 0px none ; display: inline;" alt="P6137812" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137812_thumb_6507099C.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137814_2D90D2A1.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137814_2D90D2A1.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137814_thumb_5129AEA1.jpg" title="P6137814" style="border: 0px none ; display: inline;" alt="P6137814" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137814_thumb_5129AEA1.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137816_324314F6.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137816_324314F6.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137816_thumb_2CC47E85.jpg" title="P6137816" style="border: 0px none ; display: inline;" alt="P6137816" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137816_thumb_2CC47E85.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137819_22AFDD5A.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137819_22AFDD5A.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137819_thumb_26C98F52.jpg" title="P6137819" style="border: 0px none ; display: inline;" alt="P6137819" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137819_thumb_26C98F52.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137826_4AA240DF.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137826_4AA240DF.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137826_thumb_345BFFC0.jpg" title="P6137826" style="border: 0px none ; display: inline;" alt="P6137826" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137826_thumb_345BFFC0.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137824_59794A2C.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137824_59794A2C.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137824_thumb_5CF7196F.jpg" title="P6137824" style="border: 0px none ; display: inline;" alt="P6137824" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137824_thumb_5CF7196F.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137829_41DE4A61.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137829_41DE4A61.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137829_thumb_324B12C5.jpg" title="P6137829" style="border: 0px none ; display: inline;" alt="P6137829" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137829_thumb_324B12C5.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137833_359C84A0.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137833_359C84A0.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137833_thumb_6717CC68.jpg" title="P6137833" style="border: 0px none ; display: inline;" alt="P6137833" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137833_thumb_6717CC68.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
  
&lt;p&gt;PS: When we were about to leave, another flying craft appeared, “showing off” some nice stunts. As I learned later, it was a retired F-15 pilot. Another guy showed up as well, not flying, but getting his plain in the air. Hobby that is an obsession. &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137839_38DDD0AE.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137839_38DDD0AE.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137839_thumb_5A69D3B2.jpg" title="P6137839" style="border: 0px none ; display: inline;" alt="P6137839" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137839_thumb_5A69D3B2.jpg" border="0" width="244" height="184"&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6137841_1665EF9B.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/P6137841_1665EF9B.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/P6137841_thumb_436AB69C.jpg" title="P6137841" style="border: 0px none ; display: inline;" alt="P6137841" mce_src="http://weblogs.asp.net/blogs/sfeldman/P6137841_thumb_436AB69C.jpg" border="0" width="184" height="244"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Stealing Rans' signature borrowed from Leonard Da Vinci I will finish this. "For once you have tasted flight you will walk the earth with your eyes turned skywards, for there you have been and there you will long to return."&lt;br&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7120599" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Personal/default.aspx">Personal</category></item><item><title>With Power Comes Responsibility</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/12/with-power-comes-responsibility.aspx</link><pubDate>Fri, 12 Jun 2009 17:20:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7119580</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7119580</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7119580</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/12/with-power-comes-responsibility.aspx#comments</comments><description>&lt;p&gt;In software like in a real life, not always everything can be extremely simple. One example I can think of right away is Inversion of Control container (IoC). In a simple application, it’s not a big deal, and normally achieved easily. The dependent component leverages some sort of Static Gateway container to resolve the dependencies based on contacts.&lt;/p&gt;  &lt;div style="border-right: gray 1px solid; padding-right: 4px; border-top: gray 1px solid; padding-left: 4px; font-size: 8pt; padding-bottom: 4px; margin: 20px 0px 10px; border-left: gray 1px solid; width: 97.5%; cursor: text; max-height: 200px; line-height: 12pt; padding-top: 4px; border-bottom: gray 1px solid; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; background-color: #f4f4f4"&gt;   &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;     &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; Component&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Component(IDependency dependency) &lt;span style="color: #008000"&gt;//...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; Component() : &lt;span style="color: #0000ff"&gt;this&lt;/span&gt;(DependencyResolver.Resolve&amp;lt;IDependency&amp;gt;()) &lt;span style="color: #008000"&gt;//...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In order to “populate” container with all the dependencies, normally we’d leverage some sort of start-up task to achieve the goal.&lt;/p&gt;

&lt;div&gt;
  &lt;div style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;
    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   1:&lt;/span&gt; &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; StartupTask : ICommand&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   3:&lt;/span&gt;     &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; Execute()&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   5:&lt;/span&gt;         DependencyResolver.Register&amp;lt;IDependency&amp;gt;(() =&amp;gt; &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Dependency());&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   6:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, &amp;#39;Courier New&amp;#39;, courier, monospace; border-right-style: none; border-left-style: none; background-color: white; border-bottom-style: none"&gt;&lt;span style="color: #606060"&gt;   7:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;When does the complexity creeps in? When a real life scenario kicks in. One of those scenarios are services. Why services? Because now it’s no longer a linear execution (a service can be started and stopped), and we neither want to pollute the service code with start-up tasks’ responsibilities. Solution? Different ones, but either way, a bit of complexity is added and from that moment and on developers are required to “ramp up” in knowledge to be able to understand and maintain it (develop or just-keep-alive). This is where “with power comes responsibility” is mostly used.&lt;/p&gt;

&lt;p&gt;So is happening in real life. I was quiet surprised to see the most unexpected place – kids playground. &lt;/p&gt;

&lt;p&gt;Playgrounds in Israel are mostly for kids up to age of 6 and not extremely attractive for teens.&amp;#160; Despite unmatched age, those normally spend some time at playgrounds as well, ruining them completely. A bright idea that a wise man had was to introduce “work-out” machines side-by-side with kids playground, so teens would invest their energy in a more peaceful way. Boy it worked! Not only little kids now have playgrounds in normal and usable condition and their parents a peace of mind, but also the awareness among teenagers for physical fitness has significantly raised. Well done. Here are some shots of proof how with power comes responsibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6100051_590A8FE6.jpg"&gt;&lt;img title="P6100051" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="244" alt="P6100051" src="http://weblogs.asp.net/blogs/sfeldman/P6100051_thumb_516EFAAC.jpg" width="184" border="0" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6100057_669D0054.jpg"&gt;&lt;img title="P6100057" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="244" alt="P6100057" src="http://weblogs.asp.net/blogs/sfeldman/P6100057_thumb_73F2ED8D.jpg" width="184" border="0" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6100053_7B4EAD3A.jpg"&gt;&lt;img title="P6100053" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="184" alt="P6100053" src="http://weblogs.asp.net/blogs/sfeldman/P6100053_thumb_4936C116.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;a href="http://weblogs.asp.net/blogs/sfeldman/P6100055_49DF7740.jpg"&gt;&lt;img title="P6100055" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="184" alt="P6100055" src="http://weblogs.asp.net/blogs/sfeldman/P6100055_thumb_7B0E1606.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7119580" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Other/default.aspx">Other</category></item><item><title>Calgary, June 6th 2009</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/06/calgary-june-6th-2009.aspx</link><pubDate>Sat, 06 Jun 2009 14:49:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7109698</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7109698</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7109698</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/06/calgary-june-6th-2009.aspx#comments</comments><description>&lt;p&gt;I am about to leave for my vacation and I think it is a perfect timing, based on what I saw this morning outside :)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/06062009snow_48AA8795.jpg" mce_href="http://weblogs.asp.net/blogs/sfeldman/06062009snow_48AA8795.jpg"&gt;&lt;img src="http://weblogs.asp.net/blogs/sfeldman/06062009snow_thumb_2CB9529D.jpg" title="06062009-snow" style="border: 0px none ; display: block; float: none; margin-left: auto; margin-right: auto;" alt="06062009-snow" mce_src="http://weblogs.asp.net/blogs/sfeldman/06062009snow_thumb_2CB9529D.jpg" border="0" width="604" height="804"&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7109698" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Personal/default.aspx">Personal</category></item><item><title>TortoiseSVN – Missing Key Shortcuts</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/02/visualsvn-missing-key-shortcuts.aspx</link><pubDate>Tue, 02 Jun 2009 14:24:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7106102</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7106102</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7106102</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/02/visualsvn-missing-key-shortcuts.aspx#comments</comments><description>&lt;p&gt;Update: 2009-06-03&lt;/p&gt;  &lt;p&gt;&lt;a href="http://tortoisesvn.tigris.org/"&gt;TortoiseSVN&lt;/a&gt; is a good tool. I like the frequent updates and good integration with Visual Studio through &lt;a href="http://www.visualsvn.com/visualsvn/" target="_blank"&gt;VisualSVN&lt;/a&gt;. What I find annoying, is breaking changes with no immediate follow-ups to fix those. Now it’s the missing key shortcuts. I prefer keyboard to a mouse, so in my case it’s a waste. &lt;/p&gt;  &lt;p&gt;Please bring it back.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/blogs/sfeldman/image_7EB953BB.png"&gt;&lt;img title="image" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="302" alt="image" src="http://weblogs.asp.net/blogs/sfeldman/image_thumb_5621D820.png" width="659" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7106102" width="1" height="1"&gt;</description></item><item><title>MIME Header - Content-Disposition</title><link>http://weblogs.asp.net/sfeldman/archive/2009/06/01/mime-header-content-disposition.aspx</link><pubDate>Tue, 02 Jun 2009 05:17:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7105615</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7105615</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7105615</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/06/01/mime-header-content-disposition.aspx#comments</comments><description>&lt;p&gt;I am trying to figure out something on MIME header, and just can’t understand who is standing behind the RFCs. Are they trying to read it on their own and realize if it makes sense?! &lt;/p&gt;  &lt;p&gt;The problem I am facing is attachments in another standard, RosettaNet, that is leveraging MIME for attachments. We are using a third party component to parse a RosettaNet message and load all the attachments. Attachments original filenames are supposed to be in the “Content-Disposition” property, marked as “Content-Disposition: attachment; filename=some_filename” according to the &lt;a href="http://en.wikipedia.org/wiki/MIME#Content-Disposition" target="_blank"&gt;this WIKI&lt;/a&gt;. “But WIKI is not RFC” you say, well, read &lt;a href="http://tools.ietf.org/html/rfc2183" target="_blank"&gt;RFC 2183&lt;/a&gt;. It says&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre&gt;In addition to allowing the sender to specify the presentational
disposition of a message component, it is &lt;strong&gt;&lt;u&gt;desirable&lt;/u&gt;&lt;/strong&gt; to allow her to
indicate a default archival disposition; a filename. The &lt;u&gt;optional&lt;/u&gt;
&amp;quot;filename&amp;quot; parameter provides for this.&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And later:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;&lt;h5&gt;&lt;a name="section-2.3"&gt;2.3&lt;/a&gt;  The Filename Parameter&lt;/h5&gt;

   The sender may want to suggest a filename to be used if the entity is
   detached and stored in a separate file. If the receiving MUA writes
   the entity to a file, the suggested filename &lt;u&gt;should be used&lt;/u&gt; as a
   basis for the actual filename, where possible.&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Reading more of the great RFC, I found an example #3, in section 2.10&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre&gt;The following body part contains a JPEG image that should be
displayed to the user only if the user requests it. &lt;u&gt;If the JPEG is
written to a file, the file should be named &amp;quot;genome.jpg&amp;quot;.&lt;/u&gt;  The
recipient's user might also choose to set the last-modified date of
the stored file to date in the modification-date parameter:

        Content-Type: image/jpeg
        Content-Disposition: attachment; filename=genome.jpeg;
          modification-date=&amp;quot;Wed, 12 Feb 1997 16:29:51 -0500&amp;quot;;
        Content-Description: a complete map of the human genome

        &amp;lt;jpeg data&amp;gt;&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;I am really confused.&amp;#160; One part says “it’s optional”, the other part says “should be used”. So in case I want to save the attachment in a file with the original filename, I might end up not having one (filename)?! Great… Long live standards.&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7105615" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Other/default.aspx">Other</category></item><item><title>Wise Manager Words</title><link>http://weblogs.asp.net/sfeldman/archive/2009/05/27/wise-manager-words.aspx</link><pubDate>Wed, 27 May 2009 23:52:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7099004</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7099004</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7099004</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/05/27/wise-manager-words.aspx#comments</comments><description>&lt;blockquote&gt;   &lt;p&gt;The task then is to refine the code base to better meet customer needs. If that is not clear, the programmers should not write a line of code. Every line of code costs money to write and more money to support. It is better for the developers to be surfing than writing code that won’t be needed. If they write code that ultimately is not used, I will be paying for that code for the life of the system, which is typically longer than my professional life. If they went surfing, they would have fun, and I would have a less expensive system and fewer headaches to maintain.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;-- Jeff Sutherland&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7099004" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Agile/default.aspx">Agile</category></item><item><title>NHibernate SessionFactory Lesson</title><link>http://weblogs.asp.net/sfeldman/archive/2009/05/20/nhibernate-sessionfactory-lesson.aspx</link><pubDate>Thu, 21 May 2009 05:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7093923</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7093923</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7093923</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/05/20/nhibernate-sessionfactory-lesson.aspx#comments</comments><description>&lt;p&gt;Anyone who worked with NHibernate knows that SessionFactory is an expensive object, that better to be constructed once, cached and re-used to build lightweight and disposable NHibernate sessions. It’s always shows up as a warning in books (&lt;a href="http://www.manning.com/kuate/" target="_blank"&gt;NHibernate in Action&lt;/a&gt;, page 35), WIKIs, blogs, etc.&lt;/p&gt;  &lt;p&gt;Today our team had a chance to experience what a wrong handling of SessionFactory can turn into – a huge memory leak. SessionFactory is a heavy object, it’s initialization and allocation is not a trivial one. Each time SessionFactory is constructed, it uses a significant amount of recourses and holds to those. If SessionFactory is not cached as a single instance, each allocation causes to the overall memory leak. Combine that with luck of Session disposing generates a very interesting result – more than a gig of&amp;#160; memory for something that is barely 20 megs.&lt;/p&gt;  &lt;p&gt;Moral of the story:&lt;/p&gt;  &lt;p&gt;- As in pair programming, so is in pair-troubleshooting – team works better&lt;/p&gt;  &lt;p&gt;- Using a third party components (even the best out there) without exploratory tests will cause eventually pain&lt;/p&gt;  &lt;p&gt;- Follow simple notes third party components authors write, they might simplify your life&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7093923" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/NHibernate/default.aspx">NHibernate</category></item><item><title>Building a Dream Team</title><link>http://weblogs.asp.net/sfeldman/archive/2009/05/19/building-a-dream-team.aspx</link><pubDate>Tue, 19 May 2009 16:57:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:7092889</guid><dc:creator>Sean Feldman</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://weblogs.asp.net/sfeldman/rsscomments.aspx?PostID=7092889</wfw:commentRss><wfw:comment>http://weblogs.asp.net/sfeldman/commentapi.aspx?PostID=7092889</wfw:comment><comments>http://weblogs.asp.net/sfeldman/archive/2009/05/19/building-a-dream-team.aspx#comments</comments><description>&lt;p&gt;The company I work for, &lt;a href="http://www.cortex.net"&gt;Cortex Business Solutions&lt;/a&gt;, is in the hiring mode again. We are looking for passionate developers (Terry has worded the requirements in his &lt;a href="http://www.connicus.com/archive/2008/12/17/a-call-for-passionate-developers.aspx"&gt;post&lt;/a&gt; already, so I will keep it DRY). &lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=7092889" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/sfeldman/archive/tags/Other/default.aspx">Other</category></item></channel></rss>
