<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.conchango.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Howard van Rooijen's Blog</title><link>http://blogs.conchango.com/howardvanrooijen/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP3 (Build: 20423.1)</generator><item><title>Speeding up your Desktop Build [Part 1]</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/05/09/speeding-up-your-desktop-build-part-1.aspx</link><pubDate>Sat, 09 May 2009 15:36:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:15140</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/15140.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=15140</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=15140</wfw:comment><description>On my current project I wanted to do a little pit stop after our 1st sprint to ensure that the solution was running as optimally as possible. We’ve fleshed out the solution structure and have pulled together all the core pieces of technology – so within Visual Studio, the solution looks like:   &lt;p&gt;&lt;font size="2" face="Courier New"&gt;Solution ‘MyApp’      &lt;br&gt;+---Data       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +---Visual Studio 2008 Database GDR Project files (do not build in debug mode)       &lt;br&gt;+---Deployment       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +---WiX Installer Projects for deploying “Presentation” projects (do not build in debug mode)       &lt;br&gt;+---Domain       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +---MyApp.Domain Project (contains core contracts + domain entities + specifications)       &lt;br&gt;+---Framework       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +---MyApp.Core.* (any projects with cross cutting concerns, caching, logging, utils, or reusable libraries etc)       &lt;br&gt;+---Infrastructure       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +---MyApp.Infrastructure (external infrastructure - databases, search engines, email gateways etc)       &lt;br&gt;+---Presentation       &lt;br&gt;|&amp;nbsp;&amp;nbsp; +--- MyApp.Web, MyApp.Web.Controllers, MyApp.WCFEndpoints       &lt;br&gt;\---Services       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; +--- MyApp.Services, MyApp.Management.Services&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;The solution structure is based around trying to solidify some of the notions in Domain Driven Design and some of the ideas mentioned in &lt;a href="http://jeffreypalermo.com/blog/the-onion-architecture-part-1/" target="_blank"&gt;Jeffery Palermo’s Onion Architecture&lt;/a&gt; (which owes a lot to &lt;a href="http://alistair.cockburn.us/index.php/Main_Page" target="_blank"&gt;Alistair Cockburn’s&lt;/a&gt; notion of a &lt;a href="http://alistair.cockburn.us/Hexagonal+architecture" target="_blank"&gt;Hexagonal Architecture&lt;/a&gt;). We’ve created solution folders called “Data”, “Deployment”, “Domain”, “Framework”, “Infrastructure”, “Presentation” and “Services” so that when the team come to work on a new sprint backlog item and start to decompose the feature that they are going to be creating it becomes pretty obvious where the code should go if you ask yourself the question “is this a domain entity? Is this code generic and could be reused throughout the solution? Is this code going to be integrating with external / 3rd party systems?”. &lt;/p&gt;  &lt;p&gt;I raised this solution structure on the Sharp Architecture Forum, Kyle Baley responded that he had moved to a single project solution containing all the the different architectural layers – as this offered the best build performance. &lt;a href="http://codebetter.com/blogs/patricksmacchia/" target="_blank"&gt;Patrick Smacchia&lt;/a&gt; often posts &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/12/08/advices-on-partitioning-code-through-net-assemblies.aspx"&gt;advice on partitioning code through .NET Assemblies&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/jeremy.miller/" target="_blank"&gt;Jeremy Miller&lt;/a&gt; has also blogged that &lt;a href="http://codebetter.com/blogs/jeremy.miller/archive/2008/10/10/183438.aspx"&gt;Separate Assemblies != Loose Coupling&lt;/a&gt; but there is a big difference in running a project as a solo dev and running a project with a team, amongst multiple teams, especially when you are trying to reuse IP and cross fertilise ideas and practices. It’s also often forgotten that Visual Studio Solutions and Projects are development constructs not deployment constructs. With tools like &lt;a href="http://www.postsharp.org/" target="_blank"&gt;PostSharp&lt;/a&gt; and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=22914587-B4AD-4EAE-87CF-B14AE6A939B0&amp;amp;displaylang=en" target="_blank"&gt;ILMerge&lt;/a&gt; more behaviours can be added post build and multiple assemblies (and their dependencies) can be packaged into a single deployable unit.&lt;/p&gt;  &lt;h3&gt;The Problem &lt;/h3&gt;  &lt;p&gt;Doing a build after running “Clean Solution” takes &lt;b&gt;18 seconds&lt;/b&gt; and doing a “Rebuild Solution” takes &lt;b&gt;15 seconds&lt;/b&gt;. Not exactly huge, but it definitely feels sluggish for the number of projects in the solution. (If you want to measure build times within Visual Studio – you need to change the Build Output verbosity via &lt;i&gt;Tools&lt;/i&gt; &amp;gt; &lt;i&gt;Options&lt;/i&gt; &amp;gt; &lt;i&gt;Projects and Solutions&lt;/i&gt; &amp;gt; &lt;i&gt;Build and Run&lt;/i&gt; &amp;gt; “MSBuild project build output verbosity” and change it to normal). &lt;/p&gt;  &lt;p&gt;Admittedly all the projects under the “Framework” folder should be included as assembly references, but we’re early on in the project and we’re constantly making changes – once the code churn level reduces, we can factor those out. We’re using a lot of 3rd party frameworks which means each project has lots of assembly references which by default are set to be CopyLocal = true. Hopefully you are aware that &lt;a href="http://codebetter.com/blogs/patricksmacchia/archive/2009/01/11/lessons-learned-from-the-nunit-code-base.aspx" target="_blank"&gt;CopyLocal = true is EVIL&lt;/a&gt;. &lt;/p&gt;  &lt;h3&gt;A Solution &lt;/h3&gt;  &lt;p&gt;To speed up the build – set CopyLocal = false on all 3rd Party Assemblies, but ensure that Project References are still set to CopyLocal = true (otherwise you’ll stop seeing your changes!).&amp;nbsp; There is one exception; you need to ensure that CopyLocal = true on your “Presentation” projects i.e. your web application – otherwise when you load the site you will see ReflectionTypeLoadException errors. &lt;/p&gt;  &lt;p&gt;There’s one further problem in our solution – we’ve adopted embedding our &lt;a href="http://blog.jpboodhoo.com/HowIrsquomCurrentlyWritingMyBDDStyleTestsNdashPart1.aspx" target="_blank"&gt;BDD specs&lt;/a&gt; within our projects and we’re using TDD.NET / ReSharper Gallio Unit Test Runner inside VS to execute them. This means that the majority of our projects actually require local copies of the referenced assemblies in order to execute the test, but we don’t want to pay the performance tax of Visual Studio copying those assemblies every time we do a build. So I created a MSBuild target that we can run once to configure the solution (if you don’t want to run tests inside your projects skip to &lt;b&gt;The Result&lt;/b&gt;):&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;Target Name="ImportReferencedAssemblies"&amp;gt;&amp;nbsp; &lt;br&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;!--Process the given VS SLN file and return all CS Projects – this task is in HvR.MSBuild.Tasks.dll--&amp;gt;      &lt;br&gt;&amp;nbsp; &amp;lt;GetCSProjectsForSolution Solution="@(SolutionToBuild)"&amp;gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Output TaskParameter="Output" ItemName="SolutionProjects" /&amp;gt;       &lt;br&gt;&amp;nbsp; &amp;lt;/GetCSProjectsForSolution&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;PropertyGroup&amp;gt;      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ConfigFolder&amp;gt;$(BuildPath)\..\ReferencedAssemblies\&amp;lt;/ConfigFolder&amp;gt;       &lt;br&gt;&amp;nbsp; &amp;lt;/PropertyGroup&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;!--Delete any pre-existing ReferencedAssemblies—&amp;gt;      &lt;br&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;RemoveDir Directories="%(SolutionProjects.Location)\bin\$(Configuration)\ReferencedAssemblies\" /&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;!--Get all Files within the master ReferencedAssemblies folder and prepare them to be copies to each project bin\(Debug | Release) folder—&amp;gt;&amp;nbsp; &lt;br&gt;&amp;nbsp;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt; &amp;lt;CreateItem Include="$(ConfigFolder)\**\*.dll"      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AdditionalMetadata="ToDir=%(SolutionProjects.Location)\bin\$(Configuration)\ReferencedAssemblies\"&amp;gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Output TaskParameter="Include"       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ItemName="ConfigFilesToDeploy" /&amp;gt;       &lt;br&gt;&amp;nbsp; &amp;lt;/CreateItem&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp; &amp;lt;!--Now copy all of the files to the appropriate folders--&amp;gt;      &lt;br&gt;&amp;nbsp; &amp;lt;Copy SourceFiles="@(ConfigFilesToDeploy)"       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DestinationFolder="%(ToDir)\\" /&amp;gt;       &lt;br&gt;&lt;/font&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;/Target&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Essentially this script processes the Visual Studio .SLN file, returns all the CS Project file locations, then copies the contents of the ReferencedAssemblies folder to the bin\Debug\ReferencedAssemblies folder of each project. &lt;/p&gt;  &lt;p&gt;Next you have to create a &lt;i&gt;App.Config&lt;/i&gt; file that you can share across all your projects, add this as a “Linked File” in any projects where you want to run unit tests. The &lt;i&gt;App.Config&lt;/i&gt; file should contain the following configuration section: &lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt;      &lt;br&gt;&amp;lt;configuration&amp;gt;       &lt;br&gt;&amp;nbsp; &amp;lt;runtime&amp;gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&amp;gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;probing privatePath="Debug;ReferencedAssemblies" /&amp;gt;       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/assemblyBinding&amp;gt;       &lt;br&gt;&amp;nbsp; &amp;lt;/runtime&amp;gt;       &lt;br&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;This tells the .NET Framework Fusion Assembly Loading Engine at runtime to look in the &lt;i&gt;Debug&lt;/i&gt; and &lt;i&gt;Debug\ReferencedAssemblies&lt;/i&gt; folders for any assemblies referenced by the project. Hey presto, unit tests will now execute successfully without throwing an ReflectionTypeLoadException&amp;nbsp; &lt;/p&gt;  &lt;h3&gt;The Result&lt;/h3&gt;  &lt;p&gt;After making those small changes; doing build after running “Clean Solution” takes &lt;b&gt;9 seconds&lt;/b&gt; (saves 9 seconds) and doing a “Rebuild Solution” takes &lt;b&gt;5 seconds&lt;/b&gt; (saves 10 seconds) – which means we can now do a build and run an ad hoc unit test in the time it used to take to just do a build. &lt;/p&gt;  &lt;p&gt;If you would like the custom MSBuild Task so you can try this on your own solution, you can &lt;a href="http://howardvanrooijen.codeplex.com/" target="_blank"&gt;download it from my CodePlex project&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=15140" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Engineering+Practices/default.aspx">Engineering Practices</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/MSBuild/default.aspx">MSBuild</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/BDD/default.aspx">BDD</category></item><item><title>StyleCop for ReSharper v4.5.0.000 (R# 4.5 RTM Compatible) Released</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/04/15/stylecop-for-resharper-v4-5-0-000-r-4-5-rtm-compatible-released.aspx</link><pubDate>Wed, 15 Apr 2009 15:23:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14948</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14948.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14948</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14948</wfw:comment><description>
&lt;p&gt;We’ve just pushed the latest build of &lt;a href="http://stylecopforresharper.codeplex.com/" target="_blank"&gt;StyleCop for ReSharper live&lt;/a&gt;. This brings it up to date with ReSharper 4.5 RTM and fixes a few bugs. We’ve also change the build number to align it with ReSharper to avoid confusion. Release notes below:&lt;/p&gt;
  
