<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Jeme : Playground - Blog - And more...</title>
        <link>http://dotjem.com/Default.aspx</link>
        <description>...another .NET Developer</description>
        <language>en-US</language>
        <copyright>Jens Melgaard</copyright>
        <generator>Subtext Version 2.1.0.5</generator>
        <creativeCommons:license>Jens Melgaard</creativeCommons:license>
        <image>
            <title>Jeme : Playground - Blog - And more...</title>
            <url>http://dotjem.com/images/RSS2Image.gif</url>
            <link>http://dotjem.com/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>ClearCase &amp;amp; ClearQuest &amp;ndash; The end of the road?</title>
            <category>ClearCase &amp; ClearQuest</category>
            <category>Random @ Work</category>
            <link>http://dotjem.com/archive/2010/07/09/40.aspx</link>
            <description>&lt;p&gt;I am properly jinxing things by writing this, if so I will shoot my self at a later time, and of course blog about it before hand.&lt;/p&gt;  &lt;p&gt;For the past 6-9months or so we have been under the torture of ClearCase and ClearQuest, Actually I think I would prefer actual torture to those tools, but that is another story, but finally after a very long struggle which I can only pad my team on the back for, we are beginning to see an end of all this.&lt;/p&gt;  &lt;h2&gt;So you finally saw the light that ClearCase &amp;amp; ClearQuest brings?&lt;/h2&gt;  &lt;p&gt;If realizing that ClearCase &amp;amp; ClearQuest will always stand as the worlds to day best example of “How NOT to do things” then yes, I have seen the light, hey that could actually be useful in the future if you think about it, imagine the SVN team or Jira Team standing in front of a question of how to implement a new feature in the system and they are in doubt, look at how ClearCase and/or ClearQuest and how IBM did it, and then place your solution as far away from that as possible, I promise it can only be better.&lt;/p&gt;  &lt;p&gt;No what really happened for us here is that the ones selecting the tool in the first place accepted that it may not have been the best thing they did here, and well we can only learn from our mistakes.&lt;/p&gt;  &lt;p&gt;As things turn out it might even be a good one, because what it all started out with when we first raised all our problems was that the company should find an alternative to ClearCase &amp;amp; ClearQuest for smaller projects, in other words projects that from their perspective didn’t need all of the “Good” features of ClearCase &amp;amp; ClearQuest, but since then we are now talking about a complete replacement to ClearCase &amp;amp; ClearQuest instead, so for that I might even view the 6-9 months as having brought some true value in that they have shown that ClearCase &amp;amp; ClearQuest is just a bad idea across the board and not just for small projects.&lt;/p&gt;  &lt;h2&gt;Replacements on the horizon?&lt;/h2&gt;  &lt;p&gt;Now the replacements being reviewed is Subversion, Mercurial and Rational Team Concert.&lt;/p&gt;  &lt;h4&gt;Subversion&lt;/h4&gt;  &lt;p&gt;Subversion is somewhat the safe bet, after all for years it has proven it self to both scale fairly well and support the daily work in a very non-intrusive manner, it has been well tested over the years.&lt;/p&gt;  &lt;p&gt;But being an old horse can also have it’s downsides of course, it wouldn't still be alive today if it wasn’t good, and it is one of my favorite tools for source control, but it doesn’t contain a whole lot of all the new features that tools like Git, Mercurial, Perforce etc. has.&lt;/p&gt;  &lt;p&gt;I could argue that one can live without that, and certainly I believe that to be true, but what if I could get all the good stuff from Subversion and on top of that deliciousness also get a cherry on top?&lt;/p&gt;  &lt;p&gt;One thing that is obvious is that Subversion can only replace ClearCase as a tool, while ClearQuest needs to be replaced by something else that also works with Subversion, here Jira would most likely be the tool of choice, and I could almost not stay seated in my chair of pure joy when that was mentioned.&lt;/p&gt;  &lt;h4&gt;Mercurial&lt;/h4&gt;  &lt;p&gt;Mercurial is what we are looking into testing right now to see if it can lift the task and then take it from there, I mean we can fall back on Subversion if it shows to be a bad choice, but ill put a rest on that since I am not that familiar with it.&lt;/p&gt;  &lt;p&gt;That is why I can’t talk much about upsides and downsides for this tool besides that it is newer than Subversion, so it hopefully developed with a good bag of experience from all the good things that brought us.&lt;/p&gt;  &lt;p&gt;Again, as it was with Subversion, this only replaces ClearCase and lacks the ClearQuest counterpart, but we are in luck again, Jira integrates with Mercurial as well, so the same solution could apply here.&lt;/p&gt;  &lt;h4&gt;Team Concert&lt;/h4&gt;  &lt;p&gt;The big horse. &lt;em&gt;(Compared to the above solutions RTC is a big horse, compared to ClearCase &amp;amp; ClearQuest it is still small, I could aim at certain things beyond pure subjective opinions since I have seen it in action, but I will refrain from doing so since I can’t for sure say there is alternatives to the workflows I saw demonstrated at that point, and what changes newer versions has brought)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Well lets face it, none of us &lt;em&gt;(as in us on my current project)&lt;/em&gt; want an IBM replacement at this point, all confidence in that company for me is personally lost, I have yet to see a Licensed IBM piece of software that is actually well working. Even Eclipse has gone somewhat down the hill &lt;em&gt;(To clarify, eclipse started out with a good momentum, it lacked a huge amount of features in the very beginning, but was at least a fast IDE, over the time the Feature part might have improved, but the IDE is degraded in performance as a consequence, that is what I mean when I say it has gone down hill)&lt;/em&gt;. &lt;strike&gt;ever since IBM got involved&lt;/strike&gt; &lt;em&gt;(Eclipse was started by Object Technology International (OTI), which was acquired by IBM back in 1996, so Eclipse was in other words started by IBM)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;As a big difference to the others, Team Concert is the whole package where as Subversion and Mercurial both will need a 3rd party tool for replacing ClearQuest, Team Concert has “work items/task items (or whatever they call it)” integrated which replaces that need.&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;Besides being overly happy about the fact that we might not need to suffer under the strict rule of ClearCase &amp;amp; ClearQuest much longer, what I would really somewhat like was to select both Subversion and Mercurial for a period, and see how that went.&lt;/p&gt;  &lt;p&gt;But getting rid off ClearCase &amp;amp; ClearCase can almost come at any price and would still be acceptable.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/40.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/07/09/40.aspx</guid>
            <pubDate>Fri, 09 Jul 2010 09:32:54 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/40.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/07/09/40.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/40.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Application Domains is hard&amp;hellip;</title>
            <category>.NET Programming</category>
            <category>AppDomains</category>
            <category>Plugins</category>
            <link>http://dotjem.com/archive/2010/07/01/39.aspx</link>
            <description>&lt;p&gt;Have you ever been working with Application Domain in .NET?, in the beginning it doesn’t seem all that difficult, but ones you get to know them you begin to realize all the little difficulties.&lt;/p&gt;  &lt;p&gt;Everything works fine as long as you don’t move outside the Host AppDomains.BaseDirectory, but in our case we wanted to have Plug-ins deployed at say location “C:\My Plug-ins” while the host application would run at “C:\Program Files\My App”, since we might run into dependencies from the AppDomain to some of the Host Assemblies problems was apparently inevitable.&lt;/p&gt;  &lt;h4&gt;The Classic&lt;/h4&gt;  &lt;p&gt;Here is some simple code and our first attempt.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; applicationBase = Path.GetDirectoryName(interOperabilityPackageType.AssemblyDescription.AssemblyPath);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;AppDomainSetup setup = &lt;span class="kwrd"&gt;new&lt;/span&gt; AppDomainSetup&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    ApplicationName = name,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    ApplicationBase = applicationBase,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    PrivateBinPathProbe = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;};&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;Evidence evidence = &lt;span class="kwrd"&gt;new&lt;/span&gt; Evidence(AppDomain.CurrentDomain.Evidence);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;AppDomain domain = AppDomain.CreateDomain(name, evidence, setup);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p /&gt;&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p&gt;Seems very simple, but because “ApplicationBase” is different from “AppDomain.CurrentDomain.BaseDirectory” we ran into what seems to be a very well know exception. &lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;System.IO.FileNotFoundException: Could not load file or assembly 'Host.Services, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you have worked with any sort of dynamically loading assemblies I am fairly sure that is familiar to you. And the issue is that “Host.Services” was know within the Host Application Domain because it is stored in “C:\Program Files\My App”, and the Application Domain looking for it is looking in “C:\My Plug-ins”.&lt;/p&gt;

