<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>codedancer</title>
    <link>http://mawi.org/</link>
    <description>mawi likes a slow waltz</description>
    <language>en-us</language>
    <copyright>Marcus Widerberg</copyright>
    <lastBuildDate>Tue, 13 Nov 2007 21:32:45 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.8.5223.2</generator>
    <managingEditor>info@mawi.org</managingEditor>
    <webMaster>info@mawi.org</webMaster>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=e7e7c17f-ab05-4de6-9a64-3453e9ad2f75</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,e7e7c17f-ab05-4de6-9a64-3453e9ad2f75.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,e7e7c17f-ab05-4de6-9a64-3453e9ad2f75.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=e7e7c17f-ab05-4de6-9a64-3453e9ad2f75</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">Haven't blogged since summer (!!). So here
   comes a small update.<br /><br />
   This years edition of <a href="http://www.oredev.org/">Øredev</a> is underway. Me
   and the rest of <a href="http://www.blueplane.se/">blue plane</a> are hanging out,
   we've got a very cozy corner set up. Pics of that coming up!<br /><br />
   Tomorrow I will be giving a <a href="http://www.oredev.org/toppmeny/conference/methodstools/readability.4.76e8b1c6112f078db498000143909.html">talk</a> on
   readability. I will talk about the writing/communication perspective, code comprehension
   theories and then do a little list of my own favorite readability edits and recommendations;
   most are simple things that I've seen alot at different teams, that can be fixed easily...
   and maybe something that I find cool in this space, like method chaining in the name
   of readability ("fluent interfaces"). Hopefully, I'll have some time to tie in a few
   words about readability as a team effort.<br /><br />
   See you there.<br /><p></p><img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=e7e7c17f-ab05-4de6-9a64-3453e9ad2f75" /></body>
      <title>Øredev 2007 underway</title>
      <guid>http://mawi.org/PermaLink,guid,e7e7c17f-ab05-4de6-9a64-3453e9ad2f75.aspx</guid>
      <link>http://mawi.org/%c3%98redev2007Underway.aspx</link>
      <pubDate>Tue, 13 Nov 2007 21:32:45 GMT</pubDate>
      <description>Haven't blogged since summer (!!). So here comes a small update.&lt;br&gt;
&lt;br&gt;
This years edition of &lt;a href="http://www.oredev.org/"&gt;Øredev&lt;/a&gt; is underway. Me
and the rest of &lt;a href="http://www.blueplane.se/"&gt;blue plane&lt;/a&gt; are hanging out,
we've got a very cozy corner set up. Pics of that coming up!&lt;br&gt;
&lt;br&gt;
Tomorrow I will be giving a &lt;a href="http://www.oredev.org/toppmeny/conference/methodstools/readability.4.76e8b1c6112f078db498000143909.html"&gt;talk&lt;/a&gt; on
readability. I will talk about the writing/communication perspective, code comprehension
theories and then do a little list of my own favorite readability edits and recommendations;
most are simple things that I've seen alot at different teams, that can be fixed easily...
and maybe something that I find cool in this space, like method chaining in the name
of readability ("fluent interfaces"). Hopefully, I'll have some time to tie in a few
words about readability as a team effort.&lt;br&gt;
&lt;br&gt;
See you there.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=e7e7c17f-ab05-4de6-9a64-3453e9ad2f75" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,e7e7c17f-ab05-4de6-9a64-3453e9ad2f75.aspx</comments>
      <category>Talks and events</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=c162a23b-9791-431b-b733-b4a8d0d414d0</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,c162a23b-9791-431b-b733-b4a8d0d414d0.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,c162a23b-9791-431b-b733-b4a8d0d414d0.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=c162a23b-9791-431b-b733-b4a8d0d414d0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      I introduced the factory facility of windsor (or actually castle microkernel) at
      the end of my previous project and I submitted some patches on it's programmatic use,
      and there is not so much documentation on it (well, not any on that part) so a little
      writeup was in order.
   </p>
        <h3>What is windsor? 
   </h3>
        <p>
      If you don't know what a container/IoC/DI is, and like to know concepts, check <a href="http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html">this</a> out.
      If you don't know and want an example of windsor, check <a href="http://www.castleproject.org/container/gettingstarted/part1/code.html">this</a> out. A
      container is a little piece of frameworkish code that takes care of constructing your
      instances for you in a OO program, so you don't have to keep track of what goes where
      which simplifies alot. 
   </p>
        <p>
       
   </p>
        <p>
      You use it by first describing the classes you use and then asking for an instance
      of one. For example, you can tell it that you have a class D that uses an instance
      of class A and C. Class C in turn needs an instance of a class B. This is
      done in some init area of your code. Then in the program, you can say give me a D
      (<em>resolve</em>), and it will create A, create B and use it to create C
      and use these to create a D and return to you. Example classes:
   </p>
        <div class="CodeFormatContainer">  <style><!--
