<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Eric Hexter</title><link>http://www.lostechies.com/blogs/hex/default.aspx</link><description>Where the rubber meets the road.</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/EricHexter" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Using MSDeploy to automate your Enterprise Application remote deployments.</title><link>http://feedproxy.google.com/~r/EricHexter/~3/_nfNP-Tnt7k/using-msdeploy-to-automate-your-enterprise-application-remote-deployments.aspx</link><pubDate>Fri, 06 Nov 2009 17:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29992</guid><dc:creator>erichexter</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29992</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/06/using-msdeploy-to-automate-your-enterprise-application-remote-deployments.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;MsDeploy is a newish technology that is a bit schizophrenic.&amp;#160; What I mean is that it is a tool that is useful to both Developers and Administrators but it is not clear from the documentation how to best use the technology and how to approach it. I believe it stated as a Server Administrator tool and the team was able to work in an integration with Visual Studio which made it into a more robust framework, but at the same time left is command line interface with so many options that it is challenging to get a grasp on.&amp;#160; To top that off the Web Platform Installer uses the MsDeploy packages as a way to distribute packages through that tool.&amp;#160; After working through some various ways to use the technology I have settled into some commands that work well for our projects. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Let me set the context of how we are using the tool and what we already had in place so that you can better understand if my use of MsDeploy will work for you. At &lt;a href="http://www.headspringsystems.com/"&gt;Headspring&lt;/a&gt; we use Continuous Integration on all of our projects and as a result, once our software is built by our build server the next logical step is to deploy our software to a server and than run User Interface tests against the application. Most of our projects are web applications running on ASP.Net MVC using Sql Server as the back end.&amp;#160; We install our software using a lightweight zipfile that contains the web application files, database migration scripts and a deployment script which can poke config files and execute our database migration tool.&amp;#160; We already have all the pieces in place to deploy our application on a local machine.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Up until know we have used two methods to deploy instances to remote machines.&amp;#160; The first methods was to install Cruise Control.Net on the server and have it monitor our source control repository for a new installation package being committed to the repository. Once it sees a new package CCNet will pull down the package, install it locally and go on its merry way.&amp;#160; The second method, is to kick off the deployment from the build server and connect over the network to the target database to run upgrades and then xcopy the files to a unc share.&amp;#160; Both of these methods require setting up some configuration on our target servers. My goal with our deployments is to reduce the amount of per server configuration we do on each server and use some conventions to make each server look similar to one from a different project.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Using MSDeploy allows us to do the following.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;1. Remove the need to install cruise control on the target server and update the configuration for cruise control on each target server.&amp;#160; We do have to install MSDeploy on each server but we do not have to mess with any configuration after that.&lt;/p&gt;    &lt;p&gt;2. We do not have to mess with setting up unc shares and deal with the mess.&amp;#160; It sounds like a silly thing but by getting away from the unc share we can also test our deployments from any machine and msdeploy is actually firewall friendly.&amp;#160; xcopy to a unc share is not firewall friendly which means that we cannot use it for all of our clients which means variations between our projects.&amp;#160; &lt;/p&gt;    &lt;p&gt;3. We use msdeploy as a mechanism to distribute our deployment packages and then remotely execute the packages.&amp;#160; This means I can have a single instance of our Continuous Integration server which reduces the number of places to maintain configuration.&amp;#160; That is a big win.&amp;#160; This also means the log files for all of the deployments can be tracked in a single place.&lt;/p&gt;    &lt;p&gt;4. Another benefit of using msdeploy to push our deployments means that I can easily setup new instances of a test configuration and push it to multiple servers without having to log into each machine.. This is good for efficiency.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt; Our use of MSDeploy now boils down to two steps.&amp;#160; Distribute and Execute.&amp;#160; We have some of our scripts in NAnt and we are in the process of migrating to PowerShell now that version 2.0 is available from the older operating systems.&amp;#160; Below is a sample of executing msdeploy from a NAnt script.&lt;/p&gt;  &lt;p&gt;Calling MsDeploy from Nant&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4912CCA3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_19E0E10C.png" width="1028" height="249" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;dirPath&lt;/strong&gt;&amp;#160; command tells MSDeploy to synchronize a directory from the source computer a target computer. This is a pretty easy command to understand.&lt;/p&gt;  &lt;p&gt;The second command is the &lt;strong&gt;runCommand&lt;/strong&gt; this command was added between the RC and 1.0 release of MSDeploy and I am so happy they added it. The run command is told to execute a command on the remote machine.&amp;#160; Since we are running installation scripts, they do not execute instantly and as a result the waitInterval and waitAttempts need to be specified so that the command does not timeout before it has completed running. other than that the output of the console application is piped back to the source computer.&amp;#160; The one caveat about the run command is that when it starts it runs from the C:\windows\system32 directory.&amp;#160; In order to work around this issue I have found that passing the directory of the command into the batch file that I run allows my batch files to first cd to that directory as its first step.&amp;#160; This is a pretty harmless thing to do and works pretty well.&lt;/p&gt;  &lt;p&gt;This is what a sample deployment batch files looks like.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;cd %1     &lt;br /&gt;rd ..\codeToDeploy\ /s /q      &lt;br /&gt;applicationNamePackage.exe -o..\CodeToDeploy\ -y      &lt;br /&gt;cd ..\CodeToDeploy\      &lt;br /&gt;cmd /c %systemroot%\system32\inetsrv\appcmd stop site applicationName_dev      &lt;br /&gt;iisreset      &lt;br /&gt;call dev.bat      &lt;br /&gt;cmd /c %systemroot%\system32\inetsrv\appcmd start site applicationName_dev&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This is pretty basic and does some IIS commands as well.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I am sure I left some information out, but I wanted to get a brain dump of our use of MSDeploy.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Long term I would like to see the use of PowerShell driving msdeploy and adding some configuration around each Server Role in an application and tie it to the servers needed for each environment.&amp;#160; I have started a project to put this together called psTrami but I have not put any of the code together yet, just some small spikes to prove it out.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;More to come sometime soon…..&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Using+MSDeploy+to+automate+your+Enterprise+Application+remote+deployments.&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f06%2fusing-msdeploy-to-automate-your-enterprise-application-remote-deployments.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f06%2fusing-msdeploy-to-automate-your-enterprise-application-remote-deployments.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29992" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/_nfNP-Tnt7k" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/CC.Net/default.aspx">CC.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+integration/default.aspx">continous integration</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Open+Source+Software/default.aspx">Open Source Software</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/MSDeploy/default.aspx">MSDeploy</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Deployment/default.aspx">Deployment</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/06/using-msdeploy-to-automate-your-enterprise-application-remote-deployments.aspx</feedburner:origLink></item><item><title>Automapper Auto Profile Registration.</title><link>http://feedproxy.google.com/~r/EricHexter/~3/yBJxCxOGC8Q/automapper-auto-profile-registration.aspx</link><pubDate>Thu, 05 Nov 2009 03:24:15 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:30035</guid><dc:creator>erichexter</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=30035</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/04/automapper-auto-profile-registration.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;On some of our projects we have been experimenting with smaller AutoMapper profiles.&amp;#160; The idea is that it is easier to digest a smaller profile. We have gone so far as creating a profile for each Domain object and handle all of the mappings to and from the domain object.&amp;#160; We are also trying out a Profile per scenario.&amp;#160; While these smaller profiles are easier to dig in and understand, the registration of them are a little painful.&amp;#160; So I put together a quick way to auto register all the profiles for automapper.&amp;#160; Below is the code to discover all the profiles in an assembly than register them with AutoMapper.&amp;#160; There is nothing fancy here and I could certainly spend more time making it better performing, but realistically this is startup code that runs once at application start up.&amp;#160; That being said I would rather focus performance optimization efforts on places that actually make a difference to the End User Experience. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is the sample.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_1C949FF2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_344BD758.png" width="1028" height="337" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It is important to know that we have full code coverage over our application including integration tests, so that if something were to break as a result of loading this in a non deterministic order, we would know before we commit our changes to source control. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is the code for the ForEach extension method, since I breezed over it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_322ED88F.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_3875AF1D.png" width="1028" height="169" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is a smaller post than I normally put together.. is this small of a post useful? &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Automapper+Auto+Profile+Registration.&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f04%2fautomapper-auto-profile-registration.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f04%2fautomapper-auto-profile-registration.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=30035" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/yBJxCxOGC8Q" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Open+Source+Software/default.aspx">Open Source Software</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/AutoMapper/default.aspx">AutoMapper</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/04/automapper-auto-profile-registration.aspx</feedburner:origLink></item><item><title>ASP.Net MVC Portable Area – Part 4 IoC framework support.</title><link>http://feedproxy.google.com/~r/EricHexter/~3/PKYYqEQSLMY/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx</link><pubDate>Wed, 04 Nov 2009 05:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29898</guid><dc:creator>erichexter</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29898</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/04/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx#comments</comments><description>&lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx"&gt;Part 1 – Introduction&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/02/asp-net-mvc-portable-areas-part-2.aspx"&gt;Part 2 – Sample Portable Area&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx"&gt;Part 3 – Using of a Portable Area&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Part 4 – Using an Inversion of Control Framework.&amp;#160; (this post) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Using an Inversion of Control Container is a common scenario that would be needed by a Message Handler.&amp;#160; The Bus has an extensibility point to create the handlers. The model for this should feel similar to the ControllerFactory extension point in the ASP.Net MVC framework.&amp;#160; The sample below shows how to create a Message Handler factory for the StructureMap framework.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_600BF09E.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_2CCFB735.png" width="644" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The SetMessageHandlerFactory method should be called once at application startup.&amp;#160;&amp;#160; Other than that … this is a pretty simple way to add a Dependency Injection Framework support to the Portable Area infrastructure.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This makes it pretty simple for your message handlers to use constructor injection to manage their dependencies.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=ASP.Net+MVC+Portable+Area+%e2%80%93+Part+4+IoC+framework+support.&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f04%2fasp-net-mvc-portable-area-part-4-ioc-framework-support.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f04%2fasp-net-mvc-portable-area-part-4-ioc-framework-support.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29898" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/PKYYqEQSLMY" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Portable+Area/default.aspx">Portable Area</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/04/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx</feedburner:origLink></item><item><title>ASP.Net MVC Portable Areas – Part 3</title><link>http://feedproxy.google.com/~r/EricHexter/~3/AzYKPWLtz68/asp-net-mvc-portable-areas-part-3.aspx</link><pubDate>Tue, 03 Nov 2009 17:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29897</guid><dc:creator>erichexter</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29897</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx#comments</comments><description>&lt;h1&gt;Using a Portable Area&lt;/h1&gt;
&lt;p&gt;This is the third part in a series about using a Portable Area (PA) using MvcContrib.&amp;nbsp; This sample walks through the Host Application side of consuming the Login Portable area.&amp;nbsp; This example demonstrates how&amp;nbsp;a portable area such as a login can send messages and recieve responses from the host application.&amp;nbsp; This allows the host application to control the core of the application and lets the Portable Area solve the User Interface portion of the Login.&amp;nbsp; While this is a pretty simple example it is important to look at the concept of what a Portable Area could solve.&amp;nbsp; A portable Area could just handling wiring up multiple user interface screens and deal with simple form validation while leaving a lot of from for the host application to control the parts that are important to the application.&amp;nbsp; Or a Portable Area could provide an entire self contained piece of functionality like a Blog engine, or mulit-instance forum.&amp;nbsp; There is a large spectrum for how much the Portable Area could provide.&amp;nbsp; This example focuses on an example where the Portable Area provides the UI and lets the host application own the domain logic.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx"&gt;Part 1 &amp;ndash; Introduction&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/02/asp-net-mvc-portable-areas-part-2.aspx"&gt;Part 2 &amp;ndash; Sample Portable Area&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Part 3 &amp;ndash; Using of a Portable Area&amp;nbsp; (this post) &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/04/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx"&gt;Part 4 &amp;ndash; Using an Inversion of Control Framework.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In order to use a Portable Area (PA), the following references need to be added to your MVC project: &lt;a target="_blank" href="http://www.mvccontrib.org"&gt;MvcContrib&lt;/a&gt; &amp;amp; the assembly of the Portable Area.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_77F3C39A.png"&gt;&lt;img height="218" width="244" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_3E70B3A3.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Wiring up the Portable Area to the application is done at startup.&amp;nbsp; Portable Areas use the message bus as a way to communicate between the PA and the application. The main method for integrating with a portable area is to register a Message Handler. The sample below demonstrates wiring up a LogAllMessagesObserver,&amp;nbsp;LoginHandler, and a ForgotPassword Handler&amp;nbsp;for the Login Portable Area.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The call to the InputBuilder.Bootstrap() is required to initialize the Embedded Resource view engine used by this Portable Area infrastructure.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_1D7D40FC.png"&gt;&lt;img height="289" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_14AD38B0.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Here is an example of an Observer message handler.&amp;nbsp; This handler simply logs the message to the debugger. This could be used to collect metrics about the system, or log messages to a loggin framework.&amp;nbsp; The idea of an observer is that it is looking at the base message and not modifying the state of the message.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_52C65361.png"&gt;&lt;img height="198" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_2AB3A442.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The Login Message Handler receives the login request and than sets the result object which is part of the contract that is specified by the LoginPortableArea from Part 2.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_02A0F523.png"&gt;&lt;img height="290" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_210B360C.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this example the main logic for login is still in a authentication service.&amp;nbsp; The handler is just used to wire up the message and response of the portable area to the host applications domain services.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Whats Next?&lt;/h2&gt;
&lt;p&gt;The constructor of the LoginHandler takes an IAuthenticationService as a dependency and my next post will walk through how an Inversion of Control container can be connected to the Bus to allow the framework of your choice to put your pieces together.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=ASP.Net+MVC+Portable+Areas+%e2%80%93+Part+3&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f03%2fasp-net-mvc-portable-areas-part-3.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f03%2fasp-net-mvc-portable-areas-part-3.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29897" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/AzYKPWLtz68" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Portable+Area/default.aspx">Portable Area</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx</feedburner:origLink></item><item><title>ASP.Net MVC Portable Areas – Part 2</title><link>http://feedproxy.google.com/~r/EricHexter/~3/MPRIpzOSGRY/asp-net-mvc-portable-areas-part-2.aspx</link><pubDate>Mon, 02 Nov 2009 17:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29877</guid><dc:creator>erichexter</dc:creator><slash:comments>11</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29877</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/02/asp-net-mvc-portable-areas-part-2.aspx#comments</comments><description>&lt;h1&gt;Sample Portable Area&lt;/h1&gt;
&lt;p&gt;This is the second part in a series about creating a Portable Area (PA) using MvcContrib&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx"&gt;Part 1 &amp;ndash; Introduction&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Part 2 &amp;ndash; Sample Portable Area (this post)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx"&gt;Part 3 &amp;ndash; Usage of a Portable Area&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/04/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx"&gt;Part 4 - IoC Framework Support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;To create a Portable Area, the first step is to create a separate class library project for the Portable Area.&amp;nbsp; The output assembly is the single file needed to add this functionality to applications which wish to consumer it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;The minimal references required for the Portable Area are shown below: &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_39B36C13.png"&gt;&lt;img height="393" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_7C43078B.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;While DataAnnotations is not required to build a PA, using DataAnnotations for Model validation makes distribution of the PA very easy, since the MVC2 DefaultModelBinder supports the DataAnnotations validation out of the box. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;If you choose a different validation framework than you would need to distribute those assemblies or possible IL Merge them into your PA.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The sample PA in the MvcContrib project is a Login Portable Area, this is a pretty simple example, but demonstrates how a PA and application can integrate.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This is also a piece of functionality that most applications need.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Below is the code listing and structure for the project.&amp;nbsp; It looks identical to a mulit-project ASP.Net MVC Area.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_27A72886.png"&gt;&lt;img height="385" width="318" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_0000AC5C.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The first difference between creating a Portable Area and a standard area from the files perspective is how the Views are registered with the project. The views Build Action should be changed from content to an &lt;a href="http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx"&gt;&lt;span style="color: #669966; mso-bidi-font-size: 11.0pt;"&gt;Embedded Resource&lt;/span&gt;&lt;/a&gt;. This allows the views to be embedded into the output assembly so that they view folders and files to not have to be manually copied into each application that uses it.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;Instead a special view engine will pull these views out of the assembly at run time and render them the same way that a physical view would be rendered.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_585A3031.png"&gt;&lt;img height="365" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_7E4FE087.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The second item that is needed to create a Portable Area is a specialized registration class for the that inherits from PortableAreaRegistration. This class provides an extended RegisterArea method that sends in the MVC AreaRegistrationContext and a IApplicationBus object to the method.&amp;nbsp; The IApplicationBus &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;is the mechanism&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;that a Portable Area uses to send messages to the hosting application during. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;The use of the bus during registration is not required, but it is available in case and specific start up logic is needed to correctly configure the Portable Area. &amp;nbsp;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The last line of the method show how the Portable Area registers the embedded views with the view engine, using the call to the RegisterTheViewsInTheEmmeddedViewEngine method.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;An important caveat around the setup of the Registration class is to make sure that the Registration class is sitting in the same Namespace as the controllers and views.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;If the Namespaces do not match the views will not be able to be located. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Since the namespace for the Embedded Resource views cannot be specified declaratively they are created using the Assemblies Default Namespace and the folder structure that they are stored in.&amp;nbsp; So keeping all of these properties consistent will make everything work.&amp;nbsp; If you change the default namespace of the project, you will need to update the namespace of your registration and controller classes.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_0998F4C5.png"&gt;&lt;img height="398" width="1028" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_68394F28.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The first call in this registration method sends a message to the hosting application.&amp;nbsp; This is a contrived example but it demonstrates sending a tracing message that can be used by an observer message handler to log the registration activity.&amp;nbsp; This tracing can be useful since the Portable Areas use the built in MVC registration mechanism for auto discovery and there is not a lot of visibility into the built in registration process. This example shows how a message can be sent between the PA and the hosting application.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_10F4B472.png"&gt;&lt;img height="335" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_2C2D0D73.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;The LoginController demonstrates the functionality needed to handle displaying the login form and then handling the form post. There are two Actions in the controller, one to render a Login View and a second Action to process the form post and redirect the user on success or , in the case of a login failure, display the login error messages to the user.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_35A5CBE9.png"&gt;&lt;img height="428" width="1028" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_2937A8C0.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The message bus is the main mechanism for communicating between a portable area and the hosting application.&amp;nbsp;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;This is a very simplistic mechanism that allows the Portable Areas to communicate with the hosting application in a synchronous manner. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;For some scenarios, like when the area should not implement its own database, the host application can own how the domain model is persisted in data storage and the Portable Area can worry about handling the multi-page user interface and other user interface concerns like validating simple data types.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;The messages that are passed to the Bus are shown below.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_38F73DC4.png"&gt;&lt;img height="172" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_29E05EEA.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;The LoginInput represents the data that is collected from the Login screen. It is using the built in &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;DataAnnotations attributes to handle the simple validation rules.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_7DC361F8.png"&gt;&lt;img height="220" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_484A9FD3.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="line-height: 115%; font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;The result object is used to determine if the credentials were valid for the host application and are then used to either display the error message or redirect to a protected page. Since the LoginInputMessage is passed to the bus with a reference, the handlers in the host application can change the Result object's state and the portable area can than access the Result and determine the correct logic to perform given that result.&amp;nbsp; The implementation for the handlers will be in the next post in this series.&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_7C129624.png"&gt;&lt;img height="253" width="644" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_22747970.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-family: 'Trebuchet MS','sans-serif'; font-size: 10.5pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman';"&gt;The Index view for the login uses the MvcContrib Input Builders to render a standard form to the page.&amp;nbsp; The use of the Input Builder allows an host application to override any of the html mark up using the Input Builder partials.&amp;nbsp; This means that the Portable Area and Input Builders play very nicely with each other.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4C0844A3.png"&gt;&lt;img height="203" width="1028" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_51E2E83C.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;This is what the view looks like in a browser.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4912DFF0.png"&gt;&lt;img height="772" width="899" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_072BFAA2.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;This is the validation errors that are handled by the Portable Area, using the MVC 2 default model binder.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_0A7D6C7D.png"&gt;&lt;img height="772" width="899" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_1D51F027.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This shows an error message that is passed back from the resulting application. Other rules could be applied as well.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_2B60B957.png"&gt;&lt;img height="772" width="899" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_57310D46.png" alt="image" border="0" title="image" style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This is the approach for creating a Portable Area (PA) using the MvcContrib Portable Area feature.&amp;nbsp; Let me know what you think about this approach, we tried to stay with the simplest approach that could possible work, and focused on making it easy to both develop and consume the Portable Areas.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Please leave your comments on what you think of the approach.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=ASP.Net+MVC+Portable+Areas+%e2%80%93+Part+2&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f02%2fasp-net-mvc-portable-areas-part-2.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f02%2fasp-net-mvc-portable-areas-part-2.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29877" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/MPRIpzOSGRY" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvc/default.aspx">mvc</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvccontrib/default.aspx">mvccontrib</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Portable+Area/default.aspx">Portable Area</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/02/asp-net-mvc-portable-areas-part-2.aspx</feedburner:origLink></item><item><title>ASP.Net MVC Portable Areas via MvcContrib</title><link>http://feedproxy.google.com/~r/EricHexter/~3/dvbhb7aVIhM/asp-net-mvc-portable-areas-via-mvccontrib.aspx</link><pubDate>Sun, 01 Nov 2009 18:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29649</guid><dc:creator>erichexter</dc:creator><slash:comments>19</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29649</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx#comments</comments><description>&lt;p&gt;This is a multi post series on ASP.Net MVC Portable Areas&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1 &amp;ndash; Introduction &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/02/asp-net-mvc-portable-areas-part-2.aspx"&gt;Part 2 &amp;ndash; Sample Portable Area&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/03/asp-net-mvc-portable-areas-part-3.aspx"&gt;Part 3 &amp;ndash; Usage of a Portable Area&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/11/04/asp-net-mvc-portable-area-part-4-ioc-framework-support.aspx"&gt;Part 4 - IoC framework support&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2&gt;What is a Portable Area?&lt;/h2&gt;
&lt;p&gt;A Portable Area is a set of reusable multi page functionality can be dropped into an application to provide rich functionality without having to custom build functionality that is literally the same in every application. This could be considered a plug-in or add-in type of functionality.&amp;nbsp; The &lt;strong&gt;portable &lt;/strong&gt;portion of this approach is that the area can be distributed as a single assembly rather than an assembly and a host of other files, like views or other html assets that need to be managed and maintained over time.&amp;nbsp; By making a portable area totally self contained in a single assembly, this should allow for easier reuse and upgrades to the area.&amp;nbsp; The challenge for doing something like this has been how do you allow enough control over the User Interface by the application yet still allow the actual views to be packaged with the logic.&lt;/p&gt;
&lt;h2&gt;Why Now?&lt;/h2&gt;
&lt;p&gt;There has been some discussion in the past on the MvcContrib mailing list about creating an plug-in framework and plugins but I do not think we had enough of the pieces in place to do this properly.&amp;nbsp;&amp;nbsp; I believe that with MVC 2 we have those missing pieces figured out.&amp;nbsp; The first enabler is the inclusion of Areas into the MVC 2 feature set. This includes having the Area and Controller namespace become part of the route data which is used both for Controller/Action selection but this also flows down to the selection of a view. The second enabler is some of the work that came out of MvcContrib and the Input Builders.&amp;nbsp; While implementing that feature we came up with a way to pull views from an assembly as an embedded resource.&amp;nbsp; This with the ability to override the default view engine in a way that allows an application developer to place their own version of a view in a folder so that they have the option to change the view to their needs was huge.&amp;nbsp; The last enabler really comes from what we have learned from all of the SOA greats and see how frameworks like nServiceBus and MassTransit have demonstrated that a messaging approach for integration can keep our concerns separated.&lt;/p&gt;
&lt;p&gt;The other why now is that my company, &lt;a href="http://www.headspring.com"&gt;Headspring&lt;/a&gt;, has found that in order to make our practice more successful, we need the ability to drop in some of the essentials for an application, we would prefer to do this in a binary form that is easy to upgrade and does not leave us with copy and pasted code between our various projects.&amp;nbsp; We would like to see that if we learn something from one project that we have the potential to apply those learning's to projects that are still in flight. We all prefer that rather than waiting for the next project to start so that we can apply what we have learned to the new project.&amp;nbsp; This approach will be much better for us as developers and our client will benefit as well.&amp;nbsp; We could take the approach of working on this in a bubble but by putting this out for the community we can learn from every else and potentially help others in the process and raise the collective bar for the industry, in our own little way.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Logical View of a Portable Area&lt;/h2&gt;
&lt;p&gt;Below is a logic view of a Portable Area.&amp;nbsp; It shows how the &lt;span style="color: #80ff00;"&gt;Green block&lt;/span&gt; is an application.&amp;nbsp; Inside the application the blocks in &lt;span style="color: #004080;"&gt;dark blue&lt;/span&gt; are framework components in ASP.Net MVC 2 and MvcContrib.&amp;nbsp; These blocks provide some minimal framework support for registration view resolution and communication between the application and the portable area.&amp;nbsp; The light blue blocks represent code the developer create.&amp;nbsp; The code in the Portable Area is created by the Portable Area developer. The code in the application block is coded by&amp;hellip; you guessed it. The application developer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_176A60E0.png"&gt;&lt;img height="480" width="614" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_35686ED4.png" alt="image" border="0" title="image" style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Thanks for the Pictures but where is the code?&lt;/h2&gt;
&lt;p&gt;The code is currently available in the MvcContrib MVC 2 Branch.&amp;nbsp; You can get the latest binary from our (TeamCity/CodeBetter) build server here:&amp;nbsp; &lt;a href="http://teamcity.codebetter.com/guestAuth/repository/download/bt83/.lastSuccessful/MVCContrib.release.zip" title="http://teamcity.codebetter.com/guestAuth/repository/download/bt81/.lastPinned/MVCContrib.release.zip"&gt;http://teamcity.codebetter.com/guestAuth/repository/download/bt83/.lastSuccessful/MVCContrib.release.zip&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There is a sample application you can download here: &lt;a href="http://teamcity.codebetter.com/guestAuth/repository/download/bt83/.lastSuccessful/MVCContrib.Extras.release.zip" title="http://teamcity.codebetter.com/guestAuth/repository/download/bt83/.lastSuccessful/MVCContrib.Extras.release.zip"&gt;http://teamcity.codebetter.com/guestAuth/repository/download/bt83/.lastSuccessful/MVCContrib.Extras.release.zip&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;or from the code repository on GitHub:&amp;nbsp; &lt;a href="http://github.com/mvccontrib/MvcContrib/zipball/mvc2"&gt;Download the source as a zip&lt;/a&gt;.&amp;nbsp;&amp;nbsp;or &lt;a href="http://github.com/mvccontrib/MvcContrib/tree/mvc2"&gt;Fork it on GitHub&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=ASP.Net+MVC+Portable+Areas+via+MvcContrib&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f01%2fasp-net-mvc-portable-areas-via-mvccontrib.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f11%2f01%2fasp-net-mvc-portable-areas-via-mvccontrib.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29649" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/dvbhb7aVIhM" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvc/default.aspx">mvc</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvccontrib/default.aspx">mvccontrib</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/OSS/default.aspx">OSS</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Open+Source+Software/default.aspx">Open Source Software</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/11/01/asp-net-mvc-portable-areas-via-mvccontrib.aspx</feedburner:origLink></item><item><title>What I have been up to.</title><link>http://feedproxy.google.com/~r/EricHexter/~3/SNQkchDyEOQ/what-i-have-been-up-to.aspx</link><pubDate>Fri, 30 Oct 2009 03:36:02 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:29468</guid><dc:creator>erichexter</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=29468</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/10/29/what-i-have-been-up-to.aspx#comments</comments><description>&lt;p&gt;I have been pretty busy over the last few weeks. I just wanted to document what I have been doing.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_6BC1E25E.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_04517FAF.png" width="244" height="66" /&gt;&lt;/a&gt; I co-presented a free Advanced ASP.Net MVC half day with Jeffrey Palermo in Austin.&amp;#160; We had a good group of people show up to the Austin Microsoft office.&amp;#160; As I was preparing and presenting the session, it has become very obvious how much &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4ED8BD89.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 10px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_1555AD92.png" width="244" height="123" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I co-presented with &lt;a href="http://twitter.com/jacksonh"&gt;Jackson Harper&lt;/a&gt; from the Mono team at &lt;a href="http://monospace.us/"&gt;Monospace&lt;/a&gt; on Mono and the Web ASP .NET MVC, WebForms, Tools, and Servers.&amp;#160; In preparation for this session I took the code camp server, codebase and got it running with Mono on openSuse… yeah that Linux, That means that ASP.Net MVC, StructureMap, NHibernate, Automapper, Castle Validators, and MvcContrib all work on mono and are &lt;strong&gt;binary compatible&lt;/strong&gt;!&amp;#160; I was able to compile the application in Visual Studio and using the MonoVS plugin deploy a vm.&amp;#160; We also demonstrated ftping the bits to a Linode and Jackson showed how to get is all setup.&amp;#160; He even made a Virtual Appliance that when you start it up in vmware it will be running the application on the web server..&amp;#160; You can get the slides, link to the mono version of the source code, download the virtual appliance from the mini site that was setup for the talk. &lt;a href="http://MonoOnTheWeb.info"&gt;http://MonoOnTheWeb.info&lt;/a&gt; .&amp;#160; I thought it was pretty cool seeing all of this stuff work.&amp;#160; It was a great way to prove out that the application stack that Headspring uses can be deployed on a wide range of platforms which ultimately opens up our potential customer base.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_1B9C8420.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_141114B3.png" width="244" height="143" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I had the chance to present &lt;strong&gt;Database Change Management&lt;/strong&gt; as the InnoTech conference.&amp;#160; It was pretty good to get out and see a group of people that I have not seen before.&amp;#160; I sometimes feel like I am in the Austin .Net bubble so while I presented some code samples in .Net using SQL server I really tried to present the information as being agnositc of you database platform.&amp;#160; Good development techniques can transcend technology and platforms.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=What+I+have+been+up+to.&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f10%2f29%2fwhat-i-have-been-up-to.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f10%2f29%2fwhat-i-have-been-up-to.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=29468" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/SNQkchDyEOQ" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Community/default.aspx">Community</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/10/29/what-i-have-been-up-to.aspx</feedburner:origLink></item><item><title>Video of the Continuous Integration workshop</title><link>http://feedproxy.google.com/~r/EricHexter/~3/E8xuAtG130I/video-of-the-continuous-integration-workshop.aspx</link><pubDate>Fri, 18 Sep 2009 00:03:33 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24928</guid><dc:creator>erichexter</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24928</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/09/17/video-of-the-continuous-integration-workshop.aspx#comments</comments><description>&lt;p&gt;Early this week we&amp;#160; ( &lt;a href="http://jeffreypalermo.com"&gt;Jeffrey Palermo&lt;/a&gt; and I ) gave a &lt;a href="http://www.lostechies.com/blogs/hex/archive/2009/09/10/free-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx"&gt;Continuous Integration Workshop&lt;/a&gt; in Austin.&amp;#160; We were able to record the workshop and our company &lt;a href="http://Headspringsystems.com"&gt;Headspring Systems&lt;/a&gt; made the recordings available on their website. There is just under 3 hours of video covering the following topics:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;reducing risks using CI &lt;/li&gt;    &lt;li&gt;automated builds &lt;/li&gt;    &lt;li&gt;automated deployments &lt;/li&gt;    &lt;li&gt;building software at every change &lt;/li&gt;    &lt;li&gt;continuous database integration &lt;/li&gt;    &lt;li&gt;continuous testing &lt;/li&gt;    &lt;li&gt;continuous inspection &lt;/li&gt;    &lt;li&gt;Software Configuration Management (SCM)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;These are &lt;strong&gt;not&lt;/strong&gt; professional videos by any means, but there seemed to be some interest in hearing &lt;strong&gt;how we do ci&lt;/strong&gt;. I am personally excited that we have these videos because it will help me improve how I present this information in the future.&lt;/p&gt;  &lt;p&gt;You can view the &lt;strong&gt;videos &lt;/strong&gt;and &lt;strong&gt;download the slides &lt;/strong&gt;from here:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.headspringsystems.com/services/agile-training/continuous-integration-boot-camp/" href="http://www.headspringsystems.com/services/agile-training/continuous-integration-boot-camp/"&gt;http://www.headspringsystems.com/services/agile-training/continuous-integration-boot-camp/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Video+of+the+Continuous+Integration+workshop&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f17%2fvideo-of-the-continuous-integration-workshop.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f17%2fvideo-of-the-continuous-integration-workshop.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24928" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/E8xuAtG130I" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/agile/default.aspx">agile</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/subversion/default.aspx">subversion</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/testing/default.aspx">testing</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/CC.Net/default.aspx">CC.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+integration/default.aspx">continous integration</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+improvement/default.aspx">continous improvement</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Unittests/default.aspx">Unittests</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/09/17/video-of-the-continuous-integration-workshop.aspx</feedburner:origLink></item><item><title>Continuous Database Integration - video</title><link>http://feedproxy.google.com/~r/EricHexter/~3/1iY9gZz4Kso/continuous-database-integration-video.aspx</link><pubDate>Thu, 17 Sep 2009 19:50:53 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24919</guid><dc:creator>erichexter</dc:creator><slash:comments>8</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24919</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/09/17/continuous-database-integration-video.aspx#comments</comments><description>&lt;p&gt;At the continuous integration workshop &lt;a href="http://headspringsystems.com"&gt;Headspring Systems&lt;/a&gt; held in Austin this week one of the topics that we covered was Database Integration. We are still in the process of publishing the videos of the entire workshop but I thought I would publish this snippet (30 minutes) that talks about how &lt;strong&gt;We Do Database Migrations&lt;/strong&gt;.&amp;#160; &lt;a href="http://jeffreypalermo.com/"&gt;Jeffrey Palermo&lt;/a&gt; and I did this workshop and had a great time doing it. This demonstrates how to use the &lt;strong&gt;Tarantino&lt;/strong&gt; toolset.&lt;/p&gt;  &lt;p&gt;I hope&amp;#160; this is useful and would love to hear some feedback about what you like or hate about this approach.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;object width="640" height="498"&gt; &lt;param name="movie" value="http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/flvplayer.swf"&gt;&lt;/param&gt; &lt;param name="quality" value="high"&gt;&lt;/param&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;/param&gt; &lt;param name="flashVars" value="thumb=http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/FirstFrame.jpg&amp;amp;containerwidth=640&amp;amp;containerheight=498&amp;amp;content=http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/TarantinoDatabaseChangeManagement.mp4"&gt;&lt;/param&gt; &lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt; &lt;param name="scale" value="showall"&gt;&lt;/param&gt; &lt;param name="allowScriptAccess" value="always"&gt;&lt;/param&gt; &lt;param name="base" value="http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/"&gt;&lt;/param&gt;  &lt;embed src="http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/flvplayer.swf" quality="high" bgcolor="#FFFFFF" width="640" height="498" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/FirstFrame.jpg&amp;containerwidth=640&amp;containerheight=498&amp;content=http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/TarantinoDatabaseChangeManagement.mp4" allowFullScreen="true" base="http://content.screencast.com/users/HeadspringSystems/folders/Community/media/8fcd55fe-a0b5-474d-8cc9-1f955e5dda9d/" scale="showall"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Continuous+Database+Integration+-+video&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f17%2fcontinuous-database-integration-video.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f17%2fcontinuous-database-integration-video.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24919" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/1iY9gZz4Kso" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/agile/default.aspx">agile</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+integration/default.aspx">continous integration</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+improvement/default.aspx">continous improvement</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tarantino/default.aspx">Tarantino</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/09/17/continuous-database-integration-video.aspx</feedburner:origLink></item><item><title>Video of the David Ebbo presenting T4MVC to the Community For MVC virtual user group</title><link>http://feedproxy.google.com/~r/EricHexter/~3/_q3cqRtjaSg/video-of-the-david-ebbo-presenting-t4mvc-to-the-community-for-mvc-virtual-user-group.aspx</link><pubDate>Thu, 17 Sep 2009 03:46:15 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24902</guid><dc:creator>erichexter</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24902</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/09/16/video-of-the-david-ebbo-presenting-t4mvc-to-the-community-for-mvc-virtual-user-group.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/davidebb/"&gt;David Ebbo&lt;/a&gt; presented to the &lt;a href="http://communityformvc.net"&gt;Community For MVC&lt;/a&gt; group today.&amp;#160; The topic &lt;a href="http://blogs.msdn.com/davidebb/archive/tags/T4MVC/default.aspx"&gt;T4MVC&lt;/a&gt; which is a project that David developed as a way to eliminate the magic string in Views and Controllers in the ASP.Net MVC framework.&amp;#160; David walks through a sample of adding his code generator code to the &lt;a href="http://nerddinner.com/"&gt;Nerd Dinner&lt;/a&gt; application and walks through removing the magic strings and replacing them with strongly typed replacements.&amp;#160; I like his approach because it solves a pain that I have when using a Lamda based approach to eliminating the strings in views.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;David does a great job walking through what the problem is and than goes through each of these and shows how his approach solves this problem. The meeting was held in Live meeting and we are experimenting with this as a way to let developers interested in advanced topics get a chance to hear new approaches and ask questions live.&amp;#160; The video missed the first minute or two of the presentation and we had some technical difficulty near the end so I edited the video to keep the video clean.&amp;#160; enjoy!   &lt;br /&gt;&lt;/p&gt; &lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="545" height="451" id="viddler_7294acb5"&gt;&lt;param name="movie" value="http://www.viddler.com/player/7294acb5/" /&gt;&lt;param name="allowScriptAccess" value="always" /&gt;&lt;param name="allowFullScreen" value="true" /&gt;&lt;embed src="http://www.viddler.com/player/7294acb5/" width="545" height="451" type="application/x-shockwave-flash" allowScriptAccess="always" allowFullScreen="true" name="viddler_7294acb5"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If you are interested in the Asp.Net MVC framework I encourage you to check out &lt;a href="http://CommunityForMVC.Net"&gt;Community For MVC&lt;/a&gt; for future presentations. This group is focused on delivering advanced topics that help with developing solutions on the ASP.Net MVC framework.&amp;#160;&amp;#160;&amp;#160; There is a mailing list on the website and that is the best way to get notifications of upcoming meetings.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Video+of+the+David+Ebbo+presenting+T4MVC+to+the+Community+For+MVC+virtual+user+group&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f16%2fvideo-of-the-david-ebbo-presenting-t4mvc-to-the-community-for-mvc-virtual-user-group.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f16%2fvideo-of-the-david-ebbo-presenting-t4mvc-to-the-community-for-mvc-virtual-user-group.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24902" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/_q3cqRtjaSg" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvc/default.aspx">mvc</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Community/default.aspx">Community</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Usergroup/default.aspx">Usergroup</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/c4mvc/default.aspx">c4mvc</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/09/16/video-of-the-david-ebbo-presenting-t4mvc-to-the-community-for-mvc-virtual-user-group.aspx</feedburner:origLink></item><item><title>Community For MVC – Virtual Meeting – Wednesday 9/16/2009 12:00 - 1:00 PM CST ; T4MVC presented by David Ebbo</title><link>http://feedproxy.google.com/~r/EricHexter/~3/OqNT1hiGvxw/community-for-mvc-virtual-meeting-wednesday-9-16-2009-12-00-1-00-pm-cst-t4mvc-presented-by-david-ebbo.aspx</link><pubDate>Mon, 14 Sep 2009 18:16:19 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24830</guid><dc:creator>erichexter</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24830</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/09/14/community-for-mvc-virtual-meeting-wednesday-9-16-2009-12-00-1-00-pm-cst-t4mvc-presented-by-david-ebbo.aspx#comments</comments><description>&lt;p&gt;Link to the meeting information here: &lt;a href="http://bit.ly/uj9VA"&gt;http://bit.ly/uj9VA&lt;/a&gt;&amp;#160; Please feel free to share this link on twitter, blogs, ect.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;David Ebbo on the T4MVC project&amp;#160; - Wednesday 9/16/2009 12:00 - 1:00 PM CST     &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;Join the meeting here&lt;/strong&gt;: &lt;a href="http://Meeting.c4mvc.net"&gt;http://Meeting.c4mvc.net&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Bio: &lt;/strong&gt;David is an architect on the ASP.NET team, which he was a part of since its very beginning in 1998. He has worked on many areas of the product, though his particular focus has been on the compilation system. More recently he has been working on ASP.NET Dynamic Data, and exciting new feature which aims to simplify the creation of data-driven web sites.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Topic:&lt;/strong&gt; David spent some time looking at how to reduce the noise in MVC views using some code generation technologies built into Visual Studio. He did this work and published through a series of blog posts.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Homework:&amp;#160; &lt;/strong&gt;Read his first article to understand the problem he was trying to solve. The solution proposed in the first blog post changed dramatically so please read on to the additional posts. &lt;a href="http://blogs.msdn.com/davidebb/archive/2009/06/01/a-buildprovider-to-simplify-your-asp-net-mvc-action-links.aspx"&gt;http://blogs.msdn.com/davidebb/archive/2009/06/01/a-buildprovider-to-simplify-your-asp-net-mvc-action-links.aspx&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;This is a list of the most up to date articles to see how this work has evolved: &lt;a href="http://blogs.msdn.com/davidebb/archive/tags/T4MVC/default.aspx"&gt;http://blogs.msdn.com/davidebb/archive/tags/T4MVC/default.aspx&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;You can download the T4MVC bits from here: http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=24471&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Community+For+MVC+%e2%80%93+Virtual+Meeting+%e2%80%93+Wednesday+9%2f16%2f2009+12%3a00+-+1%3a00+PM+CST+%3b+T4MVC+presented+by+David+Ebbo&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f14%2fcommunity-for-mvc-virtual-meeting-wednesday-9-16-2009-12-00-1-00-pm-cst-t4mvc-presented-by-david-ebbo.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f14%2fcommunity-for-mvc-virtual-meeting-wednesday-9-16-2009-12-00-1-00-pm-cst-t4mvc-presented-by-david-ebbo.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24830" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/OqNT1hiGvxw" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvc/default.aspx">mvc</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Community/default.aspx">Community</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Usergroup/default.aspx">Usergroup</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/c4mvc/default.aspx">c4mvc</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/09/14/community-for-mvc-virtual-meeting-wednesday-9-16-2009-12-00-1-00-pm-cst-t4mvc-presented-by-david-ebbo.aspx</feedburner:origLink></item><item><title>Free Continuous Integration Workshop in Austin Tuesday Sept 15th 1pm-5pm</title><link>http://feedproxy.google.com/~r/EricHexter/~3/2bMLo-moE90/free-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx</link><pubDate>Thu, 10 Sep 2009 21:32:15 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24708</guid><dc:creator>erichexter</dc:creator><slash:comments>13</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24708</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/09/10/free-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I am doing a Continuous Integration Workshop next Tuesday.&amp;#160; The admission is free and will be held at the Microsoft Office.&amp;#160; &lt;/p&gt;  &lt;p&gt;To register go here: &lt;a title="http://www.headspringsystems.com/services/agile-training/continuous-integration/" href="http://www.headspringsystems.com/services/agile-training/continuous-integration/"&gt;http://www.headspringsystems.com/services/agile-training/continuous-integration/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This will cover the basics of what continuous integration is as well as the the advanced techniques like Database Configuration Management / Continuous Database Integration.&amp;#160; At Headspring we implement CI on all of our projects and we can provide some perspective on applying CI to .Net applications.&amp;#160; If there is anything of particular interest you would like to see at the workshop please feel free to comment below.&lt;/p&gt;  &lt;p&gt;If you cannot attend this workshop I encourage you to read this book: &lt;em&gt;&lt;a href="http://www.amazon.com/gp/product/0321336380"&gt;Continuous Integration: Improving Software Quality and Reducing Risk&lt;/a&gt;&lt;/em&gt; and have a conversation with me.&lt;/p&gt;  &lt;p&gt;See you then.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Free+Continuous+Integration+Workshop+in+Austin+Tuesday+Sept+15th+1pm-5pm&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f10%2ffree-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f09%2f10%2ffree-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24708" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/2bMLo-moE90" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/agile/default.aspx">agile</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/testing/default.aspx">testing</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/CC.Net/default.aspx">CC.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+integration/default.aspx">continous integration</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/continous+improvement/default.aspx">continous improvement</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/09/10/free-continuous-integration-workshop-in-austin-tuesday-sept-15th-1pm-5pm.aspx</feedburner:origLink></item><item><title>Breaking changes in Ncover 3.0 integration with Cruise Control .Net</title><link>http://feedproxy.google.com/~r/EricHexter/~3/g5W1yym8yq4/breaking-changes-in-ncover-3-0-integration-with-cruise-control-net.aspx</link><pubDate>Mon, 31 Aug 2009 20:31:02 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24421</guid><dc:creator>erichexter</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24421</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/08/31/breaking-changes-in-ncover-3-0-integration-with-cruise-control-net.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There were some changes to the &lt;a href="http://ncover.com"&gt;nCover&lt;/a&gt; xml reports for code coverage which will break your existing integration with &lt;a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET"&gt;cruise control .net&lt;/a&gt;. Specifically if you use the Statistics feature of Cruise Control which is one of the best features it provides IMHO, the xml nodes have changed and ncover no longer provides the total percent of coverage of the project as a single xml Node (or attribute).&amp;#160; This means that you need to do a little more work..(not much) in order to have your code coverage collected as part of the ongoing statistics inside cruise control.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;You can view the statistics through this link on the project page inside the CCNet Web dashboard.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_2E95A661.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_62C9CFA7.png" width="665" height="403" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The coverage is not being collected with the new version of ncover…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_2946BFB0.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_08BF7FFE.png" width="535" height="556" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is the ugly side of Cruise Control .Net.. The xml configuration.&amp;#160; I know it is ugly and painful to deal with… The line underlined is the new xpath selection for code coverage.&lt;/p&gt;  &lt;p&gt;&amp;lt;statistics &amp;gt;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;statisticList&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;font color="#ff0000"&gt;&lt;strong&gt;statistic&lt;/strong&gt;&lt;/font&gt; name=&amp;quot;Coverage&amp;quot;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xpath=&amp;quot; &lt;strong&gt;&lt;font color="#ff0000" size="4"&gt;(&lt;/font&gt;&lt;/strong&gt;&lt;a&gt;&lt;font color="#ff0000" size="4"&gt;&lt;strong&gt;//trendcoveragedata/stats/@vsp&lt;/strong&gt;&lt;/font&gt;&lt;/a&gt;&lt;font size="4"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt; div ( //trendcoveragedata/stats/@vsp + //trendcoveragedata/stats/@usp ) ) * 100&lt;/strong&gt; &lt;/font&gt;&lt;/font&gt;&amp;quot;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; generateGraph=&amp;quot;true&amp;quot;/&amp;gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; …    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/statisticList&amp;gt;    &lt;br /&gt;&amp;lt;/statistics&amp;gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The old xml node for selecting the coverage was a &lt;strong&gt;firstMatch&lt;/strong&gt; element, that must now be a &lt;strong&gt;statistic&lt;/strong&gt; element.&amp;#160; The old xPath must be replaced with this horrible statement which calculates the percentage of code coverage for the project.&amp;#160; It helps to know that &lt;strong&gt;VSP&lt;/strong&gt; = &lt;strong&gt;Visited Sequence Point &lt;/strong&gt;and &lt;strong&gt;USP= Unvisited Sequence Point.&lt;/strong&gt;&amp;#160; Once you know that the rest falls into place.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Once the data is collected it falls into place and shows up in the trend chart….&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_5A65FA50.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_72F597A0.png" width="815" height="453" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Breaking+changes+in+Ncover+3.0+integration+with+Cruise+Control+.Net&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f31%2fbreaking-changes-in-ncover-3-0-integration-with-cruise-control-net.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f31%2fbreaking-changes-in-ncover-3-0-integration-with-cruise-control-net.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24421" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/g5W1yym8yq4" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/agile/default.aspx">agile</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/testing/default.aspx">testing</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/CC.Net/default.aspx">CC.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/OSS/default.aspx">OSS</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/08/31/breaking-changes-in-ncover-3-0-integration-with-cruise-control-net.aspx</feedburner:origLink></item><item><title>Windows 7 Virtual PC FTW (For The Win) for virtual workstation development</title><link>http://feedproxy.google.com/~r/EricHexter/~3/WlJ3jMujaMM/windows-7-virtual-pc-ftw-for-the-win-for-virtual-workstation-development.aspx</link><pubDate>Tue, 25 Aug 2009 12:00:00 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:23962</guid><dc:creator>erichexter</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=23962</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/08/25/windows-7-virtual-pc-ftw-for-the-win-for-virtual-workstation-development.aspx#comments</comments><description>&lt;p&gt;I have constantly fought both Virtual PC and VM Workstation when working on virtual machines for development purposes. While VMWare had the features I liked it also had a price tag and a rather smug attitude. I usually ended up having to use the free version of VMWare which was crippled or Virtual PC which was not much better. Both were missing features that I wanted.&lt;/p&gt;  &lt;p&gt;Now that I am using Windows 7 on my developer laptop I figured I would put the Virtual PC through its paces and see if they finally solved my pain points. At this point is has been over a week and I am sold on &lt;strong&gt;Win 7 and virtual pc&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;1. Removed the annoying system tray application.&lt;/h2&gt;  &lt;p&gt; I know it is pretty nit picky but I just bothered me that I needed to run that little system tray application.&amp;#160; That is gone now and when you go to your Virtual Machines it shows you all of them and the location that they are running from windows explorer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_1F20F2E9.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_6FEF0751.png" width="859" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;2. Support for my USB devices&lt;/h2&gt;  &lt;p&gt;One of the uses for my Virtual PCs is to have a virtual machine that works with some of my devices like video camera or x10 that I want to work on a moments notice after I repave a machine.&amp;#160; Virtual PC did not support this so I had to do this in VMWare before. See the USB menu and the Attach menu items below.   &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4A18E0EE.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_7B381B8E.png" width="664" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_596C42FD.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_5F46E696.png" width="658" height="211" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;3. Connect to the Network over my Wireless Connection&lt;/h2&gt;  &lt;p&gt;This one was a real pain to deal with. VM Workstation could do this out of the box. Virtual PC would not. There was a work around where you could install a Loopback adaptor on your host machine and do some route commands to make the network work properly but it was a pain and not portable.&amp;#160; No when I teach the Headspring Agile Bootcamp or other classes I can share the main setup for our Continuous Integration server over our wireless network. This makes it real easy to start the class and run this virtual machine from my machine or say copy it over to a machine on the network. Since we teach the class at different venues having this different options really help.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_0946E4BF.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_54C61276.png" width="665" height="417" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;4. Access local drives&lt;/h2&gt;  &lt;p&gt;This seems like a pretty basic requirement but before Virtual PC had it but the free version of VM ware did not have it. The work around was to map a network drive but it was so slow.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_002A3371.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_1E284165.png" width="672" height="422" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&lt;strong&gt;What do you like or hate about Virtual PC?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=Windows+7+Virtual+PC+FTW+(For+The+Win)+for+virtual+workstation+development&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f25%2fwindows-7-virtual-pc-ftw-for-the-win-for-virtual-workstation-development.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f25%2fwindows-7-virtual-pc-ftw-for-the-win-for-virtual-workstation-development.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=23962" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/WlJ3jMujaMM" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/.Net/default.aspx">.Net</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Tools/default.aspx">Tools</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Virtual+Machines/default.aspx">Virtual Machines</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/08/25/windows-7-virtual-pc-ftw-for-the-win-for-virtual-workstation-development.aspx</feedburner:origLink></item><item><title>MvcContrib source code has moved to GitHub</title><link>http://feedproxy.google.com/~r/EricHexter/~3/VXh7rBKpWiQ/mvccontrib-source-code-has-moved-to-github.aspx</link><pubDate>Sun, 23 Aug 2009 14:20:58 GMT</pubDate><guid isPermaLink="false">ded273ab-9e87-4979-8222-e4e2e46f1b46:24009</guid><dc:creator>erichexter</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://www.lostechies.com/blogs/hex/rsscomments.aspx?PostID=24009</wfw:commentRss><comments>http://www.lostechies.com/blogs/hex/archive/2009/08/23/mvccontrib-source-code-has-moved-to-github.aspx#comments</comments><description>&lt;p&gt;We recently moved the MvcContrib projects source code over to GitHub.&amp;#160; We are hoping that the ease of creating forks and pulling them back into the trunk will allow for more contributions to the project.&amp;#160; I know that GIT seems to be a source control system that few developers in the .Net space seem to know about but Jeremy Skinner created a great &lt;a href="http://mvccontrib.github.com/MvcContrib/"&gt;tutorial&lt;/a&gt; specifically for the MvcContrib project.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here are the sections of the tutorial&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_0D2A23E8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_4C1BA483.png" width="1028" height="363" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Continuous Integration is running on the Codebetter TeamCity server.&amp;#160; Codebetter and Jetbrains have teamed up and are providing free build server for opensource projects.&amp;#160; Below is the MvcContrib builds, we currently have 3 builds running.. the old Subversion source. the new Git Hub trunk, and a branch on GitHub that is compiled against the MVC 2 ctp. If you want to download the binaries you can do so by accessing the artifacts from the build server.&amp;#160; When you go to the team city server it will prompt you for a login. Select the Login as Guest option.&lt;/p&gt;  &lt;p&gt;The build server is located here &lt;a title="http://teamcity.codebetter.com/project.html?projectId=project10" href="http://teamcity.codebetter.com/project.html?projectId=project10"&gt;http://teamcity.codebetter.com/project.html?projectId=project10&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_4A6AD8AF.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.lostechies.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/hex/image_5F00_thumb_5F00_5A96A0A8.png" width="1028" height="452" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The MvcContrib home page is still located here:&amp;#160; &lt;a href="http://MvcContrib.org"&gt;http://MvcContrib.org&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;a href="http://www.dotnetkicks.com/kick/?title=MvcContrib+source+code+has+moved+to+GitHub&amp;url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f23%2fmvccontrib-source-code-has-moved-to-github.aspx"&gt;&lt;img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.lostechies.com%2fblogs%2fhex%2farchive%2f2009%2f08%2f23%2fmvccontrib-source-code-has-moved-to-github.aspx" border="0" alt="Kick It on DotNetKicks.com" /&gt;&lt;/a&gt;&lt;img src="http://www.lostechies.com/aggbug.aspx?PostID=24009" width="1" height="1"&gt;&lt;img src="http://feeds.feedburner.com/~r/EricHexter/~4/VXh7rBKpWiQ" height="1" width="1"/&gt;</description><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvc/default.aspx">mvc</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/mvccontrib/default.aspx">mvccontrib</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Asp.Net+MVC/default.aspx">Asp.Net MVC</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/OSS/default.aspx">OSS</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/Open+Source+Software/default.aspx">Open Source Software</category><category domain="http://www.lostechies.com/blogs/hex/archive/tags/GIT/default.aspx">GIT</category><feedburner:origLink>http://www.lostechies.com/blogs/hex/archive/2009/08/23/mvccontrib-source-code-has-moved-to-github.aspx</feedburner:origLink></item></channel></rss>