&lt;p&gt;Well we Thought we instructed it to also look in “AppDomain.CurrentDomain.BaseDirectory” which would be “C:\Program Files\My App”, but that was not the case.&lt;/p&gt;

&lt;h4&gt;AppDomain.AssemblyResolve to the rescue?&lt;/h4&gt;

&lt;p&gt;Ok so we have been working with these quirks before, so we knew how we could use “AppDomain.AssemblyResolve” to manually resolve any assemblies that the AppDomain it self could not handle.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; applicationBase = Path.GetDirectoryName(interOperabilityPackageType.AssemblyDescription.AssemblyPath);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;AppDomainSetup setup = &lt;span class="kwrd"&gt;new&lt;/span&gt; AppDomainSetup&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    ApplicationName = name,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    ApplicationBase = applicationBase,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    PrivateBinPathProbe = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;};&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;Evidence evidence = &lt;span class="kwrd"&gt;new&lt;/span&gt; Evidence(AppDomain.CurrentDomain.Evidence);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;AppDomain domain = AppDomain.CreateDomain(name, evidence, setup);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;domain.AssemblyResolve += Resolve;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p&gt; &lt;/p&gt;

&lt;p&gt;That should work right, well we thought so and ones again we were wrong, what happens now is that instead of actually getting as far as initializing the Application Domain and using it, instead it fails right where we hooked up the event handler for resolving assemblies.&lt;/p&gt;

&lt;p&gt;Again the exception looks very much like the previous mentioned, but this time it can’t find the Assembly that contains the Type that has the “Resolve” handler we set up in the very last line in the above snippet.&lt;/p&gt;

&lt;h4&gt;AppDomain.Load then!&lt;/h4&gt;

&lt;p&gt;Ok, so obviously when hooking up the event handler, the Application Domain needs to know the Type of the object handling that event, that is actually fairly understandable when you think about it, so if the Application Domain can’t even find that one and load we can’t really handle anything.&lt;/p&gt;

&lt;p&gt;So what is next? Our idea was to manually instruct the Application Domain to load a shallow assembly that didn’t have any other dependencies that what could be found in the GAC, and the hook an event handler up.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; applicationBase = Path.GetDirectoryName(interOperabilityPackageType.AssemblyDescription.AssemblyPath);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;AppDomainSetup setup = &lt;span class="kwrd"&gt;new&lt;/span&gt; AppDomainSetup&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    ApplicationName = name,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    ApplicationBase = applicationBase,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    PrivateBinPathProbe = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;};&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;Evidence evidence = &lt;span class="kwrd"&gt;new&lt;/span&gt; Evidence(AppDomain.CurrentDomain.Evidence);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;AppDomain domain = AppDomain.CreateDomain(name, evidence, setup);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;domain.Load(File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, &lt;span class="str"&gt;"Host.AssemblyLoader.dll"&lt;/span&gt;)));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;domain.AssemblyResolve += &lt;span class="kwrd"&gt;new&lt;/span&gt; AssemblyLoader(AppDomain.CurrentDomain.BaseDirectory).Handle;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p&gt; &lt;/p&gt;

