<?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>Head.SmackOnTable();</title>
	<atom:link href="http://www.unauthorised-access.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.unauthorised-access.com</link>
	<description>Contains Nuts.</description>
	<lastBuildDate>Wed, 01 Sep 2010 15:21:13 +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>Introducing ServerAdmin</title>
		<link>http://www.unauthorised-access.com/2010/09/introducing-serveradmin/</link>
		<comments>http://www.unauthorised-access.com/2010/09/introducing-serveradmin/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 15:21:13 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[R&D Lab]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=487</guid>
		<description><![CDATA[Its not quite ready for release right now, but basically, its a really lightweight web based management system for all the sites you have running on your box &#8211; so you no longer have to load up IIS Manager and dig through there, for simple quick things like adding a new site, recycling an app [...]]]></description>
			<content:encoded><![CDATA[<p>Its not quite ready for release right now, but basically, its a really lightweight web based management system for all the sites you have running on your box &#8211; so you no longer have to load up IIS Manager and dig through there, for simple quick things like adding a new site, recycling an app pool, or stopping a site.</p>
<p>Here are a few teasers:</p>
<p><img class="alignnone size-full wp-image-490" title="SiteList" src="http://www.unauthorised-access.com/wp-content/uploads/2010/09/SiteList.png" alt="" width="500" height="257" /></p>
<p><img class="alignnone size-full wp-image-488" title="EditASite" src="http://www.unauthorised-access.com/wp-content/uploads/2010/09/EditASite.png" alt="" width="500" height="257" /></p>
<p><img class="alignnone size-full wp-image-489" title="NewCreds" src="http://www.unauthorised-access.com/wp-content/uploads/2010/09/NewCreds.png" alt="" width="500" height="257" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/09/introducing-serveradmin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>This is NOT the way you write code</title>
		<link>http://www.unauthorised-access.com/2010/08/this-is-not-the-way-you-write-code/</link>
		<comments>http://www.unauthorised-access.com/2010/08/this-is-not-the-way-you-write-code/#comments</comments>
		<pubDate>Tue, 24 Aug 2010 15:24:17 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[Cleverectomy]]></category>
		<category><![CDATA[WTF]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[FUCKING IDIOT]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=477</guid>
		<description><![CDATA[Seriously. If I see ANYONE under my employment writing code like this, without a VERY GOOD REASON, I will look at getting rid of you for gross negligance, and possibly criminal acts, under the geneva convention. public static DataTable GetAll(String where) { // get a configured DbCommand object DbCommand comm = GenericDataAccess.CreateCommand(); //define command type [...]]]></description>
			<content:encoded><![CDATA[<p>Seriously. If I see ANYONE under my employment writing code like this, without a VERY GOOD REASON, I will look at getting rid of you for gross negligance, and possibly criminal acts, under the geneva convention.</p>
<pre class="brush: csharp;">
    public static DataTable GetAll(String where)
    {

        // get a configured DbCommand object
        DbCommand comm = GenericDataAccess.CreateCommand();

        //define command type
        comm.CommandType = CommandType.StoredProcedure;

        // set the stored procedure name
        comm.CommandText = &quot;GetAll&quot;;

        //Create new parameter
        DbParameter param = comm.CreateParameter();
        param.ParameterName = &quot;@tableName&quot;;
        param.Value = _tableName;
        param.DbType = DbType.String;
        //Add param to command object
        comm.Parameters.Add(param);

        //Create new parameter
        param = comm.CreateParameter();
        param.ParameterName = &quot;@where&quot;;
        param.Value = where;
        param.DbType = DbType.String;
        //Add param to command object
        comm.Parameters.Add(param);

        DataTable dt = new DataTable();
        dt = GenericDataAccess.ExecuteSelectCommand(comm);

        return dt;

    }
</pre>
<p>If your WHAT THE FUCK meter isnt going off already, wait till you see GetAll:</p>
<pre class="brush: sql;">
ALTER PROCEDURE [dbo].[GetAll]
	@tableName VARCHAR(50),
	@allRecords BIT = NULL,
	@where NVARCHAR(1024) = NULL
AS
BEGIN
	SET NOCOUNT ON;

	DECLARE @sql VARCHAR(200)

	IF @where IS NULL
	BEGIN
		-- Insert statements for procedure here
		IF @allRecords = 1
		BEGIN
			SET @sql = 'SELECT * FROM ' + @tableName
		END
		ELSE
		BEGIN
			SET @sql = 'SELECT * FROM ' + @tableName + ' WHERE disable = 0'
		END
	END
	ELSE
	BEGIN
		SET @sql = 'SELECT * FROM ' + @tableName + ' ' + @where
	END

	EXEC (@sql)
END
</pre>
</pre>
<p>Seriously. DEAR GOD. HOW THE HELL DID YOU GET A JOB?</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">public static DataTable GetAll(String where)<br />
{</p>
<p>// get a configured DbCommand object<br />
DbCommand comm = GenericDataAccess.CreateCommand();</p>
<p>//define command type<br />
comm.CommandType = CommandType.StoredProcedure;</p>
<p>// set the stored procedure name<br />
comm.CommandText = "GetAll";</p>
<p>//Create new parameter<br />
DbParameter param = comm.CreateParameter();<br />
param.ParameterName = "@tableName";<br />
param.Value = _tableName;<br />
param.DbType = DbType.String;<br />
//Add param to command object<br />
comm.Parameters.Add(param);</p>
<p>//Create new parameter<br />
param = comm.CreateParameter();<br />
param.ParameterName = "@where";<br />
param.Value = where;<br />
param.DbType = DbType.String;<br />
//Add param to command object<br />
comm.Parameters.Add(param);</p>
<p>DataTable dt = new DataTable();<br />
dt = GenericDataAccess.ExecuteSelectCommand(comm);</p>
<p>return dt;</p>
<p>}</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/08/this-is-not-the-way-you-write-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cognitive Bias, or Why you should get someone else to test your code</title>
		<link>http://www.unauthorised-access.com/2010/08/cognitive-bias-or-why-you-should-get-someone-else-to-test-your-code/</link>
		<comments>http://www.unauthorised-access.com/2010/08/cognitive-bias-or-why-you-should-get-someone-else-to-test-your-code/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:49:44 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=473</guid>
		<description><![CDATA[This happens to be a frequent topic for discussion, where people either believe they shouldnt have to get someone else to test their code, or why they should get someone else, who isnt biased, to test their code. I am a very strong believer in getting someone else to check my work. I am the [...]]]></description>
			<content:encoded><![CDATA[<p>This happens to be a frequent topic for discussion, where people either believe they shouldnt have to get someone else to test their code, or why they should get someone else, who isnt biased, to test their code.</p>
<p>I am a very strong believer in getting someone else to check my work. I am the one who written it, I know what its supposed to do, and I am biased in weather checking if it will work, or not. It is always better to get a second pair of eyes to check over something that you have written / implemented, just to make sure its working correctly. Im not the only one who likes to do this. Pharmacists HAVE to get someone else to check to see if they have dispensed the right prescription drug. Radiologists have to get a 2nd opinion to see if there is a fracture on a bone. In Air Traffic Control, there are computer systems, to make sure that two planes do not try to occupy the same space at the same time.</p>
<p>Take this phenomenon called Controlled Flight Into Terrain (CFIT). Its very interesting, and a bit gruesome. You take a perfectly good plane, fully working and fueled up, and you put a pilot into it, and he might fly it into the ground (or a mountain, or the sea, or an obstacle), in a controlled manor. According to Boeing, its one of the leading cause of airplane accidents and loss of life. This can be caused by a number of things, pilot disorentation, loss of situational awareness, minor problems manifesting themselfs.</p>
<p>Basically, the soft squishy human can be wrong. Two humans are less likely to be wrong than one, 3 more than 2, etc.</p>
<p>Get someone else to test your code. Seriously.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/08/cognitive-bias-or-why-you-should-get-someone-else-to-test-your-code/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comments considered harmful</title>
		<link>http://www.unauthorised-access.com/2010/05/comments-considered-harmful/</link>
		<comments>http://www.unauthorised-access.com/2010/05/comments-considered-harmful/#comments</comments>
		<pubDate>Mon, 10 May 2010 15:05:20 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Cleverectomy]]></category>
		<category><![CDATA[c#.net]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=455</guid>
		<description><![CDATA[I often have this discussion with less learned members of staff, with regards to commenting code. The main argument is &#8220;Comment code so I can see what is going on!&#8221; and &#8220;If you don&#8217;t comment the code, I dont understand&#8221;. In the first instance, I recommend refactoring the code and rewriting it, so you do [...]]]></description>
			<content:encoded><![CDATA[<p>I often have this discussion with less learned members of staff, with regards to commenting code. The main argument is &#8220;Comment code so I can see what is going on!&#8221; and &#8220;If you don&#8217;t comment the code, I dont understand&#8221;. In the first instance, I recommend refactoring the code and rewriting it, so you do not NEED the comments, and usually (99.99%) with the second argument for commenting is, If you do not understand the code, should you really be touching it?</p>
<p>There is the 3rd style of commenting I sometimes come across, and that is the Newbie Comment. Typically, the code has been lifted from a coding website, and someone has left the comments in there, because they either dont know how to use their text editor, or they dont understand the code they are coping and pasting. Both of which, to me at least, indicate that the person should not be writing code and should spend more time understanding the framework and how things work in general, like the following:</p>
<pre class="brush: csharp;">
//create file object
 FileInfo fi = new FileInfo(filePath);
 //read the file into a stream reader
 StreamReader sr = fi.OpenText();
 //store the contents in a string
 string emailBody = sr.ReadToEnd();
 sr.Close();
</pre>
<p>The most common comments I see are totally useless, and simply repeat what the line below will do, for example <em>i++; //increment i</em>. How is that comment at all useful? Its not, it just tells you what the line is doing, which the line itself should tell you. Its duplication of code, you are repeating yourself, which is violation of the DRY principle:</p>
<p><cite>Don&#8217;t Repeat Yourself</cite></p>
<p>From the wonderful book of <a href="http://www.amazon.co.uk/Pragmatic-Programmer-Andrew-Hunt/dp/020161622X/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1273503290&amp;sr=1-1">The Progmatic Programmer</a>. The comment adds nothing to the overall readability of the code, so it shouldnt be there, it is simply extra clutter to make things more difficult to read and maintain.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/05/comments-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Making code easier to maintain, read</title>
		<link>http://www.unauthorised-access.com/2010/05/making-code-easier-to-maintain-read/</link>
		<comments>http://www.unauthorised-access.com/2010/05/making-code-easier-to-maintain-read/#comments</comments>
		<pubDate>Fri, 07 May 2010 15:05:58 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Cleverectomy]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=442</guid>
		<description><![CDATA[Often, when working with someone else&#8217;s code, it works, but it isnt easy to maintain and read. Basically its ugly, and sometimes its like an ugly bag of snakes. Take this example: Note: This code has been changed to protect the guilty. [HandleError] public ActionResult LogOn(string username, string password, bool rememberMe) { string failureText = [...]]]></description>
			<content:encoded><![CDATA[<p>Often, when working with someone else&#8217;s code, it works, but it isnt easy to maintain and read. Basically its ugly, and sometimes its like an ugly bag of snakes. Take this example:</p>
<p><strong>Note: This code has been changed to protect the guilty.</strong></p>
<pre class="brush: csharp;">
[HandleError]
 public ActionResult LogOn(string username, string password, bool rememberMe)
 {
 string failureText = _websiteService.Login(username, password, rememberMe);
 if (!string.IsNullOrEmpty(failureText))
 {
 TempData[&quot;LoginFailure&quot;] = failureText;
 return RedirectToAction(&quot;CheckoutAddress&quot;);
 }
 else
 Response.Redirect(Url.Action(&quot;CheckoutAddress&quot;, &quot;Orders&quot;));

 return View();
 }
</pre>
<p>Now, to me, this rings alarm bells, for multiple reasons. First off, you have failureText which claims to login, but actually gets you if it failed or not. Next thing you have is the &#8220;If there is no failure text, then it has worked&#8221;. Thirdly, you have the defunct return view, even though it shouldnt really be there.</p>
<p>How should this code be structured I hear you cry? Well, something like this:</p>
<pre class="brush: csharp;">
[HandleError]
public ActionResult LogOn(string username, string password, bool rememberMe)
{
 if (AreCredentialsValid(username, password) &amp;&amp; IsUserAllowedToLogin(username))
 {
 SetAuthenticationCookie(username,password);
 return RedirectToAction(&quot;CheckoutAddress&quot;);
 }
 else
 {
 ShowInvalidCredentialsPanel();
 return RedirectToAction(&quot;CheckoutAddress&quot;);
 }
}
</pre>
<p>Much more easier to read, much easier to maintain and modify, and no having to look for magic strings and just assuming someone can login because there wasnt an error.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/05/making-code-easier-to-maintain-read/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Helicopter on the M25</title>
		<link>http://www.unauthorised-access.com/2010/03/helicopter-on-the-m25/</link>
		<comments>http://www.unauthorised-access.com/2010/03/helicopter-on-the-m25/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 10:44:57 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[WTF]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=410</guid>
		<description><![CDATA[Well, no one seems to believe me, so here are the pics.]]></description>
			<content:encoded><![CDATA[<p>Well, no one seems to believe me, so here are the pics.</p>
<p><a href="http://www.unauthorised-access.com/wp-content/uploads/2010/03/18032010186.jpg"><img class="alignnone size-thumbnail wp-image-411" title="18032010186" src="http://www.unauthorised-access.com/wp-content/uploads/2010/03/18032010186-e1268909034473-150x150.jpg" alt="" width="150" height="150" /></a><a href="http://www.unauthorised-access.com/wp-content/uploads/2010/03/18032010185.jpg"> <img class="alignnone size-thumbnail wp-image-412" title="18032010185" src="http://www.unauthorised-access.com/wp-content/uploads/2010/03/18032010185-150x150.jpg" alt="" width="150" height="150" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/03/helicopter-on-the-m25/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creating a CI server using CC.Net Part 1</title>
		<link>http://www.unauthorised-access.com/2010/02/creating-a-ci-server-using-cc-net-part-1/</link>
		<comments>http://www.unauthorised-access.com/2010/02/creating-a-ci-server-using-cc-net-part-1/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 00:05:43 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[CycleMania]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[cc.net]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=386</guid>
		<description><![CDATA[For the CycleMania project, I previously used TeamCity, but I think it is more geared towards building static projects and running tests rather than deployment, so this time around im going to be using CruiseControl.NET Note &#8211; I am doing this and writing this at the same time To get started, you need to install [...]]]></description>
			<content:encoded><![CDATA[<p>For the CycleMania project, I previously used TeamCity, but I think it is more geared towards building static projects and running tests rather than deployment, so this time around im going to be using CruiseControl.NET</p>
<p><strong>Note &#8211; I am doing this and writing this at the same time <img src='http://www.unauthorised-access.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p>To get started, you need to install the following:</p>
<ul>
<li>Subversion for windows, command line, from Collab.NET</li>
<li>NAnt, I have version 0.85 installed, and put the path into the <em>PATH</em> environment variable, I am NOT using 0.86beta1 because of this error:</li>
</ul>
<pre class="brush: plain;">
NAnt 0.86 (Build 0.86.2898.0; beta1; 12/8/2007)
Copyright (C) 2001-2007 Gerry Shaw

http://nant.sourceforge.net

BUILD FAILED

Failed to initialize the 'Microsoft .NET Framework 2.0' (net-2.0) target framework.

 Property evaluation failed.
Expression: ${path::combine(sdkInstallRoot, 'bin')}
 ^^^^^^^^^^^^^^

 Property 'sdkInstallRoot' has not been set.

For more information regarding the cause of the build failure, run the build again in debug mode.

Try 'nant -help' for more information
</pre>
<p>Even though we do NOT need the .net 2.0 SDK! Very poor show indeed.</p>
<ul>
<li>CruiseControl.Net &#8211; you probably want to set the admin password to something else from the config file loctated in the <em>webdashboard</em> directory (inside where you installed cc.net), the file is <em>dashboard.config</em></li>
</ul>
<p>Once you have the above monkies installed, you want to do a checkout of the CycleMania source code to a directory, like so:</p>
<pre class="brush: plain;">

svn co https://cyclemania.svn.codeplex.com/svn/trunk E:\SVN\CycleMania
</pre>
<p>Replace the <em>E:\SVN\CycleMania</em> with wherever your subversion repository lives.</p>
<p>For sake of argument, I have my build scripts living in E:\SVN\CycleMania-BuildScript, and the file is called CycleMania.build</p>
<p>Once you have done that, go into the build script, and type in <em>nant</em>, and you should get the following:</p>
<pre class="brush: plain;">
E:\SVN\CycleMania-BuildScript&gt;nant -buildfile:CycleMania.build
NAnt 0.85 (Build 0.85.2478.0; release; 10/14/2006)
Copyright (C) 2001-2006 Gerry Shaw

http://nant.sourceforge.net

Buildfile: file:///E:/SVN/CycleMania-BuildScript/CycleMania.build
Target framework: Microsoft .NET Framework 2.0
Target(s) specified: build

build:

 [echo] Building Target
 [exec] Starting 'c:\Windows\Microsoft.NET\Framework64\v4.0.30128\MSBuild.exe ( E:\SVN\CycleMania\CycleMania.sln)' in 'E:\SVN\CycleMania-BuildScript'
 [exec] Microsoft (R) Build Engine Version 4.0.30128.1
 [exec] [Microsoft .NET Framework, Version 4.0.30128.1]
 [exec] Copyright (C) Microsoft Corporation 2007. All rights reserved.
 [exec] Build started 2/23/2010 3:47:11 PM.
 [exec] Project &quot;E:\SVN\CycleMania\CycleMania.sln&quot; on node 1 (default targets).
 [exec] ValidateSolutionConfiguration:
 [exec]   Building solution configuration &quot;Debug|Mixed Platforms&quot;.
 [exec] Project &quot;E:\SVN\CycleMania\CycleMania.sln&quot; (1) is building &quot;E:\SVN\CycleMania\Cyclemania.Web\Cyclemania.Web.csproj&quot; (2) on node 1 (default targets).

 [exec] E:\SVN\CycleMania\Cyclemania.Web\Cyclemania.Web.csproj(649,3): error MSB4019: The imported project &quot;C:\Program Files (x86)\MSBuild\Microsoft\VisualS
tudio\v10.0\WebApplications\Microsoft.WebApplication.targets&quot; was not found. Confirm that the path in the &lt;Import&gt; declaration is correct, and that the file exi
sts on disk.
 [exec] Done Building Project &quot;E:\SVN\CycleMania\Cyclemania.Web\Cyclemania.Web.csproj&quot; (default targets) -- FAILED.
 [exec] Done Building Project &quot;E:\SVN\CycleMania\CycleMania.sln&quot; (default targets) -- FAILED.
 [exec] Build FAILED.
 [exec] &quot;E:\SVN\CycleMania\CycleMania.sln&quot; (default target) (1) -&gt;
 [exec] &quot;E:\SVN\CycleMania\Cyclemania.Web\Cyclemania.Web.csproj&quot; (default target) (2) -&gt;
 [exec]   E:\SVN\CycleMania\Cyclemania.Web\Cyclemania.Web.csproj(649,3): error MSB4019: The imported project &quot;C:\Program Files (x86)\MSBuild\Microsoft\Visua
lStudio\v10.0\WebApplications\Microsoft.WebApplication.targets&quot; was not found. Confirm that the path in the &lt;Import&gt; declaration is correct, and that the file exists on disk.
 [exec]     0 Warning(s)
 [exec]     1 Error(s)
 [exec] Time Elapsed 00:00:05.22

BUILD FAILED

E:\SVN\CycleMania-BuildScript\CycleMania.build(7,4):
External Program Failed: c:\Windows\Microsoft.NET\Framework64\v4.0.30128\MSBuild.exe (return code was 1)

Total time: 12.9 seconds.
</pre>
<p>HUH?!? What the hell happened there? Well in the infinate wisdom of Microsoft (which I have <a href="http://www.unauthorised-access.com/2008/07/ms-build-microsoftwebapplicationtargets-was-not-found/">blogged about before</a>), they did not decide to include the Microsoft.WebApplications.targets file anywhere to be found on the hdd, and you have to dig it out from the vs.net install, or you can find it from <a href="http://www.unauthorised-access.com/wp-content/uploads/2010/02/MSBuild.zip">this handly link</a>! Unzip this into your <em>Program Files</em> or <em>Program Files (x86)</em> if you are fancy and have a 64bit proc.</p>
<p>Once you have unzipped that lovely glorious file, and run the NAnt script again, you should see a better output, with LOADS of stuff hapenning, and hopefully at the end, these GLORIOUS WORDS:</p>
<pre class="brush: plain;">

BUILD SUCCEEDED

Total Time: 11.6 seconds
</pre>
<p>Note: Your time may vary.</p>
<p>In Part 2, I will describe how to set up your SQL 2008 instance up, user accounts (NOTE, I would do this properly as opposed to the hacky &#8220;lets get the site to work&#8221; way), and IIS&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/02/creating-a-ci-server-using-cc-net-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Slowness with Windows 7</title>
		<link>http://www.unauthorised-access.com/2010/02/slowness-with-windows-7/</link>
		<comments>http://www.unauthorised-access.com/2010/02/slowness-with-windows-7/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 18:41:23 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=382</guid>
		<description><![CDATA[Well, recently I have been having trouble with my Win7 installation. I was getting very frequent slowdowns (every 2-3 seconds), but only if I used the hdd, if I was playing around with something in memory, then it was perfectly fine. Playing games could get rather frustrating because of the slowdowns, but once everything was [...]]]></description>
			<content:encoded><![CDATA[<p>Well, recently I have been having trouble with my Win7 installation. I was getting very frequent slowdowns (every 2-3 seconds), but only if I used the hdd, if I was playing around with something in memory, then it was perfectly fine. Playing games could get rather frustrating because of the slowdowns, but once everything was loaded into memory, it was ok</p>
<p>After some research, and getting incredibly pissed off with my machine, to the point where I was convinced it was a hardware fault after disabling a bunch of services, updating all the drivers, antivirus, all the extra faff in windows, in one of my moments of desperation before I waved bye bye to my machine, I had a look in Resource Monitor, you know the little button located in the Task Manager&#8217;s Performance tab?</p>
<p>Well under there, I noticed that a certain process was hammering the hard disk, <em><strong>wmpnetwk</strong></em>, and whenever it seemed to hit the hard disk, I would get a slow down. After some research on the all mighty tinterweb, its the <em><strong>Windows Media Player Network Sharing Service</strong></em>, basically for streaming your stuff to other pc&#8217;s and/or Xbox etc, and from what I read online, that if it comes across a corrupted (or half downloaded .avi&#8217;s which I have loads of, after trying to convert a few vid&#8217;s for my friends), it tends to hammer the hard drive. Once I disabled this service, my PC was lightning fast!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/02/slowness-with-windows-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resharper and its &#8220;Convert to LINQ expression&#8221;</title>
		<link>http://www.unauthorised-access.com/2010/01/resharper-and-its-convert-to-linq-expression/</link>
		<comments>http://www.unauthorised-access.com/2010/01/resharper-and-its-convert-to-linq-expression/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 13:50:43 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[resharper]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=375</guid>
		<description><![CDATA[I guess im a bit old fashioned, but I like to write code like: public static List&#60;string&#62; CovertLongListToString(IEnumerable&#60;long&#62; param) { List&#60;String&#62; returnList = new List&#60;string&#62;(); foreach (long l in param) { returnList.Add(l.ToString()); } return returnList; } But then resharper 5.0 gives me this lovely option of &#8220;Convert to LINQ Expression&#8221;, and it turns into: public [...]]]></description>
			<content:encoded><![CDATA[<p>I guess im a bit old fashioned, but I like to write code like:</p>
<pre class="brush: csharp;">
public static List&lt;string&gt; CovertLongListToString(IEnumerable&lt;long&gt; param)
 {
 List&lt;String&gt; returnList = new List&lt;string&gt;();

 foreach (long l in param)
 {
 returnList.Add(l.ToString());
 }

 return returnList;
 }
</pre>
<p>But then resharper 5.0 gives me this lovely option of &#8220;Convert to LINQ Expression&#8221;, and it turns into:</p>
<pre class="brush: csharp;">

public static List&lt;string&gt; CovertLongListToString(IEnumerable&lt;long&gt; param)
 {
 return param.Select(l =&gt; l.ToString()).ToList();
 }
</pre>
<p>Thats just brilliant! I LOVE YOU RESHARPER!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/01/resharper-and-its-convert-to-linq-expression/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deployment process on CycleMania</title>
		<link>http://www.unauthorised-access.com/2010/01/deployment-process-on-cyclemania/</link>
		<comments>http://www.unauthorised-access.com/2010/01/deployment-process-on-cyclemania/#comments</comments>
		<pubDate>Sat, 02 Jan 2010 20:34:19 +0000</pubDate>
		<dc:creator>Monty</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[CycleMania]]></category>
		<category><![CDATA[c#.net]]></category>
		<category><![CDATA[nant]]></category>

		<guid isPermaLink="false">http://www.unauthorised-access.com/?p=368</guid>
		<description><![CDATA[As I have mentioned earlier, I am using a NAnt script to do the building for CycleMania, as I believe that its more geared towards what I need it to do than TeamCity. While TeamCity is a great product in itself, I believe that it either cannot do, or doesn&#8217;t make clear, how to copy [...]]]></description>
			<content:encoded><![CDATA[<p>As I have mentioned earlier, I am using a NAnt script to do the building for CycleMania, as I believe that its more geared towards what I need it to do than TeamCity. While TeamCity is a great product in itself, I believe that it either cannot do, or doesn&#8217;t make clear, how to copy over files from the build directory into another directory (this being the wwwroot of the website).</p>
<p>The reason why I dont want to point the wwwroot at the subversion root, is for security (.svn folders are browsable by default, and not parsed by asp.net), and because of the way that TeamCity works – when it attempts to do an update, it isnt clear on how to get it to revert all changes made (i.e. to the database), and the database file will be locked, with no way of making it available on the fly.</p>
<p>So, in jumps in NAnt. I know, I could use MSBuild Scripts, or powershell scripting, but I have been using NAnt for some time, and I know it rather well, and its free and runs on machines fairly easily.</p>
<h2>A run down of the CycleMania NAnt Script</h2>
<p>To start off with, we build the solution file. There is no point doing anything at all if the solution does not compile, so we run the following, After setting a few variables:</p>
<pre class="brush: xml;">

&lt;echo message=&quot;Building Target&quot;/&gt;
&lt;exec program=&quot;${MSBuild.Path}&quot;  basedir=&quot;${BaseDir}&quot;  verbose=&quot;true&quot; &gt;
&lt;arg value=&quot;${SolutionPath}&quot;  /&gt;
&lt;/exec&gt;
</pre>
<p>For most of the tasks here, I have verbose set to true, because I want as much information as possible in the log file to see if everything worked, and if it didn&#8217;t, why not.</p>
<p>After this, it calls <em>deploy</em>, which has a dependency on <em>clean</em> which does the following:</p>
<pre class="brush: xml;">
&lt;target name=&quot;clean&quot;&gt;
 &lt;exec program=&quot;${AppCmdPath}&quot;  verbose=&quot;true&quot;&gt;
 &lt;arg value=&quot;STOP apppool  &amp;quot;${ApplicationPool.Name}&amp;quot;&quot; /&gt;
 &lt;/exec&gt;
 &lt;delete verbose=&quot;true&quot;&gt;
 &lt;fileset  basedir=&quot;${DestinationDirectory}&quot;&gt;
 &lt;include name=&quot;*.*&quot;  /&gt;
 &lt;include name=&quot;**/*.*&quot; /&gt;
 &lt;/fileset&gt;
 &lt;/delete&gt;

&lt;exec program=&quot;${AppCmdPath}&quot; verbose=&quot;true&quot;&gt;
 &lt;arg  value=&quot;START apppool &amp;quot;%{ApplicationPool.Name}&amp;quot;&quot; /&gt;
 &lt;/exec&gt;
&lt;/target&gt;
</pre>
<p>The reason why we insist on shutting down and starting the application pool back up is because of MSSQL and IIS and their relationship. For some reason, if you simply recycle the application pool, it dosent stop the database that is bound to it (a user instance), so you cannot simply update the file in the App_Data folder, as I found out the hard way, which eventually led me down this path. It seems that if you want to be able to properly delete everything, you can kill the app pool, and it will unlock all the files. Because we are ussing IIS 7.5 on this box, we have to ues <em>appcmd</em> (google for it!), which is alot better than using <em>iisreset</em>, especially since I have other sites running on the box <img src='http://www.unauthorised-access.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>One thing I have considered doing, but dont really have time for, is maybe copying over an app_offline file, so that if someone does hit the site while its being wiped, they can see a friendly error page as opposed to an empty directory listing, or something worse than that, but at the moment, that is low priority for me.</p>
<p>And now, <em>deploy</em> gets called:</p>
<pre class="brush: xml;">
&lt;target name=&quot;deploy&quot; depends=&quot;clean&quot;&gt;
 &lt;copy  todir=&quot;${DestinationDirectory}&quot; verbose=&quot;true&quot;&gt;
 &lt;fileset  basedir=&quot;%{BaseDir}\Cyclemania.Web&quot;&gt;
 &lt;include name=&quot;*.*&quot;  /&gt;
 &lt;include name=&quot;**/*.*&quot; /&gt;
 &lt;exclude name=&quot;*.cs&quot; /&gt;
 &lt;exclude name=&quot;*.resx&quot; /&gt;
 &lt;exclude name=&quot;*.csproj&quot; /&gt;
 &lt;exclude  name=&quot;*.projdata&quot; /&gt;
 &lt;exclude name=&quot;*.sln&quot; /&gt;
 &lt;exclude name=&quot;*.csproj.user&quot; /&gt;
 &lt;exclude name=&quot;*.suo&quot; /&gt;
 &lt;exclude name=&quot;*.scc&quot; /&gt;
 &lt;exclude name=&quot;*.load&quot; /&gt;
 &lt;exclude  name=&quot;*.vssscc&quot; /&gt;
 &lt;exclude name=&quot;*.vspscc&quot; /&gt;
 &lt;exclude name=&quot;obj\**&quot; /&gt;
 &lt;/fileset&gt;
 &lt;/copy&gt;
&lt;/target&gt;
</pre>
<p>Notice, it will only copy files that are not on the exclude list – 99.9% those files arnt needed on a live system, but you can tweak it as required. Im looking to keep the wwwroot of the application as clean as possible, and I dont see much need to copy those files over.</p>
<p>And there you have it! With this script (and the bits that I have missed out), you should have a fully functioning build script that will automatically build it for you, wipe the target directory, and copy over the new files. And yes, it works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.unauthorised-access.com/2010/01/deployment-process-on-cyclemania/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