&lt;blockquote&gt;   
&lt;p&gt;Feature Complete Build of StyleCop for ReSharper. &lt;/p&gt;
    
&lt;p&gt;Compatible with:&lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;ReSharper 4.5 (RTM)&lt;/li&gt;
      
&lt;li&gt;StyleCop 4.3.1.3 &lt;/li&gt;
   &lt;/ul&gt;
    
&lt;p&gt;There are &lt;b&gt;148&lt;/b&gt; StyleCop rules. &lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;&lt;b&gt;38&lt;/b&gt; of these must be fixed manually (normally because you have to type descriptive text or rename variables).&lt;/li&gt;
      
&lt;li&gt;Of the remaining &lt;b&gt;110&lt;/b&gt; rules &lt;b&gt;58&lt;/b&gt; are fixed by R# Code Cleanup (silent mode).&lt;/li&gt;
      
&lt;li&gt;Of the &lt;b&gt;52&lt;/b&gt; now remaining we have Code Cleanup rules that fix all of them. &lt;/li&gt;
   &lt;/ul&gt;
    
&lt;p&gt;We also provide &lt;b&gt;106&lt;/b&gt; Quick Fixes that provide in place context menu fixes for violations for the &lt;b&gt;110&lt;/b&gt; rules that can be fixed automatically. &lt;/p&gt;
    
&lt;p&gt;&lt;b&gt;Fixes: &lt;/b&gt;&lt;/p&gt;
    
&lt;ul&gt;     
&lt;li&gt;Remove paranthesis on bitwise operations&lt;/li&gt;
      
&lt;li&gt;AutoUpdater will now display a message if there is one in the version.txt.&lt;/li&gt;
      
&lt;li&gt;Fixing error condition when looknig for an Item and not a property&lt;/li&gt;
      
