﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Fingerfuel's Technology Blogs</title>
    <description>Living on the bleeding edge for the last couple of decades, we've seen this industry grow from the time before 'Crossing the Chasm' (go ahead...google it!), to IBM vs. Microsoft (that's history, eh?), to Macromedia Director and Shockwave, to Java, to ASP.NET and AJAX and Web 2.0.
&lt;/br&gt;&lt;/br&gt;
The purpose of this blog is to offer my two cents on the industry.  We want to offer help so others won't repeat the mistakes we've all made in choosing the technology which will be successful, and how to implement them.</description>
    <link>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/BlogId/1/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>andyhock@ewriters.org</managingEditor>
    <webMaster>webmaster@fingerfuel.com</webMaster>
    <pubDate>Sun, 01 Aug 2010 02:13:32 GMT</pubDate>
    <lastBuildDate>Sun, 01 Aug 2010 02:13:32 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.4.0.39853</generator>
    <item>
      <title>Continuous Integration and MSBuild In An Enterprise Environment</title>
      <description>&lt;p&gt;I'd been tasked with creating a one-click continuous build, using CruiseControl.NET for a client's DotNetNuke applications.  Since it's a Microsoft shop, I decided to architect the solution using MSBuild instead of NAnt.  Since the client has an enterprise license for Sourcegear Vault, we didn't have a choice for source-control.  Personally, I consider Subversion a better product.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;First thing to do: buy a book!  There aren't many choices available.  The best reviewed of them is &lt;a target="_blank" href="http://www.amazon.com/Deploying-NET-Applications-Learning-ClickOnce/dp/1590596528/"&gt;www.amazon.com/Deploying .NET Applications Using MSBuild&lt;/a&gt;, which I would rate highly except for the pathetic index. Why people publish what are essentially &lt;strong&gt;reference books&lt;/strong&gt; and make it impossible to find anything is a question for the publishing gods.  Suffice to say that if you ever get a book published, demand to see the index before you allow it to go to print, because in our world, a good index is the difference between an five-star and a two-star review.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Then, the google research.  There is a paucity of information available on the web for enterprise-based continuous integration (CI).  And I found no information at all on dealing with CI for web application frameworks like DotNetNuke.  More imposing was this lack in the MSBuild world.  It seems that most published MSBuild CI implementations are for desktop-based applications. In an enterprise world, one would have to multiple this 'one application MSBuild' task by a hundred or more, never mind the added complexity of web-based applications.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;There were a number of issues to resolve in creating our one-click build work for a framework-based web application:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;We considered it imperative that the build include Unit Testing, intensive Code Analysis and also automated API document publishing, using the comments we ask our programmers to include in their objects.  To accomplish this, we decided on &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=3389F7E4-0E55-4A4D-BC74-4AEABB17997B&amp;displaylang=en"&gt;FxCop&lt;/a&gt;, &lt;a target="_blank" href="http://www.ncover.com/"&gt;NCover&lt;/a&gt; and &lt;a target="_blank" href="http://www.ndepend.com/"&gt;NDepend&lt;/a&gt; for code analysis and metrics, and &lt;a target="_blank" href="http://www.codeplex.com/SHFB"&gt;Sandcastle Help File Builder&lt;/a&gt;.
    &lt;p&gt; &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;The elegant way to create one-click DotNetNuke deployment builds meant our DotNetNuke module build process needed to:&lt;br /&gt;
    &lt;ul&gt;
        &lt;li&gt;automatically update the version info,&lt;/li&gt;
        &lt;li&gt;create the .dnn file,&lt;/li&gt;
        &lt;li&gt;zip up both the dnn module and the source,&lt;/li&gt;
        &lt;li&gt;deploy the modules to the website on a successful build (Compile -&gt; Unit Test -&gt; Code Metrics and Analysis -&gt; API Document Publishing),&lt;/li&gt;
        &lt;li&gt;and automatic installation of the modules onto the web application.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;br /&gt;
    To accomplish this, I needed to create a custom Visual Studio Project Template.  The template would be used when compiling our DNN modules, and also when building and deploying them on our build server.
    &lt;p&gt; &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;While Sourcegear claims to be 'highly committed' to Visual Studio, in the three plus years since Microsoft announced MSBuild, they have yet to release any MSBuild tasks for Vault.  In fact, though there are requests for this feature on their support forums for this feature, they refer people to an unsupported third party site's MSBuild conversion of their NAnt customt tasks--a zip file which no longer exists.  If we wanted a Microsoft solution, we'd have to write any custom MSBuild tasks for Vault ourselves.
    &lt;p&gt; &lt;/p&gt;
    &lt;/li&gt;
    &lt;li&gt;Since we've committed to using MSBuild, we needed to decide if we would implement a solution-based, or a project-based build.  We decided on a process that used Visual Studio solutions (an 'all' solution, a 'notests' solution and a 'unittest' solution).  While this required our buildmaster to maintain three solutions for each web application, if we'd gone with a project-based solution, the buildmaster would still have to be informed of new projects to update the build.  &lt;br /&gt;
    &lt;br /&gt;
    Because the client wanted control over new DotNetNuke modules, the buildmaster is informed of a need for a new module, creates the module using the custom Visual Studio template, and adds it to source-control.  Programmers can then check out the module project and complete the coding and unit tests.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;To implement the CruiseControl script, since we didn't want to write a different build script for each CC.NET project, we used the client enterprise naming conventions to create solution names from the company name, subsystem name, application name and framework.  Assuming the following:&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Company Acronym = "LCS",&lt;/p&gt;
