<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Struggles by Lars C.</title>
	<atom:link href="http://startbigthinksmall.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://startbigthinksmall.wordpress.com</link>
	<description>... routine is the enemy.</description>
	<lastBuildDate>Tue, 27 Dec 2011 16:27:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='startbigthinksmall.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/48f9c77eeb6e0e94151481ef285fe3a1?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Struggles by Lars C.</title>
		<link>http://startbigthinksmall.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://startbigthinksmall.wordpress.com/osd.xml" title="Struggles by Lars C." />
	<atom:link rel='hub' href='http://startbigthinksmall.wordpress.com/?pushpress=hub'/>
		<item>
		<title>What the Azure Tools do to your Cloud Service Configuration</title>
		<link>http://startbigthinksmall.wordpress.com/2011/12/27/what-the-azure-tools-do-to-your-cloud-service-configuration/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/12/27/what-the-azure-tools-do-to-your-cloud-service-configuration/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 15:59:56 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[Just Drops]]></category>
		<category><![CDATA[NPanday]]></category>
		<category><![CDATA[azure]]></category>
		<category><![CDATA[npanday]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/?p=634</guid>
		<description><![CDATA[For my current work on Azure integration for NPanday I’m investigating what the Azure Tools do with the Service Configuration (*.cscfg) on publish, since the file in Visual Studio it isn’t the same as one which is deployed along with the Cloud Service Package (*.cspkg). The build &#38; package part for Azure Cloud Services can [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=634&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>For my current work on Azure integration for NPanday I’m investigating what the Azure Tools do with the Service Configuration (*.cscfg) on publish, since the file in Visual Studio it isn’t the same as one which is deployed along with the Cloud Service Package (*.cspkg).</p>
<p>The build &amp; package part for Azure Cloud Services can be found in <font face="Courier New">%Program Files (x86)%\MSBuild\Microsoft\VisualStudio\v10.0\Windows Azure Tools\1.6\Microsoft.WindowsAzure.targets</font></p>
<h3>Find and copy</h3>
<p>First, the build tries to figure out which configuration to build use as input by checking for <font face="Courier New">ServiceConfiguration.$(TargetProfile).ccfg</font> and <font face="Courier New">ServiceConfiguration.ccfg, </font><font face="Verdana">while</font>&#160;<font face="Courier New">$(TargetProfile)</font> is “Cloud” by default.</p>
<p>As a part of the build, after being copied, the configuration file is augmented with more settings.</p>
<h3>Add “file generated” comment</h3>
<p>That was why I noticed, that the files are different. The comment in the target file makes it look like the file is generated from scratch, but instead it is just a copy which changed here and there. By default, the comment is the only change <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:478b322d-a6b4-4f6e-910b-ab46554b84ab" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;AddGeneratedXmlComment
  GeneratedFile=&quot;@(TargetServiceConfiguration)&quot;
  SourceFile=&quot;@(SourceServiceConfiguration)&quot; /&gt;

</pre></pre>
</div>
<h3>Cloud Tools version</h3>
<p>If IntelliTrace or profiling is enabled, this change lets Azure know which versions of the tools are in use.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:2025a92c-36c2-4312-92ea-6b58adc683d3" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;AddSettingToServiceConfiguration
   ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
   Setting =&quot;$(CloudToolsVersionSettingName)&quot;
   Value=&quot;$(CloudToolsVersion)&quot;
   Roles=&quot;@(DiagnosticAgentRoles)&quot;
   Condition=&quot;'$(EnableProfiling)'=='true' or '$(EnableIntelliTrace)'=='true'&quot; /&gt;
</pre></pre>
</div>
<h3>Intelli Trace</h3>
<p>If IntelliTrace is enabled, it will add a connection string to the configuration:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:5ce10393-3ad4-4d12-8ddf-097e8e466310" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;AddIntelliTraceToServiceConfiguration
  ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
  IntelliTraceConnectionString=&quot;$(IntelliTraceConnectionString)&quot;
  Roles=&quot;@(DiagnosticAgentRoles)&quot;/&gt;
</pre></pre>
</div>
<h3></h3>
<h3>Profiling</h3>
<p>If profiling is enabled, it will add an connection string, where to store profiling data.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:46fe36b2-cf1c-44ab-a70a-0a6b52a4319c" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;AddSettingToServiceConfiguration
  ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
  Setting =&quot;Profiling.ProfilingConnectionString&quot;
  Value=&quot;$(ProfilingConnectionString)&quot;
  Roles=&quot;@(DiagnosticAgentRoles)&quot; /&gt;
</pre></pre>
</div>
<h3>Remote Desktop</h3>
<p>If remote desktop is set to be enabled, the build configures this switch in the cloud service configuration, too:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:a0999b8c-4674-4bc9-967d-27c73a9a93ee" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;ConfigureRemoteDesktop
      ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
      ServiceDefinitionFile=&quot;@(TargetServiceDefinition)&quot;
      Roles=&quot;@(RoleReferences)&quot; 
      RemoteDesktopIsEnabled=&quot;$(EnableRemoteDesktop)&quot;
      /&gt;  
</pre></pre>
</div>
<h3></h3>
<h3>Web Deploy</h3>
<p>If WebDeploy is enabled for any of your web roles, it will add an endpoint to the definition and set the instance count to zero for all web roles in the service configuration.</p>
<p><div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:605b17f3-f5db-44e1-ad99-c6f0e577022e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;EnableWebDeploy
  ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
  ServiceDefinitionFile=&quot;@(TargetServiceDefinition)&quot;
  RolesAndPorts=&quot;$(WebDeployPorts)&quot; /&gt;
</pre></pre>
</div>
<h3></h3>
<h3>Connection String Override</h3>
<p>If ‘ShouldUpdateDiagnosticsConnectionStringOnPublish’ is set to true, the diagnostics connection string is overridden for all roles in order to prevent the default setting “UseDevelopmentStorage=true” to be published to the cloud.</p>
<p>This is one of the typical “Microsoft demo-ready” features. Most certainly you’ll have multiple role-spanning connection strings or settings that you’d like to change on publish, but this is the only one needed to get demos to run, right?</p>
<p><div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:11fd4a8f-645a-47b5-8a1c-e680f341276e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;SetServiceConfigurationSetting 
  Roles=&quot;$(DiagnosticsConnectionStringRoles)&quot;
  ServiceConfigurationFile=&quot;@(TargetServiceConfiguration)&quot;
  Setting=&quot;$(DiagnosticsConnectionStringName)&quot;
  Value=&quot;$(DiagnosticsConnectionStringValue)&quot; /&gt;
</pre></pre>
</div>
<h3></h3>
<h2></h2>
<h2>Corresponding parameters in NPanday</h2>
<p>The most complex part in the build is the setup for profiling and IntelliTrace; currently we have no plans on supporting these in NPanday. We will rather just deploy from Visual Studio, in case we need profiling or IntelliTrace. </p>
<p>I still have to look at how RDP and MSDeploy can be added to the configured service configuration; for a first release of NPanday that may have to be done manually.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/634/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/634/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/634/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=634&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/12/27/what-the-azure-tools-do-to-your-cloud-service-configuration/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>Plexus Container Annotations and Maven 2 Mojos</title>
		<link>http://startbigthinksmall.wordpress.com/2011/12/05/plexus-container-annotations-and-maven-2-mojos/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/12/05/plexus-container-annotations-and-maven-2-mojos/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 18:44:39 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[NPanday]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[plexus]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/?p=629</guid>
		<description><![CDATA[I’ll make it short: it’s a mess. You can’t use plexus container 1.5-tooling (with java annotations), if you have to load your components in a plexus 1.0.x-container – which is the case, if your components are utilized in a Maven 2.2.x Mojo. This is simply because plexus container 1.5.x uses “default” as a default role-hint, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=629&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ll make it short: it’s a mess. You can’t use <a href="http://plexus.codehaus.org/plexus-containers/plexus-component-metadata/generate-metadata-mojo.html">plexus container 1.5-tooling</a> (with java annotations), if you have to load your components in a <a href="http://plexus.codehaus.org/plexus-containers/history.html">plexus 1.0.x-container</a> – which is the case, if your components are utilized in a Maven 2.2.x Mojo. This is simply because plexus container 1.5.x uses “default” as a default role-hint, while NULL is the default in plexus 1.0.x.</p>
<p>But you can use the old tooling, <a href="http://plexus.codehaus.org/plexus-maven-plugin/descriptor-mojo.html">plexus-maven-plugin</a>. But by default it fails if it sees any annotation in your source code, because it uses a version of qdox that doesn’t know annotations yet.</p>
<p>Also, when generating the component descriptor it doesn’t merge with the manually defined one in<font face="Courier New"> src/resources</font> (the new one does). </p>
<p>And since, by default, the <font face="Courier New">merge-descriptors</font> goal runs before <font face="Courier New">descriptor</font> (generate) goal, you have to do some back flips to get that running too.</p>
<p>Well here is a configuration that works. At least in my project. Today.</p>
<p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:fe97c20f-bc34-4df6-bc5a-54b4bb62a643" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;plugin&gt;
  &lt;groupId&gt;org.codehaus.plexus&lt;/groupId&gt;
  &lt;artifactId&gt;plexus-maven-plugin&lt;/artifactId&gt;
  &lt;version&gt;1.3.8&lt;/version&gt;
  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;com.thoughtworks.qdox&lt;/groupId&gt;
      &lt;artifactId&gt;qdox&lt;/artifactId&gt;
      &lt;version&gt;1.12&lt;/version&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;
  &lt;executions&gt;
    &lt;execution&gt;
      &lt;phase&gt;process-classes&lt;/phase&gt;
      &lt;goals&gt;
        &lt;goal&gt;descriptor&lt;/goal&gt;
        &lt;goal&gt;merge-descriptors&lt;/goal&gt;
      &lt;/goals&gt;
      &lt;configuration&gt;
        &lt;!-- descriptor config --&gt;
        &lt;outputDirectory&gt;${project.build.directory}&lt;/outputDirectory&gt;
        &lt;fileName&gt;plexus/auto-components.xml&lt;/fileName&gt;

        &lt;!-- merge config --&gt;
        &lt;descriptors&gt;
          &lt;descriptor&gt;${project.build.directory}/plexus/auto-components.xml&lt;/descriptor&gt;
          &lt;descriptor&gt;${basedir}/src/main/resources/META-INF/plexus/components.xml&lt;/descriptor&gt;
        &lt;/descriptors&gt;
      &lt;/configuration&gt;
    &lt;/execution&gt;
  &lt;/executions&gt;
&lt;/plugin&gt;
</pre></pre>
</div>
<p><strong>Note:</strong> If you only want to use automatic descriptors, remove all <font face="Courier New">&lt;configuration&gt;…&lt;/configuration&gt;</font> contents. The defaults will work then.</p>
<p>You can define that in <font face="Courier New">build/pluginManagement/plugins</font> in your parent pom. Then in your project pom, you just put these four lines in <font face="Courier New">build/plugins</font>:</p>
<p><div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:f549796b-b145-4d93-b5de-ba3aca3a02bd" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;plugin&gt;
  &lt;groupId&gt;org.codehaus.plexus&lt;/groupId&gt;
  &lt;artifactId&gt;plexus-maven-plugin&lt;/artifactId&gt;
&lt;/plugin&gt;
</pre></pre>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/629/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/629/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/629/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=629&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/12/05/plexus-container-annotations-and-maven-2-mojos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>Create branches with Maven Release Plugin (SVN)</title>
		<link>http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 07:59:15 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Just Drops]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[maven release]]></category>
		<category><![CDATA[npanday]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/?p=624</guid>
		<description><![CDATA[I’m currently working on Azure and web packaging (MSDeploy) support for NPanday. I want to do that on a separate SVN branch, which I’ll then reintegrate later on. The current trunk version is 1.4.1-incubating-SNAPSHOT, and since we are about to release that upcoming version 1.4.1-incubating soon, I don’t want to pollute it with half-baked changes, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=624&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’m currently working on <a href="https://issues.apache.org/jira/browse/NPANDAY-480">Azure</a> and <a href="https://issues.apache.org/jira/browse/NPANDAY-488#summary">web packaging (MSDeploy)</a> support for <a href="http://incubator.apache.org/npanday/">NPanday</a>. I want to do that on a separate SVN branch, which I’ll then reintegrate later on.</p>
<p>The current trunk version is <font face="Courier New">1.4.1-incubating-SNAPSHOT</font>, and since we are about to release that upcoming version<font face="Courier New"> <a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;jqlQuery=project+%3D+NPANDAY+AND+fixVersion+%3D+%221.4.1-incubating%22+ORDER+BY+status+DESC%2C+key+DESC">1.4.1-incubating</a></font> soon, I don’t want to pollute it with half-baked changes, while I’ll still need to develop on the trunk in parallel.</p>
<p>I’ll also need to be able to install both the current trunk and my experimental branch in my local Maven repository at the same time, hence I need a new temporary version for my branch. All this can be achieved using the Maven Release Plugin, in particular the branch goal. <strong>Maven Release supports 14 SCMs through the same interface; in this case we use SVN, though.</strong></p>
<h2>What I want</h2>
<ul>
<li>A new branch at <a href="https://svn.apache.org/repos/asf/incubator/npanday/branches/1.5.0-azuresupport">https://svn.apache.org/repos/asf/incubator/npanday/branches/1.5.0-azuresupport</a>,</li>
<li>and properly versioned POMs, using version <font face="Courier New">1.5.0-azuresupport-SNAPSHOT</font>.</li>
</ul>
<h2>How-to</h2>
<p>The command I need to run</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:ab85d6dc-234a-4b80-8e68-3a10ea6d934a" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
mvn release:branch 
   -DbranchName=1.5.0-azuresupport
   -DautoVersionSubmodules=true
   -DsuppressCommitBeforeBranch=true 
   -DremoteTagging=false 
   -DupdateBranchVersions=true 
   -DupdateWorkingCopyVersions=false 
</pre></pre>
</div>
<p>Lets go through the settings line-by-line:</p>
<p><font size="3" face="Courier New"><strong>mvn release:branch</strong></font></p>
<p>Loads and executes the branch-goal from the Maven Release Plugin.</p>
<p><font size="3" face="Courier New"><strong>-DbranchName=1.5.0-azuresupport</strong></font></p>
<p>The name for the branch to be created. When on trunk, Maven figures out to use the default SVN layout for branches and tags. You can optionally define the branch base using the parameter branchBase like this: <font face="Courier New">–DbranchBase=https://svn.apache.org/repos/asf/incubator/npanday/branches/</font></p>
<p><font size="3" face="Courier New"><strong>-DautoVersionSubmodules=true</strong></font></p>
<p>When ran, Maven will prompt for the version to be used in the branch. I provided <font face="Courier New">1.5.0-azuresupport-SNAPSHOT</font>. Since <font face="Courier New">autoVersionSubmodules</font> is set to true, Maven Release will automatically use this versions for all submodules and hence also update all inner-project dependencies to that version.</p>
<p>The next four settings go hand-in-hand.</p>
<p><strong><font size="3" face="Courier New">-DsuppressCommitBeforeBranch=true</font></strong> </p>
<p>By default, Maven Releases creates intermediate commits to the current working copy. I’m not sure of the reason, but I think it was because some VCS do not support branching/tagging of modified working copies. This parameter makes sure, no intermediate commits are made to the working copy.</p>
<p><font size="3" face="Courier New"><strong>-DremoteTagging=false</strong></font> </p>
<p>With SVN, by default, tags are created remotely. If you want to ommit intermediate commits, this must be set to false.</p>
<p><font size="3"><font face="Courier New"><strong>-DupdateBranchVersions=true</strong> </font></font></p>
<p><strong><font face="Courier New"><font size="3">-DupdateWorkingCopyVersions=false</font> </font></strong></p>
<p>When branching, you can either define new versions for the current working copy, or the new branch, or both. As set here, the working copy will be left alone, and the plugin will ask for a new version for the branch.</p>
<p>Now I can switch forth and back between the trunk and the new branch, but still build and deploy artifacts side-by-side.</p>
<h2>Defaults in POM</h2>
<p>You may also provide the fixed values in the POM. And if you want to avoid interfering with other Maven Release actions, you might want to use a profile.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:985d77eb-7f2f-43e0-9e8b-cbf7450ca57e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: xml;">
&lt;profile&gt;
  &lt;id&gt;branch&lt;/id&gt;
  &lt;activation&gt;
    &lt;property&gt;
      &lt;name&gt;branchName&lt;/name&gt;
    &lt;/property&gt;
  &lt;/activation&gt;
  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-release-plugin&lt;/artifactId&gt;
        &lt;version&gt;2.2.1&lt;/version&gt;
        &lt;configuration&gt;
          &lt;branchBase&gt;https://svn.apache.org/repos/asf/incubator/npanday/branches&lt;/branchBase&gt;
          &lt;autoVersionSubmodules&gt;true&lt;/autoVersionSubmodules&gt;
          &lt;suppressCommitBeforeBranch&gt;true&lt;/suppressCommitBeforeBranch&gt;
          &lt;remoteTagging&gt;false&lt;/remoteTagging&gt;
          &lt;updateBranchVersions&gt;true&lt;/updateBranchVersions&gt;
          &lt;updateWorkingCopyVersions&gt;false&lt;/updateWorkingCopyVersions&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
  &lt;/build&gt;
&lt;/profile&gt;
</pre></pre>
</div>
<p>Now it will be enough, when I run <font size="3" face="Courier New"><strong>mvn release:branch –DbranchName=1.5.0-azuresupport</strong></font></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/624/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/624/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/624/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=624&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/11/29/create-branches-with-maven-release-plugin-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>Activity Log Profiler: Find out which extension is slowing down your Visual Studio</title>
		<link>http://startbigthinksmall.wordpress.com/2011/11/08/activity-log-profiler-find-out-which-extension-is-slowing-down-your-visual-studio/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/11/08/activity-log-profiler-find-out-which-extension-is-slowing-down-your-visual-studio/#comments</comments>
		<pubDate>Tue, 08 Nov 2011 12:50:06 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[profiling]]></category>
		<category><![CDATA[visualstudio]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/11/08/activity-log-profiler-find-out-which-extension-is-slowing-down-your-visual-studio/</guid>
		<description><![CDATA[As I’m doing some work for the NPanday Visual Studio Addin, I bugs me even more that my Visual Studio 2010 currently needs about 40 seconds to start. Actually I do not wonder at all, as I installed every single extension I ever found interesting. But, should I now disable them all, or rather find [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=622&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As I’m doing some work for the <a href="http://incubator.apache.org/npanday/docs/1.4.0-incubating/guide/vs/index.html">NPanday Visual Studio Addin</a>, I bugs me even more that my Visual Studio 2010 currently needs about 40 seconds to start.</p>
<p>Actually I do not wonder at all, as I installed every single extension I ever found interesting. But, should I now disable them all, or rather find out which one takes the most time?</p>
<p>I did the latter.</p>
<p>After reading <a href="http://saraford.net/2008/11/27/did-you-know-theres-a-way-to-have-visual-studio-log-its-activity-for-troubleshooting-366/">Did you know… There’s a way to have Visual Studio log its activity for troubleshooting? – #366</a> via (<a href="http://stackoverflow.com/questions/3995253/vs2010-loads-slowly-can-i-profile-extensions-respective-startup-time">visual studio &#8211; VS2010 loads slowly. Can I profile extensions&#8217; respective startup time? &#8211; Stack Overflow</a>) </p>
<p>There it says, that if you start VS using <font face="Courier New">devenv /Log</font>, it will log it’s acitivity to&#160; <font face="Courier New">%AppData%\Roaming\Microsoft\VisualStudio\10.0\ActivityLog.xml</font> (for VS 2010). And it even comes with an XML that provides some output:</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/11/image.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb.png?w=644&#038;h=74" width="644" height="74" /></a></p>
<h2>New XSL with Profiling Capabilities</h2>
<p>So I tweaked the XSL to be a little bit more “profiling-friendly”. It will now:</p>
<ul>
<li>Tell me how long it took load each package </li>
<li>Give me a visual indicator each 1 second (configurable) </li>
<li>Mark each “End package load” line red, that exceeds a certain configurable threshold (default 500 ms). </li>
<li>Mark each normal line read, if it exceeds the configured threshold. </li>
</ul>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/11/image1.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb1.png?w=644&#038;h=246" width="644" height="246" /></a></p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/11/image2.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb2.png?w=644&#038;h=36" width="644" height="36" /></a></p>
<h2>Hotspots</h2>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/11/image3.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb3.png?w=644&#038;h=282" width="644" height="282" /></a></p>
<h2>Download and use with GIT</h2>
<ol>
<li>Open Commandwindow in <font face="Courier New">%AppData%\Roaming\Microsoft\VisualStudio\10.0</font> </li>
<li>Run <font face="Courier New">git clone </font><font face="Courier New"><a href="https://github.com/lcorneliussen/ActivityLogProfiler">https://github.com/lcorneliussen/ActivityLogProfiler</a></font> </li>
<li>Start Visual Studio with &#8216;/Log&#8217; switch </li>
<li>Run deploy.cmd (will overwrite default ActivityLog.xsl in parent folder; Visual Studio will replace it after restart!) </li>
<li>Open ActivityLog.xml in Internet Explorer </li>
</ol>
<p>You can also download it manually (<a href="https://github.com/lcorneliussen/ActivityLogProfiler/raw/master/ActivityLogProfiler.xsl">from here</a>) and replace <font face="Courier New">%AppData%\Roaming\Microsoft\VisualStudio\10.0\ActivityLog.xsl </font><font face="Verdana">manually after each Visual Studio Run. </font></p>
<p>But with GIT you can easily get updates; and it makes it easier to submit patches, which I’ll be happy to apply.</p>
<p><strong>Attention: </strong>Now you only have to repeat 3) and 4) to produce new logs, as Visual Studio will recreate both ActivityLog.xml and ActivityLog.xsl each time it is started with &#8216;/Log&#8217;.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/622/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/622/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/622/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=622&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/11/08/activity-log-profiler-find-out-which-extension-is-slowing-down-your-visual-studio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb1.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb2.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/11/image_thumb3.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Easily install Fitnesse (or any Java App) as Windows Service / NT Service</title>
		<link>http://startbigthinksmall.wordpress.com/2011/10/27/easily-install-fitnesse-or-any-java-app-as-windows-service-nt-service/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/10/27/easily-install-fitnesse-or-any-java-app-as-windows-service-nt-service/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 19:50:53 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Just Drops]]></category>
		<category><![CDATA[fitnesse]]></category>
		<category><![CDATA[nssm]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/10/27/easily-install-fitnesse-or-any-java-app-as-windows-service-nt-service/</guid>
		<description><![CDATA[After I had to search for this solution all to long, I thought I’d share it: 1. Download NSSM &#8211; the Non-Sucking Service Manager Unzip the zip package you can download from their home page (http://nssm.cc/download/nssm-2.10.zip). You’ll find nssm.exe in win32 and win64; pick the one appropriate to your platform. 2. Install Fitnesse as Service [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=613&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>After I had to search for this solution all to long, I thought I’d share it:</p>
<h2>1. Download <a href="http://nssm.cc/">NSSM &#8211; the Non-Sucking Service Manager</a></h2>
<p>Unzip the zip package you can download from their home page (<a href="http://nssm.cc/download/nssm-2.10.zip">http://nssm.cc/download/nssm-2.10.zip</a>). You’ll find nssm.exe in win32 and win64; pick the one appropriate to your platform.</p>
<h2>2. Install Fitnesse as Service</h2>
<p>Run this from command line (adjust paths and port):   </p>
<p><font face="Courier New"><font size="2"><strong>nssm install FitnesseService java –jar &lt;path-to-jar&gt;\fitnesse.jar –d &lt;installation-path&gt; –p &lt;your port&gt; &lt;further-options&gt;</strong>        <br /></font></font>    <br />If you need to retry, stop the service, then run: <font size="2"><strong><font face="Courier New">nssm remove FitnesseService confirm</font> </strong></font></p>
<h2>3. Start Fitnesse Service</h2>
<p>Run <font size="2" face="Courier New"><strong>net start BmmService</strong></font> or start it from the service manager.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/613/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/613/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/613/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=613&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/10/27/easily-install-fitnesse-or-any-java-app-as-windows-service-nt-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>For Beginners: How does Open Source work?</title>
		<link>http://startbigthinksmall.wordpress.com/2011/08/10/for-beginners-how-does-open-source-work/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/08/10/for-beginners-how-does-open-source-work/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 18:58:40 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Just Drops]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[oss]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/08/10/for-beginners-how-does-open-source-work/</guid>
		<description><![CDATA[In the past few years I have been doing some open source contribution, and lately also initiated projects together with fellow programmers. Here I write about what I noticed. First Stage: Contributing You find something useful and start to play with it. Then you find a show-stopping bug, or you&#8217;d like to have a feature. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=611&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the past few years I have been doing some open source contribution, and lately also initiated projects together with fellow programmers. Here I write about what I noticed.</p>
<h2>First Stage: Contributing</h2>
<p>You find something useful and start to play with it. Then you find a show-stopping bug, or you&#8217;d like to have a feature. You get in contact with the team, then submit issues to a bug tracker, if you find one. They might like your Ideas and ask for a patch. If it is important – and in many cases easier to fix then to rewrite on your own – you start fiddling with the code, do changes, write tests, submit patches.</p>
<p>If the team/individual applies the patches you are happy. Usually you have to maintain your own codebase until the feature is released – or you just compile from trunk <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>You might also just contribute documentation or tests.</p>
<h3>Some personal experiences in this stage</h3>
<p>Over the last couple of years I contributed to following projects:</p>
<ul>
<li><a href="http://maven.apache.org/plugins/maven-release-plugin/">Maven Release Plugin</a> </li>
<li><a href="http://npanday.codeplex.com/">Apache NPanday</a> </li>
<li><a href="http://json.codeplex.com/">Json.NET</a> </li>
</ul>
<p>For these I also submitted contributions, but they are still “in-progress”, as they have never been accepted <img src='http://s0.wp.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<ul>
<li><a href="http://maven.apache.org/">Apache Maven</a> </li>
<li><a href="http://mojo.codehaus.org/versions-maven-plugin/">Versions Maven Plugin</a> </li>
</ul>
<p>Since these patch acceptance processes take time, but I needed the fixes, I run personal forks at github for maven-versions-plugin. A custom built artifact is even in use by one of my former customers, because I couldn&#8217;t get the patch accepted in time. </p>
<h2>Second Stage: Initiating</h2>
<p>You create something and publish your code as a zip, on github, codeplex, or somewhere else. Then People start liking it and begin submit patches or report issues. Some people create forks and start maintaining their own code based on yours. Or they (or you) ask for joining the project.</p>
<p>Some projects I founded or work on at this stage: </p>
<ul>
<li><a href="https://bitbucket.org/larscorneliussen/beautyofcode">https://bitbucket.org/larscorneliussen/beautyofcode</a> </li>
<li><a href="https://bitbucket.org/larscorneliussen/jquery.glossary">https://bitbucket.org/larscorneliussen/jquery.glossary</a> </li>
<li><a href="https://bitbucket.org/larscorneliussen/jquery.liveready">https://bitbucket.org/larscorneliussen/jquery.liveready</a> </li>
</ul>
<h2>Third Stage: Team OSS</h2>
<p>At this point things change a lot. Who is now in charge of the code base? Who builds+releases it? Who answers submitted issues? Well you have to find out, try to find a process that fits. This usually works quite well with people you personally know, co-workers or even friends. When interacting with others in the community, you&#8217;ll find out that everybody has a slightly different agenda: which is good for the project! But it makes it hard to make decisions.</p>
<p>With these projects we currently are in this stage (as of mid 2011)</p>
<ul>
<li><a href="https://github.com/minimod/minimods">https://github.com/minimod/minimods</a>       <br />2 contributors, Small .NET Extensions, single-file distributions </li>
<li><a href="http://code.google.com/a/eclipselabs.org/p/xtext-utils/">http://code.google.com/a/eclipselabs.org/p/xtext-utils/</a>       <br />5 contributors, Unit-Testing Library for Eclipse Xtext </li>
</ul>
<h2>Fourth Stage: Joining an umbrella organization</h2>
<p>Now the need for a good process and for some infrastructure arises. You need hosting, build servers, issue tracker: This is what umbrella organizations like Eclipse Foundation, Apache Software Foundation, Outercurve Foundation or Codehaus help you with.</p>
<p>Apache, for example, is very vote-driven. If you want somebody to become a committer, you ask for a vote on the project’s private mailing list. If you want to release a version, you create it and deploy it to a staging are – then you ask for votes. We once released an Apache NPanday version without waiting the full 72 hours the vote needs to be open; we then had to remove (physically!!) the release from the download servers and maven repositories – as if it never happened.</p>
<p>Apache also offers some infrastructure: a CMS for documentation, Jira for issue-tracking, Hudson and Teamcity for Continuous Builds, SVN+GIT for Version Control, Mailing Lists (users, dev, private), committer directory, and so on.</p>
<p>Every team has to report to the Apache Board of Directors.</p>
<p>Read more on ASF here: <a href="http://www.apache.org/foundation/how-it-works.html">http://www.apache.org/foundation/how-it-works.html</a></p>
<p>Eclipse works quite similarly, but has an even tighter organization. In the bigger projects you have fix release dates and&#160; milestones. And there is something like a Project Lead, which is elected – but then authorized to make decisions alone – as I understand it.</p>
<p>In bigger projects usually a couple of companies donate code and/or full-time developers.</p>
<p>Around August 2010, after having submitted a couple of patches, I was voted to become a committer on Apache NPanday Incubator (Maven for .NET, Declarative Build and Release Management), which moved from Codeplex to ASF around October last year:</p>
<ul>
<li><a href="http://incubator.apache.org/npanday/">http://incubator.apache.org/npanday/</a> </li>
</ul>
<p>Under ASF it is still in incubation, but we hope to graduate to a top level project soon. This means will have our own PMC board and a apache top level domain (npanday.apache.org).</p>
<h2>Supplementary: Commercial Support for OSS-Projects</h2>
<p>Some companies are afraid of relying on a community for support. Therefore, companies that are very committed to a certain project, often offer Commercial Support options for open source projects.</p>
<p>For example, my employer, itemis AG, offers commercial support for Eclipse Modeling Xtext: <a href="http://xtext.itemis.com/xtext/language=en/36545/professional-services">Professional Services – Xtext</a></p>
<p>Happy coding! Happy committing!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/611/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/611/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/611/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=611&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/08/10/for-beginners-how-does-open-source-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>New Minimod: FluentGenerics&#8211;Interacting with Generic Types and Type-Definitions</title>
		<link>http://startbigthinksmall.wordpress.com/2011/08/03/new-minimod-fluentgenericsinteracting-with-generic-types-and-type-definitions/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/08/03/new-minimod-fluentgenericsinteracting-with-generic-types-and-type-definitions/#comments</comments>
		<pubDate>Wed, 03 Aug 2011 11:45:00 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[generics]]></category>
		<category><![CDATA[minimod]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/08/03/new-minimod-fluentgenericsinteracting-with-generic-types-and-type-definitions/</guid>
		<description><![CDATA[Sometimes, from a concrete type, you need to find out if it implements a specific generic type or interface, and even more interesting, which concrete type arguments it uses in it’s implementation. Since this information can be “hidden” somewhere in the type hierarchy, I created some helper extension methods that help finding this information and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=610&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Sometimes, from a concrete type, you need to find out if it implements a specific generic type or interface, and even more interesting, which concrete type arguments it uses in it’s implementation.</p>
<p>Since this information can be “hidden” somewhere in the type hierarchy, I created some helper extension methods that help finding this information and released them as a Minimod. <a href="https://startbigthinksmall.wordpress.com/2011/07/05/reuse-reuse-reuse-do-we-need-utility-libraries-if-not-whats-next-minimods/">What is a Minimod?</a></p>
<p>It can answer these simple questions:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:8b487e78-9581-402d-9b00-5588f110551c" class="wlWriterEditableSmartContent">
<pre><pre class="brush: java;">
Is List&lt;Int32&gt; an IEnumerable&lt;T&gt;? yes
If it is, what are the type parameters? Int32

Is Dictionary&lt;Int32,String&gt; an IDictionary&lt;TKey,TValue&gt;? yes
If it is, what are the type parameters? Int32,String
</pre></pre>
</div>
<p>This is the test/example code generating them:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:b2d0f0cf-6c86-4b70-899b-684e97908d1e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: java;">
[Test]
public void PrintExamples()
{
    printExample(typeof(List&lt;int&gt;), typeof(IEnumerable&lt;&gt;));
    printExample(typeof(Dictionary&lt;int, string&gt;), typeof(IDictionary&lt;,&gt;));
}

private static void printExample(Type type, Type genTypeDef)
{
    bool isOfGenericType = type.IsOfGenericType(genTypeDef);

    Console.WriteLine(&quot;Is {0} an {1}? {2}&quot;,
                      type.GetPrettyName(),
                      genTypeDef.GetPrettyName(),
                      isOfGenericType ? &quot;yes.&quot; : &quot;no.&quot;);

    if (isOfGenericType)
    {
        Console.WriteLine(&quot;If it is, what are the type parameters? &quot;
                          + type.GetGenericArgumentsFor(genTypeDef)
                                .Select(_ =&gt; _.GetPrettyName())
                                .JoinStringsWith(&quot;, &quot;));
    }
}
</pre></pre>
</div>
<h2>Summary</h2>
<p>The Minimod adds to System.Type the following extension methods:</p>
<ul>
<li>bool IsOfGenericType(this Type type, Type genericTypeDefinition)</li>
<li>Type[] GetGenericTypesFor(this Type type, Type genericTypeDefinition)</li>
<li>Type GetGenericTypeFor(this Type type, Type genericTypeDefinition)</li>
<li>Type[] GetGenericArgumentsFor(this Type type, Type genericTypeDefinition)</li>
</ul>
<h2>Get it!</h2>
<p>It is published to Nuget as a Minimod: <a href="http://nuget.org/List/Packages/Minimod.FluentGenerics">NuGet gallery</a></p>
<p>Other minimods are also available there: <a href="http://nuget.org/List/Search?packageType=Packages&amp;searchCategory=All+Categories&amp;searchTerm=minimod&amp;sortOrder=package-download-count&amp;pageSize=10">Packages &#8211; NuGet gallery</a></p>
<p>Original source code is found at: <a href="https://github.com/minimod/minimods">minimod/minimods &#8211; GitHub</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/610/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/610/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/610/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=610&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/08/03/new-minimod-fluentgenericsinteracting-with-generic-types-and-type-definitions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>
	</item>
		<item>
		<title>Eclipse Labs Xtext Utils: Unit Testing helpers released</title>
		<link>http://startbigthinksmall.wordpress.com/2011/08/01/eclipse-labs-xtext-utils-unit-testing-helpers-released/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/08/01/eclipse-labs-xtext-utils-unit-testing-helpers-released/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 09:39:00 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[eclipselabs]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[xtext]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/08/01/eclipse-labs-xtext-utils-unit-testing-helpers-released/</guid>
		<description><![CDATA[On Jul 28th we released a first version of our Xtext Unit Testing utilities. It supports makes unit-testing of Xtext-based grammars a no-brainer!! Integration-style testing of files A integration-style test covers many of the aspects you want to test, when writing new (test-first), or changing grammars (regression). A simple test like this one: ; will [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=609&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>On Jul 28th we released a first version of our Xtext Unit Testing utilities. It supports makes unit-testing of Xtext-based grammars a no-brainer!!</p>
<h2>Integration-style testing of files</h2>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/image6.png"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/07/image_thumb6.png?w=338&#038;h=227" width="338" height="227" /></a></p>
<p>A integration-style test covers many of the aspects you want to test, when writing new (test-first), or changing grammars (regression).</p>
<p>A simple test like this one:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:3fdc92fa-5d82-4f5c-aa62-5695ce178583" class="wlWriterEditableSmartContent">
<pre><pre class="brush: java;">
@Test
public void person_no_attributes(){
    testFile(&quot;person_no_attributes.dmodel&quot;);
}
</pre></pre>
</div>
<p>; will cover following functionality:</p>
<ul>
<li>Model file parsed into EMF-model with no errors</li>
<li>All cross-references resolved</li>
<li>Validation passed; no warnings, no errors.</li>
<li>Serializer runs without errors</li>
<li>Formatter runs without errors</li>
<li>Serialize+Format exactly matches the input-files’ content</li>
</ul>
<p>Further capabilities (need documentation!)</p>
<ul>
<li>Fluent-API for validation assertion. Example: </li>
</ul>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:37fffda9-358d-4b4e-aae2-0725e7e1bcf1" class="wlWriterEditableSmartContent">
<pre><pre class="brush: java;">
// error line 1: person.name-feature is missing display name
assertConstraints(
  issues.errorsOnly()
             .inLine(1)
             .under(Modul.class, &quot;person&quot;)
             .named(&quot;name&quot;)
             .oneOfThemContains(&quot;missing display name&quot;)
);
</pre></pre>
</div>
<ul>
<li>Switches for turning on/off serialization and formatter</li>
</ul>
<h2>Unit-testing of Parser- or Lexer-Rules</h2>
<p>I’ll just show an example here:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:19f61eea-7d81-435d-a24f-e60873c3b75e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: java;">
@Test
public void id(){
    testTerminal(&quot;bar&quot;, /* token stream: */ &quot;ID&quot;);
    testTerminal(&quot;bar3&quot;, /* token stream: */ &quot;ID&quot;);
    
    testNotTerminal(&quot;3bar&quot;, /* unexpected */ &quot;ID&quot;);
    
    // token streams with multiple token
    testTerminal(&quot;foo.bar&quot;, &quot;ID&quot;, &quot;'.'&quot;, &quot;ID&quot;);
}

@Test
public void qualifiedNameWithWildcard(){
    testParserRule(&quot;foo.*&quot;, &quot;QualifiedNameWithWildCard&quot;);
}

</pre></pre>
</div>
<h2>Download / Install</h2>
<p>The Eclipse plugin is available on this P2 update site: <a href="http://xtext-utils.eclipselabs.org.codespot.com/git.distribution/releases/unittesting-0.9.x">http://xtext-utils.eclipselabs.org.codespot.com/git.distribution/releases/unittesting-0.9.x</a></p>
<p>The project is hosted on Google Code:</p>
<p>Source: <a href="http://code.google.com/a/eclipselabs.org/p/xtext-utils/source/checkout?repo=unittesting">http://code.google.com/a/eclipselabs.org/p/xtext-utils/source/checkout?repo=unittesting</a> </p>
<p>Unit-Testing Documentation: <a href="http://code.google.com/a/eclipselabs.org/p/xtext-utils/wiki/Unit_Testing?ts=1311938821&amp;updated=Unit_Testing">Unit_Testing &#8211; xtext-utils &#8211; Unit testing &#8211; A collection of useful utilities and samples for Xtext based projects &#8211; Google Project Hosting</a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/609/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/609/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/609/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=609&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/08/01/eclipse-labs-xtext-utils-unit-testing-helpers-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/image_thumb6.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>Found a Draft : LINQ to Entities is great for demos</title>
		<link>http://startbigthinksmall.wordpress.com/2011/07/30/found-a-draft-linq-to-entities-is-great-for-demos/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/07/30/found-a-draft-linq-to-entities-is-great-for-demos/#comments</comments>
		<pubDate>Sat, 30 Jul 2011 09:37:00 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[ef]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/07/30/found-a-draft-linq-to-entities-is-great-for-demos/</guid>
		<description><![CDATA[I once wrote this, but then never posted it. Thought it could be a good article – but never polished it enough. So here it is; untouched from somewhere in 2009, hence outdated?; still too good content to keep it for myself&#8230; Code is available here: lcorneliussen/Discovering-Entity-Framework LINQ to Entities is great for demos Ever [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=606&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I once wrote this, but then never posted it. Thought it could be a good article – but never polished it enough. So here it is;<strong> untouched from somewhere in 2009, hence outdated?</strong>; still too good content to keep it for myself&#8230; </p>
<p>Code is available here: <a href="https://github.com/lcorneliussen/Discovering-Entity-Framework">lcorneliussen/Discovering-Entity-Framework</a></p>
<h2>LINQ to Entities is great for demos</h2>
<p><strong>Ever since the ADO.NET Entity Framework 1.0 released as a part of .NET 3.5 SP1 in August 2008 it has gotten a lot of bad press. This article is not about bad press. It’s about real world project experiences, where we hit walls almost everywhere we tried to go with Entity Framework. Our Scenario is maybe not the most common one, but exactly that’s where EF proves that it’s not mature enough for production.</strong></p>
<p>You know those scenarios where you have to implement real world requirements? Those, where telling your customer that you can’t implement a certain requirement because your framework doesn’t support it, would barely help?</p>
<p>Well, than we are on the same page!</p>
<h2>Scenario</h2>
<p>Let me introduce you to our scenario. We have a set of plug-ins organized by categories. Every plug-in manages it’s own tables, but the framework requires some certain tables and columns per category. The data is managed by some legacy DAOs. </p>
<p>Let’s say, just to prevent being fired, we have a plugin-category “People” and two plug-ins named “Singles” and “Spouses” managing some people together their cars.<a href="http://startbigthinksmall.files.wordpress.com/2011/07/bild-5.png"><img style="display:inline;border-width:0;" title="Bild 5" border="0" alt="Bild 5" src="http://startbigthinksmall.files.wordpress.com/2011/07/bild-5_thumb.png?w=490&#038;h=296" width="490" height="296" /></a> </p>
<p>And another category </p>
<p>Now, as in every real world product, we need to easily query this data without having to care about all the different tables. So we decided to dynamically create views on top of each of the different plug-in-tables that fake a consistent relational model per Plug-in-Category:</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/bild-7.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="Bild 7" border="0" alt="Bild 7" src="http://startbigthinksmall.files.wordpress.com/2011/07/bild-7_thumb.png?w=351&#038;h=174" width="351" height="174" /></a> </p>
<p>This, as we thought, could be easily mapped to a object structure letting a O/R-mapper do all the complex joining and sub querying over the admittedly much larger production model.</p>
<h2>Choosing a Product</h2>
<p>My customer, as many customers are, was afraid of using something that does not come from Redmond. Since this scenario is so simple I decided to give both EF and LINQ2SQL a chance.</p>
<p>Relationships (Many-to-Many) were easier to model in EF, so I went for it.</p>
<p>After overcoming some initial problems, as were</p>
<ul>
<li>While generating the Entities for my views it turned out db-views support in EF is quite poor. It just sets all non-null-fields as compound entity keys. After changing it to something more natural, you can’t update your model from the database anymore. This makes changes quite expensive in this case. </li>
<li>Mapping one-to-many in the designer feels quite unnatural. </li>
</ul>
<p>… finally I got it working. And it demos very well!! But that is basically what it does. <strong>It demos well. Not more.</strong></p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/bild-8.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="Bild 8" border="0" alt="Bild 8" src="http://startbigthinksmall.files.wordpress.com/2011/07/bild-8_thumb.png?w=403&#038;h=207" width="403" height="207" /></a> </p>
<p>Almost every real task I had to solve using EF was a nightmare! First of all let me tell about the difference between LINQ, LINQ-to-SQL, EF, LINQ to Entities and EF Object Query. If you know all about these, just <a href="#problems">skip it.</a></p>
<h3>LINQ</h3>
<p><a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx">Linq</a> is a set of interfaces and extension methods, a C#/VB.NET language feature plus a runtime that enables <strong>L</strong>anguage-<strong>IN</strong>tegrated <strong>Q</strong>uerying against any structured data source. See here for a <a href="http://en.wikipedia.org/wiki/Language_Integrated_Query#Other_providers">list of LINQ implementations</a>, and <a href="http://blogs.msdn.com/charlie/archive/2008/02/28/link-to-everything-a-list-of-linq-providers.aspx">here</a>. If you want to know more on the background, <a href="http://msdn.microsoft.com/en-us/magazine/cc163400.aspx">read this</a>.</p>
<p><strong>## LINQ example (on IQueryable and IEnumerable) ##</strong></p>
<h3>LINQ to SQL</h3>
<p><a href="http://msdn.microsoft.com/en-us/library/bb425822.aspx"><strong>LINQ to SQL</strong></a> is way to often just refereed to as LINQ<strong>. That is simply wrong. LINQ is neither the same as LINQ to SQL, nor is it any O/R-mapper implementation.</strong></p>
<p>Instead, as Microsoft released the language feature along C# 3.0 and the .NET Framework 3.5, they also delivered some implementation for LINQ as <a href="http://msdn.microsoft.com/en-us/library/bb387098.aspx">LINQ to XML</a>, <a href="http://msdn.microsoft.com/en-us/library/bb397919.aspx">LINQ to Objects</a>, LINQ-to-SQL and <a href="http://msdn.microsoft.com/en-us/library/bb386977.aspx">LINQ to DataSet</a>.</p>
<h3>EF (Entity Framework)</h3>
<p>In addition, Microsoft released another O/R-mapper called <a href="http://msdn.microsoft.com/en-us/library/bb399572.aspx">ADO.NET Entity Framework</a>. Using EF, the user can choose between querying via the embedded LINQ support called LINQ to Entities, or using Object Queries.</p>
<p><strong>LINQ to Entities</strong></p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb386964.aspx">LINQ to Entities</a> simply is a implementation for querying Entity Framework using LINQ-syntax. This gives you nice features as type safety, selecting subsets using anonymous types, and so on.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:f4957475-f946-4c30-bf50-5eae15beb437" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
var query = from p in model.AllPeople
            where p.Age &gt; 30
            select p.Name;

foreach (var name in query)
{
    Console.WriteLine(name);
}

/* Results
*  Michael Jendryschik (A)
*  Michael Kloss (B)
*/
</pre></pre>
</div>
<p><strong>EF </strong><strong>Object Query</strong></p>
<p><a href="http://msdn.microsoft.com/en-us/library/bb896241.aspx">Object Queries</a> are similar to SQL, but operates on the conceptual object model. It does not offer type safety, but enables much more sophisticated queries.</p>
<p>Within Object Queries you can either use the <a href="http://msdn.microsoft.com/en-us/library/bb896238.aspx">Query Builder Methods</a>:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:a3869582-56f3-47ed-9522-5d013c5347ff" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
var query = model.AllPeople
    .Where(&quot;it.Age &gt; @age&quot;, new ObjectParameter(&quot;age&quot;, 30))
    .SelectValue&lt;string&gt;(&quot;it.Name&quot;);
</pre></pre>
</div>
<p>… or go for manual queries using <a href="http://msdn.microsoft.com/en-us/library/bb399560.aspx">Entity SQL</a>:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:06ec76b0-83ee-482a-ba0e-b84115d2c5dc" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
var query = model.CreateQuery&lt;string&gt;(
    &quot;SELECT VALUE p.Name FROM AllPeople AS p WHERE p.Age &gt; @age&quot;, 
    new ObjectParameter(&quot;age&quot;, 30));
</pre></pre>
</div>
<p>All these queries result into the same query:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:07651c9f-da87-4990-bdb4-37055cb922b5" class="wlWriterEditableSmartContent">
<pre><pre class="brush: sql;">
SELECT 
[Extent1].[Name] AS [Name]
FROM (SELECT 
      [AllPeople].[Id] AS [Id], 
      [AllPeople].[Name] AS [Name], 
      [AllPeople].[Age] AS [Age]
      FROM [dbo].[AllPeople] AS [AllPeople]) AS [Extent1]
WHERE [Extent1].[Age] &gt; 30
</pre></pre>
</div>
<p><strong>S</strong><strong>o what to choose? Choice necessary?</strong></p>
<h2><a name="problems">Problems with LINQ to Entities and/or Object Query</a></h2>
<p>The problem is, that LINQ and ObjectQuery operate on the same objects, but still have a separate architecture. Sometimes it is mixable, sometimes it’s not.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/ef-arch.gif"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="ef-arch" border="0" alt="ef-arch" src="http://startbigthinksmall.files.wordpress.com/2011/07/ef-arch_thumb.gif?w=273&#038;h=213" width="273" height="213" /></a> </p>
<h3>ObjectQuery&lt;T&gt; and IQueryable&lt;T&gt;</h3>
<p>Since ObjectQuery&lt;T&gt; implements IQueryable (which is default for LINQ queries) you get all Query Builder Methods plus all default LINQ extension methods for IQueryable.</p>
<p>As soon as you execute one of the many nice Extension Methods you’re locked into LINQ to Entities which won’t let you specify any ObjectQuery-specific Expressions on top anymore. But you can start with Object Query and then use LINQ-queries against ObjectQueries.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/queryable.png"><img style="display:block;float:none;margin-left:auto;margin-right:auto;border-width:0;" title="Queryable and ObjectQuery" border="0" alt="Queryable and ObjectQuery" src="http://startbigthinksmall.files.wordpress.com/2011/07/queryable_thumb.png?w=492&#038;h=480" width="492" height="480" /></a>&#160; </p>
<p><strong>So what? Then let’s just use LINQ to Entities, right?</strong></p>
<p>Lets sum up the good news about LINQ to Entities first:</p>
<ul>
<li>Nice syntax for those who are used to it </li>
<li>Type safety !!! </li>
<li>Very easy to join relationships (OK in Object Query) </li>
<li>Simple sub-queries using Any(…) </li>
<li>Very easy to use with anonymous types&#160; <br />(which are not really good <a href="http://msdn.microsoft.com/en-us/library/bb738512.aspx">supported in ObjectQuery</a>) </li>
</ul>
<p>Well, the problem is, that <strong>you can get very, very far with LINQ to Entities and then suddenly you’ll hit the wall.</strong> It has some pretty major limitations that in my opinion make it <strong>unsuitable for production</strong> use:</p>
<ul>
<li><strong>No support for the LIKE-operator !!!!<br />
      <br /></strong>string.Contains() does map to the LIKE-operator in the database, but instead to CHARINDEX-function (<a href="http://msdn.microsoft.com/en-us/library/bb738681.aspx">function mappings</a>) </li>
<li>No support for string.StartsWith() and string.EndsWith() </li>
<li>Bad support for dynamic/parameterized queries (<a href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx">Dynamic LINQ</a> helps here) </li>
<li>Some <a href="http://msdn.microsoft.com/en-us/library/bb738550.aspx">LINQ-methods/operators are not supported</a> </li>
</ul>
<h2>Back to some queries</h2>
<p>Let me demonstrate those problems using some simple queries.</p>
<p><strong>“List all people with their cars, ordered by the model name”</strong></p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:4e31d985-6f38-4af4-8ef4-f14cd971a598" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
from p in model.AllPeople
from c in p.Cars
orderby c.Model
select new { p.Name, c.Model };

/* Results
* { Name = Michael Kloss (B), Model = Mercedes E350 CDI Coupé }
* { Name = Lars Corneliussen (B), Model = Skoda Oktavia }
* { Name = Lars Corneliussen (B), Model = VW Fox }
* { Name = Michael Jendryschik (A), Model = VW Golf 5 }
* { Name = Michael Kloss (B), Model = Vw Golf 6 }
*/
</pre></pre>
</div>
<p>Very, very nice! And very simple!<br />
  <br />LINQ to Entities does automatically join each <em>Person</em> <em>p</em> with it’s cars <em>c</em> in <em>p.Cars.</em> In the further restrictions, ordering or the select-statement you have access to a joined pair of a <em>Person p</em> and a<em> Car c</em>.</p>
<p>This results in following SQL select statement:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:5bb836b6-7684-4e8c-942e-2062628274cd" class="wlWriterEditableSmartContent">
<pre><pre class="brush: sql;">
SELECT 
[Project1].[C1] AS [C1], 
[Project1].[Name] AS [Name], 
[Project1].[Model] AS [Model]
FROM ( SELECT 
    [Extent1].[Name] AS [Name], 
    [Extent2].[Model] AS [Model], 
    1 AS [C1]
    FROM  (SELECT 
      [AllPeople].[Id] AS [Id], 
      [AllPeople].[Name] AS [Name], 
      [AllPeople].[Age] AS [Age]
      FROM [dbo].[AllPeople] AS [AllPeople]) AS [Extent1]
    INNER JOIN (SELECT 
      [AllPeopleCars].[PersonId] AS [PersonId], 
      [AllPeopleCars].[Model] AS [Model], 
      [AllPeopleCars].[Id] AS [Id]
      FROM [dbo].[AllPeopleCars] AS [AllPeopleCars]) AS [Extent2] ON [Extent1].[Id] = [Extent2].[PersonId]
)  AS [Project1]
ORDER BY [Project1].[Model] ASC
</pre></pre>
</div>
<p>Don’t ask me what the nested select statement and <em>C1</em> is for, but else this is quite straight forward.</p>
<p>But, as you also can see, the two <em>from</em> statements result in a <em>INNER JOIN</em>. But what about ecologic people, as for example my colleague Hergen?</p>
<p><strong>“Also list people without cars”</strong></p>
<p>On the SQL side we just have to use a <em>LEFT OUTER JOIN</em> instead of the current <em>INNER JOIN</em>. But how to do that with LINQ?</p>
<p>LINQ does natively support joins, but doesn’t offer a direct keyword that would let you specify how the join should be mapped to a relational structure. </p>
<p>But there is a simple trick, that semantically should do the same thing:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:60b45752-e02f-4284-83c3-d37b9ca7d94e" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
from p in model.AllPeople
from c in p.Cars.DefaultIfEmpty()
orderby c.Model
select new { p.Name, Model = c != null ? c.Model : null };
</pre></pre>
</div>
<p><em>DefaultIfEmpty()</em> should just pretend a collection with a single type default of the expected type, <em>default(Car)==null</em> in this case and return it as single collection item, if the base collection <em>p.Cars</em> is empty.</p>
<p>It depends on the LINQ implementation, whether Model on c (which can be null) is accessible directly (as in SQL) or has to be checked. Since this code is never really compiled and ran, but instead converted to an Expression Tree and passed into the specific LINQ implementation for interpretation, it could gracefully do the null-checking internally – which some implementations do.</p>
<p>So, LINQ would let you express it this way. But the LINQ implementation for Entity Framework (LINQ to Entities) does not support <em>DefaultIfEmpty()</em>. There is a lot of information out there on left outer joins in LINQ to Entities, but nothing that really works. You know a solution? Please, tell me!</p>
<p>So here we have to switch to Entity SQL (Object Query). We could also use the Query Builder Methods, but lets save that for later.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:82f797d2-87ce-421b-befa-95730029624f" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
var query = model.CreateQuery&lt;IDataRecord&gt;(
    &quot;SELECT p.Name, c.Model FROM AllPeople as &quot;
  + &quot;p OUTER APPLY p.Cars as c ORDER BY c.Model&quot;);

var casted = from item in query.ToArray() /* executes here */
  select new {
    Name = item.GetString(0),
    Model = (item.IsDBNull(1) ? null : item.GetString(1))
  };

/* Results
* { Name = Hergen Oltmann (A), Model = }
* { Name = Michael Kloss (B), Model = Mercedes E350 CDI Coupé }
* { Name = Lars Corneliussen (B), Model = Skoda Oktavia }
* { Name = Lars Corneliussen (B), Model = VW Fox }
* { Name = Michael Jendryschik (A), Model = VW Golf 5 }
* { Name = Michael Kloss (B), Model = Vw Golf 6 }
*/
</pre></pre>
</div>
<p>Now we got what we wanted. The SQL query send to the server just has a <em>LEFT OUTER JOIN</em> instead of the <em>INNER JOIN</em>. </p>
<p>But we had to refactor the whole query and missed all the convenience LINQ to SQL offers for this simple requirement. Since Object Query has no support for anonymous types, we also have to access the result set in a generic manner, which throws us back to, say, SqlDataReader.</p>
<p>The story goes on. Lets forget people without cars for now and try some other real world restrictions.</p>
<p><strong>“Lets list all people driving Volkswagen”</strong></p>
<p>Back to our favorite LINQ-syntax:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:8119e474-2137-42c9-b201-52f955fa16ee" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
from p in model.AllPeople
where p.Cars.Any(c =&gt; c.Model.Contains(&quot;VW&quot;))
select p;

/* Results
* { Name = Michael Jendryschik (A), Age = 42 }
* { Name = Lars Corneliussen (B), Age = 26 }
* { Name = Michael Kloss (B), Age = 33 }
*/
</pre></pre>
</div>
<p>The results are what we expected, and this is the SQL query being executed:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:a168ce7e-986c-4112-a7ad-e96be5f05634" class="wlWriterEditableSmartContent">
<pre><pre class="brush: sql;">
SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[Age] AS [Age]
FROM (SELECT 
      [AllPeople].[Id] AS [Id], 
      [AllPeople].[Name] AS [Name], 
      [AllPeople].[Age] AS [Age]
      FROM [dbo].[AllPeople] AS [AllPeople]) AS [Extent1]
WHERE  EXISTS (SELECT 
    cast(1 as bit) AS [C1]
    FROM (SELECT 
      [AllPeopleCars].[PersonId] AS [PersonId], 
      [AllPeopleCars].[Model] AS [Model], 
      [AllPeopleCars].[Id] AS [Id]
      FROM [dbo].[AllPeopleCars] AS [AllPeopleCars]) AS [Extent2]
    WHERE ([Extent1].[Id] = [Extent2].[PersonId]) AND ((CAST(CHARINDEX(N'VW', [Extent2].[Model]) AS int)) &gt; 0)
)
</pre></pre>
</div>
<p>Instead of doing a sub-query we could also easily use a join in combination with distinct. That doesn’t really make a difference.</p>
<p>But do you see this ugly part there? <em>((CAST(CHARINDEX(N&#8217;VW&#8217;, [Extent2].[Model]) AS int)) &gt; 0)</em> Well it works for a demo, but usually what we really want Contains to map to is a <em>LIKE</em>, right.</p>
<p>Back to the real customer; do you know those DataGrids with filter fields beneath each title column? Well lets pretend someone enters “M” for filtering the resulting rows by name.</p>
<p><strong>“Give me only those people driving Volkswagen, whose names start with ‘M’“</strong> </p>
<p>Since LINQ to Entities neither supports <em>StartsWith</em> nor <em>Like</em>, we have to switch to Object Query again. </p>
<p>This time, we’ll use the query builder methods. At the same time we also replace the <em>CHARINDEX</em> for “VW” to a proper <em>LIKE</em>.</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:6f5ecd67-c986-4a9e-9706-810b7e0b5ac9" class="wlWriterEditableSmartContent">
<pre><pre class="brush: csharp;">
var query = model.AllPeople
  .Where(&quot;EXISTS(SELECT c FROM it.Cars as c &quot;
       + &quot;WHERE c.Model LIKE '%VW%')&quot;)
  .Where(&quot;it.Name LIKE @pattern&quot;,
          new ObjectParameter(&quot;pattern&quot;, &quot;m%&quot;));

/* Results
* { Name = Michael Jendryschik (A), Age = 42 }
* { Name = Michael Kloss (B), Age = 33 }
*/
</pre></pre>
</div>
<p>This results into following SQL statement:</p>
<div style="display:inline;float:none;margin:0;padding:0;" id="scid:4CF65DF0-5960-450c-B43D-AE27EAE72175:e89745ae-d6be-40c3-b2bf-cfd4b5b18694" class="wlWriterEditableSmartContent">
<pre><pre class="brush: sql;">
SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[Name] AS [Name], 
[Extent1].[Age] AS [Age]
FROM (SELECT 
      [AllPeople].[Id] AS [Id], 
      [AllPeople].[Name] AS [Name], 
      [AllPeople].[Age] AS [Age]
      FROM [dbo].[AllPeople] AS [AllPeople]) AS [Extent1]
WHERE ( EXISTS (SELECT 
    cast(1 as bit) AS [C1]
    FROM (SELECT 
      [AllPeopleCars].[PersonId] AS [PersonId], 
      [AllPeopleCars].[Model] AS [Model], 
      [AllPeopleCars].[Id] AS [Id]
      FROM [dbo].[AllPeopleCars] AS [AllPeopleCars]) AS [Extent2]
    WHERE ([Extent1].[Id] = [Extent2].[PersonId]) AND ([Extent2].[Model] LIKE '%vw%')
)) AND ([Extent1].[Name] LIKE 'm%')
</pre></pre>
</div>
<p>I hope my example queries were able to give you an overview over the state of LINQ to SQL and its current limitations.</p>
<h2>Resources on EF</h2>
<p><a href="http://www.amazon.com/Programming-Entity-Framework-Julia-Lerman/dp/059652028X">http://www.amazon.com/Programming-Entity-Framework-Julia-Lerman/dp/059652028X</a></p>
<h3>Inheritance in EF</h3>
<p><a href="http://msdn.microsoft.com/en-us/library/cc716744.aspx">Entity Data Model Inheritance (Application Scenarios)</a></p>
<p><a href="http://blogs.msdn.com/adonet/archive/2007/03/15/inheritance-in-the-entity-framework.aspx">ADO.NET team blog : Inheritance in the Entity Framework</a></p>
<h2>My Advice</h2>
<p>If you have to stick with Entity Framework, use ObjectQuery and Entity SQL and avoid using LINQ to Entities except you know what you are doing. Maybe you should also look into some <a href="http://code.msdn.microsoft.com/adonetefx">community tools around EF</a> then.</p>
<p>If you haven’t chosen yet, or if you still have the chance to get out of the tight spot, consider other O/R-mappers as for example <a href="http://nhforge.org/">NHibernate</a>, which we also switched to later in the project. </p>
<p>I’ll show how we solved our problems using NHibernate in a follow-up post soon.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/606/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/606/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/606/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=606&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/07/30/found-a-draft-linq-to-entities-is-great-for-demos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/bild-5_thumb.png" medium="image">
			<media:title type="html">Bild 5</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/bild-7_thumb.png" medium="image">
			<media:title type="html">Bild 7</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/bild-8_thumb.png" medium="image">
			<media:title type="html">Bild 8</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/ef-arch_thumb.gif" medium="image">
			<media:title type="html">ef-arch</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/queryable_thumb.png" medium="image">
			<media:title type="html">Queryable and ObjectQuery</media:title>
		</media:content>
	</item>
		<item>
		<title>Visual Studio Tipp: Auto-refresh file changes</title>
		<link>http://startbigthinksmall.wordpress.com/2011/07/29/visual-studio-tipp-auto-refresh-file-changes-2/</link>
		<comments>http://startbigthinksmall.wordpress.com/2011/07/29/visual-studio-tipp-auto-refresh-file-changes-2/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 09:22:49 +0000</pubDate>
		<dc:creator>Lars Corneliussen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[codegeneration]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">https://startbigthinksmall.wordpress.com/2011/07/29/visual-studio-tipp-auto-refresh-file-changes-2/</guid>
		<description><![CDATA[Especially when dealing with code generation, checking “Auto-load changes, if saved” saves you the dialog that asks you to accept file changes from the outside of VS.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=595&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Especially when dealing with code generation, checking “Auto-load changes, if saved” saves you the dialog that asks you to accept file changes from the outside of VS.</p>
<p><a href="http://startbigthinksmall.files.wordpress.com/2011/07/image5.png"><img style="display:inline;border-width:0;" title="image" border="0" alt="image" src="http://startbigthinksmall.files.wordpress.com/2011/07/image_thumb5.png?w=532&#038;h=320" width="532" height="320" /></a></p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/startbigthinksmall.wordpress.com/595/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/startbigthinksmall.wordpress.com/595/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/startbigthinksmall.wordpress.com/595/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=startbigthinksmall.wordpress.com&amp;blog=3405597&amp;post=595&amp;subd=startbigthinksmall&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://startbigthinksmall.wordpress.com/2011/07/29/visual-studio-tipp-auto-refresh-file-changes-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d4c4e1781dd63e3b41bd5309878d7d06?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">larscorneliussen</media:title>
		</media:content>

		<media:content url="http://startbigthinksmall.files.wordpress.com/2011/07/image_thumb5.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
	</channel>
</rss>