&lt;li&gt;Wasn't detecting a Boolean property correctly since 4.5&lt;/li&gt;
   &lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;b&gt;[UPDATE]&lt;/b&gt; If you are having problems installing SCfR# 4.5 ("ReSharper 4.1 required for uninstall") - please see the &lt;a href="http://stylecopforresharper.codeplex.com/Thread/List.aspx" target="_blank"&gt;CodePlex discussions site for resolutions&lt;/a&gt;.&lt;br&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14948" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>StyleCop for ReSharper 1.5.0.000 (ReSharper 4.5 Beta Compatible) Released</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/27/stylecop-for-resharper-1-5-0-000-resharper-4-5-beta-compatible-released.aspx</link><pubDate>Fri, 27 Mar 2009 22:35:44 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14744</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14744.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14744</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14744</wfw:comment><description>&lt;p&gt;Within a few hours of releasing &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2009/03/27/stylecop-for-resharper-goes-v1-0-0-000.aspx" target="_blank"&gt;StyleCop for ReSharper 1.0&lt;/a&gt;, we've managed to create a &lt;a href="http://www.jetbrains.com/resharper/beta.html" target="_blank"&gt;ReSharper 4.5 Beta&lt;/a&gt; compatible version. The changes JetBrains have made to ReSharper 4.5 are vast, which is not surprising when you see the &lt;a href="http://www.infoq.com/news/2009/03/resharper4-5-beta" target="_blank"&gt;stats for the performance increases&lt;/a&gt; they've managed to achieve. Luckily JetBrains have created a document on their wiki to aid with the &lt;a href="http://www.jetbrains.net/confluence/display/ReSharper/ReSharper+PlugIn+4.0(4.1)+to+4.5+Migration+Guide" target="_blank"&gt;migration of plugins from 4.1 to 4.5&lt;/a&gt;; this doc shows the scale of the changes they've made.&lt;/p&gt;  &lt;p&gt;StyleCop for ReSharper 1.5 is &lt;a href="http://stylecopforresharper.codeplex.com/" target="_blank"&gt;available from the project CodePlex site&lt;/a&gt;. Please &lt;a href="http://stylecopforresharper.codeplex.com/WorkItem/List.aspx" target="_blank"&gt;report any issues you find&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Once again, thanks to Andy for all the hard work.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14744" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>StyleCop for ReSharper goes v1.0.0.000</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/27/stylecop-for-resharper-goes-v1-0-0-000.aspx</link><pubDate>Fri, 27 Mar 2009 12:15:05 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14735</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14735.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14735</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14735</wfw:comment><description>&lt;p&gt;Feature Complete Build of StyleCop for ReSharper. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Compatible with ReSharper 4.1&lt;/strong&gt;    &lt;br /&gt;&lt;strong&gt;Compatible with StyleCop 4.3.1.3&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There are &lt;strong&gt;148&lt;/strong&gt; StyleCop rules.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;38 of these must be fixed manually (normally because you have to type descriptive text or rename variables).&lt;/li&gt;    &lt;li&gt;Of the remaining 110 rules 58 are fixed by R# Code Cleanup (silent mode).&lt;/li&gt;    &lt;li&gt;Of the 52 now remaining we have Code Cleanup rules that fix all of them.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;We also provide 106 Quick Fixes that provide in place context menu fixes for violations for the 110 rules that can be fixed automatically. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;New Features:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;AutoUpdater functionality - you will now automatically be notified when a new version is available.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="645" alt="scfr_auto_update" src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/StyleCopforReSharpergoesv1.0.0.000_AA7D/scfr_auto_update_3.png" width="758" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Fixes:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Removed launch conditions from uninstall process&lt;/li&gt;    &lt;li&gt;Added 'support' and detection of R# 4.5&lt;/li&gt;    &lt;li&gt;Changed minimum supported StyleCop version to 4.3.1&lt;/li&gt;    &lt;li&gt;Always highlight the full line we have for violations to avoid missing any or selecting the wrong item on the line.&lt;/li&gt;    &lt;li&gt;Spacing around + and - and exclude additive expressions.&lt;/li&gt;    &lt;li&gt;New functions for returning all the tokens on the line that a text control is on.&lt;/li&gt;    &lt;li&gt;Generics on a base type were not swapped to built in types.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I wanted to say a massive thank-you to the &lt;a href="http://stylecopforresharper.codeplex.com/People/ProjectPeople.aspx" target="_blank"&gt;StyleCop for ReSharper Development Team&lt;/a&gt; for all their effort over the last 6 months (with a special call-out to Andy Reeves and the jaw dropping amount of effort he's put into the project). I also wanted to say a huge thank-you to all the people who downloaded, tried and provided feedback.&lt;/p&gt;  &lt;p&gt;As usual you can get the &lt;a href="http://stylecopforresharper.codeplex.com/" target="_blank"&gt;release from the CodePlex Project&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We're now working on a 1.5 build to support ReSharper 4.5 Beta.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14735" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>Hobby Projects find a new home</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/26/hobby-projects-find-a-new-home.aspx</link><pubDate>Thu, 26 Mar 2009 22:18:55 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14725</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14725.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14725</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14725</wfw:comment><description>&lt;p&gt;Just a short post to say that I've created a &lt;a href="http://howardvanrooijen.codeplex.com/" target="_blank"&gt;CodePlex Project&lt;/a&gt; for all my blog code samples and hobby projects. So if you're looking for &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25327" target="_blank"&gt;TFS Notification Web Services - 1.2&lt;/a&gt;, &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25326" target="_blank"&gt;Visual Studio 2005 Xml Debugger Visualizer&lt;/a&gt;, &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25325" target="_blank"&gt;MonkeyWrangler&lt;/a&gt;, &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25323" target="_blank"&gt;Conchango.Build.TaskBuilder&lt;/a&gt; or &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25322" target="_blank"&gt;AssemblyReflector&lt;/a&gt;, head over to &lt;a href="http://howardvanrooijen.codeplex.com/" target="_blank"&gt;CodePlex&lt;/a&gt;. &lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14725" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category></item><item><title>CMS in the .NET World</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/26/cms-in-the-net-world.aspx</link><pubDate>Thu, 26 Mar 2009 14:34:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14716</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14716.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14716</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14716</wfw:comment><description>&lt;p&gt;If anyone follows me on Twitter, you'll have seen my early morning rant a few weeks ago about the woeful state of CMS on the .NET platform, with particular reference to Open Source offerings. This was sparked off by the current &lt;a href="http://support.graffiticms.com/t/1390.aspx" target="_blank"&gt;depressing thread&lt;/a&gt; on the &lt;a href="http://telligent.com/" target="_blank"&gt;Telligent&lt;/a&gt; &lt;a href="http://support.graffiticms.com/" target="_blank"&gt;GraffitiCMS forum&lt;/a&gt; about the future of the product.&lt;/p&gt;  &lt;p&gt;If you look in the non-Microsoft world there are some quite well established (Open Source), mature systems, each with their own rich eco-systems; &lt;a href="http://plone.org/" target="_blank"&gt;Plone&lt;/a&gt;, &lt;a href="http://www.joomla.org/" target="_blank"&gt;Joomla&lt;/a&gt;, &lt;a href="http://drupal.org/" target="_blank"&gt;Drupal&lt;/a&gt; are just three examples. &lt;a href="http://blogs.conchango.com/jamessaull/" target="_blank"&gt;James Saull&lt;/a&gt; sent me a link to &lt;a href="http://www.cmswatch.com/" target="_blank"&gt;CMS Watch's&lt;/a&gt; "CMS vendor tube map" - a quite impressive distillation of the entire CMS universe:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/CMSinthe.NETWorld_7CF9/CMS-Watch-subway-map-2009-large_2.jpg" target="_blank"&gt;&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/CMSinthe.NETWorld_7CF9/CMS-Watch-subway-map-2009-large_thumb.jpg" style="border-width:0px;" alt="CMS Watch Subway Map 2009" border="0" width="640" height="465"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;Source - &lt;a href="http://cmswatch.com/" target="_blank"&gt;CMS Watch&lt;/a&gt;.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you delve into the non-Open Source CMS market on the Microsoft Platform, there are some very strong contenders:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.sitecore.net/" target="_blank"&gt;SiteCore&lt;/a&gt; (and the free version &lt;a href="http://xpress.sitecore.net/" target="_blank"&gt;SiteCore XPress&lt;/a&gt;)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.sitefinity.com/" target="_blank"&gt;Sitefinity&lt;/a&gt; (and the free &lt;a href="http://www.sitefinity.com/product/community-edition.aspx"&gt;Community Edition&lt;/a&gt; - Thanks Gabe!)&lt;br&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.kentico.com/" target="_blank"&gt;Kentico&lt;/a&gt; (and the &lt;a href="http://www.kentico.com/download/free-edition.aspx" target="_blank"&gt;Free Edition&lt;/a&gt;)&lt;a href="http://www.kentico.com/" target="_blank"&gt;&lt;br&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.adxstudio.com/" target="_blank"&gt;ADXStudio &lt;/a&gt;(Thanks &lt;a href="http://twitter.com/bertcraven" target="_blank"&gt;Bert&lt;/a&gt;!)&lt;br&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;But these were a tad difficult to find as the Open Source Microsoft Platform, doesn't suffer from a drought of Blogging Platforms:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.dasblog.info/" target="_blank"&gt;dasBlog&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://subtextproject.com/" target="_blank"&gt;SubText&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.dotnetblogengine.net/" target="_blank"&gt;.NET BlogEngine&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://visitmix.com/Lab/Oxite" target="_blank"&gt;Oxite&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;After doing a bit of digging, the top Open Source .NET CMS Platforms are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.umbraco.org/" target="_blank"&gt;Umbraco&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://n2cms.com/" target="_blank"&gt;N2 &lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.cuyahoga-project.org/" target="_blank"&gt;Cuyahoga&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Umbraco seems to be the most popular and is gaining the most momentum (version 4 has &lt;a href="http://www.codeplex.com/umbraco" target="_blank"&gt;~30,000 downloads on CodePlex&lt;/a&gt;) and offers a paid for version that comes with support and some extra tooling, there is even a &lt;a href="http://codegarden.umbraco.org/" target="_blank"&gt;yearly conference&lt;/a&gt;. Cuyahoga is a bit of an unknown entity, although &lt;a href="http://ayende.com/Blog/archive/2008/11/17/cuyahoga.aspx" target="_blank"&gt;Oren (Ayende) seems to rate it highly&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;N2 is an impressive entry - in that it takes a different approach to CMS; with Umbraco, you are forced to code within the Umbraco framework and thus create a CMS System with bespoke application functionality, whereas, N2 allows you to integrate CMS at the API Level, and thus allows you to create rich applications with CMS functionality. A subtle difference, but very powerful.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14716" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Graffiti+CMS/default.aspx">Graffiti CMS</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Oxite/default.aspx">Oxite</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CMS/default.aspx">CMS</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/dasBlog/default.aspx">dasBlog</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Umbraco/default.aspx">Umbraco</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/N2/default.aspx">N2</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Open+Source/default.aspx">Open Source</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/SubText/default.aspx">SubText</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Cuyahoga/default.aspx">Cuyahoga</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Sitefinity/default.aspx">Sitefinity</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Kentico/default.aspx">Kentico</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/dotNetBlogEngine/default.aspx">dotNetBlogEngine</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/SiteCore/default.aspx">SiteCore</category></item><item><title>CodePlex Feature Request - "Releases RSS Feed should contain release artefacts as enclosures"</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/24/codeplex-feature-request-quot-releases-rss-feed-should-contain-release-artefacts-as-enclosures-quot.aspx</link><pubDate>Tue, 24 Mar 2009 10:53:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14695</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14695.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14695</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14695</wfw:comment><description>We want to add an auto-update feature to &lt;a href="http://stylecopforresharper.codeplex.com/" target="_blank"&gt;StyleCop for ReSharper&lt;/a&gt;, the most obvious way of creating such a feature would be to use the project's &lt;a href="http://stylecopforresharper.codeplex.com/Project/ProjectRss.aspx?ProjectRSSFeed=codeplex%3a%2f%2frelease%2fStyleCopForReSharper" target="_blank"&gt;Releases RSS Feed&lt;/a&gt;, but unfortunately the feed doesn't contain the release files, simply a link to the release page. So I've created a feature request for CodePlex called "&lt;a href="http://codeplex.codeplex.com/WorkItem/View.aspx?WorkItemId=21761"&gt;&lt;i&gt;Releases RSS Feed should contain release artefacts as enclosures&lt;/i&gt;&lt;/a&gt;". If you would like to see this feature, please &lt;a href="http://codeplex.codeplex.com/WorkItem/View.aspx?WorkItemId=21761" target="_blank"&gt;vote for it&lt;/a&gt; and hopefully we can have a simple system for automatically notifying users of (and automatically applying) updates to applications hosted on CodePlex.&lt;br&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14695" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Musings/default.aspx">Musings</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Microsoft+Source+Analysis+for+C_2300_/default.aspx">Microsoft Source Analysis for C#</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>New release of StyleCop, new release of StyleCop for ReSharper</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/14/new-release-of-stylecop-new-release-of-stylecop-for-resharper.aspx</link><pubDate>Sat, 14 Mar 2009 22:58:32 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14601</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14601.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14601</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14601</wfw:comment><description>&lt;p&gt;Microsoft released a &lt;a href="http://code.msdn.microsoft.com/sourceanalysis/Release/ProjectReleases.aspx?ReleaseId=1425"&gt;new version of StyleCop - v4.3.1.3&lt;/a&gt; last week and so we've just released a new &lt;a href="http://stylecopforresharper.codeplex.com/"&gt;compatible version of StyleCop for ReSharper&lt;/a&gt;.&amp;#160; &lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14601" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>Reduce PropertyGrid development pain by using LINQ Dynamic Expressions</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/03/02/reduce-propertygrid-development-pain-by-using-linq-dynamic-expressions.aspx</link><pubDate>Mon, 02 Mar 2009 08:28:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14436</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14436.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14436</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14436</wfw:comment><description>
  