&lt;p&gt;Using a very simple little class like the following, and don’t mind the odd Resolve behavior.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Serializable]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; AssemblyLoader&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ApplicationBase { get; set; }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; AssemblyLoader(&lt;span class="kwrd"&gt;string&lt;/span&gt; applicationBase)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        ApplicationBase = applicationBase;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Assembly Resolve(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ResolveEventArgs args)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;        AssemblyName assemblyName = &lt;span class="kwrd"&gt;new&lt;/span&gt; AssemblyName(args.Name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; fileName = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}.dll"&lt;/span&gt;, assemblyName.Name);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; Assembly.LoadFile(Path.Combine(ApplicationBase, fileName));&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p /&gt;

&lt;p&gt;So yes or no?… NO!… same problem still.&lt;/p&gt;

&lt;h4&gt;Things are much more simple!&lt;/h4&gt;

&lt;p&gt;Actually things became much more simple in the end when we managed to make it work.&lt;/p&gt;

&lt;p&gt;I Can’t say how exactly the .NET team has envisioned that this should work, we couldn't really find out any useable things that the “PrivateBinPath” and “PrivateBinPathProbe” was used for. Well we use them now, and made them work as we expected they would!&lt;/p&gt;

&lt;p&gt;So we changed the “AssemblyLoader” class to look like this instead:
  &lt;br /&gt;&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;[Serializable]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; AssemblyLoader : MarshalByRefObject&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ApplicationBase { get; set; }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; AssemblyLoader()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        ApplicationBase = AppDomain.CurrentDomain.SetupInformation.PrivateBinPath;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;        AppDomain.CurrentDomain.AssemblyResolve += Resolve;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; Assembly Resolve(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, ResolveEventArgs args)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;        AssemblyName assemblyName = &lt;span class="kwrd"&gt;new&lt;/span&gt; AssemblyName(args.Name);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; fileName = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;"{0}.dll"&lt;/span&gt;, assemblyName.Name);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; Assembly.LoadFile(Path.Combine(ApplicationBase, fileName));&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p&gt; &lt;/p&gt;

&lt;p&gt;So rather than hooking up the event where we created the Application Domain, we let the class do it by it self, and to “CurrentDomain” instead.&lt;/p&gt;

&lt;p&gt;Ok so wait, doesn’t that cause an issue when creating it in the factory since it is now loading for the wrong domain? Well thankfully you are able to create objects within domains from the outside.&lt;/p&gt;