.csharpcode, .csharpcode pre
{
	font-size: smallest;
	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><div class="csharpcode"><pre class="alt"><span class="kwrd">public</span><span class="kwrd">class</span> A
         { }</pre><pre><span class="kwrd">public</span><span class="kwrd">class</span> B { }</pre><pre class="alt"><span class="kwrd">public</span><span class="kwrd">class</span> C</pre><pre>{</pre><pre class="alt"><span class="kwrd">public</span> C(B instanceOfB) { }</pre><pre>}</pre><pre class="alt"><span class="kwrd">public</span><span class="kwrd">class</span> D</pre><pre>{</pre><pre class="alt"><span class="kwrd">public</span> D(A instanceOfA, C instanceOfC)
         { }</pre><pre>}</pre></div></div>
        <p>
       
   </p>
        <p>
      Example use in test:
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="csharpcode">
            <pre class="alt">[Test]</pre>
            <pre>
              <span class="kwrd">public</span>
              <span class="kwrd">void</span> MostBasicExample()</pre>
            <pre class="alt">{</pre>
            <pre>   IKernel container = <span class="kwrd">new</span> DefaultKernel();</pre>
            <pre class="alt">   container.AddComponent(<span class="str">"keyForClassA"</span>, <span class="kwrd">typeof</span>(A));</pre>
            <pre>   container.AddComponent(<span class="str">"keyForClassB"</span>, <span class="kwrd">typeof</span>(B));</pre>
            <pre class="alt">   container.AddComponent(<span class="str">"keyForClassC"</span>, <span class="kwrd">typeof</span>(C));</pre>
            <pre>   container.AddComponent(<span class="str">"keyForClassD"</span>, <span class="kwrd">typeof</span>(D));</pre>
            <pre class="alt"> </pre>
            <pre>   D anAInstance = </pre>
            <pre class="alt">      container.Resolve(<span class="str">"keyForClassD"</span>, <span class="kwrd">typeof</span>(D)) <span class="kwrd">as</span> D;</pre>
            <pre> </pre>
            <pre class="alt">   Assert.That(anAInstance, Is.TypeOf(<span class="kwrd">typeof</span>(D)));</pre>
            <pre>}</pre>
          </div>
        </div>
        <p>
       
   </p>
        <p>
          <em>Concepts/acronymns are "inversion of control" and "dependency injection", I like
      to refer to it as just a container, it's imprecise and contextual instead of sacrificing
      simplicity to get precise, but that's who I am. It's just oo, really. There are several
      such pieces of container code for .NET; castle windsor, spring.net and the objectbuilder
      framework from ms that is used in their application blocks, etc. I personally favor
      the castle project implementation because of it's ease of use and simplicity.</em>
        </p>
        <p>
          <em>
          </em> 
   </p>
        <h3>Use your own wrapper 
   </h3>
        <p>
      I feel the default container lacks some stuff, so I wrap it and add generics, methods
      that omit the key (sometimes I know that I will only have one implementation of a
      class in a system) and that look at metadata for attributes in an assembly and auto
      register. I make my wrapper a <em>singleton</em>. I slap on a custom attribute I call
      "ContainerComponent" on the example classes above and the test becomes:
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="CodeFormatContainer">
            <div class="csharpcode">
              <pre class="alt">[Test]</pre>
              <pre>
                <span class="kwrd">public</span>
                <span class="kwrd">void</span> MostBasicExample()</pre>
              <pre class="alt">{</pre>
              <pre>   Container.Instance.AddFromAssemblyOf&lt;A&gt;();</pre>
              <pre class="alt">   D anAInstance = Container.Instance.Resolve&lt;D&gt;();</pre>
              <pre> </pre>
              <pre class="alt">   Assert.That(anAInstance, Is.TypeOf(<span class="kwrd">typeof</span>(D)));</pre>
              <pre>}</pre>
            </div>
          </div>
        </div>
        <p>
          <em>(In fairness, there have been some recent commits that move toward this.</em>)
   </p>
        <h3> 
   </h3>
        <h3>The factory facility example 
   </h3>
        <p>
      Windsor can be extended via <em>facilities</em>, small pieces of code that add small
      pieces of functionality. The <em>factory facility</em> allows us to tell windsor to
      use a certain method (instance or static) on a class to create an instance of
      a class. I added some simple methods to add factories programmatically. Here are some
      example classes:
   </p>
        <div class="CodeFormatContainer">  
      <div class="csharpcode"><pre class="alt"><span class="kwrd">public</span><span class="kwrd">interface</span> IUserRepository</pre><pre>{</pre><pre class="alt"><span class="kwrd">void</span> UpdateUser();</pre><pre>}</pre><pre class="alt"> </pre><pre><span class="kwrd">public</span><span class="kwrd">class</span> UserRepositoryImplementation
         : IUserRepository</pre><pre class="alt">{</pre><pre><span class="kwrd">public</span><span class="kwrd">void</span> UpdateUser()</pre><pre class="alt">   {</pre><pre> </pre><pre class="alt">   }</pre><pre>}</pre><pre class="alt"> </pre><pre><span class="kwrd">public</span><span class="kwrd">class</span> UserRepositoryFactory</pre><pre class="alt">{</pre><pre><span class="kwrd">public</span> UserRepositoryImplementation Create()</pre><pre class="alt">   {</pre><pre><span class="kwrd">return</span><span class="kwrd">new</span> UserRepositoryImplementation();</pre><pre class="alt">   }</pre><pre>}</pre></div></div>
        <h3>Factory support facility programmatically 
   </h3>
        <p>
      Here is an example test using microkernel and programmatically using the factory support
      facility (currently in trunk):
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="csharpcode">
            <pre class="alt">[Test]</pre>
            <pre>
              <span class="kwrd">public</span>
              <span class="kwrd">void</span> FactoryResolveWithProposedFacilityPatch()</pre>
            <pre class="alt">{</pre>
            <pre>   IKernel kernel = <span class="kwrd">new</span> DefaultKernel();</pre>
            <pre class="alt">   FactorySupportFacility facility = </pre>
            <pre>
              <span class="kwrd">new</span> FactorySupportFacility();</pre>
            <pre class="alt">   kernel.AddFacility(<span class="str">"factory.support"</span>,
         facility);</pre>
            <pre> </pre>
            <pre class="alt">
              <span class="kwrd">string</span> userRepositoryKey = <span class="str">"userrepository"</span>;</pre>
            <pre>   facility.AddFactory&lt;IUserRepository, UserRepositoryFactory&gt;</pre>
            <pre class="alt">      (userRepositoryKey, <span class="str">"Create"</span>);</pre>
            <pre> </pre>
            <pre class="alt">   IUserRepository userRepository = kernel.Resolve(</pre>
            <pre>      userRepositoryKey,</pre>
            <pre class="alt">
              <span class="kwrd">typeof</span>(IUserRepository)) <span class="kwrd">as</span> IUserRepository;</pre>
            <pre> </pre>
            <pre class="alt">   Assert.That(userRepository, </pre>
            <pre>      Is.TypeOf(<span class="kwrd">typeof</span>(UserRepositoryImplementation)));</pre>
            <pre class="alt">}</pre>
          </div>
        </div>
        <p>
       
   </p>
        <p>
      I think that is messy, if we use a little container wrapper and say that we have don't
      need the key to differentiate 
   </p>
        <p>
      between implementations, it becomes:
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="csharpcode">
            <pre class="alt">[Test]</pre>
            <pre>
              <span class="kwrd">public</span>
              <span class="kwrd">void</span> FactoryResolveWithContainer_NoKey()</pre>
            <pre class="alt">{</pre>
            <pre>   Container.Instance</pre>
            <pre class="alt">      .AddFactory&lt;IUserRepository, UserRepositoryFactory&gt;</pre>
            <pre>      (<span class="str">"Create"</span>);</pre>
            <pre class="alt"> </pre>
            <pre>   IUserRepository userRepository = </pre>
            <pre class="alt">      Container.Instance.Resolve&lt;IUserRepository&gt;();</pre>
            <pre> </pre>
            <pre class="alt">   Assert.That(userRepository, </pre>
            <pre>      Is.TypeOf(<span class="kwrd">typeof</span>(UserRepositoryImplementation)));</pre>
            <pre class="alt">}</pre>
          </div>
        </div>
        <p>
       
   </p>
        <h3>Fuller example
   </h3>
        <p>
      Here are some example classes for a fuller example:
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="csharpcode">
            <pre class="alt">
              <span class="kwrd">public</span>
              <span class="kwrd">class</span> FileStorageService</pre>
            <pre>   {</pre>
            <pre class="alt"> </pre>
            <pre>   }</pre>
            <pre class="alt">
              <span class="kwrd">public</span>
              <span class="kwrd">class</span> AnnounceService</pre>
            <pre>   {</pre>
            <pre class="alt">
              <span class="kwrd">private</span> FileStorageService _storage;</pre>
            <pre>
              <span class="kwrd">private</span> IUserRepository _userRepo;</pre>
            <pre class="alt"> </pre>
            <pre>
              <span class="kwrd">public</span> IUserRepository UserRepo</pre>
            <pre class="alt">      {</pre>
            <pre>         get { <span class="kwrd">return</span> _userRepo; }</pre>
            <pre class="alt">      }</pre>
            <pre> </pre>
            <pre class="alt"> </pre>
            <pre>
              <span class="kwrd">public</span> AnnounceService( FileStorageService fileStorage,</pre>
            <pre class="alt">         IUserRepository userRepo )</pre>
            <pre>      {</pre>
            <pre class="alt">         _storage = fileStorage;</pre>
            <pre>         _userRepo = userRepo;</pre>
            <pre class="alt">      }</pre>
            <pre> </pre>
            <pre class="alt">   }</pre>
          </div>
        </div>
        <p>
       
   </p>
        <p>
      Example:
   </p>
        <p>
       
   </p>
        <div class="CodeFormatContainer">
          <div class="csharpcode">
            <pre class="alt">[Test]</pre>
            <pre>
              <span class="kwrd">public</span>
              <span class="kwrd">void</span> FactoryResolveWithContainer_FullerExample()</pre>
            <pre class="alt">{</pre>
            <pre>   Container container = Container.Instance;</pre>
            <pre class="alt">   container.AddFactory&lt;IUserRepository, </pre>
            <pre>      UserRepositoryFactory&gt;(<span class="str">"Create"</span>);</pre>
            <pre class="alt">   container.AddComponent&lt;FileStorageService&gt;();</pre>
            <pre>   container.AddComponent&lt;AnnounceService&gt;();</pre>
            <pre class="alt"> </pre>
            <pre>   AnnounceService announceService = </pre>
            <pre class="alt">      container.Resolve&lt;AnnounceService&gt;();</pre>
            <pre> </pre>
            <pre class="alt">   Assert.That(announceService.UserRepo, </pre>
            <pre>      Is.TypeOf(<span class="kwrd">typeof</span>(UserRepositoryImplementation)));</pre>
            <pre class="alt">}</pre>
          </div>
        </div>
        <p>
       
   </p>
        <h3>Parameters 
   </h3>
        <p>
      You can set parameters for the factory method at configuration time and at runtime.
      Will continue with that and post code later on, stay tuned.
   </p>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=c162a23b-9791-431b-b733-b4a8d0d414d0" />
      </body>
      <title>Programmatic castle microkernel / windsor &amp;amp; the Factory facility</title>
      <guid>http://mawi.org/PermaLink,guid,c162a23b-9791-431b-b733-b4a8d0d414d0.aspx</guid>
      <link>http://mawi.org/ProgrammaticCastleMicrokernelWindsorAmpTheFactoryFacility.aspx</link>
      <pubDate>Wed, 11 Jul 2007 15:35:41 GMT</pubDate>
      <description>&lt;p&gt;
   I introduced the factory facility of windsor (or actually castle microkernel)&amp;nbsp;at
   the end of my previous project and I submitted some patches on it's programmatic use,
   and there is not so much documentation on it (well, not any on that part) so a little
   writeup was in order.
&lt;/p&gt;
&lt;h3&gt;What is windsor?&amp;nbsp;
&lt;/h3&gt;
&lt;p&gt;
   If you don't know what a container/IoC/DI is, and like to know concepts, check &lt;a href="http://www.jamesshore.com/Blog/Dependency-Injection-Demystified.html"&gt;this&lt;/a&gt; out.
   If you don't know and want an example of windsor, check &lt;a href="http://www.castleproject.org/container/gettingstarted/part1/code.html"&gt;this&lt;/a&gt; out.&amp;nbsp;A
   container is a little piece of frameworkish code that takes care of constructing your
   instances for you in a OO program, so you don't have to keep track of what goes where
   which simplifies alot. 
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   You use it by first describing the classes you use and then asking for an instance
   of one. For example, you can tell it that you have a class&amp;nbsp;D that uses an instance
   of class&amp;nbsp;A and C. Class&amp;nbsp;C in turn needs an instance of a class B. This is
   done in some init area of your code. Then in the program, you can say give me a&amp;nbsp;D
   (&lt;em&gt;resolve&lt;/em&gt;), and it will create A, create B and&amp;nbsp;use it to create&amp;nbsp;C
   and use these to create a&amp;nbsp;D and return to you. Example classes:
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;&amp;nbsp; &lt;style&gt;
&lt;!--
.csharpcode, .csharpcode pre
{
	font-size: smallest;
	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; }

--&gt;
&lt;/style&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; A
      { }&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; B { }&lt;/pre&gt;
      &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; C&lt;/pre&gt;
      &lt;pre&gt;{&lt;/pre&gt;
      &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; C(B instanceOfB) { }&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
      &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; D&lt;/pre&gt;
      &lt;pre&gt;{&lt;/pre&gt;
      &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; D(A instanceOfA, C instanceOfC)
      { }&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Example use in test:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MostBasicExample()&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   IKernel container = &lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultKernel();&lt;/pre&gt;
      &lt;pre class="alt"&gt;   container.AddComponent(&lt;span class="str"&gt;"keyForClassA"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(A));&lt;/pre&gt;
      &lt;pre&gt;   container.AddComponent(&lt;span class="str"&gt;"keyForClassB"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(B));&lt;/pre&gt;
      &lt;pre class="alt"&gt;   container.AddComponent(&lt;span class="str"&gt;"keyForClassC"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(C));&lt;/pre&gt;
      &lt;pre&gt;   container.AddComponent(&lt;span class="str"&gt;"keyForClassD"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(D));&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;   D anAInstance = &lt;/pre&gt;
      &lt;pre class="alt"&gt;      container.Resolve(&lt;span class="str"&gt;"keyForClassD"&lt;/span&gt;, &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(D)) &lt;span class="kwrd"&gt;as&lt;/span&gt; D;&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   Assert.That(anAInstance, Is.TypeOf(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(D)));&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;em&gt;Concepts/acronymns are "inversion of control" and "dependency injection", I like
   to refer to it as just a container, it's imprecise and contextual instead of sacrificing
   simplicity to get precise, but that's who I am. It's just oo, really. There are several
   such pieces of container code for .NET; castle windsor, spring.net and the objectbuilder
   framework from ms that is used in their application blocks, etc. I personally favor
   the castle project implementation because of it's ease of use and simplicity.&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;em&gt;&lt;/em&gt;&amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Use&amp;nbsp;your own wrapper&amp;nbsp;
&lt;/h3&gt;
&lt;p&gt;
   I feel the default container lacks some stuff, so I wrap it and add generics, methods
   that omit the key (sometimes I know that I will only have one implementation of a
   class in a system) and that look at metadata for attributes in an assembly and auto
   register. I make my wrapper a &lt;em&gt;singleton&lt;/em&gt;. I slap on a custom attribute I call
   "ContainerComponent" on the example classes above and the test becomes:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="CodeFormatContainer"&gt;
      &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
         &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; MostBasicExample()&lt;/pre&gt;
         &lt;pre class="alt"&gt;{&lt;/pre&gt;
         &lt;pre&gt;   Container.Instance.AddFromAssemblyOf&amp;lt;A&amp;gt;();&lt;/pre&gt;
         &lt;pre class="alt"&gt;   D anAInstance = Container.Instance.Resolve&amp;lt;D&amp;gt;();&lt;/pre&gt;
         &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
         &lt;pre class="alt"&gt;   Assert.That(anAInstance, Is.TypeOf(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(D)));&lt;/pre&gt;
         &lt;pre&gt;}&lt;/pre&gt;
      &lt;/div&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &lt;em&gt;(In fairness, there have&amp;nbsp;been some recent commits that move toward this.&lt;/em&gt;)
&lt;/p&gt;
&lt;h3&gt;&amp;nbsp;
&lt;/h3&gt;
&lt;h3&gt;The factory facility example&amp;nbsp;
&lt;/h3&gt;
&lt;p&gt;
   Windsor can be extended via &lt;em&gt;facilities&lt;/em&gt;, small pieces of code that add small
   pieces of functionality. The &lt;em&gt;factory facility&lt;/em&gt; allows us to tell windsor to
   use a certain&amp;nbsp;method (instance or static) on a class to create an instance of
   a class. I added some simple methods to add factories programmatically. Here are some
   example classes:
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;&amp;nbsp; 
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IUserRepository&lt;/pre&gt;
      &lt;pre&gt;{&lt;/pre&gt;
      &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateUser();&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UserRepositoryImplementation
      : IUserRepository&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; UpdateUser()&lt;/pre&gt;
      &lt;pre class="alt"&gt;   {&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   }&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UserRepositoryFactory&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; UserRepositoryImplementation Create()&lt;/pre&gt;
      &lt;pre class="alt"&gt;   {&lt;/pre&gt;
      &lt;pre&gt;      &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; UserRepositoryImplementation();&lt;/pre&gt;
      &lt;pre class="alt"&gt;   }&lt;/pre&gt;
      &lt;pre&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;Factory support facility programmatically&amp;nbsp;
&lt;/h3&gt;
&lt;p&gt;
   Here is an example test using microkernel and programmatically using the factory support
   facility (currently in trunk):
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FactoryResolveWithProposedFacilityPatch()&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   IKernel kernel = &lt;span class="kwrd"&gt;new&lt;/span&gt; DefaultKernel();&lt;/pre&gt;
      &lt;pre class="alt"&gt;   FactorySupportFacility facility = &lt;/pre&gt;
      &lt;pre&gt;      &lt;span class="kwrd"&gt;new&lt;/span&gt; FactorySupportFacility();&lt;/pre&gt;
      &lt;pre class="alt"&gt;   kernel.AddFacility(&lt;span class="str"&gt;"factory.support"&lt;/span&gt;,
      facility);&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;string&lt;/span&gt; userRepositoryKey = &lt;span class="str"&gt;"userrepository"&lt;/span&gt;;&lt;/pre&gt;
      &lt;pre&gt;   facility.AddFactory&amp;lt;IUserRepository, UserRepositoryFactory&amp;gt;&lt;/pre&gt;
      &lt;pre class="alt"&gt;      (userRepositoryKey, &lt;span class="str"&gt;"Create"&lt;/span&gt;);&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   IUserRepository userRepository = kernel.Resolve(&lt;/pre&gt;
      &lt;pre&gt;      userRepositoryKey,&lt;/pre&gt;
      &lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;typeof&lt;/span&gt;(IUserRepository)) &lt;span class="kwrd"&gt;as&lt;/span&gt; IUserRepository;&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   Assert.That(userRepository, &lt;/pre&gt;
      &lt;pre&gt;      Is.TypeOf(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(UserRepositoryImplementation)));&lt;/pre&gt;
      &lt;pre class="alt"&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   I think that is messy, if we use a little container wrapper and say that we have don't
   need the key to differentiate 
&lt;/p&gt;
&lt;p&gt;
   between implementations, it becomes:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FactoryResolveWithContainer_NoKey()&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   Container.Instance&lt;/pre&gt;
      &lt;pre class="alt"&gt;      .AddFactory&amp;lt;IUserRepository, UserRepositoryFactory&amp;gt;&lt;/pre&gt;
      &lt;pre&gt;      (&lt;span class="str"&gt;"Create"&lt;/span&gt;);&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;   IUserRepository userRepository = &lt;/pre&gt;
      &lt;pre class="alt"&gt;      Container.Instance.Resolve&amp;lt;IUserRepository&amp;gt;();&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   Assert.That(userRepository, &lt;/pre&gt;
      &lt;pre&gt;      Is.TypeOf(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(UserRepositoryImplementation)));&lt;/pre&gt;
      &lt;pre class="alt"&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Fuller example
&lt;/h3&gt;
&lt;p&gt;
   Here&amp;nbsp;are some example classes for a fuller example:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FileStorageService&lt;/pre&gt;
      &lt;pre&gt;   {&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;   }&lt;/pre&gt;
      &lt;pre class="alt"&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; AnnounceService&lt;/pre&gt;
      &lt;pre&gt;   {&lt;/pre&gt;
      &lt;pre class="alt"&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; FileStorageService _storage;&lt;/pre&gt;
      &lt;pre&gt;      &lt;span class="kwrd"&gt;private&lt;/span&gt; IUserRepository _userRepo;&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; IUserRepository UserRepo&lt;/pre&gt;
      &lt;pre class="alt"&gt;      {&lt;/pre&gt;
      &lt;pre&gt;         get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _userRepo; }&lt;/pre&gt;
      &lt;pre class="alt"&gt;      }&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;      &lt;span class="kwrd"&gt;public&lt;/span&gt; AnnounceService( FileStorageService fileStorage,&lt;/pre&gt;
      &lt;pre class="alt"&gt;         IUserRepository userRepo )&lt;/pre&gt;
      &lt;pre&gt;      {&lt;/pre&gt;
      &lt;pre class="alt"&gt;         _storage = fileStorage;&lt;/pre&gt;
      &lt;pre&gt;         _userRepo = userRepo;&lt;/pre&gt;
      &lt;pre class="alt"&gt;      }&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   }&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Example:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;div class="CodeFormatContainer"&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;[Test]&lt;/pre&gt;
      &lt;pre&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; FactoryResolveWithContainer_FullerExample()&lt;/pre&gt;
      &lt;pre class="alt"&gt;{&lt;/pre&gt;
      &lt;pre&gt;   Container container = Container.Instance;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   container.AddFactory&amp;lt;IUserRepository, &lt;/pre&gt;
      &lt;pre&gt;      UserRepositoryFactory&amp;gt;(&lt;span class="str"&gt;"Create"&lt;/span&gt;);&lt;/pre&gt;
      &lt;pre class="alt"&gt;   container.AddComponent&amp;lt;FileStorageService&amp;gt;();&lt;/pre&gt;
      &lt;pre&gt;   container.AddComponent&amp;lt;AnnounceService&amp;gt;();&lt;/pre&gt;
      &lt;pre class="alt"&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre&gt;   AnnounceService announceService = &lt;/pre&gt;
      &lt;pre class="alt"&gt;      container.Resolve&amp;lt;AnnounceService&amp;gt;();&lt;/pre&gt;
      &lt;pre&gt;&amp;nbsp;&lt;/pre&gt;
      &lt;pre class="alt"&gt;   Assert.That(announceService.UserRepo, &lt;/pre&gt;
      &lt;pre&gt;      Is.TypeOf(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(UserRepositoryImplementation)));&lt;/pre&gt;
      &lt;pre class="alt"&gt;}&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Parameters&amp;nbsp;
&lt;/h3&gt;
&lt;p&gt;
   You can set parameters for the factory method at configuration time and at runtime.
   Will continue with that and post code later on, stay tuned.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=c162a23b-9791-431b-b733-b4a8d0d414d0" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,c162a23b-9791-431b-b733-b4a8d0d414d0.aspx</comments>
      <category>.NET;Code</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=e1cf36c4-265b-4495-9d7f-8214a9afca7c</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,e1cf36c4-265b-4495-9d7f-8214a9afca7c.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,e1cf36c4-265b-4495-9d7f-8214a9afca7c.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=e1cf36c4-265b-4495-9d7f-8214a9afca7c</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
      At the last meeting of our <a href="http://mawi.org/agileoresund">monthly agile get
      togethers</a> (which was really nice) we talked about a bunch of things; one being
      how to help teams <em>keep</em> using techniques that are helpful and reflect on what
      they do so that they may find new helpful techniques.
   </p>
        <p>
       
   </p>
        <p>
      At my current short assignment I am helping a team with their process and their work
      and we have been talking about these things, so the discussion was very useful to
      me. The reward of task completion and (if you have a quick feedback cycle via some
      receiving customer standing by) delivery is huge and it can be hard to provide an
      alternative mechanism that rewards refactoring and design investments.
   </p>
        <p>
       
   </p>
        <p>
      One type of tool I find useful to get a grip on group dynamics are the personality
      catalogs a'la DISC. There is a correlation between the personality types of such models
      and preferred rewards, "Drivers" are more focused on task completion and delivery,
      for example. However, the model notes a tendency or potential factor, it is not static
      - the challenge is to affect this focus in a beneficial direction, usually so
      that more design effort is undertaken. 
   </p>
        <p>
       
   </p>
        <p>
      There is little point in enforcing policies by means of negative reinforcement. At <a href="http://mawi.org/agileoresund">AgileOresund</a> we
      discussed how to stimulate a feeling of professionalism / "professional pride" so
      that there will be more care taken in <em>how</em> things are accomplished than just <em>that</em> they
      are accomplished. 
   </p>
        <p>
       
   </p>
        <p>
      I feel that this can be approached via a general belief and support of the individual,
      and a stimulation of his/her personal goals. These goals are often in line with
      the goals of the organization, and create a much greater drive. A dialogue aimed at
      this is often neglected in companies today: Many companies I've been to lack <em>leaders </em>who
      have the ability to create a solid and effective conversation of this type. In contrast,
      the "<em>actual</em>" leaders (may be team leads or just in terms of the socially
      context, due to age and experience) are sometimes not interested and/or do not have
      time and do not prioritize this important conversation. I feel that this is a loss
      for everyone - the companies, the industry as a whole and the individuals.
   </p>
        <p>
       
   </p>
        <p>
      Another perspective on this discussion is the model of developers that microsoft uses,
      and there has just recently been some controversy around how it was recently expressed
      at a <a href="http://blogs.msdn.com/nickmalik/archive/2007/06/15/tools-for-mort.aspx">blog</a>.
      Microsoft uses a set of persona that represent different developers. In a recent post
      - an discussion of code production and tools - quality and needs were presented
      based on one of the persona, Mort. Mort is the least technically interested developer,
      that merely wants to get the job done, and the code he produces does not fit in a
      complex codebase that will need to be maintained over a long period of time, and so
      on, it is posited. There follows (and it is still active) a heated
      and fairly interesting discussion, where people mostly disagree with how the original
      poster related Mort and his view of the world to agile practices. 
      Regardless, using these persona as an analysis tool in this way feels clumsy to me,
      I don't think that it is what they were intended for. 
   </p>
        <p>
       
   </p>
        <p>
      Yet it does send a thought to my rewards analysis: If we accept the persona model
      as useful, and think about the Mort persona in a typical scenario, I think that Morts
      in general will be aware that they are not the "<em>alpha geeks"</em>. Morts may feel
      a sense of distance and lack of engagement due to this. Thus, they pursue other types
      of rewards and recognition, which may be task completion. If so, it seems logical
      that they value it over investing effort in design, and other technical aspects
      of the work, that do not contribute "directly" to creating the functionality in a
      visible way. They may feel that they cannot gain recognition for creating the <em>best</em> design
      for the tasks, but they can complete the tasks quickly.
   </p>
        <p>
       
   </p>
        <p>
      Naturally, creating an open and positive work environment is of course necessary.
   </p>
        <p>
       
   </p>
        <p>
          <img height="259" src="http://mawi.org/content/binary/CraftmanshipatAgileOresund_182C/631026_59628103_small9.jpg" width="235" align="left" border="0" /> 
      Again, in order to counter this is (in addition to pursuing and maintaining humility
      and openness at all costs, as has been recommended forever) I believe in working with
      the individual and pushing them to create a vision for themselves, get aware of their
      ambitions and formulate a direction of where they want to go. Most often, that will
      be in line with where the organization wants to go. I believe very much in the drive
      and the passion that we <em>all</em> have, <em>if </em>awakened, <em>if </em>nourished
      -  all it takes is someone to believe in it.
   </p>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=e1cf36c4-265b-4495-9d7f-8214a9afca7c" />
      </body>
      <title>Craftmanship at AgileOresund</title>
      <guid>http://mawi.org/PermaLink,guid,e1cf36c4-265b-4495-9d7f-8214a9afca7c.aspx</guid>
      <link>http://mawi.org/CraftmanshipAtAgileOresund.aspx</link>
      <pubDate>Mon, 25 Jun 2007 10:24:32 GMT</pubDate>
      <description>&lt;p&gt;
   At the last meeting of our &lt;a href="http://mawi.org/agileoresund"&gt;monthly agile get
   togethers&lt;/a&gt; (which was really nice) we talked about a bunch of things; one being
   how to help teams &lt;em&gt;keep&lt;/em&gt; using techniques that are helpful and reflect on what
   they do so that they may find new helpful techniques.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   At my current short assignment I am helping a team with their process and their work
   and we have been talking about these things, so the discussion was very useful to
   me. The reward of task completion and (if you have a quick feedback cycle via&amp;nbsp;some
   receiving customer standing by) delivery is huge and it can be hard to provide an
   alternative mechanism that rewards refactoring and design investments.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   One type of tool I find useful to get a grip on group dynamics are the personality
   catalogs a'la DISC. There is a correlation between the personality types of such models
   and preferred rewards, "Drivers" are more focused on task completion and delivery,
   for example. However, the model notes a tendency or potential factor, it is not static
   - the challenge is to affect this focus in a beneficial direction,&amp;nbsp;usually so
   that&amp;nbsp;more design effort is undertaken. 
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   There is little point in enforcing policies by means of negative reinforcement. At &lt;a href="http://mawi.org/agileoresund"&gt;AgileOresund&lt;/a&gt; we
   discussed how to stimulate a feeling of professionalism / "professional pride" so
   that there will be more care taken in &lt;em&gt;how&lt;/em&gt; things are accomplished than just &lt;em&gt;that&lt;/em&gt; they
   are accomplished. 
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   I feel that this can be approached via a general belief and support of the individual,
   and a stimulation of his/her personal goals. These&amp;nbsp;goals are often in line with
   the goals of the organization, and create a much greater drive. A dialogue aimed at
   this is often neglected in companies today: Many companies I've been to lack &lt;em&gt;leaders &lt;/em&gt;who
   have the ability to create a solid and effective conversation of this type. In contrast,
   the "&lt;em&gt;actual&lt;/em&gt;" leaders (may be team leads or just in terms of the socially
   context, due to age and experience) are sometimes not interested and/or do not have
   time and do not prioritize this important conversation. I feel that this is a loss
   for everyone - the companies, the industry as a whole and the individuals.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Another perspective on this discussion is the model of developers that microsoft uses,
   and there has just recently been some controversy around how it was recently expressed
   at a &lt;a href="http://blogs.msdn.com/nickmalik/archive/2007/06/15/tools-for-mort.aspx"&gt;blog&lt;/a&gt;.
   Microsoft uses a set of persona that represent different developers. In a recent post
   -&amp;nbsp;an discussion of code production and tools -&amp;nbsp;quality and needs were presented
   based on one of the persona, Mort. Mort is the least technically interested developer,
   that merely wants to get the job done, and the code he produces does not fit in a
   complex codebase that will need to be maintained over a long period of time, and so
   on, it is posited.&amp;nbsp;There follows&amp;nbsp;(and it is still active) a&amp;nbsp;heated
   and fairly interesting discussion, where people mostly disagree with how the&amp;nbsp;original
   poster related Mort&amp;nbsp;and his view of the&amp;nbsp;world to agile practices.&amp;nbsp;
   Regardless, using these persona as an analysis tool in this way feels clumsy to me,
   I don't think that it is what they were intended for.&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Yet it does send a thought to my rewards analysis: If we accept the persona model
   as useful, and think about the Mort persona in a typical scenario, I think that Morts
   in general will be aware that they are not the "&lt;em&gt;alpha geeks"&lt;/em&gt;. Morts may feel
   a sense of distance and lack of engagement due to this. Thus, they pursue other types
   of rewards and recognition, which may be task completion. If so, it seems logical
   that they value it&amp;nbsp;over investing effort in design, and other technical aspects
   of the work, that do not contribute "directly" to creating the functionality in a
   visible way. They may feel that they cannot gain recognition for creating the &lt;em&gt;best&lt;/em&gt; design
   for the tasks, but they can complete the tasks quickly.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Naturally, creating an open and positive work environment is of course necessary.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;img height="259" src="http://mawi.org/content/binary/CraftmanshipatAgileOresund_182C/631026_59628103_small9.jpg" width="235" align="left" border="0"&gt;&amp;nbsp;
   Again, in order to counter this is (in addition to pursuing and maintaining humility
   and openness at all costs, as has been recommended forever) I believe in working with
   the individual and pushing them to create a vision for themselves, get aware of their
   ambitions and formulate a direction of where they want to go. Most often, that will
   be in line with where the organization wants to go. I believe very much in the drive
   and the passion that we &lt;em&gt;all&lt;/em&gt; have, &lt;em&gt;if &lt;/em&gt;awakened, &lt;em&gt;if &lt;/em&gt;nourished
   -&amp;nbsp; all it takes is someone to believe in it.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=e1cf36c4-265b-4495-9d7f-8214a9afca7c" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,e1cf36c4-265b-4495-9d7f-8214a9afca7c.aspx</comments>
      <category>Agile</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=b6d52bc8-986a-4c66-bd85-a0d71855e407</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,b6d52bc8-986a-4c66-bd85-a0d71855e407.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,b6d52bc8-986a-4c66-bd85-a0d71855e407.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=b6d52bc8-986a-4c66-bd85-a0d71855e407</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
        </p>
        <p>
      This week was short work-wise, and went by quickly. Last week was hectic and long.
      Me and my colleague Truls gave a seminar on NHibernate, a little ActiveRecord and
      some of the new MS OR stuff. Then I spent three days with <a href="http://www.synaptic.se/">another
      consulting company</a>, showing them the ins and outs of <a href="http://www.hibernate.org/343.html">NHibernate</a> and
      sprinkling just a little <a href="http://wcf.netfx3.com/">WCF</a> on the last day.
      In so doing, I caught myself serving out some code that I have used. Normally, I don't
      dish out any code here, but this might be useful to some: 
   </p>
        <p>
        
   </p>
        <p>
      It's a small WCF test helper that I have used to do explorative testing of WCF and
      even more so for integrative smoke tests of WCF services. 
   </p>
        <p>
        
   </p>
        <p>
      There is a <a href="http://mawi.org/articles/wcftesthelper.zip">zip attached</a> that
      contains one vs.net 2005 project with a WCF hello world and one nunit test that runs
      that service. That test is an integration test, it cranks up the whole WCF machinery.
      Most of my WCF integration tests (all, in fact) do not test any concurrency issues.
      They are more simple smoke tests that everything seems to work as expected. What I
      usually want is to test the machinery but have one instance invoked, so that I can
      execute some assertions on the results using that instance afterwards. 
   </p>
        <p>
        
   </p>
        <p>
      Usually, you will not implement your WCF service as a singleton (although it is one
      of the instancing modes), for one of several reasons - scalability for example. Using
      the other instancing modes means that you (by default) do not control construction
      of your the instance that gets to serve the requests, and thus in a test situation,
      we do not have a reference to the instance used by WCF. One way around this is to
      create a custom instance provider. The instance provider in WCF (class implementing
      IInstanceProvider, the default being a private class in InstanceBehavior, reflect
      it) is responsible for supplying new service instances. I won't talk about it here,
      suffice it to say that my SingletonInstanceProvider simply returns one (settable)
      instance each time, thus making the service a singleton. It is a service behavior
      that we add to the servicehost description. 
   </p>
        <p>
        
   </p>
        <p>
      Why do this? Simply so that I can implement my service using an instancing mode that
      I want, but still run simple smoke tests on it. It is one solution, there are doubtless
      many others, if you have a better one, please give me a shout. 
   </p>
        <p>
        
   </p>
        <p>
      So, the testhelper or testharness that is <a href="http://mawi.org/articles/wcftesthelper.zip">enclosed</a> actually
      does a couple of things. I won't talk about them in detail, this is roughly it: 
   </p>
        <p>
        
   </p>
        <ul>
          <li>
         Provide a simple way to create and start a service host and get a client to run tests
         against it. 
      </li>
          <li>
         Provide a way for tests to share services, so that the WCF machinery does not need
         to be restarted. 
      </li>
          <li>
         Get the services set up using the SingletonInstanceProvider easily 
      </li>
          <li>
         Allow test to access host before it is started to modify/further configure<br />
         ( this is why you see castle in there, the client (a dynamic proxy wrapper) is actually
         a proxy that opens the service late/JIT ) 
      </li>
        </ul>
        <p>
      You use it like so: 
   </p>
        <p>
        
   </p>
        <div class="CodeFormatContainer">
          <style>
            <!--
.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>
          <div class="csharpcode">
            <pre class="alt">IMessageOfTheDay client1 = GetClient</pre>
            <pre>   .For&lt;IMessageOfTheDay&gt;()</pre>
            <pre class="alt">   .Using(<span class="kwrd">new</span> NetTcpBinding())</pre>
            <pre>   .Running(serviceInstance);</pre>
          </div>
        </div>
        <p>
        
   </p>
        <p>
      This sets up a service host for the IMessageOfTheDay service contract, using the netTcpBinding
      (optional, default is named pipes since it is the fastest) and running the instance
      supplied. See the demotest. 
   </p>
        <p>
        
   </p>
        <p>
      Comments welcome. Btw, this uses my singleton implementation, I'll make a note of
      that tomorrow, but it's simple. 
   </p>
        <p>
       
   </p>
        <p>
          <em>Questions:</em> Has anyone seen another wcf test harness like this? I usually
      do all my network integration testing using some thread harness with synchronization
      between, and did my WCF testing in a similar (not the same) way. This harness simplified
      things quite a bit.
   </p>
        <p>
       
   </p>
        <p>
          <em>BTW:</em> Most of the code is in one file; <em>TestHelper.cs</em>. It's a bit
      unwieldly, sorry, but easier to copy - you still need the singleton.cs though. I may
      update later if I get time.
   </p>
        <p>
       
   </p>
        <p>
      Again, the download is <a href="http://mawi.org/articles/wcftesthelper.zip">here</a>.
   </p>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=b6d52bc8-986a-4c66-bd85-a0d71855e407" />
      </body>
      <title>WCF test helper</title>
      <guid>http://mawi.org/PermaLink,guid,b6d52bc8-986a-4c66-bd85-a0d71855e407.aspx</guid>
      <link>http://mawi.org/WCFTestHelper.aspx</link>
      <pubDate>Mon, 21 May 2007 00:00:04 GMT</pubDate>
      <description>&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   This week was short work-wise, and went by quickly. Last week was hectic and long.
   Me and my colleague Truls gave a seminar on NHibernate, a little ActiveRecord and
   some of the new MS OR stuff. Then I spent three days with &lt;a href="http://www.synaptic.se/"&gt;another
   consulting company&lt;/a&gt;, showing them the ins and outs of &lt;a href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/a&gt; and
   sprinkling just a little &lt;a href="http://wcf.netfx3.com/"&gt;WCF&lt;/a&gt; on the last day.
   In so doing, I caught myself serving out some code that I have used. Normally, I don't
   dish out any code here, but this might be useful to some: 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   It's a small WCF test helper that I have used to do explorative testing of WCF and
   even more so for integrative smoke tests of WCF services. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   There is a &lt;a href="http://mawi.org/articles/wcftesthelper.zip"&gt;zip attached&lt;/a&gt; that
   contains one vs.net 2005 project with a WCF hello world and one nunit test that runs
   that service. That test is an integration test, it cranks up the whole WCF machinery.
   Most of my WCF integration tests (all, in fact) do not test any concurrency issues.
   They are more simple smoke tests that everything seems to work as expected. What I
   usually want is to test the machinery but have one instance invoked, so that I can
   execute some assertions on the results using that instance afterwards. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   Usually, you will not implement your WCF service as a singleton (although it is one
   of the instancing modes), for one of several reasons - scalability for example. Using
   the other instancing modes means that you (by default) do not control construction
   of your the instance that gets to serve the requests, and thus in a test situation,
   we do not have a reference to the instance used by WCF. One way around this is to
   create a custom instance provider. The instance provider in WCF (class implementing
   IInstanceProvider, the default being a private class in InstanceBehavior, reflect
   it) is responsible for supplying new service instances. I won't talk about it here,
   suffice it to say that my SingletonInstanceProvider simply returns one (settable)
   instance each time, thus making the service a singleton. It is a service behavior
   that we add to the servicehost description. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   Why do this? Simply so that I can implement my service using an instancing mode that
   I want, but still run simple smoke tests on it. It is one solution, there are doubtless
   many others, if you have a better one, please give me a shout. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   So, the testhelper or testharness that is &lt;a href="http://mawi.org/articles/wcftesthelper.zip"&gt;enclosed&lt;/a&gt; actually
   does a couple of things. I won't talk about them in detail, this is roughly it: 
&lt;p&gt;
   &amp;nbsp; 
&lt;ul&gt;
   &lt;li&gt;
      Provide a simple way to create and start a service host and get a client to run tests
      against it. 
   &lt;li&gt;
      Provide a way for tests to share services, so that the WCF machinery does not need
      to be restarted. 
   &lt;li&gt;
      Get the services set up using the SingletonInstanceProvider easily 
   &lt;li&gt;
      Allow test to access host before it is started to modify/further configure&lt;br&gt;
      ( this is why you see castle in there, the client (a dynamic proxy wrapper) is actually
      a proxy that opens the service late/JIT ) 
   &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   You use it like so: 
&lt;p&gt;
   &amp;nbsp; 
&lt;div class="CodeFormatContainer"&gt;
   &lt;style&gt;
&lt;!--
.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; }

--&gt;
&lt;/style&gt;
   &lt;div class="csharpcode"&gt;&lt;pre class="alt"&gt;IMessageOfTheDay client1 = GetClient&lt;/pre&gt;
      &lt;pre&gt;   .For&amp;lt;IMessageOfTheDay&amp;gt;()&lt;/pre&gt;
      &lt;pre class="alt"&gt;   .Using(&lt;span class="kwrd"&gt;new&lt;/span&gt; NetTcpBinding())&lt;/pre&gt;
      &lt;pre&gt;   .Running(serviceInstance);&lt;/pre&gt;
   &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   This sets up a service host for the IMessageOfTheDay service contract, using the netTcpBinding
   (optional, default is named pipes since it is the fastest) and running the instance
   supplied. See the demotest. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   Comments welcome. Btw, this uses my singleton implementation, I'll make a note of
   that tomorrow, but it's simple. 
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;em&gt;Questions:&lt;/em&gt; Has anyone seen another wcf test harness like this? I usually
   do all my network integration testing using some thread harness with synchronization
   between, and did my WCF testing in a similar (not the same) way. This harness simplified
   things quite a bit.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;em&gt;BTW:&lt;/em&gt; Most of the code is in one file; &lt;em&gt;TestHelper.cs&lt;/em&gt;. It's a bit
   unwieldly, sorry, but easier to copy - you still need the singleton.cs though. I may
   update later if I get time.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Again, the download is &lt;a href="http://mawi.org/articles/wcftesthelper.zip"&gt;here&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=b6d52bc8-986a-4c66-bd85-a0d71855e407" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,b6d52bc8-986a-4c66-bd85-a0d71855e407.aspx</comments>
      <category>Downloads;Misc</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=5c4e414e-cf8e-4b53-8352-3af8170ec060</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,5c4e414e-cf8e-4b53-8352-3af8170ec060.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,5c4e414e-cf8e-4b53-8352-3af8170ec060.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=5c4e414e-cf8e-4b53-8352-3af8170ec060</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://mawi.org/content/binary/small_26310_9437.JPG" align="left" border="0" />I
   almost forgot to post about this; next week holds <a href="http://www.dotway.se/Default.aspx?tabid=243">a
   seminar</a> on <a href="http://www.nhibernate.org">NHibernate</a>, <a href="http://www.castleproject.org/">Castle</a> and
   MS coming offerings of EF. I will be talking about NHibernate and <a href="http://www.castleproject.org/activerecord">castle
   activerecord</a> and my colleague Truls will talk about MS Entity Framework. It's
   an overview, which we hope will give developers looking to use OR mappers a bit of
   background, to aid their decision making. We call it "Data access showdown"! Do stop
   by!<br /><p></p><img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=5c4e414e-cf8e-4b53-8352-3af8170ec060" /></body>
      <title>Talk: NHibernate, Castle and EF</title>
      <guid>http://mawi.org/PermaLink,guid,5c4e414e-cf8e-4b53-8352-3af8170ec060.aspx</guid>
      <link>http://mawi.org/TalkNHibernateCastleAndEF.aspx</link>
      <pubDate>Wed, 02 May 2007 19:33:41 GMT</pubDate>
      <description>&lt;img src="http://mawi.org/content/binary/small_26310_9437.JPG" align="left" border="0"&gt;I
almost forgot to post about this; next week holds &lt;a href="http://www.dotway.se/Default.aspx?tabid=243"&gt;a
seminar&lt;/a&gt; on &lt;a href="http://www.nhibernate.org"&gt;NHibernate&lt;/a&gt;, &lt;a href="http://www.castleproject.org/"&gt;Castle&lt;/a&gt; and
MS coming offerings of EF. I will be talking about NHibernate and &lt;a href="http://www.castleproject.org/activerecord"&gt;castle
activerecord&lt;/a&gt; and my colleague Truls will talk about MS Entity Framework. It's
an overview, which we hope will give developers looking to use OR mappers a bit of
background, to aid their decision making. We call it "Data access showdown"! Do stop
by!&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=5c4e414e-cf8e-4b53-8352-3af8170ec060" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,5c4e414e-cf8e-4b53-8352-3af8170ec060.aspx</comments>
      <category>Talks and events</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=c027c3b4-8b69-42ca-b103-24bf910a58f9</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,c027c3b4-8b69-42ca-b103-24bf910a58f9.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,c027c3b4-8b69-42ca-b103-24bf910a58f9.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=c027c3b4-8b69-42ca-b103-24bf910a58f9</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://mawi.org/content/binary/flower_350446_8157.JPG" align="right" border="1" />(or
   rather respect and stimulating work...)<br /><br />
   While we were in Dijon testing our new system I read most of the last IEEE Computer
   issue - which I often do not, but reading magazines filled out the cab rides. In it
   you find <a href="http://www.riehle.org/computer-science/research/2007/computer-2007-article.html">this</a> article.
   Nicholas Carr <a href="http://www.roughtype.com/archives/2007/04/open_source_and.php">blogged </a>and
   a pretty nice discussion followed. I certainly disagree with the conclusion Nick comes
   up with, and I think that the article is more nuanced but many statements are made
   without proper underpinning. Regardless, the discussion inspired this pretty funny <a href="http://geekandpoke.typepad.com/geekandpoke/2007/04/silicon_valley_.html">cartoon</a>,
   too. One commenter (Tony Healy) drew the parallell to geeks great nerd needs: I think
   that the <a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs">need
   for respect</a> and the awesome feeling of being able to help others is magnified
   in most geeks. Some thrive on the "I am smart" feeling. Like most, I have transformed
   mine into, "see, you can do it this way!", after which I often get a "oh, great, thanks!",
   which gives me a warm, fuzzy feeling inside.<br /><br />
   That - and feelings like it - are what I live for. Sure, this can be taken advantage
   of, and is taken advantage of, I'm sure. But, at the end of the day, as long as I
   keep getting what I live for... it's pretty much ok. Soon, I will cultivate the business
   person in me, or something... Right now, I gotta go on doing some demos this lovely
   sunday afternoon.<br /><br /><p></p><img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=c027c3b4-8b69-42ca-b103-24bf910a58f9" /></body>
      <title>Money or love?</title>
      <guid>http://mawi.org/PermaLink,guid,c027c3b4-8b69-42ca-b103-24bf910a58f9.aspx</guid>
      <link>http://mawi.org/MoneyOrLove.aspx</link>
      <pubDate>Sun, 29 Apr 2007 14:37:57 GMT</pubDate>
      <description>&lt;img src="http://mawi.org/content/binary/flower_350446_8157.JPG" align="right" border="1"&gt;(or
rather respect and stimulating work...)&lt;br&gt;
&lt;br&gt;
While we were in Dijon testing our new system I read most of the last IEEE Computer
issue - which I often do not, but reading magazines filled out the cab rides. In it
you find &lt;a href="http://www.riehle.org/computer-science/research/2007/computer-2007-article.html"&gt;this&lt;/a&gt; article.
Nicholas Carr &lt;a href="http://www.roughtype.com/archives/2007/04/open_source_and.php"&gt;blogged &lt;/a&gt;and
a pretty nice discussion followed. I certainly disagree with the conclusion Nick comes
up with, and I think that the article is more nuanced but many statements are made
without proper underpinning. Regardless, the discussion inspired this pretty funny &lt;a href="http://geekandpoke.typepad.com/geekandpoke/2007/04/silicon_valley_.html"&gt;cartoon&lt;/a&gt;,
too. One commenter (Tony Healy) drew the parallell to geeks great nerd needs: I think
that the &lt;a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs"&gt;need
for respect&lt;/a&gt; and the awesome feeling of being able to help others is magnified
in most geeks. Some thrive on the "I am smart" feeling. Like most, I have transformed
mine into, "see, you can do it this way!", after which I often get a "oh, great, thanks!",
which gives me a warm, fuzzy feeling inside.&lt;br&gt;
&lt;br&gt;
That - and feelings like it - are what I live for. Sure, this can be taken advantage
of, and is taken advantage of, I'm sure. But, at the end of the day, as long as I
keep getting what I live for... it's pretty much ok. Soon, I will cultivate the business
person in me, or something... Right now, I gotta go on doing some demos this lovely
sunday afternoon.&lt;br&gt;
&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=c027c3b4-8b69-42ca-b103-24bf910a58f9" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,c027c3b4-8b69-42ca-b103-24bf910a58f9.aspx</comments>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=ca447493-e601-420b-9b47-02ea01ca0e8b</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,ca447493-e601-420b-9b47-02ea01ca0e8b.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,ca447493-e601-420b-9b47-02ea01ca0e8b.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=ca447493-e601-420b-9b47-02ea01ca0e8b</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">&lt;rant&gt;<br />
   Being an avid resharper user for several years, I cannot live without it.<br /><br />
   As time goes by, I also feel that I cannot live with it.  It seems to me that
   the quality of the product (which has never been <i>great</i>) is spiraling downward.<br /><br />
   So this is a word of warning: Before you get addicted to the features, realize that
   you will pay a price in bloat and bugginess in the studio, that may or may not be
   substantial. 
   <br /><br />
   In one out of my three current setups it's not that problematic. 
   <br /><br />
   In my daytime setup with the latest stable patch, it is crashing the studio several
   times a day, and the bugs I have mailed them have never been fixed.<br /><br />
   Reinstall of my environment is probably the way to go right now, but it is eerie that
   not much has changed except the resharper updates.<br /><br />
   Most people I talk to have similar experiences, turning the thing on and off, like
   a bad relationship. Bugs and bloat seem to appear often at blogs discussing resharper.
   What are your experiences?<br /><br />
   Is it worth 249? Sure, its a great product. 249 + much of your time? Hmm, I'm starting
   to loose faith.<br /><p></p>
   &lt;/rant&gt;<img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=ca447493-e601-420b-9b47-02ea01ca0e8b" /></body>
      <title>Resharper rant</title>
      <guid>http://mawi.org/PermaLink,guid,ca447493-e601-420b-9b47-02ea01ca0e8b.aspx</guid>
      <link>http://mawi.org/ResharperRant.aspx</link>
      <pubDate>Wed, 25 Apr 2007 12:59:14 GMT</pubDate>
      <description>&amp;lt;rant&amp;gt;&lt;br&gt;
Being an avid resharper user for several years, I cannot live without it.&lt;br&gt;
&lt;br&gt;
As time goes by, I also feel that I cannot live with it.&amp;nbsp; It seems to me that
the quality of the product (which has never been &lt;i&gt;great&lt;/i&gt;) is spiraling downward.&lt;br&gt;
&lt;br&gt;
So this is a word of warning: Before you get addicted to the features, realize that
you will pay a price in bloat and bugginess in the studio, that may or may not be
substantial. 
&lt;br&gt;
&lt;br&gt;
In one out of my three current setups it's not that problematic. 
&lt;br&gt;
&lt;br&gt;
In my daytime setup with the latest stable patch, it is crashing the studio several
times a day, and the bugs I have mailed them have never been fixed.&lt;br&gt;
&lt;br&gt;
Reinstall of my environment is probably the way to go right now, but it is eerie that
not much has changed except the resharper updates.&lt;br&gt;
&lt;br&gt;
Most people I talk to have similar experiences, turning the thing on and off, like
a bad relationship. Bugs and bloat seem to appear often at blogs discussing resharper.
What are your experiences?&lt;br&gt;
&lt;br&gt;
Is it worth 249? Sure, its a great product. 249 + much of your time? Hmm, I'm starting
to loose faith.&lt;br&gt;
&lt;p&gt;
&lt;/p&gt;
&amp;lt;/rant&amp;gt;&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=ca447493-e601-420b-9b47-02ea01ca0e8b" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,ca447493-e601-420b-9b47-02ea01ca0e8b.aspx</comments>
      <category>Misc</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=37676609-1c77-43ac-b290-f0b78cef60e5</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,37676609-1c77-43ac-b290-f0b78cef60e5.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,37676609-1c77-43ac-b290-f0b78cef60e5.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=37676609-1c77-43ac-b290-f0b78cef60e5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="margin: 0px 10px 0px 0px;" src="http://mawi.org/content/binary/TestabilityencapsulationandtestableOOsou_1191/homerton_cambridge5.jpg" align="left" height="233" width="350" /> I
      am here in Cambridge, at the <a href="http://www.spaconference.org/">SPA conference</a>,
      and held a workshop on testability and encapsulation. I promised to publish my sources,
      so here they are! I will post presentation in the near future.<br /></p>
        <p>
          <br />
      Most of the articles can be found via acm (portal.acm.org<wbr />) or ieee, but I always
      search via google which usually leads to acm.
   </p>
        <p>
       
   </p>
        <h3>Abstraction, information hiding and encapsulation
   </h3>
        <p>
      Most of the good stuff here is from different OOD books. Here are some old articles
      I found interesting, (tiny archaeological warning), worth skimming:
   </p>
        <p>
          <br />
          "Data abstraction and hierarchy"<br />
              Barbara Liskov<br />
              OOPSLA 1987<br />
          "Encapsulation and inheritance in OO programming languages"<br />
              Alan Snyder<br />
              OOPSLA 1986<br />
          "Encapsulation constructs in systems programming languages"<br />
              W. F. Appelbe, A. P. Ravn<br />
              ACM Transactions on 
   </p>
        <p>
              Programming Languages and Systems (TOPLAS)<br />
              April 1984<br /></p>
        <p>
      Parnas on information hiding is classic but the examples dated. 
      <br /></p>
        <p>
          "On the criteria to be used in decomposing systems into modules"<br />
              D L Parnas<br />
              Communications of the ACM, December 1972<br /></p>
        <p>
      Abstraction is not mechanics of coupling, but is about semantics and meaning - designing
      is creating models that communicate:<br /></p>
        <p>
          Good vs. Evil: Abstraction 
      <br />
          Manuel Klimek, article on blog<br />
              <a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/">http://klimek.b</a><wbr /><a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/">ox4.net/blog/20</a><wbr /><a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/">07/03/18/good-v</a><wbr /><a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/">s-evil-abstract</a><wbr /><a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/">ion/</a></p>
        <p>
       
   </p>
        <h3>Testability 
   </h3>
        <h3>
        </h3>
        <p>
      If you read just one article on testability, Binders old from 12 years ago is the
      the best I've read. You will have to "translate" concepts to todays terms, and it
      pretty condensed (but it is at the same time not "being difficult"), read it twice.<br /></p>
        <p>
          "Design for testability in object-oriented<wbr /> systems"<br />
              Robert V. Binder<br />
              September 1994 Communications of the ACM
   </p>
        <p>
          <br />
      The first article I've read that actually talks about testability of software with
      respect to test creation in a pragmatic way, is Freedman. It is still interesting,
      although not as current. It's non OO and a bit silly on the math side, especially
      for a practicioner, but I just skim that...<br /></p>
        <p>
          Testability of Software components<br />
              IEEE Trans. Software Eng. 17(6): 553-564 (1991)    
      <br />
              Roy S Freedman<br /></p>
        <p>
      Not so long ago I found an excellent recent summary of testability work, that I could
      have made good use of earlier. (Note the weird publishing spot.)<br /></p>
        <p>
          "Predicting Class Testability using Object-Oriented<wbr /> Metrics"<br />
              Magiel Bruntink, Arie van Deursen<br />
              September 2004<br />
              Proceedings of the Source Code Analysis and
      Manipulation, Fourth IEEE 
      <br />
              International Workshop on (SCAM'04) - Volume
      00 SCAM '04 
      <br /></p>
        <p>
      Magiel Bruntinks "Testability of Object Oriented Systems: a Metrics based approach"
      (dissertation, 2003) is pretty nice as well.<br /></p>
        <p>
      We talked about two basic models of testability, which were kind-of based on Binders
      categories of fault and conformance directed testing. A model of testability that
      focuses on fault directed testing is that of Jeffrey Voas. He has published alot,
      I found this article to be the most accessible:
   </p>
        <blockquote>
          <p>
      "Software Testability: The New Verification"<br />
          IEEE Software may 1995<br />
          Jeffrey M. Voas, Keith W. Miller
   </p>
        </blockquote>
        <p>
      There are a couple of others worth checking out, this one is ok:
   </p>
        <blockquote>
          <p>
      "Factors that affect software testability"<br />
           Voas Jeffrey M.<br />
          October 1991           
      <br />
          Technical Report<br />
          Publisher: NASA Langley Technical Report Server (available via
      acm)
   </p>
        </blockquote>
        <p>
      Stefan Jungmayr has published alot an+d has focused on dependencies and metrics, this
      short article sums up alot of his work. Both this and more can be found on <a href="www.testability.de/E_index.html">www.testability</a><wbr /><a href="www.testability.de/E_index.html">.de/E_index.htm</a><wbr /><a href="www.testability.de/E_index.html">l</a>:<br /></p>
        <p>
          "Testability and unit testing"<br />
              Stefan Jungmayr<br /></p>
        <p>
      His dissertation is lengthy, there is some useful stuff there. His clear definitions
      of dependencies are a good contribution.<br /></p>
        <p>
       
   </p>
        <h3>Books
   </h3>
        <h3>
        </h3>
        <p>
      If you want a good and accessible text that does cover a lot of the issues we talked
      about, I really have found good use for Feathers "WELC" book. I recommend it to anyone
      learning behavior driven or test first design as well.<br /></p>
        <p>
          "Working effectively with legacy code"<br />
              Prentice Hall, 2004<br />
              Michael Feathers<br /></p>
        <p>
      Chapters addressing test construction factors: Chapter nine and ten talks about controllability<wbr /> and
      a little about observability. Other chapters talk about design and abstraction, notably
      chapter 17. Great book on the subject of testing object oriented code, one of the
      best IMHO. 
      <br /></p>
        <p>
      There's also Binders enormous book, which is not mentioned that often, so I'll mention
      it. The parts I've read are excellent, but it's quite enormous. He should have split
      it into several.<br /></p>
        <p>
          "Testing Object-Oriented<wbr /> Systems: Models, Patterns, and
      Tools"<br />
              Addison-Wesley 1999<br />
              Robert V Binder<br /></p>
        <p>
       
   </p>
        <h3>Testing general 
   </h3>
        <h3>
        </h3>
        <p>
      I brought up some stuff (the testing periods, etc) from an old article that is really
      nice, and highly recommended, well worth a read. Short easy read that has many insights,
      although it is a bit historical.<br /></p>
        <p>
          The growth of software testing<br />
              D. Gelperin, B. Hetzel<br />
              June 1988, Communications of the ACM, 
      Volume 31 Issue 6<br /></p>
        <p>
      This is an old classic and still very amusing read, could use another font:<br />
          "In defense of program testing or Correctness proofs considered
      harmful"<br />
              Andrew S Tannenbaum et al<br />
              ACM SIGPLAN Notices Volume 11 ,  Issue
      5  (May 1976)<br /></p>
        <p>
       
   </p>
        <h3>OO 
   </h3>
        <h3>
        </h3>
        <p>
      I mentioned the study on core OO concepts:<br /></p>
        <p>
          "The quarks of object-oriented<wbr /> development"<br />
              Deborah J. Armstrong      
        
      <br />
              Communications of the ACM  archive, February
      2006<br /></p>
        <p>
       
   </p>
        <h3>TOOP - Testable object oriented programming 
   </h3>
        <h3>
        </h3>
        <p>
      There has actually been some work on what testable object oriented programming might
      mean. What I've read has not been terribly interesting, but here is one I read anyway:<br /></p>
        <p>
          "On testable object-oriented<wbr /> programming"<br />
              Y Wang, et al<br />
              ACM SIGSOFT Software Engineering Notes, July
      1997
   </p>
        <hints id="hah_hints">
        </hints>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=37676609-1c77-43ac-b290-f0b78cef60e5" />
      </body>
      <title>Testability, encapsulation and testable OO sources</title>
      <guid>http://mawi.org/PermaLink,guid,37676609-1c77-43ac-b290-f0b78cef60e5.aspx</guid>
      <link>http://mawi.org/TestabilityEncapsulationAndTestableOOSources.aspx</link>
      <pubDate>Tue, 27 Mar 2007 00:07:02 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;img style="margin: 0px 10px 0px 0px;" src="http://mawi.org/content/binary/TestabilityencapsulationandtestableOOsou_1191/homerton_cambridge5.jpg" align="left" height="233" width="350"&gt; I
   am here in Cambridge, at the &lt;a href="http://www.spaconference.org/"&gt;SPA conference&lt;/a&gt;,
   and held a workshop on testability and encapsulation. I promised to publish my sources,
   so here they are! I will post presentation in the near future.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   Most of the articles can be found via acm (portal.acm.org&lt;wbr&gt;) or ieee, but I always
   search via google which usually leads to acm.
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Abstraction, information hiding and encapsulation
&lt;/h3&gt;
&lt;p&gt;
   Most of the good stuff here is from different OOD books. Here are some old articles
   I found interesting, (tiny archaeological warning), worth skimming:
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Data abstraction and hierarchy"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Barbara Liskov&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OOPSLA 1987&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Encapsulation and inheritance in OO programming languages"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Alan Snyder&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; OOPSLA 1986&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Encapsulation constructs in systems programming languages"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; W. F. Appelbe, A. P. Ravn&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ACM Transactions on 
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Programming Languages and Systems (TOPLAS)&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; April 1984&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   Parnas on information hiding is classic but the examples dated. 
   &lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "On the criteria to be used in decomposing systems into modules"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; D L Parnas&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Communications of the ACM, December 1972&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   Abstraction is not mechanics of coupling, but is about semantics and meaning - designing
   is creating models that communicate:&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Good vs. Evil: Abstraction 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Manuel Klimek, article on blog&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/"&gt;http://klimek.b&lt;/a&gt;&lt;wbr&gt;&lt;a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/"&gt;ox4.net/blog/20&lt;/a&gt;&lt;wbr&gt;&lt;a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/"&gt;07/03/18/good-v&lt;/a&gt;&lt;wbr&gt;&lt;a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/"&gt;s-evil-abstract&lt;/a&gt;&lt;wbr&gt;&lt;a href="http://klimek.box4.net/blog/2007/03/18/good-vs-evil-abstraction/"&gt;ion/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Testability 
&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;p&gt;
   If you read just one article on testability, Binders old from 12 years ago is the
   the best I've read. You will have to "translate" concepts to todays terms, and it
   pretty condensed (but it is at the same time not "being difficult"), read it twice.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Design for testability in object-oriented&lt;wbr&gt; systems"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Robert V. Binder&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; September 1994 Communications of the ACM
&lt;/p&gt;
&lt;p&gt;
   &lt;br&gt;
   The first article I've read that actually talks about testability of software with
   respect to test creation in a pragmatic way, is Freedman. It is still interesting,
   although not as current. It's non OO and a bit silly on the math side, especially
   for a practicioner, but I just skim that...&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Testability of Software components&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; IEEE Trans. Software Eng. 17(6): 553-564 (1991)&amp;nbsp;&amp;nbsp;&amp;nbsp; 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Roy S Freedman&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   Not so long ago I found an excellent recent summary of testability work, that I could
   have made good use of earlier. (Note the weird publishing spot.)&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Predicting Class Testability using Object-Oriented&lt;wbr&gt; Metrics"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Magiel Bruntink, Arie van Deursen&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; September 2004&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Proceedings of the Source Code Analysis and
   Manipulation, Fourth IEEE 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; International Workshop on (SCAM'04) - Volume
   00 SCAM '04 
   &lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   Magiel Bruntinks "Testability of Object Oriented Systems: a Metrics based approach"
   (dissertation, 2003) is pretty nice as well.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   We talked about two basic models of testability, which were kind-of based on Binders
   categories of fault and conformance directed testing. A model of testability that
   focuses on fault directed testing is that of Jeffrey Voas. He has published alot,
   I found this article to be the most accessible:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   "Software Testability: The New Verification"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; IEEE Software may 1995&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Jeffrey M. Voas, Keith W. Miller
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   There are a couple of others worth checking out, this one is ok:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
   "Factors that affect software testability"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Voas Jeffrey M.&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; October 1991 &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Technical Report&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; Publisher: NASA Langley Technical Report Server (available via
   acm)
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
   Stefan Jungmayr has published alot an+d has focused on dependencies and metrics, this
   short article sums up alot of his work. Both this and more can be found on &lt;a href="www.testability.de/E_index.html"&gt;www.testability&lt;/a&gt;&lt;wbr&gt;&lt;a href="www.testability.de/E_index.html"&gt;.de/E_index.htm&lt;/a&gt;&lt;wbr&gt;&lt;a href="www.testability.de/E_index.html"&gt;l&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Testability and unit testing"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Stefan Jungmayr&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   His dissertation is lengthy, there is some useful stuff there. His clear definitions
   of dependencies are a good contribution.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Books
&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;p&gt;
   If you want a good and accessible text that does cover a lot of the issues we talked
   about, I really have found good use for Feathers "WELC" book. I recommend it to anyone
   learning behavior driven or test first design as well.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Working effectively with legacy code"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Prentice Hall, 2004&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Michael Feathers&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   Chapters addressing test construction factors: Chapter nine and ten talks about controllability&lt;wbr&gt; and
   a little about observability. Other chapters talk about design and abstraction, notably
   chapter 17. Great book on the subject of testing object oriented code, one of the
   best IMHO. 
   &lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   There's also Binders enormous book, which is not mentioned that often, so I'll mention
   it. The parts I've read are excellent, but it's quite enormous. He should have split
   it into several.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "Testing Object-Oriented&lt;wbr&gt; Systems: Models, Patterns, and Tools"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Addison-Wesley 1999&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Robert V Binder&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;Testing general 
&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;p&gt;
   I brought up some stuff (the testing periods, etc) from an old article that is really
   nice, and highly recommended, well worth a read. Short easy read that has many insights,
   although it is a bit historical.&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; The growth of software testing&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; D. Gelperin, B. Hetzel&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; June 1988, Communications of the ACM,&amp;nbsp;
   Volume 31 Issue 6&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   This is an old classic and still very amusing read, could use another font:&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "In defense of program testing or Correctness proofs considered
   harmful"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Andrew S Tannenbaum et al&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ACM SIGPLAN Notices Volume 11 ,&amp;nbsp; Issue
   5&amp;nbsp; (May 1976)&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;OO 
&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;p&gt;
   I mentioned the study on core OO concepts:&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "The quarks of object-oriented&lt;wbr&gt; development"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Deborah J. Armstrong&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;
   &amp;nbsp; 
   &lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Communications of the ACM&amp;nbsp; archive, February
   2006&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;h3&gt;TOOP - Testable object oriented programming 
&lt;/h3&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;p&gt;
   There has actually been some work on what testable object oriented programming might
   mean. What I've read has not been terribly interesting, but here is one I read anyway:&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; "On testable object-oriented&lt;wbr&gt; programming"&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Y Wang, et al&lt;br&gt;
   &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ACM SIGSOFT Software Engineering Notes, July
   1997
&lt;/p&gt;
&lt;hints id="hah_hints"&gt;
&lt;/hints&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=37676609-1c77-43ac-b290-f0b78cef60e5" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,37676609-1c77-43ac-b290-f0b78cef60e5.aspx</comments>
      <category>Talks and events</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=ebd9d31c-266a-417b-8876-be26ae592ac1</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,ebd9d31c-266a-417b-8876-be26ae592ac1.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,ebd9d31c-266a-417b-8876-be26ae592ac1.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=ebd9d31c-266a-417b-8876-be26ae592ac1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img style="margin: 0px 0px 0px 15px" src="http://mawi.org/content/binary/Influencesforteammorale_11D24/hockey_479643_79148829_small.jpg" align="right" />
        <p>
        </p>
        <p>
      At the latest <a href="http://mawi.org/agileoresund/">AgileØresund</a> meeting we
      had the usual mix of new and old people representing both devs/techleads and project
      managers. I (again) wanted to talk about team morale. Being a consultant I get to
      move between company cultures quite often, which allows me to more easily see and
      experience differences among them. Having worked for some of the larger traditional
      companies in Sweden, this is a most fascinating aspect. It is fun to reason about
      how the company culture has been devised and/or emerged, and what the logic behind
      it is - what must have been the benefits the leaders saw when promoting some values
      inside the organization? Morale in a team comes both from the context - from "upwards"
      if you like - and from within the team. A team needs a vision in order to believe
      in the work they do. If you do not think that the work you do will matter to anyone
      at all, then you are not likely to invest heavily in the work. From within the team,
      a breach of morale will spread: If someone looses faith in the project, that may spread
      and will at the least affect the others. 
   </p>
        <p>
        
   </p>
        <p>
      I think there is a junction where these things meet; how we express our faith and
      passion can become a heuristic that is then expected - a mindless rule that the team
      has to work overtime at some point, that the team has to do this and that. (Well,
      blindly following rules is almost never good, nothing new there.) This junction is
      basically where acting and appearances are more important than actual results. Acting
      and appearances are naturally very important, but are not directly related to the
      results. 
   </p>
        <p>
        
   </p>
        <p>
      Anyway, <a href="http://www.hedgate.net">Chris</a> mentioned this <a href="http://headrush.typepad.com/creating_passionate_users/2007/02/dont_ask_employ.html">post</a> from
      Kathy Sierra (I don't read her blog regularly anymore myself) that talks about the
      target of passion - company or work. I really see a connection to her post.
   </p>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=ebd9d31c-266a-417b-8876-be26ae592ac1" />
      </body>
      <title>Influences for team morale</title>
      <guid>http://mawi.org/PermaLink,guid,ebd9d31c-266a-417b-8876-be26ae592ac1.aspx</guid>
      <link>http://mawi.org/InfluencesForTeamMorale.aspx</link>
      <pubDate>Sun, 18 Mar 2007 19:15:19 GMT</pubDate>
      <description>&lt;img style="margin: 0px 0px 0px 15px" src="http://mawi.org/content/binary/Influencesforteammorale_11D24/hockey_479643_79148829_small.jpg" align="right"&gt; 
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
   At the latest &lt;a href="http://mawi.org/agileoresund/"&gt;AgileØresund&lt;/a&gt; meeting we
   had the usual mix of new and old people representing both devs/techleads and project
   managers. I (again) wanted to talk about team morale. Being a consultant I get to
   move between company cultures quite often, which allows me to more easily see and
   experience differences among them. Having worked for some of the larger traditional
   companies in Sweden, this is a most fascinating aspect. It is fun to reason about
   how the company culture has been devised and/or emerged, and what the logic behind
   it is - what must have been the benefits the leaders saw when promoting some values
   inside the organization? Morale in a team comes both from the context - from "upwards"
   if you like - and from within the team. A team needs a vision in order to believe
   in the work they do. If you do not think that the work you do will matter to anyone
   at all, then you are not likely to invest heavily in the work. From within the team,
   a breach of morale will spread: If someone looses faith in the project, that may spread
   and will at the least affect the others. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   I think there is a junction where these things meet; how we express our faith and
   passion can become a heuristic that is then expected - a mindless rule that the team
   has to work overtime at some point, that the team has to do this and that. (Well,
   blindly following rules is almost never good, nothing new there.) This junction is
   basically where acting and appearances are more important than actual results. Acting
   and appearances are naturally very important, but are not directly related to the
   results. 
&lt;p&gt;
   &amp;nbsp; 
&lt;p&gt;
   Anyway, &lt;a href="http://www.hedgate.net"&gt;Chris&lt;/a&gt; mentioned this &lt;a href="http://headrush.typepad.com/creating_passionate_users/2007/02/dont_ask_employ.html"&gt;post&lt;/a&gt; from
   Kathy Sierra (I don't read her blog regularly anymore myself) that talks about the
   target of passion - company or work. I really see a connection to her post.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=ebd9d31c-266a-417b-8876-be26ae592ac1" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,ebd9d31c-266a-417b-8876-be26ae592ac1.aspx</comments>
      <category>Agile;Misc</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=13e42c7f-16bc-49de-969a-5347a955d123</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,13e42c7f-16bc-49de-969a-5347a955d123.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,13e42c7f-16bc-49de-969a-5347a955d123.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=13e42c7f-16bc-49de-969a-5347a955d123</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <img src="http://mawi.org//content/binary/656298_92096030_small.jpg" align="right" border="1" />
        <p>
      Roy <a href="http://weblogs.asp.net/rosherove/archive/2007/02/25/why-you-should-think-about-ootp-object-oriented-testable-programming.aspx">blogs</a> about
      testability in the language. I definitely think that the language could cater
      testability, much like it connects with other development needs. For example, in .NET
      there is the obsolete attribute which we may decorate a method with, which causes
      the compiler to issue a warning if someone compiles code that uses that method.
   </p>
        <p>
      Likewise, I have for some time wondered if using an attribute indicating that a method
      is for testing purposes only would be useful. I think so.
   </p>
        <p>
      Anyway, thanks for this Roy! It's amazing to see how quickly that debate springs up again!
      I am doing a <a href="http://www.spaconference.org/spa2007/sessions/session67.html">workshop</a> on
      testability and encapsulation and this is definitely inspiring, I almost thought that
      everyone had already gone past the encapsulation debate and that I wouldn't get anyone
      to discuss it with - but here is proof that it is not so again! 
   </p>
        <p>
      Hopefully we'll get even more perspectives.
   </p>
        <p>
        </p>
        <hints id="hah_hints">
        </hints>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=13e42c7f-16bc-49de-969a-5347a955d123" />
      </body>
      <title>Testable programming languages</title>
      <guid>http://mawi.org/PermaLink,guid,13e42c7f-16bc-49de-969a-5347a955d123.aspx</guid>
      <link>http://mawi.org/TestableProgrammingLanguages.aspx</link>
      <pubDate>Wed, 28 Feb 2007 21:33:43 GMT</pubDate>
      <description>&lt;img src="http://mawi.org//content/binary/656298_92096030_small.jpg" align="right" border="1"&gt; 
&lt;p&gt;
   Roy &lt;a href="http://weblogs.asp.net/rosherove/archive/2007/02/25/why-you-should-think-about-ootp-object-oriented-testable-programming.aspx"&gt;blogs&lt;/a&gt; about
   testability in the language. I&amp;nbsp;definitely think that the language could cater
   testability, much like it connects with other development needs. For example, in .NET
   there is the obsolete attribute which we may decorate a method with, which causes
   the compiler to issue a warning if someone compiles code that uses that method.
&lt;/p&gt;
&lt;p&gt;
   Likewise, I have for some time wondered if using an attribute indicating that a method
   is for testing purposes only would be useful. I think so.
&lt;/p&gt;
&lt;p&gt;
   Anyway, thanks for this Roy! It's amazing to see how quickly that debate springs up&amp;nbsp;again!
   I am doing a &lt;a href="http://www.spaconference.org/spa2007/sessions/session67.html"&gt;workshop&lt;/a&gt; on
   testability and encapsulation and this is definitely inspiring, I almost thought that
   everyone had already gone past the encapsulation debate and that I wouldn't get anyone
   to discuss it with - but here is proof that it is not so again! 
&lt;/p&gt;
&lt;p&gt;
   Hopefully we'll get even more perspectives.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;hints id="hah_hints"&gt;
&lt;/hints&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=13e42c7f-16bc-49de-969a-5347a955d123" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,13e42c7f-16bc-49de-969a-5347a955d123.aspx</comments>
      <category>Talks and events;Test</category>
    </item>
    <item>
      <trackback:ping>http://mawi.org/Trackback.aspx?guid=06ce0499-0a07-4b09-9640-5d701adda4b0</trackback:ping>
      <pingback:server>http://mawi.org/pingback.aspx</pingback:server>
      <pingback:target>http://mawi.org/PermaLink,guid,06ce0499-0a07-4b09-9640-5d701adda4b0.aspx</pingback:target>
      <dc:creator>mawi</dc:creator>
      <wfw:comment>http://mawi.org/CommentView,guid,06ce0499-0a07-4b09-9640-5d701adda4b0.aspx</wfw:comment>
      <wfw:commentRss>http://mawi.org/SyndicationService.asmx/GetEntryCommentsRss?guid=06ce0499-0a07-4b09-9640-5d701adda4b0</wfw:commentRss>
      <slash:comments>1</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <a href="http://mawi.org/content/binary/Opensourcetocommercial_AF26/512024_67639673_small23.jpg" atomicselection="true">
            <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" src="http://mawi.org/content/binary/Opensourcetocommercial_AF26/512024_67639673_small2_thumb1.jpg" width="300" align="left" border="0" />
          </a> There
      was a project called the Netron project a while  back, that offered a nice graphing
      library and several related libraries. I used to check the blog regularly, to see
      progress, and so on. I stopped for a year or more, but not so long ago, I ventured
      to do so again. I got really suprised, and went to do some checking. Check this adress,
      you may be surprised to:
   </p>
        <p>
       
   </p>
        <p>
          <a href="http://netron.sourceforge.net/">http://netron.sourceforge.net/</a>
        </p>
        <p>
       
   </p>
        <p>
      Don't read on until you've checked it!
   </p>
        <p>
       
   </p>
        <p>
      Checked it?
   </p>
        <p>
       
   </p>
        <p>
      Were you surprised? I sure was. If you did not bother to check it, the sourceforge
      project page has been emptied of all contents (don't know if the source was ever hosted
      there though, here is someone saying that the CVS repos were removed, which would
      be very odd indeed). The project homepage link instantly redirects you to an ordering
      page for a graphing product "Go Diagram". Basically, an ordering page on sourceforge!
      Odd!
   </p>
        <p>
       
   </p>
        <p>
      In summary, Netron <a href="http://web.archive.org/web/20050622053710/netron.sourceforge.net/ewiki/"><em>was</em></a> an <a href="http://www.krugle.com/kse/codespaces/BvWzXL">open
      source project</a> that did not use a well known license, but <a href="http://www.koders.com/csharp/fid974C7593D7657327C4F16392A2A0E701BEC9ECC0.aspx?s=netron+project">the</a><a href="http://www.krugle.com/kse/files/cvs/cvs.sourceforge.net/netron/netrontry2/Automatology/AssemblyInfo.cs">license</a> was
      a "use anyway you want" type of thing. It appears to be affiliated with
      this go diagram commercial venture, but there is no indication of how or
      why. I don't think there is anything wrong about that, per se. These things feel
      strange to me, though:
   </p>
        <ul>
          <li>
         The redirect from sourceforge to the order page. 
      </li>
          <li>
         Not leaving a trace of the OS project - <em>after</em> you have accepted donations
         to the open source project. Check out the thankyou note to "Axel" at the end of <a href="http://web.archive.org/web/20050331043905/netron.sourceforge.net/ewiki/">this
         page</a>.</li>
        </ul>
        <p>
      It looks strange, and not pretty. If I had to call it by the looks of things, someone
      went commercial with the stuff and (perhaps even as insiduously as being part of some
      agreement?) removed all content they had control over, <em>everywhere</em> (sourceforge,
      codeproject articles, etc).
   </p>
        <p>
       
   </p>
        <p>
      Other people have <a href="http://hammett.castleproject.org/?p=113">written</a> about
      this, I wanted to note my own findings here. Do note <a href="http://blogs.conchango.com/howardvanrooijen/archive/2006/11/06/WhatHappenedToTheNetronProject.aspx">this
      posting</a>. There is a resurrection project for the source <a href="http://sourceforge.net/projects/netron-reloaded">here</a>,
      and much of the previously available documentation is hosted <a href="http://netron-doc.kuss.dyndns.org/pmwiki/pmwiki.php/Main/HomePage">here</a>.
      You can of course browse the <a href="http://web.archive.org/web/*/http://netron.sourceforge.net/">archived
      versions of the homepage</a>, <a href="http://web.archive.org/web/20060427044030/http://www.codeproject.com/cs/miscctrl/NetronLight.asp">archived
      codeproject article</a>, and <a href="http://web.archive.org/web/*/http://netron.sourceforge.net/ewiki/netron.php?id=NetronBlog">blog</a>.
      It is strange, isn't it?
   </p>
        <p style="font-size: 8pt">
          <em>(Photo: <a href="http://www.sxc.hu/profile/tony_r">Tony Richards, Herford</a>)</em>
        </p>
        <img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=06ce0499-0a07-4b09-9640-5d701adda4b0" />
      </body>
      <title>Open source to commercial, an archaeological survey</title>
      <guid>http://mawi.org/PermaLink,guid,06ce0499-0a07-4b09-9640-5d701adda4b0.aspx</guid>
      <link>http://mawi.org/OpenSourceToCommercialAnArchaeologicalSurvey.aspx</link>
      <pubDate>Wed, 28 Feb 2007 20:49:39 GMT</pubDate>
      <description>&lt;p&gt;
   &lt;a href="http://mawi.org/content/binary/Opensourcetocommercial_AF26/512024_67639673_small23.jpg" atomicselection="true"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="199" src="http://mawi.org/content/binary/Opensourcetocommercial_AF26/512024_67639673_small2_thumb1.jpg" width="300" align="left" border="0"&gt;&lt;/a&gt; There
   was a project called the Netron project a while&amp;nbsp; back, that offered a nice graphing
   library and several related libraries. I used to check the blog regularly, to see
   progress, and so on. I stopped for a year or more, but not so long ago, I ventured
   to do so again. I got really suprised, and went to do some checking. Check this adress,
   you may be surprised to:
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   &lt;a href="http://netron.sourceforge.net/"&gt;http://netron.sourceforge.net/&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Don't read on until you've checked it!
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Checked it?
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Were you surprised?&amp;nbsp;I sure was. If you did not bother to check it, the sourceforge
   project page has been emptied of all contents (don't know if the source was ever hosted
   there though, here is someone saying that the CVS repos were removed, which would
   be very odd indeed). The project homepage link instantly redirects you to an ordering
   page for a graphing product "Go Diagram". Basically, an ordering page on sourceforge!
   Odd!
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   In summary, Netron &lt;a href="http://web.archive.org/web/20050622053710/netron.sourceforge.net/ewiki/"&gt;&lt;em&gt;was&lt;/em&gt;&lt;/a&gt; an &lt;a href="http://www.krugle.com/kse/codespaces/BvWzXL"&gt;open
   source project&lt;/a&gt; that did not use a well known license, but &lt;a href="http://www.koders.com/csharp/fid974C7593D7657327C4F16392A2A0E701BEC9ECC0.aspx?s=netron+project"&gt;the&lt;/a&gt; &lt;a href="http://www.krugle.com/kse/files/cvs/cvs.sourceforge.net/netron/netrontry2/Automatology/AssemblyInfo.cs"&gt;license&lt;/a&gt; was
   a "use anyway you want" type of thing.&amp;nbsp;It&amp;nbsp;appears to be affiliated with
   this go diagram commercial venture, but&amp;nbsp;there is no&amp;nbsp;indication of how or
   why.&amp;nbsp;I don't think there is anything wrong about that, per se. These things feel
   strange to me, though:
&lt;/p&gt;
&lt;ul&gt;
   &lt;li&gt;
      The redirect from sourceforge to the order page. 
   &lt;li&gt;
      Not leaving a trace of the OS project&amp;nbsp;- &lt;em&gt;after&lt;/em&gt; you have accepted donations
      to the open source project. Check out the thankyou note to "Axel" at the end of &lt;a href="http://web.archive.org/web/20050331043905/netron.sourceforge.net/ewiki/"&gt;this
      page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
   It looks strange, and not pretty. If I had to call it by the looks of things, someone
   went commercial with the stuff and (perhaps even as insiduously as being part of some
   agreement?) removed all content they had control over, &lt;em&gt;everywhere&lt;/em&gt; (sourceforge,
   codeproject articles, etc).
&lt;/p&gt;
&lt;p&gt;
   &amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
   Other people have &lt;a href="http://hammett.castleproject.org/?p=113"&gt;written&lt;/a&gt; about
   this,&amp;nbsp;I wanted to note my own findings here.&amp;nbsp;Do note &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2006/11/06/WhatHappenedToTheNetronProject.aspx"&gt;this
   posting&lt;/a&gt;. There is a resurrection project for the source &lt;a href="http://sourceforge.net/projects/netron-reloaded"&gt;here&lt;/a&gt;,
   and much of the previously available documentation is hosted &lt;a href="http://netron-doc.kuss.dyndns.org/pmwiki/pmwiki.php/Main/HomePage"&gt;here&lt;/a&gt;.
   You can of course browse the &lt;a href="http://web.archive.org/web/*/http://netron.sourceforge.net/"&gt;archived
   versions of the homepage&lt;/a&gt;, &lt;a href="http://web.archive.org/web/20060427044030/http://www.codeproject.com/cs/miscctrl/NetronLight.asp"&gt;archived
   codeproject article&lt;/a&gt;, and &lt;a href="http://web.archive.org/web/*/http://netron.sourceforge.net/ewiki/netron.php?id=NetronBlog"&gt;blog&lt;/a&gt;.
   It is strange, isn't it?
&lt;/p&gt;
&lt;p style="font-size: 8pt"&gt;
   &lt;em&gt;(Photo: &lt;a href="http://www.sxc.hu/profile/tony_r"&gt;Tony Richards, Herford&lt;/a&gt;)&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://mawi.org/aggbug.ashx?id=06ce0499-0a07-4b09-9640-5d701adda4b0" /&gt;</description>
      <comments>http://mawi.org/CommentView,guid,06ce0499-0a07-4b09-9640-5d701adda4b0.aspx</comments>
      <category>Misc</category>
    </item>
  </channel>
</rss>