&lt;p&gt;As I mentioned in &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2009/02/28/announcing-microsoft-blueprints-contrib.aspx"&gt;my last post&lt;/a&gt; I've been working with &lt;a href="http://www.codeplex.com/blueprints/"&gt;Microsoft Blueprints&lt;/a&gt;, one of the problems I encountered was trying to come up with a generic, reusable way of working with &lt;a href="http://msdn.microsoft.com/en-us/library/bb126445.aspx"&gt;T4 Templates&lt;/a&gt; (T4 is the used by Blueprints for all code generation as T4&amp;nbsp; is now &lt;a href="http://www.hanselman.com/blog/T4TextTemplateTransformationToolkitCodeGenerationBestKeptVisualStudioSecret.aspx"&gt;integrated into Visual Studio 2008&lt;/a&gt;) to generate the code fragments. &lt;/p&gt;
  
&lt;p&gt;I created a &lt;font face="Courier New"&gt;&lt;a href="http://blueprintscontrib.codeplex.com/Wiki/View.aspx?title=T4"&gt;T4TemplateBuilder&lt;/a&gt;&lt;/font&gt; object that exposes a fluent interface to take the pain out of manipulating T4 Templates: &lt;/p&gt;
  
&lt;p&gt;&lt;font face="Courier New"&gt;T4Template template = T4TemplateBuilder     &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Initialise(context)      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .SetTemplateFileName("MyT4Template.tt")      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .SetTargetFileName(@"C:\Temp", "MyFolder\MyGeneratedFile.cs")      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .SetProperty("MyProperty", "MyValue")      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Transform()      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .SaveToFile()      &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .Finish();&lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;The &lt;font face="Courier New"&gt;T4TemplateBuilder&lt;/font&gt; parses (using a simple RegExp) any T4 template to dynamically retrieve a list of properties that need to be passed in. I wanted to provide a simple GUI to allow the user to enter values for the T4 Template properties as part of the Blueprint “unfolding” process. Rather than re-inventing the wheel I decided to try and use the &lt;font face="Courier New"&gt;PropertyGrid&lt;/font&gt; Control. &lt;/p&gt;
  
&lt;p&gt;The data structure used to hold the T4 Template data within the Blueprints Framework is a generic Dictionary: &lt;font size="2" face="Courier New"&gt;Dictionary&amp;lt;string, Pair&amp;lt;string, Type&amp;gt;&amp;gt;()&lt;/font&gt; and unfortunately if you bind this to the PropertyGrid Control, you get the following: &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B4%5D.jpg"&gt;&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B4%5D_thumb.jpg" style="border-width:0px;" alt="clip_image002[4]" border="0" width="438" height="436"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;After doing a bit of research it became quite apparent that although incredibly adaptable, the PropertyGrid control is an absolute pain to work with as you have to create lots of glue code (TypeConverters) to make your objects display correctly. &lt;/p&gt;
  
