<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>thomasnguyen.com &#187; automation</title>
	<atom:link href="http://thomasnguyen.com/blog/tag/automation/feed/" rel="self" type="application/rss+xml" />
	<link>http://thomasnguyen.com/blog</link>
	<description>hi, i&#039;m tom</description>
	<lastBuildDate>Sun, 29 Jan 2012 03:46:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Martin Fowler, a Software Development Soothsayer</title>
		<link>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/</link>
		<comments>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/#comments</comments>
		<pubDate>Fri, 26 Feb 2010 07:40:54 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[austin]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=273</guid>
		<description><![CDATA[&#8220;What Agile really means to the future of software development&#8220; Martin will call upon his more than 20 years of software industry experience to talk about how the history of the software also serves as a roadmap for what to expect in the future. Martin had three very drastically different mini talks rather than a [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><em>&#8220;<a href="http://connect.thoughtworks.com/austinevents/" target="_blank">What Agile really means to the future of software development</a>&#8220;</em><br />
Martin will call upon his more than 20 years of software industry experience to talk about how the history of the software also serves as a roadmap for what to expect in the future.
</p></blockquote>
<p>Martin had three very drastically different mini talks rather than a single long presentation. I really liked this approach since it helped keep my short attention span.</p>
<p><strong>I. Continuous Integration and Continuous Deployment</strong><br />
His presentation comparing Feature Branching and  Continuous Integration was just a regurjitation from his <a href="http://martinfowler.com/articles/continuousIntegration.html" target="_blank">older articles</a>, discussions from other presenters at other events, and a <a href="http://amzn.com/0321336380" target="_blank">book he recommended</a> by Paul M. Duvall. I won&#8217;t bore you with it. </p>
<p>Something that caught my eye was Continuous Deployment and what he called the &#8220;<em>build pipeline</em>.&#8221; He had an awesome flowchart/diagram to explain this, but I&#8217;ll try and do it with a list. I&#8217;ll include the tools I currently use in our development environment at work, if they apply.</p>
<ul>
<li><strong>Commit Task</strong> &#8211; usually kicks off a full build of the main stream on a build server, not a local machine
<ul>
<li>Compile: Visual Studio</li>
<li>Tests: NUnit</li>
<li>Assemble: NAnt</li>
<li>Code Analysis: NCover and FxCop</li>
</ul>
</li>
<li><strong>Artifact Repository</strong> &#8211; this can be a file share to maintain each build version from the Commit task above
<ul>
<li>Binaries: CruiseControl.NET</li>
<li>Reports: NUnit, NCover, and FxCop</li>
<li>Metadata: I have no idea what this is, any ideas?</li>
</ul>
</li>
<li><strong>Acceptance Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Acceptance Tests (customer focused)</li>
</ul>
</li>
<li><strong>Performance Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Performance Tests</li>
</ul>
</li>
<li><strong>Deploy Task</strong> &#8211; of a specific version in the Artifact Repository
<ul>
<li>Configure Environment</li>
<li>Deploy Binaries</li>
<li>Smoke Test</li>
<li>Run</li>
</ul>
</li>
</ul>
<p>I&#8217;ve got the Commit Task and Artifact Repository down to a science at my job and it&#8217;s a good reassurance that I&#8217;m doing this right! I&#8217;m going to see what it&#8217;s going to take to get the rest of the &#8220;<em>build pipeline</em>&#8221; implemented. I&#8217;ll also see if <a href="http://www.thoughtworks-studios.com/cruise-release-management" target="_blank">Cruise</a> is something that will work for us.</p>
<p>I already have so many books I&#8217;ve started reading and not finished, but Martin recommended another interesting one that&#8217;s still classified as a &#8220;Rough Cut&#8221;: <a href="http://my.safaribooksonline.com/9780321670250" target="_blank">Continuous Delivery</a> by Dave Farley &amp; Jez Humble.</p>
<p><strong>II. Domain Specific Languages</strong><br />
I forgot my Hydrocodone in the car and my right-bottom part of my mouth was throbbing. The last time I took a pill was lunch and it&#8217;s been the longest stretch. I was a little distracted by that, so sorry for the significantly reduced notes. </p>
<p>Martin had an awesome explanation (<a href="http://martinfowler.com/dslwip/" target="_blank">in his book</a>) about how to get from code configuration to XML configuration and then finally to a DSL configuration represented in Ruby. SO CLEAN! I really need to finish reading my books instead of starting new ones.</p>
<blockquote><p>&#8220;XML is like violence. If it&#8217;s not working, you&#8217;re not using enough.&#8221;</p></blockquote>
<p>Martin as also quite impressed about the possibilities of DSLs and the impact of <a href="http://martinfowler.com/bliki/LanguageWorkbench.html" target="_blank">Language Workbenches</a>. He recommended us to watch <a href="http://msdn.microsoft.com/en-us/data/dd727740.aspx" target="_blank">this video</a> from <a href="http://intentsoft.com/" target="_blank">Intentional Software</a>. </p>
<blockquote><p>&#8220;If you try to solve a problem with regular expressions, you end up with two problems&#8221;</p></blockquote>
<p><strong>III. <em>Controversial Topic</em>: Diversity, Women &amp; African American in Software Development</strong><br />
Although there were no slides, I didn&#8217;t really like this talk and I found it quite inappropriate. It is definitely a heated topic and should be discussed, but I don&#8217;t think this is the right forum. I&#8217;ll leave this topic alone.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2010/02/martin-fowler-a-software-development-soothsayer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Update Version Number in a File.</title>
		<link>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/</link>
		<comments>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/#comments</comments>
		<pubDate>Wed, 23 Sep 2009 16:42:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[nant]]></category>
		<category><![CDATA[secure vantage]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=251</guid>
		<description><![CDATA[No, not an AssemblyInfo.cs file, that&#8217;s really straightforward. C&#8217;mon it&#8217;s a task that does what it says, easy. Something I was trying to do is update the version number in, for all simple purposes, a text file &#8211; something that&#8217;s not xmlpoke-able. So I have the property ready to go and the file I want [...]]]></description>
			<content:encoded><![CDATA[<p>No, not an AssemblyInfo.cs file, that&#8217;s really <a href="http://nant.sourceforge.net/release/0.85/help/tasks/asminfo.html" target="_blank">straightforward</a>. C&#8217;mon it&#8217;s a task that does what it says, easy.</p>
<p>Something I was trying to do is update the version number in, for all simple purposes, a text file &#8211; something that&#8217;s not <a href="http://nant.sourceforge.net/release/0.85/help/tasks/xmlpoke.html" target="_blank">xmlpoke</a>-able. So I have the property ready to go and the file I want to update!</p>
<p>My first thoughts were to use the <a href="http://nant.sourceforge.net/release/0.85/help/tasks/loadfile.html" target="_blank">loadfile</a> to get the file into a property and replace it with the version.</p>
<div class="lab_comment1">&lt;loadfile file=&#8221;some.txt&#8221; property=&#8221;token-file&#8221;&gt;</p>
<div class="lab_commentBlock">&lt;filterchain&gt;</p>
<div class="lab_commentBlock">&lt;replacetokens&gt;</p>
<div class="lab_commentBlock">&lt;token key=&#8221;VERSION&#8221; value=&#8221;${version}&#8221; /&gt;</div>
<p>&lt;/replacetokens&gt;</p>
</div>
<p>&lt;/filterchain&gt;</p>
</div>
<p>&lt;/loadfile&gt;</p>
</div>
<p>Awesome, just like the sample and it echos out just fine&#8230;so now, how do I save my changes? After some digging around, I looked into the <a href="http://nant.sourceforge.net/release/0.85/help/types/filterchain.html" target="_blank">filterchain</a> and read up on the <a href="http://nant.sourceforge.net/release/0.85/help/tasks/copy.html" target="_blank">copy</a> task.</p>
<p>Seriously, copying a file now has the ability to modify the internals? <em>Does not compute!</em> Maybe copy, <em>then</em> modify. Anyway, its works now, so I can&#8217;t really complain anymore besides the hassle of finding the right task to do the job.</p>
<div class="lab_comment1">&lt;copy file=&#8221;some-template.txt&#8221; tofile=&#8221;some.txt&#8221;&gt;</p>
<div class="lab_commentBlock">&lt;filterchain&gt;</p>
<div class="lab_commentBlock">&lt;replacetokens&gt;</p>
<div class="lab_commentBlock">&lt;token key=&#8221;VERSION&#8221; value=&#8221;${version}&#8221; /&gt;</div>
<p>&lt;/replacetokens&gt;</p>
</div>
<p>&lt;/filterchain&gt;</p>
</div>
<p>&lt;/copy&gt;</p>
</div>
<p>Now I know why <a href="http://www.jamesthigpen.com/" target="_blank">James</a> keeps telling me to get out of the XML HELL. Coding tasks in XML is just ass backwards.</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/09/update-version-number-in-a-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Automating x86 and x64 Builds.</title>
		<link>http://thomasnguyen.com/blog/2009/04/automating-x86-and-x64-builds/</link>
		<comments>http://thomasnguyen.com/blog/2009/04/automating-x86-and-x64-builds/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 05:02:00 +0000</pubDate>
		<dc:creator>thomasnguyencom</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[altdotnet]]></category>
		<category><![CDATA[automation]]></category>
		<category><![CDATA[nant]]></category>

		<guid isPermaLink="false">http://thomasnguyen.com/blog/?p=243</guid>
		<description><![CDATA[Before attending the ALT.NET Houston Open Spaces Conference, I really didn&#8217;t know what to expect besides learning something. What did I want to learn? I had absolutely no idea. I just heard read good things about this event from many others at the Austin and Seattle ones. The sessions I went to were totally great [...]]]></description>
			<content:encoded><![CDATA[<p>Before attending the <a href="http://houston.altnetconf.com" target="_blank">ALT.NET Houston Open Spaces Conference</a>, I really didn&#8217;t know what to expect besides learning something. What did I want to learn? I had absolutely no idea. I just <strike>heard</strike> read good things about this event from many others at the <a href="http://www.altnetconf.com" target="_blank">Austin</a> and <a href="http://altdotnet.org/events/seattle/" target="_blank">Seattle</a> ones. The <a href="http://houstonaltnet.pbwiki.com/Houston-ALTDOTNET-Sessions" target="_blank">sessions</a> I went to were totally great and best of all, I bumped into a few familiar faces I totally didn&#8217;t expect to ever see again, hehe.</p>
<p>Now that I have been refreshed with a completely new eagerness to get caught up with the latest and greatest, I&#8217;m hoping to be able to contribute at the next ALT.NET conference. Ben, chop-chop, get on it! =)</p>
<p>Here is my main take away from the conference that I just finished.</p>
<p><b>Starting Point (x86 only):</b> NAnt that kicks off MSBuild, runs tests, and copies to a package folder.</p>
<p>The problem I was running into is that I didn&#8217;t fully understand Visual Studio 2008&#8242;s Configuration Manager and how to integrate/mimic it with NAnt. I had to set the target platforms x86/x64 and it automatically configured the output paths:</p>
<div class="lab_comment1">[folder] &#8211; [configuration]|[platform]
<ul>
<li>bin/Debug &#8211; Debug|Any CPU</li>
<li>bin/Release &#8211; Release|Any CPU</li>
<li>bin/x86/Debug &#8211; Debug|x86</li>
<li>bin/x86/Release &#8211; Release|x86</li>
<li>bin/x64/Debug &#8211; Debug|x64</li>
<li>bin/x64/Release &#8211; Release|x64</li>
</ul>
</div>
<p>Remember, these are defaults <i>after</i> you add solution configurations and solution platform. When you build, set the proper targets, F5 and you&#8217;re done. As for NAnt, I also had to target the proper configuration/platform:</p>
<div class="lab_comment1">/p:Configuration=${project.config} /p:Platform=${project.platform}</div>
<p>The tricky part here for me was to get NAnt to find the x64 Framework by parsing out the x86 path and do a <a href="http://nant.sourceforge.net/release/latest/help/functions/string.replace.html" target="_blank">string replace</a>. Unfortunately, I&#8217;m using 0.85 and it seems to have a bug when trying to pass in a variable as the input string. Currently, I have to specify the directory, UGLY.</p>
<div class="lab_comment1">&lt;property name=&#8221;msbuild-x86&#8243; value=&#8221;${framework::get-framework-directory(framework::get-target-framework())}\msbuild.exe&#8221; /&gt;</p>
<p>    &lt;property name=&#8221;msbuild-x64&#8243; value=&#8221;C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe&#8221; /&gt;</p></div>
<p>After reorganizing a few targets and adding more to specify x86 and x64 builds, it worked perfectly. The last step I did was to ensure the builds were targeting separate platform output folders.</p>
<p>Now, my next step is to automate the WiX build&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://thomasnguyen.com/blog/2009/04/automating-x86-and-x64-builds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