&lt;p&gt;So creating the domain is now done as follows:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; applicationBase = Path.GetDirectoryName(interOperabilityPackageType.AssemblyDescription.AssemblyPath);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;AppDomainSetup setup = &lt;span class="kwrd"&gt;new&lt;/span&gt; AppDomainSetup&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    ApplicationName = name,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    ApplicationBase = applicationBase,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    PrivateBinPath = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    PrivateBinPathProbe = AppDomain.CurrentDomain.BaseDirectory,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    ConfigurationFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;};&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;Evidence evidence = &lt;span class="kwrd"&gt;new&lt;/span&gt; Evidence(AppDomain.CurrentDomain.Evidence);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;AppDomain domain = AppDomain.CreateDomain(name, evidence, setup);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;domain.CreateInstanceFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, &lt;span class="str"&gt;"Host.AssemblyLoader.dll"&lt;/span&gt;),&lt;span class="str"&gt;"Host.AssemblyLoader"&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[
.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;p&gt; &lt;/p&gt;

&lt;p&gt;We don’t even care for maintaining a reference to the “AssemblyLoader” since it should pretty much be kept alive by hooking it self up to the Event.&lt;/p&gt;

&lt;p&gt;Hopefully this can help some that has stumbled over the same problem, I see many workarounds where people then either just let Plug-ins be installed in same host directory, having all the necessary dependencies deployed along with the plug-in even though it isn’t something the plug-in knows it is dependant on and so forth.&lt;/p&gt;

&lt;p&gt;The above at least enables us to install plug-ins away from our host application base which I think is nice.&lt;/p&gt;

&lt;p&gt;If anyone have solved this differently, then please make a response, maybe we can find pros and cons in either way, or just discover a better solution.&lt;/p&gt;

&lt;p&gt;If you have any questions or can’t get the above to work, then feel free to ask.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/39.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/07/01/39.aspx</guid>
            <pubDate>Thu, 01 Jul 2010 13:08:06 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/39.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/07/01/39.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/39.aspx</wfw:commentRss>
        </item>
        <item>
            <title>No Apple, JUST NO!&amp;hellip;</title>
            <link>http://dotjem.com/archive/2010/04/29/38.aspx</link>
            <description>&lt;p&gt;Every time you hear people talk about Apple, Mac, OSX and related your told that there stuff just works, they are logical and intuitive and a bunch of other very “think happy thoughts” crap.&lt;/p&gt;  &lt;p&gt;But even Apple fail, and sometimes they fail miserably.&lt;/p&gt;  &lt;p&gt;Right… so iTunes, do you know a more hated piece of crap software for your music and stuff?… I mean Microsoft Windows Media player is fairly bad on its own… but this time it seems like Apple wanted to beat Microsoft at something Microsoft is really good at… what's that?… Making crappy Software...&lt;/p&gt;  &lt;p&gt;And here you might say that as Apple always succeed when they set out to do something, they surely did so here as well, there is just that one thing, it aren't really an area you want to be good.&lt;/p&gt;  &lt;p&gt;Ok enough irony, ever seen this particular dialog?&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/NoAppleJUSTNO_789/image_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/NoAppleJUSTNO_789/image_thumb.png" width="457" height="207" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ok so several things.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Who ever came up with the limitation of only being able to sync with a single iTunes library should be fired instantly!… I have no less than 3 computers I would like to sync my iPhone with. Work, Home Workstation, Home Laptop.&lt;/li&gt;    &lt;li&gt;So the dialog appeared when I wanted to “Apply” some changes made to the configuration of what i wanted to Sync… I Did NOT ask it to sync in that process, how hard can it be to flip a little Boolean Apple?… or is “True/False” a to complex concept for you?… Maybe your in the wrong business then considering that EVERYTHING in a computer is composed of just those 2 values.&lt;/li&gt;    &lt;li&gt;So I now have 2 choices after wanting to save that little “True/False” change, Erase my iPhone and sync it with this very newly installed and empty library or undo my chance an cancel, ever heard of applications where you just didn’t know what to do, how to get forward, well this is exactly one of those situations.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Last but not least, WHY OH WHY do I have to use iTunes at all? If anyone ever complained about Microsoft always trying to define there “own” things and not just rely on standards, then that is exactly what Apple has always done, difference between Microsoft and Apple today, Microsoft is moving in a much more open and healthy direction, Apply is still back in the 90’s in that area…&lt;/p&gt;  &lt;p&gt;It is a damn sad thing that they do understand how the exterior should look more than anyone else… &lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/38.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/04/29/38.aspx</guid>
            <pubDate>Wed, 28 Apr 2010 22:32:13 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/38.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/04/29/38.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/38.aspx</wfw:commentRss>
        </item>
        <item>
            <title>When you make a mistake, make sure to repeat it at least ones.</title>
            <category>Random @ Work</category>
            <category>ClearCase &amp; ClearQuest</category>
            <link>http://dotjem.com/archive/2010/03/24/37.aspx</link>
            <description>&lt;p&gt;I’m not sure why the above is a philosophy that occurs more and more frequently, one reason is that people properly don’t realize that they do exactly that.&lt;/p&gt;
&lt;p&gt;I work at a place where we pride our self in being Agile, good at Processes, Optimizations, Tracking, Controlling and Reaction and all so fine words. Yes we are indeed a Agile CMMI5 certified company.&lt;/p&gt;
&lt;p&gt;This is why I now wonder why after making a mistake as big as choosing ClearCase/ClearQuest house wide, and then admitting that CC/CQ might not exactly be the thing for small projects (my claim is that it is useless for any project that is aiming to earn money), then they are very close to doing the same mistake ones more.&lt;/p&gt;
&lt;p&gt;Lets evaluate a bit, the mistake at first was not choosing CC/CQ, no it was the actual process around it, put simply the only real question was to it “Can we use this tool for all projects”, well the answer is obviously “Yes”, no one ever bothered to ask any of the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;Will it be preferred?&lt;/li&gt;
    &lt;li&gt;Will it save money?&lt;/li&gt;
    &lt;li&gt;Will it increase productivity?&lt;/li&gt;
    &lt;li&gt;Will it be worth it?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And so on, funny enough the short answer to all have seemed to be “NO”. And definitely not now where the market is under high pressure.&lt;/p&gt;
&lt;h4&gt;Our Lessons, Our Reaction&lt;/h4&gt;
&lt;p&gt;So in a company where we are suppose to be so good at learning by our mistakes. What are we doing differently this time?.&lt;/p&gt;
&lt;p&gt;Again, we are not doing as we should, and we are not even doing as the processes tell us to, when ever a project needs to make a decision of that magnitude, it boils down to 3 simple steps:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Start by giving a list of requirements.&lt;/li&gt;
    &lt;li&gt;Weight each of the requirement.&lt;/li&gt;
    &lt;li&gt;Identify a list of tools to evaluate against those requirements and scoring them.&lt;/li&gt;
    &lt;li&gt;Pilot some or all of those that “hits”.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That sounds fairly healthy to me, structured decision making.&lt;/p&gt;
&lt;p&gt;In this case of selecting a House wide tool to replace CC/CQ we instead do:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Start by giving a list of requirements. (We have learned something here)&lt;/li&gt;
    &lt;li&gt;Select your favorite tool and evaluate it against the requirements.&lt;/li&gt;
    &lt;li&gt;If it match you have a winner.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ok, that sounds ok right? but WHAT if there was a better solution out there?&lt;/p&gt;
&lt;p&gt;At the end of the day, if we where to cover just 95% of that lists requirements, we could choose CC/CQ all over.&lt;/p&gt;
&lt;p&gt;We know by now that CC/CQ does NOT work, apparently people up high here doesn’t feel that it would hurt wasting the same amount of money all over again.&lt;/p&gt;
&lt;p&gt;So my question to my self these days is, what are we doing so much better than others?&lt;/p&gt;
&lt;h4&gt;Another stab at CC/CQ&lt;/h4&gt;
&lt;p&gt;In the list of bad things about CC/CQ.&lt;/p&gt;
&lt;p&gt;I have NEVER EVER seen a SCM that when you say “Add”, “Delete”, “Rename” ect. that then just commits that change immediately, in my world things is always “Add”+”Commit”, but ClearCase does not feel the need for the “Commit” part, surely it is perfectly safe to just throw it directly in the repository right away.&lt;/p&gt;
&lt;p&gt;It is the WORST thing I have ever seen from a SCM, and ill admit that I have never worked with Visual Source Safe, so there is still room for worse tools.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/37.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/03/24/37.aspx</guid>
            <pubDate>Wed, 24 Mar 2010 14:09:08 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/37.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/03/24/37.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/37.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Tattoo: Back to front - Part 6</title>
            <category>Tattoos</category>
            <link>http://dotjem.com/archive/2010/01/05/36.aspx</link>
            <description>&lt;p&gt;It has been a while since I last worked on my tattoo to come, there has been to main reasons for this.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;I simply have not had the time. &lt;/li&gt;    &lt;li&gt;I did feel that I had reached a point where I didn’t know where or how to continue, but still had small things i didn’t like completely. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;During my vacation over Christmas however i ended up drawing a bit again.&lt;/p&gt;  &lt;p&gt;This time the tail got another re-design so to speak, but i haven’t drawn the entire tattoo up yet, so this is the tail by it self.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/TattooBacktofrontPart6_13577/031-tail_2.gif" rel="lightbox"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="031-tail" border="0" alt="031-tail" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/TattooBacktofrontPart6_13577/031-tail_thumb.gif" width="169" height="393" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I actually really like the result, there is very small details that has to be fixed, but I actually thing that the tail could serve as a Tattoo by it self, of course then it wouldn't be a “tail” but just a pattern. &lt;/p&gt;  &lt;p&gt;Here they are photo shopped together, and it is clear that it leaves a bit of work around the edges of the inner circle.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/TattooBacktofrontPart6_13577/031-6_11.gif" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="031-6" border="0" alt="031-6" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/TattooBacktofrontPart6_13577/031-6_thumb_4.gif" width="348" height="478" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;Besides that, the front and upper part needs some more work as well, yet the new tail makes for a more complete look, and it also fits in better with the rest, I still like some aspects from the old tail, but then i also like certain aspects from all the parts I have removed, there is always small things that pleases me in what i draw, regardless, sometimes they just work to bring ideas, other times they stand out and would be better served alone.&lt;/p&gt;  &lt;p&gt;But this puts some progress in it again, hopefully in 6 months it will begin to take form on my back rather just keep being on paper.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/36.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/01/05/36.aspx</guid>
            <pubDate>Tue, 05 Jan 2010 21:00:21 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/36.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/01/05/36.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/36.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Visual Studio 2008 add-in: Profile Manager v0.3 preview.</title>
            <link>http://dotjem.com/archive/2010/01/03/35.aspx</link>
            <description>&lt;p&gt;So the next version of the Profile Manager add-in is taking form, and I will proberly soon release it in a beta, like 4-8 weeks from now, depending on how much work i have at actual work.&lt;/p&gt;  &lt;p&gt;Alot of stuff has been going on, most of all the entire architecture has changed, or rather it now has an actualy architecture with integration, logic, model and presentation tiers ect.&lt;/p&gt;  &lt;p&gt;Im making this post to give a heads up on the new user interface additions, consider it a rough lineout though, I’m not intirely done with it all yet.&lt;/p&gt;  &lt;h4&gt;Startup Dialog&lt;/h4&gt;  &lt;p&gt;When Visual Studio starts up, a dialog enables one to change the current profile before Visual Studio loads.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_6.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_2.png" width="237" height="141" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Depending on use this can be usefull so that windows arent misplaced when going from a dual-screen to a single-screen environment, in my own case this is when I log on my workstation at work from home through remote desktop, since dual-sceen isn’t supported for us there.&lt;/p&gt;  &lt;h4&gt;Management Interface&lt;/h4&gt;  &lt;p&gt;The management interface has been extended greatly to support for all the changes to the Profile concept, as such both Layouts (what profiles was before) and contexts are managable from the same interface as profiles are, also a page for general setings is added.&lt;/p&gt;  &lt;p&gt;The basic look and feel is the same for all pages, below is the Context page shown in both an edit and view state.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_12.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_5.png" width="484" height="318" /&gt;&lt;/a&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_14.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_6.png" width="484" height="318" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The same look and feel is applied to the Profiles page, but editing profiles is by far more complex since they bind contexts, layouts ect. together.&lt;/p&gt;  &lt;p&gt; &lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_8.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_3.png" width="484" height="319" /&gt;&lt;/a&gt; &lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_16.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_7.png" width="484" height="318" /&gt;&lt;/a&gt;  &lt;/p&gt;  &lt;h4&gt;Ease of use&lt;/h4&gt;  &lt;p&gt;This all implies advanced usage, but this might not be what fits to all needs, maybe you just want a simple and easy way to switch the layout of windows, the same way as v0.2 worked.&lt;/p&gt;  &lt;p&gt;But because of the new functions, things aint so easy anymore, however to simplify the lifecycle of profiles it will be posible to link newly saved layouts directly to a profile that will be given the same name. This happens if the “Link to new Profile” is checked off.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_18.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_8.png" width="294" height="104" /&gt;&lt;/a&gt;   &lt;/p&gt;  &lt;p&gt;Obviously this can’t be selected of one just wishes to overwrite an old layout. So the checkbox is disabled of an already existing layout is choosen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_20.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/VisualStudio2008addinProfileManagerv0.3_105C2/image_thumb_9.png" width="294" height="104" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p /&gt;  &lt;p&gt;Thats it for now, a short heads up, and I hope to be done with it soon, and maybe also have a prober installer this time.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/35.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2010/01/03/35.aspx</guid>
            <pubDate>Sun, 03 Jan 2010 17:37:04 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/35.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2010/01/03/35.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/35.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Jira 4.0, GreenHopper, SVN and Visual Studio&amp;hellip;</title>
            <link>http://dotjem.com/archive/2009/12/29/34.aspx</link>
            <description>&lt;p&gt;Ive been a bit inactive here on my blog for a while, it is not because there has been nothing to talk about, in fact there has been plenty, and maybe I’ll be able to catch up on that, but this post is about some of my core development environment at home.&lt;/p&gt;  &lt;h4&gt;ClearCase / ClearQuest&lt;/h4&gt;  &lt;p&gt;As someone might also have noticed, I have been bitching a bit about ClearQuest / ClearCase which we have switched to at work, and only god knows why (and i don’t belive in him so that might pose a problem?)… So In light of those posts I would post something positive on what they try to accomplish.&lt;/p&gt;  &lt;p&gt;It’s not that IBM fails completely, some of the very core ideas is good engough, well those ideas might actually not even originate form IBM, so maybe they do fail, but i can’t say for shure since i don’t know the history of CC/CQ enough, what I do know that the core ideas are just drowning in bad implementation, weather it be the interface or deeper.&lt;/p&gt;  &lt;p&gt;And then there is the core things that is missing, like Atomic Commits which is a very interesting area to talk about on ClearCase apparently, I have seen comparison matrix’s that claims that ClearCase does have it, but thats a lie, however the latest release should actually have it though, there is just one problem, it only works under a specific project model which is a real kicker to me, do I dare to ask why it only works under a specific model?… If that does not scream bad design, I don’t know what does.&lt;/p&gt;  &lt;p&gt;But enough about CC/CQ.&lt;/p&gt;  &lt;h4&gt;Jira 4.0&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.atlassian.com/software/jira/"&gt;http://www.atlassian.com/software/jira/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;JIRA is an Issue tracking system implemented in Java with a web based platform.&lt;/p&gt;  &lt;p&gt;JIRA seems to be very well implemented if you ask me, it is very lightweight in the default deployment containing only the very basics, however it should cover the simple needs for very small and new projects.&lt;/p&gt;  &lt;p&gt;From that point the system can grow with the project and the added needs a bigger project gets, this could be:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Linking issues together.&lt;/li&gt;    &lt;li&gt;Sub-Items&lt;/li&gt;    &lt;li&gt;Custom Fields&lt;/li&gt;    &lt;li&gt;Time Tracking&lt;/li&gt;    &lt;li&gt;ect.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Those are more basic extentions, and all directly bundled with JIRA, but JIRA also offers other ways to fit it into the projects needs, personally I have no experience in extending Jira my self, but there is already a load of plugins out there, from “SCC Connecters”, “Agile Management” and so on, some are bundled with the installation, others can be purchached or downloaded for free, actually much of the code functionality in JIRA is implemented as plugins. Here is some i use:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;GreenHopper – Agile project management, I will have a paragraph on this by it self.&lt;/li&gt;    &lt;li&gt;RPC JIRA – For accessing jira through “code” as such.&lt;/li&gt;    &lt;li&gt;JIRA Subversion – Plugin that can link subersion commits to Jira issues, I will also go deeper into this.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;And there is many more out there.&lt;/p&gt;  &lt;p&gt;JIRA ofc also alow you to ajust what types of issues you have on your project, what resollution types, states, priorities and so on, bassicly everything can be ajusted more or less.&lt;/p&gt;  &lt;p&gt;In all that, many of the core functions are the same of Clear Quest, so what is better?, for one major thing. the whole way it is presented to the user. The interfaces is much more user friendly and intuitive where CQ is actually counter-intuitive on many points.&lt;/p&gt;  &lt;p&gt;There is things missing, or things that could be better, but iw you where to make a scale from -100% to 100% where -100% means total counter productive and counter intuitive, and 100% being the opposite (the perfect interface). I would place CQ in the range from -50% to -75%, yes in the counter productive and counter intuitive area, but JIRA i would place around the 80%-90% for the general user interface (what all the developers, project managers ect would use)… and then around 60%-70% for the administration interface because it is slightly less intuitive, but that is overall ok.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_4.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_thumb_1.png" width="642" height="344" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Some things I do miss is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Creating new “linked” issues directly from an issue, much like the way you can create Sub-Items. This would serve well when JIRA is used to also store things as stories, features ect. since it would ease the process of breaking features into stories, you can however ofc. just have stories as Sub-Items, but after trying that I didn’t really like it.&lt;/li&gt;    &lt;li&gt;Choose how Sub-Items time tracking in handled towards there parent, as it is in JIRA it is added together, but when one might use the sub items to break down the issue, then the hours on the parent should be a ROM which remains that way, while the more accuarate estimate is only the sum of the Sub-Items.&lt;/li&gt;    &lt;li&gt;More levels of sub-tasking, not that I need it, however the option seems to be missing.&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;GreenHopper&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://www.atlassian.com/software/greenhopper/"&gt;http://www.atlassian.com/software/greenhopper/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;GreenHopper is an Agile Project management tool for JIRA, it basicly tries to imcorporate the SCRUM process into JIRA and offers planning bords, task boards, chart boards and so on, and it does it’s job well most of the way.&lt;/p&gt;  &lt;p&gt;Im not shure just how usefull the task board would be to the general SCRUM team, it proberly has more use to a team where members are located at different places which is proberly mostly seen in the OpenSource world, but I won’t draw any conclusion on it, logging work and closing issues is actually something I do through the task board, so if nothing else it has that conveniecense level, here it would however be smart if moving an item would be able to auto trigger the “log work” dialog.&lt;/p&gt;  &lt;p&gt;But all in all, it’s rather good, or at least much better than or equal to any other tools ive seen for it.&lt;/p&gt;  &lt;p&gt;Here is a glimt of the planning board, simply drag items to the scehduled versions:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_6.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_thumb_2.png" width="526" height="398" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Mingle from ThoughtWorks seems to be a worthy competitor with card to code links, time tracking ect. But it seems to be very similar to a Jira, GreenHopper and FishEye implementation, where it just has some advantages and other disadvantages. &lt;/p&gt;  &lt;p&gt;Mingle can be found at:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.thoughtworks-studios.com/mingle-agile-project-management"&gt;http://www.thoughtworks-studios.com/mingle-agile-project-management&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The JIRA way seems to have a price advantage as well as it seems to be more extensible. Mingle sounds easyer to install, and if i know ThougtWorks right it properbly more scaleable as well, meaning less hardware for large deployments.&lt;/p&gt;  &lt;h4&gt;JIRA Subversion&lt;/h4&gt;  &lt;p&gt;&lt;a href="https://plugins.atlassian.com/plugin/details/291"&gt;https://plugins.atlassian.com/plugin/details/291&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is a plugin used to link Subversion commits to JIRA issues, the commits and comments will apear on a tab at the bottom of each issue, it is very easy to work with and will allow for linking several issues to a single commit.&lt;/p&gt;  &lt;p&gt;Simply add the “Issue-Id” in the comment and the plugin will pick it up after some time. Personally I put it in the beginning and enshure that it is easy noticable, e.g. “[JVS-12] Commit comment…” and the result will be:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_2.png" rel="lightbox"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Jira4.0GreenHopperSVNandVisualStudio_14F4B/image_thumb.png" width="556" height="421" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Compared to the CC/CQ way, this is way less invasive for the devoloper, yet the linking can still be enforced, but enforcing it requires some work, like commit hooks ect. So where in CC/CQ it is more a core thing, here it becomes a gimick unless you do something.&lt;/p&gt;  &lt;p&gt;But looking at how it works, enforcing would not even make it close to as intrusive as the whole CC/CQ procedure which is just purely painfull.&lt;/p&gt;  &lt;p&gt;What is lost i gues, is a linking from the various branches in a project to the issue, or more specificly what branches an issue has been fixed on and merged to, and I’m not shure that is possible, and… I can see the use for it, but mostly for projects that has been released in various supported versions, but the intrusinveness of CC/CQ is to high a price to pay for it, and is ultimately not really the facilitator for that specific feature, how hard or easy it would be to add to the JIRA – SVN combination i don’t know either.&lt;/p&gt;  &lt;h4&gt;It all put together&lt;/h4&gt;  &lt;p&gt;All these things put together seems to work really well, it is a bit of a hassle to install it all, especially all the JIRA related things, but this is mostly because I installed JIRA, Confluence, FishEye as well as making an attempt on Crowd, but I have not gotten it all to work just yet.&lt;/p&gt;  &lt;p&gt;The connection this post is about though all works really great togther.&lt;/p&gt;  &lt;p&gt;To summerize the tools:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/visualstudio/en-us/default.mspx"&gt;http://www.microsoft.com/visualstudio/en-us/default.mspx&lt;/a&gt; – Development IDE for .NET&lt;/li&gt;    &lt;li&gt;&lt;a href="http://ankhsvn.open.collab.net/"&gt;http://ankhsvn.open.collab.net/&lt;/a&gt; – SVN Plugin for Visual Studio&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atlassian.com/software/jira/"&gt;http://www.atlassian.com/software/jira/&lt;/a&gt; – Issue Management&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.atlassian.com/software/greenhopper/"&gt;http://www.atlassian.com/software/greenhopper/&lt;/a&gt; – Agile project management&lt;/li&gt;    &lt;li&gt;&lt;a href="https://plugins.atlassian.com/plugin/details/291"&gt;https://plugins.atlassian.com/plugin/details/291&lt;/a&gt; – JIRA Subversion&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;That will be it for this post, maybe more to come.&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/34.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2009/12/29/34.aspx</guid>
            <pubDate>Tue, 29 Dec 2009 00:09:52 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/34.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2009/12/29/34.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/34.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Atlassian &amp;ndash; Here Be Dragons</title>
            <link>http://dotjem.com/archive/2009/11/30/33.aspx</link>
            <description>&lt;p&gt;I thought this required a little attention, I thought it was a lifting spin on the task of installing and integrating, if not all, then most the Atlassian products.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://confluence.atlassian.com/display/ATLAS/Here+Be+Dragons"&gt;http://confluence.atlassian.com/display/ATLAS/Here+Be+Dragons&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;They do seem to have quite an interesting product suite, but I properly won’t replace my CruiseControl.NET with there Continues Integration Server (Bamboo).&lt;/p&gt;  &lt;p&gt;However, I would be very interesting in installing Jira, Confluence (which I have already mentioned before, and we have installed at work), FishEye and maybe Crucible although the whole “Code Review” thing is not something we do much at work, since we lift the quality through frequent inspections and a high level of communications, also trying to implement a rotating pair programming method.&lt;/p&gt;  &lt;p&gt;Oh and if you manage to complete the dragon quest (installing ALL! products) you apparently get a free T-Shirt…&lt;/p&gt;  &lt;p&gt;Go slay dragons &amp;gt;.&amp;lt;&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/33.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2009/11/30/33.aspx</guid>
            <pubDate>Mon, 30 Nov 2009 08:09:19 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/33.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2009/11/30/33.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/33.aspx</wfw:commentRss>
        </item>
        <item>
            <title>More suffering in the name of ClearCase / ClearQuest &amp;ndash; Atlassian Confluence lifts my day</title>
            <category>ClearCase &amp; ClearQuest</category>
            <category>Atlassian</category>
            <category>Atlassian - Confluence</category>
            <link>http://dotjem.com/archive/2009/11/19/32.aspx</link>
            <description>&lt;p&gt;While I still live in the hell of ClearCase and ClearQuest.&lt;/p&gt;  &lt;p&gt;If there in contrast to my beliefs was a God and a Hell as the bible mention it, I am very sure that all developers who has ever worked on ClearCase / ClearQuest (without trying to sabotage it) is headed there, while all developers forced to work with it gets a free pass to heaven no matter what other sins they might have performed.&lt;/p&gt;  &lt;p&gt;The Visual Studio integration of ClearCase / ClearQuest just plain simply sucks. Or that might imply that it actually works a little?, my recommendation for that is to NEVER install it!… A list if strikes towards it:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;It makes Visual Studio unstable as hell, you have to live with very frequent crashes. &lt;/li&gt;    &lt;li&gt;Adding files fails 50% of the time, they seems like they are added looking at the icons ect. but in fact they are not and you have to re-add them in the CC Explorer (Which only sucks a little less) &lt;/li&gt;    &lt;li&gt;ReSharper becomes… uhmm… I am not shure what to call ReSharper when it can’t refactor anymore.      &lt;br /&gt;And now you might think, isn’t this a bug in ReSharper?, well ReSharper works fine with all other Source Control Systems I know of, so for me it is easy to cast blame at IBM. &lt;/li&gt;    &lt;li&gt;It does not integrate with the SCC model, one of the reasons given by IBM for this seems to be pure lack of knowledge on there side.      &lt;br /&gt;Reason: “We can’t do this under the SCC model”       &lt;br /&gt;Counter: “Why the hell can SVN, TFS and others do it under the SCC model then"?” &lt;/li&gt;    &lt;li&gt;Requires explicit check-out, yes the automatic checkout it actually does provide, is sure to jump “randomly” around in the file, forgetting the change you made that resulted in the checkout or inserting that change a “random” place. (It might not be random, but it does sure seem so) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Oh and then there is ALL those features it just simply lack.&lt;/p&gt;  &lt;p&gt;Don’t even get me started on those.&lt;/p&gt;  &lt;h4&gt;On the bright side&lt;/h4&gt;  &lt;p&gt;We have started to use &lt;a href="http://www.atlassian.com/software/confluence/"&gt;Atlassian Confluence&lt;/a&gt; an “Enterprise Wiki” as they call it, and i must say, i DO NOT sway to java solutions often, but this wiki which is directly targeted at team/company collaboration, is the best ting I have seen to lift exactly that.&lt;/p&gt;  &lt;p&gt;But be warned, i tried getting it to run on Apache Tomcat 6.0 first as a WAR file (or whatever, I’m not very into the Java application servers), but I never got that to work, my very first experience with a Java application server made me think “What's all the fuzz about Java being good at this stuff, this F**** shit doesn't work in any prober way”.    &lt;br /&gt;    &lt;br /&gt;In the end I used the standalone deployment pre-packed with a Apache Tomcat 5.??, after some hassle I even got it up and running on a SQL Server 2005 Express.&lt;/p&gt;  &lt;p&gt;The installation experience can be a REAL pain, and you may be close to giving up many times along the way, but I can only say DON’T!!! give up, it may not seem like it is worth it, but if I am to judge that, I would say that it totally is…&lt;/p&gt;  &lt;p&gt;An yes, it does have bugs and such, but in contrast to the above mentioned product (ClearCase), the bugs is in the corners where you rarely go, and not in the dead center where you always work.&lt;/p&gt;  &lt;p&gt;Even better, it is very affordable for small companies and teams as well, 10$ for a 10 user starter edition, that is just a brilliant idea if you ask me, plus if your a non-profit or Open Source project it is FREE!… (they do require some verification in this case though, and well that's both acceptable and understandable)&lt;/p&gt;  &lt;p&gt;Now go INSTALL!… you will thank me. (well only if you need a collaborative tool)&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/32.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2009/11/19/32.aspx</guid>
            <pubDate>Thu, 19 Nov 2009 13:29:26 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/32.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2009/11/19/32.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/32.aspx</wfw:commentRss>
        </item>
        <item>
            <title>It is not what it seems!&amp;hellip;</title>
            <category>ClearCase &amp; ClearQuest</category>
            <link>http://dotjem.com/archive/2009/10/27/31.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Itisnotwhatitseems_B13C/clip_image002_2.jpg" rel="lightbox"&gt;&lt;img title="clip_image002" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="304" alt="clip_image002" src="http://dotjem.com/images/dotjem_com/WindowsLiveWriter/Itisnotwhatitseems_B13C/clip_image002_thumb.jpg" width="399" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h1&gt;IT IS NOT WHAT IT SEEMS!...&lt;/h1&gt;  &lt;p&gt;I’m using ClearCase to either:&lt;/p&gt;  &lt;p&gt;· Rebasing my stream…&lt;/p&gt;  &lt;p&gt;· Delivering my stream…&lt;/p&gt;  &lt;p&gt;· Updating my view…&lt;/p&gt;  &lt;p&gt;· Adding new files…&lt;/p&gt;  &lt;p&gt;· Checking changes in…&lt;/p&gt;  &lt;p&gt;· …&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;&lt;em&gt;This was made while I was rebasing, it was done before ClearCase was.&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://dotjem.com/aggbug/31.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Jens Melgaard</dc:creator>
            <guid>http://dotjem.com/archive/2009/10/27/31.aspx</guid>
            <pubDate>Tue, 27 Oct 2009 11:36:15 GMT</pubDate>
            <wfw:comment>http://dotjem.com/comments/31.aspx</wfw:comment>
            <comments>http://dotjem.com/archive/2009/10/27/31.aspx#feedback</comments>
            <wfw:commentRss>http://dotjem.com/comments/commentRss/31.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>