&lt;p&gt;I started wondering if there was a way to create some dynamic anonymous types using LINQ (after a conversation with Rob Blackwell of AWS on how he implemented &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2009/02/09/lsharp-in-the-cloud.aspx"&gt;LSharp with LINQ Expression Trees&lt;/a&gt;). After reading a &lt;a href="http://www.interact-sw.co.uk/iangblog/2007/04/03/linqcodegen"&gt;few articles&lt;/a&gt; about &lt;a href="http://blogs.msdn.com/meek/archive/2008/04/25/using-linq-expressions-to-generate-dynamic-methods.aspx"&gt;Code Generation with LINQ&lt;/a&gt; and while waiting for the nose bleed to stop, I stumbled across this &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx"&gt;article from the mighty ScottGu&lt;/a&gt; which talks about Dynamic LINQ. After &lt;a href="http://msdn.microsoft.com/en-us/vcsharp/bb894665.aspx"&gt;downloading the sample&lt;/a&gt; I realised that I had found the solution to my problem – the Dynamic LINQ Library. This allows you to create dynamic properties and attach them to dynamic classes (which are essentially anonymous types) and then instantiate them. &lt;/p&gt;
  
&lt;p&gt;The dictionary contains entries for the following values:&amp;nbsp; InstallerType, WixProductId, WiXProductName. In the code below we iterate the dictionary and create &lt;font face="Courier New"&gt;DynamicProperties&lt;/font&gt; based on the values in the dictionary, attach them to a dynamic class and then instantiate it. &lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;var dynamicProperties = new List&amp;lt;DynamicProperty&amp;gt;(); &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;// Iterate our dictionary and create dynamic properties that match our values.      &lt;br&gt;foreach (KeyValuePair&amp;lt;string, Pair&amp;lt;string, Type&amp;gt;&amp;gt; pair in this.templateProperties)       &lt;br&gt;{       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // i.e. we are creating a new Dynamic Property called "InstallerType"       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // which is of type string.       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dynamicProperties.Add(new DynamicProperty(pair.Key, pair.Value.Second));       &lt;br&gt;} &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;// Create a dynamic, anonymous type which contains those properties      &lt;br&gt;this.dynamicType = DynamicExpression.CreateClass(dynamicProperties); &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;// Create an instance of the anonymous type. W00t!      &lt;br&gt;this.dynamicObject = Activator.CreateInstance(this.dynamicType); &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;This new dynamicObject can now be attached to the PropertyGrid to give the desired experience: &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B6%5D.jpg"&gt;
&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B6%5D_thumb.jpg" border="0" width="438" height="436"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;Fill in the values: &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B8%5D.jpg"&gt;
&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B8%5D_thumb.jpg" border="0" width="438" height="436"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;Next we have to pull the values back out of the &lt;font face="Courier New"&gt;dynamicObject&lt;/font&gt; and put them back into the Dictionary so that it can be passed into the T4 Transformation Engine: &lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;var updatedTemplateProperties = new Dictionary&amp;lt;string, Pair&amp;lt;string, Type&amp;gt;&amp;gt;(); &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;foreach (KeyValuePair&amp;lt;string, Pair&amp;lt;string, Type&amp;gt;&amp;gt; pair in this.templateProperties)      &lt;br&gt;{       &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string value = (string)this.dynamicType.GetProperty(pair.Key).GetValue(this.propertyGrid.SelectedObject, null); &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; updatedTemplateProperties.Add(pair.Key, new Pair&amp;lt;string, Type&amp;gt;(value, pair.Value.Second));      &lt;br&gt;} &lt;/font&gt;&lt;/p&gt;
  
&lt;p&gt;&lt;font size="2" face="Courier New"&gt;this.templateProperties = updatedTemplateProperties;&lt;/font&gt; &lt;/p&gt;
  
&lt;p&gt;Then we can display the dictionary object to prove we have the updated values: &lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B10%5D.jpg"&gt;&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/UsingLINQDynamicExpressionstoeasePropert_DE5D/clip_image002%5B10%5D_thumb.jpg" style="border-width:0px;" alt="clip_image002[10]" border="0" width="512" height="470"&gt;&lt;/a&gt;&lt;/p&gt;
  
&lt;p&gt;I've uploaded &lt;a href="http://howardvanrooijen.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24090"&gt;a sample application&lt;/a&gt; to my &lt;a href="http://howardvanrooijen.codeplex.com/"&gt;CodePlex project&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14436" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Engineering+Practices/default.aspx">Engineering Practices</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/AWS/default.aspx">AWS</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Blueprints/default.aspx">Blueprints</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/T4/default.aspx">T4</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Code+Generation/default.aspx">Code Generation</category></item><item><title>Announcing Microsoft.Blueprints.Contrib on CodePlex</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/28/announcing-microsoft-blueprints-contrib.aspx</link><pubDate>Sat, 28 Feb 2009 09:40:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14422</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14422.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14422</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14422</wfw:comment><description>&lt;p&gt;I've been working with &lt;a href="http://blueprints.codeplex.com/"&gt;Microsoft Blueprints&lt;/a&gt; for the last couple of weeks, to see if it's a suitable deployment vector for some of our reusable IP and Engineering Practices. &lt;a href="http://msdn.microsoft.com/en-us/architecture/blueprints.aspx"&gt;Blueprints&lt;/a&gt; is part of the &lt;a href="http://msdn.microsoft.com/en-us/library/bb977473.aspx"&gt;Software Factories&lt;/a&gt; vision, it evolves and includes the great work already done with the &lt;a href="http://msdn.microsoft.com/en-us/architecture/aa718948.aspx"&gt;Guidance Automation Toolkit&lt;/a&gt;, the &lt;a href="http://msdn.microsoft.com/en-us/vsx/cc677256.aspx"&gt;DSL Tools&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/vsx/default.aspx"&gt;Visual Studio Extensibility&lt;/a&gt; and creates a more cohesive vision that is easier to develop and deploy. Below is a great diagram that shows the Blueprints lineage and it's future direction:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://i.msdn.microsoft.com/Dd179252.IntroMSBlueprints02%28en-us,MSDN.10%29.jpg"&gt; &lt;/p&gt;  &lt;p&gt;Although still a little rough around the edges (it's still only CTP) it's value is clear. I won't go into great details about what Blueprints are as there are already &lt;a href="http://afurtado1980.spaces.live.com/blog/cns%2163514833CE40C143%211200.entry"&gt;a great number&lt;/a&gt; of &lt;a href="http://santoshbenjamin.wordpress.com/2008/11/14/blueprints-diary-1-getting-up-to-speed/"&gt;blog posts&lt;/a&gt; on &lt;a href="http://santoshbenjamin.wordpress.com/2008/11/25/blueprints-diary-2-getting-started-the-videos/"&gt;the subject&lt;/a&gt; that not only show the &lt;a href="http://www.edwardbakker.nl/PermaLink,guid,e8551df6-102b-4477-bb38-69fddbef32a8.aspx"&gt;interesting things&lt;/a&gt; people &lt;a href="http://www.edwardbakker.nl/PermaLink,guid,19ed9391-55ca-4e49-aeef-e3c7289f199e.aspx"&gt;are doing&lt;/a&gt; with the framework, but also the &lt;a href="http://www.edwardbakker.nl/PermaLink,guid,9077ee23-2f38-4521-aa01-2b5baa45cc0c.aspx"&gt;customisations&lt;/a&gt; and &lt;a href="http://www.edwardbakker.nl/PermaLink,guid,cccad39d-80dc-4d91-905d-b5753b44e291.aspx"&gt;tricks they are learning&lt;/a&gt; as they are using Blueprints to solve &lt;a href="http://channel9.msdn.com/posts/MichaelLehman/Introduction-to-the-Infosys-Blueprints/"&gt;their own problems&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I've taken the learnings from the last couple of weeks and distilled them into a new CodePlex project: &lt;a href="http://blueprintscontrib.codeplex.com/"&gt;Microsoft.Blueprints.Contrib&lt;/a&gt;. At the moment the project contains three areas of help for developing Blueprints:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blueprintscontrib.codeplex.com/Wiki/View.aspx?title=Dialogs"&gt;Dialogs&lt;/a&gt; - some common dialogs for selecting projects, selecting files and editing T4 Template Properties&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blueprintscontrib.codeplex.com/Wiki/View.aspx?title=Environment"&gt;Environment&lt;/a&gt; - helper class to enable you to easily manipulate the current Visual Studio Solution / Projects&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blueprintscontrib.codeplex.com/Wiki/View.aspx?title=T4"&gt;T4&lt;/a&gt; - some nice helper files which create a facade over the T4 Templating engine and give you a simple, discoverable fluent interface for implementation which leads to cleaner code.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Hopefully as Blueprints pick up some momentum more people will contribute to the CodePlex project; if you're interested in contributing to the project, please &lt;a href="http://www.codeplex.com/site/users/view/HowardvanRooijen"&gt;contact me&lt;/a&gt; or send me a tweet: &lt;a href="http://twitter.com/HowardvRooijen" title="Send me a Tweet!" target="_blank"&gt;@HowardvRooijen&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14422" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Engineering+Practices/default.aspx">Engineering Practices</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/CodePlex/default.aspx">CodePlex</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Blueprints/default.aspx">Blueprints</category></item><item><title>StyleCop for ReSharper is Feature Complete. RC (refresh) Released.</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/18/stylecop-for-resharper-is-feature-complete-rc-refresh-released.aspx</link><pubDate>Wed, 18 Feb 2009 14:34:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14302</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14302.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14302</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14302</wfw:comment><description>&lt;p&gt;&lt;b&gt;[Start update 26.02.2009]&lt;/b&gt; &lt;/p&gt;&lt;p&gt;I've pushed up another release (&lt;span id="ctl00_ctl00_MasterContent_RightSideBar_CurrentRelease_Sidebar_releaseTitleLabel"&gt;0.0.14301.000&lt;/span&gt;) that contains fixes for all RC Refresh (0.0.14293.004) reported bugs: &lt;/p&gt;&lt;p&gt;&lt;b&gt;Fixes:&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fixed: reported RC bugs&lt;/li&gt;&lt;li&gt;Fixed: add customer repro around inserting documentation (SA1503) &lt;/li&gt;&lt;li&gt;Fixed: adding option for 1500. Fixing bracket on same line issue for split line object initializers&lt;/li&gt;&lt;li&gt;Fixed: adding QF for 1001 - thats checks for the dodgy extra space rule in [2,2] declarations&lt;/li&gt;&lt;li&gt;Fixed: adding the NDoc element names for layout of xmldoc comments. &lt;/li&gt;&lt;li&gt;Fixed: bug where Multiple declaration types were not being swapped correctly unless they had an initial value. &lt;/li&gt;&lt;li&gt;Fixed: change highlights to not highlight the whitespace at the beginning of a line. &lt;/li&gt;&lt;li&gt;Fixed: closing curly bracket new line action properly. Sorted for object initializers now too. &lt;/li&gt;&lt;li&gt;Fixed: compare using aliases with an OrdinalIgnoreCase StringComparison. &lt;/li&gt;&lt;li&gt;Fixed: for blank lines after single line comments and C Style comment blocks &lt;/li&gt;&lt;li&gt;Fixed: for QF 1611 if inside a param dec when opening the QF. &lt;/li&gt;&lt;li&gt;Fixed: new Utils code to support the fix for this. Constants (and maybe others) dont return an IDeclaration for their containing element.&lt;/li&gt;&lt;li&gt;Fixed: null ref exception. &lt;/li&gt;&lt;li&gt;Fixed: remove call to CSharpCodeFormatterImpl().Format in case the defaults aren't correct. &lt;/li&gt;&lt;li&gt;Fixed: remove extra parans from around Lamdba Expressions if not required. &lt;/li&gt;&lt;li&gt;Fixed: replace the functions that figured out a TextRange for a linenumber using the StyleCop model to use the R# model which is much simpler. &lt;/li&gt;&lt;li&gt;Fixed: update spacing rule after a comma. So unless its a &amp;gt; ] ) or comma it should be a space.&amp;nbsp; &lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;b&gt;[End update 26.02.2009]&lt;/b&gt; &lt;br&gt;&lt;/p&gt;&lt;p&gt;StyleCop for ReSharper is now feature complete in that is has reached feature parity with StyleCop 4.3. &lt;/p&gt;
&lt;p&gt;There are &lt;b&gt;148&lt;/b&gt; StyleCop (4.3) rules.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;38&lt;/b&gt; of these must be fixed manually (normally because you have to type descriptive text or rename variables).&lt;/li&gt;
&lt;li&gt;Of the remaining &lt;b&gt;110&lt;/b&gt; rules &lt;b&gt;58&lt;/b&gt; are fixed by R# Code Cleanup (silent mode).&lt;/li&gt;
&lt;li&gt;Of the &lt;b&gt;52&lt;/b&gt; now remaining we have Code Cleanup rules that fix all of them.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;We also provide &lt;b&gt;106&lt;/b&gt; Quick Fixes that provide in place context menu fixes for violations for the &lt;b&gt;110&lt;/b&gt; rules that can be fixed automatically. &lt;a href="http://www.codeplex.com/StyleCopForReSharper"&gt;Download the latest release from the Codeplex site&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;This will be the final release before v1.0 at which point we will branch the code and focus on supporting ReSharper 4.5&lt;/b&gt;&lt;/p&gt;
&lt;h4&gt;Quick Fixes: &lt;/h4&gt;
&lt;p&gt;SA1100: DoNotPrefixCallsWithBaseUnlessLocalImplementationExists &lt;br&gt;SA1108: BlockStatementsMustNotContainEmbeddedComments &lt;br&gt;SA1109: BlockStatementsMustNotContainEmbeddedRegions &lt;br&gt;SA1119: StatementMustNotUseUnnecessaryParenthesis &lt;br&gt;SA1609: PropertyDocumentationMustHaveValue &lt;br&gt;SA1636: FileHeaderMustContainFileName &lt;br&gt;SA1641: FileHeaderCompanyNameTextMustMatch &lt;/p&gt;
&lt;h4&gt;Code Clean Up Modules:&lt;/h4&gt;
&lt;p&gt;SA1100: DoNotPrefixCallsWithBaseUnlessLocalImplementationExists &lt;br&gt;SA1108: BlockStatementsMustNotContainEmbeddedComments &lt;br&gt;SA1109: BlockStatementsMustNotContainEmbeddedRegions &lt;br&gt;SA1119: StatementMustNotUseUnnecessaryParenthesis &lt;br&gt;SA1023: DereferenceAndAccessOfSymbolsMustBeSpacedCorrectly &lt;br&gt;SA1609: PropertyDocumentationMustHaveValue &lt;/p&gt;
&lt;h4&gt;Fixes:&lt;/h4&gt;
&lt;p&gt;Fixed: Special case for &amp;lt;para&amp;gt; elements. If it contains -or- then it doesn't force InnerXml onto a new line. &lt;br&gt;Fixed: Updated to 'VersionNumberIncrement.target' to resolve build issue where it doesn't have the latest version config file. &lt;br&gt;Fixed: Add a missing default of MaintainabilityOptions. &lt;br&gt;Fixed: Ensure that our performance setting defaults to 9 on a new installation. Renamed many of our xml config entries to ensure they are setup correctly. &lt;br&gt;Fixed: Dont swap "" for string.Empty if its inside an Attribute or a case statement label. Do swap it if its @"" &lt;br&gt;Fixed: Removing redundant methods. &lt;br&gt;Fixed: If static constructor has default text for an instance constructor then replace it completely. Update tests. &lt;br&gt;Fixed: Read StyleCop settings for whether rules are enabled and only clean up code if they are. &lt;br&gt;Fixed: All method invocations were being swapped to this. &lt;br&gt;Fixed: Inserted doc comments weren't being formatted being being inserted so you had to do CTRL E,F again &lt;br&gt;Fixed: Fixing the parameter documentation on constructors for code cleanup. &lt;br&gt;Fixed: Updated to 'VersionNumberIncrement.target' to resolve build issue where it doesn't have the latest version config file. &lt;br&gt;Fixed: Update Documentation&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14302" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Engineering+Practices/default.aspx">Engineering Practices</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>StyleCop for ReSharper Release Candidate</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/12/stylecop-for-resharper-release-candidate.aspx</link><pubDate>Thu, 12 Feb 2009 12:07:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14214</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14214.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14214</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14214</wfw:comment><description>&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2009/02/18/stylecop-for-resharper-is-feature-complete-rc-refresh-released.aspx" title="StyleCop for ReSharper is feature complete"&gt;StyleCop for ReSharper is now feature complete&lt;/a&gt;. &lt;br&gt;&lt;/p&gt;&lt;p&gt;We're almost at the finish line - we’ve added 19 new fixes (both Quick-Fixes and Code Clean Up Modules in addition to the 92 already implemented) and fixed a whole slew of reported issues. Please try this version of the plug-in and &lt;a href="http://www.codeplex.com/StyleCopForReSharper/WorkItem/List.aspx"&gt;tell us about any issues you find&lt;/a&gt;, or any &lt;a href="http://www.codeplex.com/StyleCopForReSharper/WorkItem/List.aspx"&gt;new features you would like&lt;/a&gt;. As always we're more than happy to accept patches from the community; for this release many thanks go to &lt;a href="http://www.codeplex.com/site/users/view/digitaldrummerj"&gt;digitaldrummerj&lt;/a&gt; for their patch. Pretty much all the work done this release was by Andy Reeves - so big thanks again to his powerhouse effort!&lt;/p&gt;  &lt;p&gt;If you would like to see all the Quick-Fixes and Code Clean-Up Modules see the &lt;a href="http://www.codeplex.com/StyleCopForReSharper/Wiki/View.aspx?title=Fixes" target="_blank"&gt;Overview of Currently Supported Fixes&lt;/a&gt; page. &lt;br&gt;&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.codeplex.com/StyleCopForReSharper/Release/ProjectReleases.aspx?ReleaseId=23161"&gt;new release is available&lt;/a&gt; on the &lt;a href="http://www.codeplex.com/StyleCopForReSharper"&gt;StyleCop for ReSharper CodePlex site&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;This will be the final release before v1.0 at which point we will branch the code and focus on supporting ReSharper 4.5&lt;/b&gt;&lt;/p&gt;  &lt;h4&gt;Quick Fixes:&lt;/h4&gt;  &lt;p&gt;SA1102: QueryClauseMustFollowPreviousClause   &lt;br&gt;SA1103: QueryClausesMustBeOnSeparateLinesOrAllOnOneLine    &lt;br&gt;SA1104: QueryClauseMustBeginOnNewLineWhenPreviousClauseSpansMultipleLines    &lt;br&gt;SA1105: QueryClausesSpanningMultipleLinesMustBeginOnOwnLine    &lt;br&gt;SA1106: CodeMustNotContainEmptyStatements    &lt;br&gt;SA1110: OpeningParenthesisMustBeOnDeclarationLine    &lt;br&gt;SA1111: ClosingParenthesisMustBeOnLineOfOpeningParenthesis    &lt;br&gt;SA1112: ClosingParenthesisMustBeOnLineOfOpeningParenthesis    &lt;br&gt;SA1113: CommaMustBeOnSameLineAsPreviousParameter    &lt;br&gt;SA1114: ParameterListMustFollowDeclaration    &lt;br&gt;SA1115: ParameterMustFollowComma    &lt;br&gt;SA1116: SplitParametersMustStartOnLineAfterDeclaration    &lt;br&gt;SA1117: ParametersMustBeOnSameLineOrSeparateLines    &lt;br&gt;SA1118: ParameterMustNotSpanMultipleLines    &lt;br&gt;SA1120: CommentsMustContainText&lt;/p&gt;  &lt;h4&gt;Code Cleanup Modules:&lt;/h4&gt;  &lt;p&gt;SA1106: CodeMustNotContainEmptyStatements    &lt;br&gt;SA1120: CommentsMustContainText    &lt;br&gt;SA1121: UseBuiltInTypeAlias    &lt;br&gt;SA1122: UseStringEmptyForEmptyStrings&lt;/p&gt;  &lt;h4&gt;Fixes:&lt;/h4&gt;  &lt;p&gt;Fixed: Should fix plugin version number issue   &lt;br&gt;Fixed: Non-compiling tests.    &lt;br&gt;Fixed: UpdateFileHeader default is now to replace the copyright element. This leaves the summary alone. CDATA sections in doc comments handled correctly. //// handled correctly.    &lt;br&gt;Fixed: Bug where preprocessor directive was removing the wrong space. Updating some tests.     &lt;br&gt;Fixed: Trim the created doc xml to remove whitespace at the end of an empty xml fragment.    &lt;br&gt;Fixed: Change Build to Configuration Manager to prevent Test project from being built in "Release Mode"    &lt;br&gt;Fixed: Improve our auto documentation to put descriptions of the parameters in.&amp;nbsp; &lt;br&gt;Fixed: Ensure our Code Cleanup modules run after ReSharpers.     &lt;br&gt;Fixed: Don't insert new lines at the beginning of code blocks.     &lt;br&gt;Fixed: Code the Csharp code reformatter after we insert lines as we now run after the Std reformatter.    &lt;br&gt;Fixed: Remove new lines that ReSharper inserted before [assembly] entries.    &lt;br&gt;Fixed: Don't insert '.' inside &amp;lt;c&amp;gt; elements.    &lt;br&gt;Fixed: Don't capitalise text inside &amp;lt;c&amp;gt; or &amp;lt;code&amp;gt; elements.    &lt;br&gt;Fixed: Don't replace inheritdoc comments with empty comments.    &lt;br&gt;Fixed: Don't replace a comment that has no summary but some other text in it with an empty comment.    &lt;br&gt;Fixed: Removing the commonassemblyinfo.cs from the TestProject as we don't ship it.     &lt;br&gt;Fixed: Remove empty old folder. &lt;/p&gt;  &lt;h4&gt;Updates:&lt;/h4&gt;  &lt;p&gt;Update: Documentation.    &lt;br&gt;Update: Test data.    &lt;br&gt;Update: Member access order in Settings File.    &lt;br&gt;Update: Completed rules.     &lt;br&gt;Update: Tracking of work completed.     &lt;br&gt;Update: Remove tests that we've replaced with new ones.&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14214" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Engineering+Practices/default.aspx">Engineering Practices</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Community/default.aspx">Community</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/ReSharper/default.aspx">ReSharper</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/StyleCop/default.aspx">StyleCop</category></item><item><title>Windows Azure – Hazy Terminology</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/10/windows-azure-hazy-terminology.aspx</link><pubDate>Tue, 10 Feb 2009 10:42:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14186</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14186.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14186</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14186</wfw:comment><description>&lt;p&gt;As I mentioned in my &lt;a href="http://blogs.conchango.com/howardvanrooijen/archive/2009/02/09/lsharp-in-the-cloud.aspx"&gt;previous post&lt;/a&gt;, I spent 3 days last week on a Windows Azure Training Course, unfortunately this meant that I missed out on all the fun that was had on &lt;a href="http://search.twitter.com/search?q=%23comday"&gt;#comday&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;One of the most common questions I heard at PDC 08 after Windows Azure was unveiled was around the overlap of functionality between Windows Azure Storage and &lt;a href="http://www.microsoft.com/azure/data.mspx"&gt;SQL Data Services&lt;/a&gt; (SDS) – why are Microsoft offering two different data base solutions in the cloud, that have so many overlapping features? Which one should I use? What are the benefits of the two different systems? I know I was asking these questions – especially as I was quite familiar with SDS – thanks to our very own &lt;a href="http://blogs.conchango.com/jamiethomson"&gt;Jamie Thomson&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I couldn’t really give these questions too much thought at the time as one of the main problems of PDC is the shear volume of information that’s thrown at you (well, it’s also the reason you attend). This course gave me the breathing room to really start thinking about ramifications of what was presented at PDC.&lt;/p&gt;  &lt;p&gt;The reason there is a lack of clarity of the differences between the two systems is simply the use of language to describe the Azure Storage Platform; Microsoft have tried to use terminology that existing developers will understand in order to reduce the fear of the complexities of dealing with Cloud-scale architecture and development.&lt;/p&gt;  &lt;p&gt;The Azure Storage Platform is simply and elegantly designed to allow new massively scalable Web Applications and Web Services to be produced. SQL Data Services allows your to run more traditional relational databases (that are essentially not cloud scalable, due to the intrinsic relational behaviour) and in the future more standard SQL Server features such as Reporting, BI etc will be available. SDS will allow companies to migrate existing applications on to this platform (although it is very unlikely this would be a trivial migration).&lt;/p&gt;  &lt;p&gt;Hopefully this distinction is quite apparent, but the terminology of the Azure Storage Platform still muddies the water. Microsoft are using familiar terms in order to keep developers in their comfort zones, but unfortunately this is doing the underlying platform a disservice as it does not correctly convey, the scope, grandeur or reason for it’s overall Architecture.&lt;/p&gt;  &lt;p&gt;The Azure Storage Platform consists of 3 services – Tables, Blobs and Queues. These are familiar enough concepts for most developers. The problems arise when these services are compared either to the services in SDS or more importantly, when they are compared to the artefacts that most developers know. &lt;/p&gt;  &lt;p&gt;Azure Tables &lt;i&gt;are not&lt;/i&gt; tables as we know them. Blobs &lt;i&gt;are not&lt;/i&gt; blobs as we understand them and Queues, well they &lt;i&gt;are not&lt;/i&gt; strictly Queues at all. I’ve always been slightly obsessive about the use of language to accurately describe concepts in code – I constantly have Wittgenstein’s quote “&lt;i&gt;The limits of my language means the limits of my world&lt;/i&gt;” going through my head and most people know to steer well clear of mentioning the C# keyword &lt;i&gt;var&lt;/i&gt; near me (it should be named &lt;i&gt;infer&lt;/i&gt; btw).&lt;/p&gt;  &lt;p&gt;If these artefacts were renamed as follows, it might make the Azure Storage Platform picture a little less hazy and reduce collisions with SDS:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;i&gt;Tables&lt;/i&gt; = &lt;b&gt;Entity Repository       &lt;br&gt;&lt;/b&gt;&lt;i&gt;Blobs&lt;/i&gt; = &lt;b&gt;Binary Entity Repository       &lt;br&gt;&lt;/b&gt;&lt;i&gt;Queues&lt;/i&gt; = &lt;b&gt;Dispatcher&lt;/b&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14186" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Musings/default.aspx">Musings</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Cloud/default.aspx">Cloud</category></item><item><title>LSharp in the Cloud</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/09/lsharp-in-the-cloud.aspx</link><pubDate>Mon, 09 Feb 2009 11:45:00 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14178</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14178.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14178</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14178</wfw:comment><description>
&lt;p&gt;Last week I attended a Windows &lt;a href="http://www.microsoft.com/azure/default.mspx" target="_blank"&gt;Azure Services Platform&lt;/a&gt; Training Workshop, held by &lt;a href="http://www.qa.com/" target="_blank"&gt;QA&lt;/a&gt; &lt;a href="http://www.qa.com/training-locations/london-king-william-street" target="_blank"&gt;in London&lt;/a&gt;. Our trainer, the excellent Mr &lt;a href="http://www.qa.com/qa-a-learning-company/blogs/adrian-jakeman" target="_blank"&gt;Adrian Jakeman&lt;/a&gt;, took myself and 12 other Microsoft Partners on a journey through the Azure Service Platform and its constituent parts:&lt;/p&gt;
  
&lt;p&gt;&lt;a href="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/LSharpintheCloud_9630/Windows%20Azure%20Platform_2.png"&gt;&lt;img src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/LSharpintheCloud_9630/Windows%20Azure%20Platform_thumb.png" style="border:0px none;" alt="Windows Azure Platform" border="0" width="742" height="344"&gt;&lt;/a&gt; &lt;/p&gt;
  
&lt;p&gt;I was fortunate enough to be sat next to &lt;a href="http://www.robblackwell.org.uk/" target="_blank"&gt;Rob Blackwell&lt;/a&gt;, from &lt;a href="http://aws.net/" target="_blank"&gt;AWS&lt;/a&gt; for the duration of the course. I met Rob a few years ago when AWS had just launched the amazing &lt;a href="http://www.mobguardian.com/" target="_blank"&gt;Mob Guardian&lt;/a&gt; system for the &lt;a href="http://www.rnli.org.uk/" target="_blank"&gt;RNLI&lt;/a&gt;, (during the event Rob told me that AWS have recently been working on &lt;a href="http://blogs.msdn.com/stevecla01/archive/2008/11/02/windows-azure-rnli.aspx" target="_blank"&gt;updating the system to run on Windows Azure&lt;/a&gt;) then in 2007, Conchango and AWS collaborated on the &lt;a href="http://dev.live.com/quickapps/" target="_blank"&gt;Contoso Bicycle Club Windows Live Quick App&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;During the course Rob and I talked about running Open Source projects - I talked about &lt;a href="http://www.codeplex.com/StyleCopForReSharper" target="_blank"&gt;StyleCop for ReSharper&lt;/a&gt; and he told me about his pet project - &lt;a href="http://www.lsharp.org/" target="_blank"&gt;LSharp.NET&lt;/a&gt; - a LISP implementation for the CLR. I've always been intrigued by LISP, even thought I started studying Intelligent Systems (Computer Science, Cybernetics and Psychology) at university, the course never actually covered LISP. I was quite blown away when Rob told me that he implemented the language using LINQ Expression trees to take the LISP syntax and compile it into IL. I mentioned something about &lt;a href="http://tryruby.hobix.com/" target="_blank"&gt;web based interactive Ruby consoles&lt;/a&gt; and about an hour later Rob had knocked up a &lt;a href="http://lsharp.cloudapp.net/" target="_blank"&gt;Windows Azure solution equivalent for LSharp&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;I asked Rob if he'd be interested in recording a video interview about LSharp and how he put it into the Cloud using Windows Azure. Below is &lt;a href="http://www.vimeo.com/3118162" target="_blank"&gt;the result&lt;/a&gt; (thanks for Adrian Jakeman for acting as Quiz Master):&lt;/p&gt;
  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:f4a25d3b-d6b0-4be2-89ef-3c2a324a03ce" style="margin:0px;padding:0px;display:inline;"&gt;&lt;div&gt;
&lt;object width="500" height="300"&gt;
&lt;param name="allowfullscreen" value="true"&gt;
&lt;param name="allowscriptaccess" value="always"&gt;
&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=3118162&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1"&gt;
&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=3118162&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="500" height="300"&gt;&lt;/object&gt;
&lt;br&gt;&lt;a href="http://vimeo.com/3118162"&gt;LSharp in the Cloud&lt;/a&gt; from &lt;a href="http://vimeo.com/howardvanrooijen"&gt;Howard van Rooijen&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;   
&lt;p&gt;See &lt;a href="http://www.robblackwell.org.uk/" target="_blank"&gt;Rob's blog&lt;/a&gt; for more info on LSharp and &lt;a href="http://www.robblackwell.org.uk/?p=150" target="_blank"&gt;hosting it in Azure&lt;/a&gt;.&lt;/p&gt;
  
&lt;p&gt;If you would like to try out Rob's app - it's available at &lt;a href="http://lsharp.cloudapp.net/" title="http://lsharp.cloudapp.net/"&gt;http://lsharp.cloudapp.net/&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14178" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Musings/default.aspx">Musings</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Azure/default.aspx">Azure</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/AWS/default.aspx">AWS</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Video/default.aspx">Video</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/LISP/default.aspx">LISP</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Cloud/default.aspx">Cloud</category></item><item><title>Implementation Patterns of User-Centered Design, Development and Agile</title><link>http://blogs.conchango.com/howardvanrooijen/archive/2009/02/05/implementation-patterns-of-user-centered-design-development-and-agile.aspx</link><pubDate>Thu, 05 Feb 2009 22:54:09 GMT</pubDate><guid isPermaLink="false">e847c0e7-38d9-45c0-b593-56747303e088:14165</guid><dc:creator>howard.vanrooijen</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.conchango.com/howardvanrooijen/comments/14165.aspx</comments><wfw:commentRss>http://blogs.conchango.com/howardvanrooijen/commentrss.aspx?PostID=14165</wfw:commentRss><wfw:comment>http://blogs.conchango.com/howardvanrooijen/rsscomments.aspx?PostID=14165</wfw:comment><description>&lt;p&gt;Last Friday &lt;a href="http://blogs.conchango.com/malcolmbeaton/" target="_blank"&gt;Malcolm Beaton&lt;/a&gt; started a thread on our internal User Experience and Agile Community mailing lists - on how &lt;a href="http://en.wikipedia.org/wiki/User-centered_design" target="_blank"&gt;User-Centered Design&lt;/a&gt; and Agile can work together and any friction that may occur. &lt;a href="http://blogs.conchango.com/simonbennett/" target="_blank"&gt;Simon Bennett&lt;/a&gt;, &lt;a href="http://blogs.conchango.com/zakholdsworth/" target="_blank"&gt;one&lt;/a&gt; of our &lt;a href="http://availagility.wordpress.com/" target="_blank"&gt;Agile Coaches&lt;/a&gt;, made a point that resonated - any problem may be &amp;quot;related to *how* we&amp;#8217;re doing UX and/or Agile, and not inherent in either Agile or UX itself&amp;quot;. &lt;/p&gt;  &lt;p&gt;I started thinking about all the Agile projects I've worked on in the last 5 years - from short innovation-centric projects to full blown year long e-commerce projects and I managed to distill them into 4 different patterns:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Balanced Delivery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="230" alt="" src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/PatternsofUserCenteredDesignDevelopmenta_1345D/image_3.png" width="314" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;The Designer, UX and Developer work hand in hand; all strategy, features and decisions are discussed and decided as a whole. If there were technical issues, workarounds and compromises will be made. All team members pushed each other to do the best they can. In short, a beautiful working relationship that is geared towards creating something rather special. I've experienced this pattern on small to medium sized innovative projects where the end goal is known, but the journey to get there is unknown and the client is fully engaged and supportive. I've experienced this pattern twice and those projects are still a personal career highlight.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unbalanced Delivery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img height="230" alt="image" src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/PatternsofUserCenteredDesignDevelopmenta_1345D/image_5a1d904f-2b84-436d-8758-44b2eab308b6.png" width="297" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Due to delivery commitments / being late to the engagement, the Developer is not so involved in the Design / UX process which slants the strategy, features and decisions, causes drift and less room for workarounds and compromises as issues are not generally found until implementation occurs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Creative Led Delivery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;img height="223" alt="image" src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/PatternsofUserCenteredDesignDevelopmenta_1345D/image_445554be-4ef1-47fd-944b-f2a7eae14219.png" width="379" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Being late to the engagement, either by commitment or project set-up, the Developer arrives too late to input on strategy, features, decisions on what&amp;#8217;s possible and achievable. From a team gelling perspective - the Developer can feel slightly left out because all the fun work has already happened and feels like they are just an agent of implementation rather than delivery.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Buffered Creative Led Delivery&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img height="362" alt="image" src="http://blogs.conchango.com/blogs/howardvanrooijen/WindowsLiveWriter/PatternsofUserCenteredDesignDevelopmenta_1345D/image_87655fbe-a864-4048-9903-3253c97cde67.png" width="542" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Designers &amp;amp; UX have to run an iteration ahead of the development in order to keep the queue of work full. There may be Developer input into the process, but unless iteration capacity is adjusted to allow for collaboration, Developer input may be limited or insufficient, this is not ideal; decisions may be made in isolation as Development team are too busy developing to feedback into the Design / UX process. This pattern keeps the team running optimally, but may lead to long term problems.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.conchango.com/mattroadnight/" target="_blank"&gt;Matt Roadnight&lt;/a&gt; pointed out that the following diagrams are missing &amp;quot;the customer&amp;quot; - so I'll leave it to you to add them (they should be central to each pattern).&lt;/p&gt;&lt;img src="http://blogs.conchango.com/aggbug.aspx?PostID=14165" width="1" height="1"&gt;</description><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Agile/default.aspx">Agile</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Musings/default.aspx">Musings</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.conchango.com/howardvanrooijen/archive/tags/UCD/default.aspx">UCD</category></item></channel></rss>