<?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>Adventures in Development &#187; Babak Naffas</title>
	<atom:link href="http://bitsoftconsulting.com/wordpress/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://bitsoftconsulting.com/wordpress</link>
	<description>Babak&#039;s experiences in software development</description>
	<lastBuildDate>Tue, 31 Aug 2010 23:00:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>IIS Express</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/08/iis-express/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/08/iis-express/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 06:55:56 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[iis]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/2010/08/iis-express/</guid>
		<description><![CDATA[Web development on the Microsoft platform has always had it's hurdles. With Windows XP, your development environment would use IIS 5 where as the server that would host the production site would be IIS 6. Additionally, there was the issue where we were limited to a single website running on that machine (this was a [...]]]></description>
			<content:encoded><![CDATA[<p>Web development on the Microsoft platform has always had it's hurdles. With Windows XP, your development environment would use IIS 5 where as the server that would host the production site would be IIS 6. Additionally, there was the issue where we were limited to a single website running on that machine (this was a pain when working on multiple projects at the same time).</p>
<p>Microsoft's virtual web servers that would get kicked off by Visual Studio alleviated some of the hardships by allowing each one of your web projects to run on an individual site. With the release of IIS 7, and particularly the rewrite rules that they provided, we ran into another issue where our production environments supported rest-full, SEO friendly URLs but the virtual web servers initiated by Visual Studio would not be able to process the URLs.</p>
<p>Recently, Microsoft addressed many of these issue with IIS Express. Scott Guthrie blogs about this new tool here: <a title="Scott Guthrie's blog entry talking about IIS Express" href="http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx" target="_blank">http://weblogs.asp.net/scottgu/archive/2010/06/28/introducing-iis-express.aspx</a></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F08%2Fiis-express%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/08/iis-express/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Event Tracking with Google Analytics</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/08/custom-event-tracking-with-google-analytics/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/08/custom-event-tracking-with-google-analytics/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 20:55:56 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[Analytics]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=31</guid>
		<description><![CDATA[Here is a link for the asynchronous event tracking scripts for Google Analytics: http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html. Keep in mind that to work with this code, you need the 3rd generation of Google Analytics scripts on your site. If you are using urchin.js or ga.js then you need to updated your scripts. You need to dig around the [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a link for the asynchronous event tracking scripts for Google Analytics: h<a href="http://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html">ttp://code.google.com/apis/analytics/docs/tracking/eventTrackerGuide.html</a>. Keep in mind that to work with this code, you need the 3rd generation of Google Analytics scripts on your site. If you are using urchin.js or ga.js then you need to updated your scripts.</p>
<p>You need to dig around the Google Analytics dashboard to find the event tracking reports.</p>
<ol>
<li>When you access the main page for Google Analytics, click the<strong> View Report </strong>link for the profile you are tracking the events for.</li>
<li>On the left navigation, select <strong>Content</strong></li>
<li>Under <strong>Content</strong>, select <strong>Event Tracking</strong> and <strong>Category</strong></li>
</ol>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F08%2Fcustom-event-tracking-with-google-analytics%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/08/custom-event-tracking-with-google-analytics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subversion Repository Crash</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/08/subversion-repository-crash/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/08/subversion-repository-crash/#comments</comments>
		<pubDate>Tue, 03 Aug 2010 20:06:35 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[crash]]></category>
		<category><![CDATA[repository]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=220</guid>
		<description><![CDATA[svnadmin dump d:\SVNRepositories\ SVN-fs-dump-format-version: 2 UUID: 21a194ee-da73-c443-af0d-4b52d073379e Revision-number: 0 Prop-content-length: 56 Content-length: 56 K 8 svn:date V 27 2008-06-26T00:04:33.388345Z PROPS-END * Dumped revision 0. Revision-number: 1 Prop-content-length: 97 Content-length: 97 K 7 svn:log V 23 Created folder remotely K 8 svn:date V 27 2008-06-26T00:06:05.949068Z PROPS-END svnadmin: Berkeley DB error for filesystem 'd:/SVNRepositories//db' while moving cursor: [...]]]></description>
			<content:encoded><![CDATA[<p>svnadmin dump d:\SVNRepositories\<repository Folder></p>
<p>SVN-fs-dump-format-version: 2</p>
<p>UUID: 21a194ee-da73-c443-af0d-4b52d073379e</p>
<p>Revision-number: 0<br />
Prop-content-length: 56<br />
Content-length: 56</p>
<p>K 8<br />
svn:date<br />
V 27<br />
2008-06-26T00:04:33.388345Z<br />
PROPS-END</p>
<p>* Dumped revision 0.<br />
Revision-number: 1<br />
Prop-content-length: 97<br />
Content-length: 97</p>
<p>K 7<br />
svn:log<br />
V 23<br />
Created folder remotely<br />
K 8<br />
svn:date<br />
V 27<br />
2008-06-26T00:06:05.949068Z<br />
PROPS-END</p>
<p>svnadmin: Berkeley DB error for filesystem 'd:/SVNRepositories/</repository><repository Folder>/db' while moving cursor:<br />
DB_RUNRECOVERY: Fatal error, run database recovery<br />
svnadmin: bdb: page 0: illegal page type or format<br />
svnadmin: bdb: PANIC: Invalid argument<br />
svnadmin: bdb: PANIC: fatal region error detected; run recovery</p>
<p>Any ideas as to how to resolve this are welcome.</repository></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F08%2Fsubversion-repository-crash%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/08/subversion-repository-crash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>HTML5</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/07/html5/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/07/html5/#comments</comments>
		<pubDate>Wed, 07 Jul 2010 21:49:22 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[HTML5]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=215</guid>
		<description><![CDATA[I want to stay ahead of the curve when it comes to HTML5 and everything it has to offer so I'm using this blog entry to chronicle my research and any cool tools I find around the interwebs. I found this nice sandbox the other day http://rendera.heroku.com/. They have some nice example and am learning a [...]]]></description>
			<content:encoded><![CDATA[<p>I want to stay ahead of the curve when it comes to HTML5 and everything it has to offer so I'm using this blog entry to chronicle my research and any cool tools I find around the interwebs.</p>
<p>I found this nice sandbox the other day <a href="http://rendera.heroku.com/">http://rendera.heroku.com/</a>. They have some nice example and am learning a lot from it.</p>
<p>W3Schools has a nice primer. You can find it here: <a href="http://www.w3schools.com/html5/html5_reference.asp">http://www.w3schools.com/html5/html5_reference.asp</a></p>
<p>Some questions I have and would like to answer for myself are...</p>
<ol>
<li>What is the purpose of the &lt;address&gt; node? What do I gain from using it?</li>
<li>How can I integrate HTML5 with ASP.NET Web Controls?</li>
</ol>
<p>More questions to come.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F07%2Fhtml5%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/07/html5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Enterprise Library Data Access Application Block + SQL Optional Parameters</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/05/enterprise-library-data-access-application-block-sql-optional-parameters/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/05/enterprise-library-data-access-application-block-sql-optional-parameters/#comments</comments>
		<pubDate>Mon, 03 May 2010 22:49:31 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ado.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[Enterprise Library]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=202</guid>
		<description><![CDATA[The Enterprise Library Data Access Block provides a number of ways of calling a stored procedure. Database _db = DatabaseFactory.CreateDatabase(&#60;Connection String Name&#62;); Let's now assume that we have a stored procedure usp_MyStoredProc that takes a single parameter @param1. If this is a require parameter, both of the following statement blocks will result in the same [...]]]></description>
			<content:encoded><![CDATA[<p>The Enterprise Library Data Access Block provides a number of ways of calling a stored procedure.</p>
<p class="code">Database _db = DatabaseFactory.CreateDatabase(&lt;Connection String Name&gt;);</p>
<p>Let's now assume that we have a stored procedure <strong>usp_MyStoredProc</strong> that takes a single parameter <strong>@param1</strong>. If this is a require parameter, both of the following statement blocks will result in the same outcome:</p>
<p class="code">public DataSet CallMyStoredProc( int value ){<br />
return _db.ExecuteDataSet( "usp_MyStoredProc", value )<br />
}</p>
<p class="code">public DataSet CallMyStoredProc( int value ){<br />
DbCommand command = _db.GetStoredProcCommand("usp_MyStoredProc" );<br />
_db.AddInParameter( command, "param1", value );<br />
return _db.ExecuteDataSet( command );<br />
}</p>
<p>However, now let's assume that <strong>@param1</strong> is an optional parameter that we don't want to pass in from our data access method, we are limited in our options.</p>
<p class="code">public DataSet CallMyStoredProc(){<br />
return _db.ExecuteDataSet( "usp_MyStoredProc")<br />
}</p>
<p>This method will fail with an exception because the parameters provided to the stored procedure (none) don't match the parameter count for the stored procedure (1).</p>
<p>Creating an actual DbCommand and executing it, however, will not cause an exception. In this scenario, the following code block will work without causing an exception:</p>
<p class="code">public DataSet CallMyStoredProc( int value ){<br />
DbCommand command = _db.GetStoredProcCommand("usp_MyStoredProc" );<br />
return _db.ExecuteDataSet( command );<br />
}</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F05%2Fenterprise-library-data-access-application-block-sql-optional-parameters%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/05/enterprise-library-data-access-application-block-sql-optional-parameters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up Cruise Control .NET 1.5 on Windows 7 + IIS7</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/04/setting-up-cruise-control-net-1-5-on-iis7/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/04/setting-up-cruise-control-net-1-5-on-iis7/#comments</comments>
		<pubDate>Mon, 05 Apr 2010 02:12:46 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[ccnet]]></category>
		<category><![CDATA[cruise control]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=187</guid>
		<description><![CDATA[I have been setting up a new continuous integration system on my laptop for some of my personal projects and thought it would be a good time to upgrade to Cruise Control 1.5. I came across some issues during the setup so I have put up my notes on the process in case anyone else [...]]]></description>
			<content:encoded><![CDATA[<p><div>I have been setting up a new continuous integration system on my laptop for some of my personal projects and thought it would be a good time to upgrade to Cruise Control 1.5. I came across some issues during the setup so I have put up my notes on the process in case anyone else has the same issues.</div>
</p>
<p><div><strong>My Development Environment</strong></div>
<div>Windows 7 (64-bit)</div>
<div>IIS 7.5</div>
<div>Cruise Control 1.5</div>
<div>Nant 0.86</div>
<div>Visual Studio 2008</div>
</p>
<p><div><strong>Installation Steps</strong></div>
<ol>
<li>Download the installation package from <a href="http://sourceforge.net/" target="_blank">Sourceforge.net</a>. As of writing this article, the latest version is available <a href="http://sourceforge.net/projects/ccnet/files/CruiseControl.NET%20Releases/CruiseControl.NET%201.5%20RC1/CruiseControl.NET-1.5.6804.1-Setup.exe/download" target="_blank">here</a>.</li>
<li>Run the installer. This will copy the files you need and create the IIS site/virtual directories needed to access Cruise Control .NET from your browser.</li>
<li>Open your Internet Information Services (IIS) Manager (Start -&gt; Run -&gt; inetmgr )</li>
<li>Create a new website point the site to &lt;INSTALL PATH&gt;\webdashboard.</li>
<li>Change the bindings for the new site to a unique port. ( I use port 90 and the CCNET is then accessed via http://localhost:90)</li>
<li>Open the application pool created for this site and change the 'Managed pipeline mode' to 'Integrated'.</li>
<li>Open the services manager (Start -&gt; Run -&gt; services.msc) and start the Cruise Control .NET service.</li>
</ol>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F04%2Fsetting-up-cruise-control-net-1-5-on-iis7%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/04/setting-up-cruise-control-net-1-5-on-iis7/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jquery, ajax, and .NET Web Services</title>
		<link>http://bitsoftconsulting.com/wordpress/2010/02/jquery-ajax-and-net-web-services/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2010/02/jquery-ajax-and-net-web-services/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 00:39:45 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[web services]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=78</guid>
		<description><![CDATA[Recently, I have been working on a few projects that require an ajax friendly life cycle for an ASP.NET web application. Much of the work I did is based on Rick Strahl's post: http://www.west-wind.com/weblog/posts/896411.aspx. Working on top of what I learned from this article, I decided to leverage the rich capabilities of .NET's Web UI [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I have been working on a few projects that require an ajax friendly life cycle for an ASP.NET web application. Much of the work I did is based on Rick Strahl's post: <a href="http://www.west-wind.com/weblog/posts/896411.aspx">http://www.west-wind.com/weblog/posts/896411.aspx</a>.</p>
<p>Working on top of what I learned from this article, I decided to leverage the rich capabilities of .NET's Web UI components as part of my ajax implementation using HTML injection. I used jquery to bind a standard button to make a call to my Web Service method.</p>
<p>The service created and populated a standard GridView object. The service would then render that object and return the HTML that was generated. This HTML, once returned by the service call, would be injected into a DIV tag that served as the container for the results table.</p>
<p>My initial implementation is a naive solution that renders full HTML on the server side and passes that back to the client-side. My ASP.NET page already has a script manager so I added a reference to my web service (simple .asmx in this scenario).</p>
<p class="code">
&lt;asp:ScriptManager ID="ScriptManager1" runat="server"&gt;<br />
&lt;Services&gt;<br />
&lt;asp:ServiceReference Path="~/Services/MyService.asmx" /&gt;<br />
&lt;/Services&gt;<br />
&lt;/asp:ScriptManager&gt;
</p>
<div>My service defines a method Foo:</div>
<p class="code">
namespace Client.Project.Services<br />
{<br />
/// &lt;summary&gt;<br />
/// Summary description for ConceptServices<br />
/// &lt;/summary&gt;<br />
[WebService(Namespace = "http://tempuri.org/")]<br />
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1, Name = "MyBinding")]<br />
[System.ComponentModel.ToolboxItem(false)]<br />
[System.Web.Script.Services.ScriptService]<br />
public class ConceptServices : System.Web.Services.WebService<br />
{<br />
[WebMethod]<br />
[ScriptMethod]<br />
public String Foo()<br />
{<br />
return "&lt;table&gt;&lt;tr&gt;&lt;td&gt;Hello World!&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;";<br />
}<br />
}<br />
}
</p>
<div>To make a call to this method via client-side javascript, simple use the fully qualified name for the method:</div>
<div>Client.Project.Services.Foo( successMethod, failureMethod )</div>
<div>Assuming Foo is overloaded to take in parameters, you would pass in those parameters first:</div>
<p class="code">
var i = 3<br />
var s = "bar"<br />
Client.Project.Services.Foo( i, s,  successMethod, failureMethod )</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2010%2F02%2Fjquery-ajax-and-net-web-services%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2010/02/jquery-ajax-and-net-web-services/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Continuous Integration with Cruise Control .NET + NAnt</title>
		<link>http://bitsoftconsulting.com/wordpress/2009/12/continuous-integration-with-cruise-control-net-nant/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2009/12/continuous-integration-with-cruise-control-net-nant/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 18:35:21 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[continuous integration]]></category>
		<category><![CDATA[ccnet]]></category>
		<category><![CDATA[cruise control]]></category>
		<category><![CDATA[nant]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=36</guid>
		<description><![CDATA[UPDATE CruiseControl.NET 1.5 RC1 has been release and is available here. My Cruise Control .NET implementation consists of numerous development projects each with multiple different CCNET projects associated with it (one per environment per branch). In order to make the projects more maintainable, I have created a separate configuration file for each development project. Defining [...]]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATE </strong>CruiseControl.NET 1.5 RC1 has been release and is available <a title="CruiseControl.NET on SourceForge" href="http://sourceforge.net/projects/ccnet/files/CruiseControl.NET%20Releases/" target="_blank">here</a>.</p>
<p>My Cruise Control .NET implementation consists of numerous development projects each with multiple different CCNET projects associated with it (one per environment per branch). In order to make the projects more maintainable, I have created a separate configuration file for each development project.</p>
<p>Defining variables and separating ccnet.config configuration file into smaller files allows for easier maintenance as the number of projects as time went on.</p>
<h2>Defining and using variables</h2>
<p>Variables can be defined using the following format</p>
<p><strong>&lt;cb:define KEY="VALUE" /&gt;</strong></p>
<p>To reference that variable later in the configuration file, simply use <strong>$(KEY)</strong></p>
<p>Check out the <a title="CC.NET Preprocessor" href="http://ccnetlive.thoughtworks.com/ccnet/doc/CCNET/Configuration%20Preprocessor.html" target="_blank">Cruise Control .NET website </a>for complete explanation of variables using the pre-processor.</p>
<h2>Separating the configuration files</h2>
<p class="code">&lt;!DOCTYPE cruisecontrol [<br />
&lt;!ENTITY <strong>PROJECT_NAME</strong> SYSTEM "file:<strong>project.xml</strong>"&gt;<br />
]&gt;<br />
&lt;cruisecontrol xmlns:cb="urn:ccnet.config.builder"&gt;<br />
<strong>&amp;PROJECT_NAME;</strong><br />
&lt;/cruisecontrol&gt;</p>
<p>project.xml would, then, contain the regular xml configuration for a Cruise Control .NET project:</p>
<p class="code">
 &lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
 &lt;project name="My Project" category="A Category"&gt;<br />
  &lt;workingDirectory&gt;MyProject&lt;/workingDirectory&gt;<br />
  &lt;artifactDirectory&gt;MyProject&lt;/artifactDirectory&gt;<br />
  &lt;webURL&gt;&lt;/webURL&gt;<br />
  &lt;triggers&gt;<br />
   &lt;intervalTrigger seconds="900" buildCondition="IfModificationExists" /&gt;<br />
   &lt;scheduleTrigger time="04:00" buildCondition="ForceBuild" /&gt;<br />
  &lt;/triggers&gt;<br />
  &lt;labeller type="svnRevisionLabeller"&gt;<br />
   &lt;pattern&gt;Version {major}.{minor}.{build}.{revision}&lt;/pattern&gt;<br />
   &lt;major&gt;1&lt;/major&gt;<br />
   &lt;minor&gt;0&lt;/minor&gt;<br />
   &lt;url&gt;$(SvnBaseUrl)&lt;/url&gt;<br />
  &lt;/labeller&gt;<br />
&lt;sourcecontrol type="svn"&gt;<br />
   &lt;trunkUrl&gt;$(SvnBaseUrl)&lt;/trunkUrl&gt;<br />
   &lt;workingDirectory&gt;$(BaseDirectory)&lt;/workingDirectory&gt;<br />
   &lt;cb:SvnOptions /&gt;<br />
  &lt;/sourcecontrol&gt;<br />
&lt;tasks&gt;<br />
   &lt;nant&gt;<br />
    &lt;executable&gt;$(NAntExecutablePath)&lt;/executable&gt;<br />
    &lt;baseDirectory&gt;$(BaseDirectory)&lt;/baseDirectory&gt;<br />
    &lt;targetList&gt;<br />
     &lt;target&gt;dist.deploy&lt;/target&gt;<br />
    &lt;/targetList&gt;<br />
   &lt;/nant&gt;<br />
  &lt;/tasks&gt;<br />
 &lt;publishers&gt;<br />
   &lt;xmllogger /&gt;<br />
   &lt;cb:include href="EmailConfig.xml"/&gt;<br />
  &lt;/publishers&gt;<br />
&lt;/project&gt;</p>
<p>On caveat with this idea is that changes to the separate configuration files are not recognized until the cruise control is restarted by either restarting the service or modifying the ccnet.config file.</p>
<h2>Building and Deploying ASP.NET Web Applications</h2>
<p>The NAnt target below is a full parameterized call to MsBuild.exe to compile any solution. ThoughtWorks.CruiseControl.MsBuild.dll provides an MSBuild logger that allows Cruise Control .NET to report the bulid output.</p>
<div class="code">
<div>&lt;<span style="color: #0000ff;">target </span>name="build"&gt;</div>
<div id="_mcePaste" style="padding-left: 30px;">&lt;exec program="${MSBuildPath}"&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg line='"${SolutionFile}"' /&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg line="/property:Configuration=${SolutionConfiguration}" /&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg value="/target:Rebuild" /&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg value="/verbosity:normal" /&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg value="/nologo" /&gt;</div>
<div id="_mcePaste" style="padding-left: 60px;">&lt;arg line='/logger:"C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll"'/&gt;</div>
<div id="_mcePaste" style="padding-left: 30px;">&lt;/exec&gt;</div>
<div id="_mcePaste">&lt;/<span style="color: #0000ff;">target</span>&gt;</div>
</div>
<p><strong>Parameters</strong></p>
<p><span style="font-size: small;"><strong>MSBuildPath </strong>- The path to the MsBuild executable. </span></p>
<p><span style="font-size: small;">For .NET Framework versions 2.0 and 3.5  on a 32-bit Windows OS, use C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\MsBuild.exe<br />
For .NET Framework version 4.0, use C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MsBuild.exe</span></p>
<p><span style="font-size: small;"><strong>SolutionFile </strong>- The relative path from the build file to the solution file. Fully qualified paths are also allowed.</span></p>
<p><span style="font-size: small;"><strong>SolutionConfiguration</strong> - "Release" or "Debug".</span></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2009%2F12%2Fcontinuous-integration-with-cruise-control-net-nant%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2009/12/continuous-integration-with-cruise-control-net-nant/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>BootBootReboot.com</title>
		<link>http://bitsoftconsulting.com/wordpress/2009/11/bootbootreboot-com/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2009/11/bootbootreboot-com/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 23:30:53 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[thumbnails]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=27</guid>
		<description><![CDATA[I have been working on a website to aggregate funny technology related content across the internet. So far, I have been able to integrate pictures, YouTube videos, and some RSS content from fmylife and clientcopia I have created the site using ASP.NET and SQL Server. I made this decision solely because I use Microsoft's platform [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on a website to aggregate funny technology related content across the internet. So far, I have been able to integrate pictures, YouTube videos, and some RSS content from <a href="http://fmylife.com" target="_blank">fmylife</a> and <a href="http://clientcopia.com" target="_blank">clientcopia</a></p>
<p>I have created the site using ASP.NET and SQL Server. I made this decision solely because I use Microsoft's platform every day for my professional work.</p>
<p><a title="BootBootReboot.com" href="http://www.bootbootreboot.com" target="_blank">BootBootReboot.com</a></p>
<h3>Picture Uploads and Thumbnails</h3>
<p>The pictures page (<a title="http://www.bootbootreboot.com/pictures" href="http://www.bootbootreboot.com/pictures" target="_blank">http://www.bootbootreboot.com/pictures</a>) allows visitors to add their own pictures. Upon uploading a picture, a thumbnail is also generate for that picture. The code below shows how to create a thumbnail of an uploaded image.</p>
<div class="code">public System.Drawing.Image CreateThumbnail(System.Drawing.Image original, int width, int height)<br />
{</div>
<div class="code" style="padding-left: 30px;">return original.GetThumbnailImage(width, height, null, new IntPtr());</div>
<div class="code">}</div>
<h3>Ajax using jquery + .NET Web Services</h3>
<p>Recently, I have also been introducing some new ajax functionality using jquery and .NET web services. This combination has allowed me to easily introduce a "preview" feature for uploading images and YouTube videos.</p>
<h2>Content Management</h2>
<h3>Youtube Videos</h3>
<p>The site is being updated to use the Youtube play list as the content manager for the videos page. Comments and ratings will be retrieved for the detail page and visitors to <a href="http://www.bootbootreboot.com" target="_blank">bootbootreboot.com</a> can add their own comments and ratings.</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2009%2F11%2Fbootbootreboot-com%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2009/11/bootbootreboot-com/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance and Load Testing with WebLoad</title>
		<link>http://bitsoftconsulting.com/wordpress/2009/10/performance-and-load-testing-with-webload/</link>
		<comments>http://bitsoftconsulting.com/wordpress/2009/10/performance-and-load-testing-with-webload/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 02:30:32 +0000</pubDate>
		<dc:creator>Babak Naffas</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[load]]></category>
		<category><![CDATA[perfmon]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[testing]]></category>
		<category><![CDATA[webload]]></category>

		<guid isPermaLink="false">http://bitsoftconsulting.com/wordpress/?p=18</guid>
		<description><![CDATA[Recently, I had to perform a load test on our new project. We are using WebLoad to test the performance at different levels of load to see how it holds up. While WebLoad offers its own set of analytics, I am also using perfmon to see how each tier is performing under the stress. I originally planned [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, I had to perform a load test on our new project. We are using WebLoad to test the performance at different levels of load to see how it holds up. While WebLoad offers its own set of analytics, I am also using perfmon to see how each tier is performing under the stress.</p>
<p>I originally planned on using WebLoad 8.4 for the performance testing but have decided to stick with version 8.1. The free license for 8.4 limits you to 10 virtual users (the load size) where as V8.1 does not have any limitation.</p>
<p>WebLoad 8.1 can be downloaded <a title="WebLoad 8.1" href="http://sourceforge.net/projects/webload/files/" target="_blank">here</a>.</p>
<h3>Perfmon Counters</h3>
<p>The following counters will give the most pertinent results.<br />
<strong>ASP.NET</strong></p>
<ul>
<li>Requests Queued</li>
<li>Requests Current</li>
<li>Request Execution Time (lower is better)</li>
<li>Request Wait Time (lower is better)</li>
<li>Requests Rejected (lower is better, is best)</li>
</ul>
<p><strong>System</strong></p>
<ul>
<li>Context Switches / sec</li>
</ul>
<p><strong>Memory</strong></p>
<ul>
<li>Pages / sec</li>
<li>Available Bytes</li>
<li>Committed Bytes</li>
</ul>
<p><strong>Processor</strong></p>
<ul>
<li>% Processor Time</li>
<li>Active Server Pages</li>
<li>Request Wait Time</li>
<li>Requests Queued</li>
</ul>
<p><strong>Web Service</strong></p>
<ul>
<li>Current Connections</li>
<li>Bytes Send / sec</li>
<li>Connection Attempts / sec</li>
<li>Current Blocked Async I/O Requests</li>
<li>Current Blocked bandwidth bytes</li>
</ul>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fbitsoftconsulting.com%2Fwordpress%2F2009%2F10%2Fperformance-and-load-testing-with-webload%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=arial&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:80px"></iframe>]]></content:encoded>
			<wfw:commentRss>http://bitsoftconsulting.com/wordpress/2009/10/performance-and-load-testing-with-webload/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