&lt;p&gt;Subsystem Acronym = "SIS",&lt;/p&gt;
&lt;p&gt;Application Name = "Store", and&lt;/p&gt;
&lt;p&gt;Framework Name = "DNN",&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;then the solutions to use in the build script (dependent on if we wanted to build the modules or the unit tests), would result in the MSBuild script building the LCS.SIS.Store.DNN.NoTests.sln and LCS.SIS.Store.DNN.UnitTests.sln solutions.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;What I want to do is walk next-generation buildmasters through the design steps of how we architected continuous integration of web applications in an enterprise environment, so you can understand the design considerations and thus make an informed decision on how you would implement CI in your enterprise.  In our next article we'll start by discussing how we divided up the CruiseControl.NET projects.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;We welcome any comments you have concerning CI in an enterprise, especially any experiences you've had.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
      <link>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/18/Default.aspx</link>
      <author>andyhock@ewriters.org</author>
      <comments>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/18/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.fingerfuel.com/Default.aspx?tabid=69&amp;EntryID=18</guid>
      <pubDate>Thu, 17 Apr 2008 10:36:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.fingerfuel.com/DesktopModules/Blog/Trackback.aspx?id=18</trackback:ping>
    </item>
    <item>
      <title>How to add a DotNetKicks KickIt icon to the DotNetNuke open-source Blog module.</title>
      <description>&lt;p&gt;How to add a KickIt icon to the&amp;#160; DotNetNuke Blog module tutorial, examples, DNN&lt;/p&gt;</description>
      <link>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/14/Default.aspx</link>
      <author>andyhock@ewriters.org</author>
      <comments>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/14/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.fingerfuel.com/Default.aspx?tabid=69&amp;EntryID=14</guid>
      <pubDate>Fri, 04 Apr 2008 20:03:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.fingerfuel.com/DesktopModules/Blog/Trackback.aspx?id=14</trackback:ping>
    </item>
    <item>
      <title>Two excellent DNN sites, DNN Creative for tutorials and Ventrian for modules</title>
      <description>&lt;p&gt;We are very careful about recommmending pay-based sites. Heck, it's the internet and there're tons of free code and things to download.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;But if you want to learn DotNetNuke, or keep up with what is going on, or have questions about how to use it, &lt;a target="_blank" href="http://www.dnncreative.com"&gt;DNN Magazine by DNN Creative&lt;/a&gt; is the place you should subscribe to. It's less than 50 dollars a year (and no, I don't get a cut for recommending it, nor would I accept it), and there are already almost 200 videos, tons of tutorials and non-moderated forums for you to ask questions of other DNN users.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;It's a steal, IMO. And as someone who has created interactive magazines, I know how much work must go into creating one that is successful and offers good value. Lee Sykes, the editor at DNN Creative has created an interactive magazine with video tutorials, written tutorials, module reviews and informative forums that passes this test with flying colors. So if you're interested in DNN, you need to subscribe.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;One other subscription site, which is also less than 50 USD per year to join is &lt;a target="_blank" href="http://www.ventrian.com"&gt;Scott McCulloch's Ventrian Systems&lt;/a&gt; site. There are a number of handy modules here, and Scott has a great blog with lots of good information. Scott is also a member of the core team of DotNetNuke, so you know his modules avail themselves of the same excellent design that is evident in most of the DNN core.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;Downloading just one of the modules, like the Articles module, or the Private Messages module, or any of the other modules Scott offers, all for either a 3 month subscription or a 1 year subscription (the last I checked, the one year subscription is 35 USD a year, of which one module, including source, is worth that amount). If you want to be able to inspect code, see how a DNN module should be built, Scott's site is the best place to go.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;I promise, you won't be disappointed if you spend the money.&lt;/p&gt;</description>
      <link>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/11/Default.aspx</link>
      <author>andyhock@ewriters.org</author>
      <comments>http://www.fingerfuel.com/Resources/FingerfuelBlogs/AndyHocksBlog/tabid/69/EntryID/11/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.fingerfuel.com/Default.aspx?tabid=69&amp;EntryID=11</guid>
      <pubDate>Fri, 23 Feb 2007 06:54:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.fingerfuel.com/DesktopModules/Blog/Trackback.aspx?id=11</trackback:ping>
    </item>
  </channel>
</rss>