<?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>midnight muse &#187; Build Server</title>
	<atom:link href="http://midnightmuse.com.au/category/programming/build-server/feed/" rel="self" type="application/rss+xml" />
	<link>http://midnightmuse.com.au</link>
	<description>Richard Wright's musings about software and other things that take his fancy</description>
	<lastBuildDate>Thu, 15 Sep 2011 14:01:56 +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>Setting up a Build Server Part 4 &#8211; Subversion</title>
		<link>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-4-subversion/</link>
		<comments>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-4-subversion/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 23:30:04 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[Build Server]]></category>

		<guid isPermaLink="false">http://midnightmuse.com.au/?p=169</guid>
		<description><![CDATA[The easiest way to setup Subversion is to use VisualSVN <a href="http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-4-subversion/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The next thing to do was to setup Subversion, my version control of choice. There are many other version control or source control products out there. Some are very good. But I am used to Subversion. As a one man IT shop I don&#8217;t use all the features but what I do use is very useful.</p>
<p>The easiest way to set it up is to get <a href="http://www.visualsvn.com/">VisualSVN</a>.  I have <a href="http://midnightmuse.com.au/2007/12/05/visualsvn/">written about it before</a>, and it is a snap to use. You install it and follow the prompts, it really is that easy.</p>
<p>Next time- setting up continuous integration</p>
]]></content:encoded>
			<wfw:commentRss>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-4-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a Build Server Part 3 &#8211; Interlude</title>
		<link>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-3-interlude/</link>
		<comments>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-3-interlude/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 23:11:04 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[Build Server]]></category>

		<guid isPermaLink="false">http://midnightmuse.com.au/?p=165</guid>
		<description><![CDATA[More on the problems of an out-of-his-depth geek <a href="http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-3-interlude/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I am a bit late in posting this article, I had to finish some work for a client.</p>
<p>The strange thing is that it is the same client who caused me the problems which started this. The history of deployment to this client is briefly this: First time we had to make sure that we were going to the right place, check connection strings etc etc. So it was a case of check and double check and that made it go a little slowly. In addition I had a missing dll on my laptop so I went back to work, fortunately close by, did a fresh checkin from Subversion onto the laptop, recompiled, and went back to the client. All up, deploying and running a few acceptance tests took a couple of hours. Far too long in my view.</p>
<p>The second time was a nightmare. There were a few changes requested by the users and one additional feature. There was also one feature (user story for the agilists) that I had misunderstood slightly. That meant a couple of hours work. But it emphasised the value in short iterations. The first iteration was four weeks. So, very quickly, a wrong understanding by me of the requirements is rectified. If I had been given the requirements for the full product and disappeared for three months that would have been a lot more time, and a lot more money, developing the wrong feature. Back to the deployment. The client asked for a zipped file which I sent to them. I had forgotten to change the database connection string, so it didn&#8217;t work. Fortunately it didn&#8217;t crash but brought up a nice message box with a re-assuring message that all was right in the world. But it wasn&#8217;t going to connect.</p>
<p>I changed the connection string and recompiled, rezipped, and re-emailed. I forget the next problem, or the next or the next. However, I sent the first zipped file on a Friday. They got the working version on Tuesday and I felt, and probably looked like a fool.</p>
<p>The third iteration was again on a Friday, perhaps a bad omen. I wasn&#8217;t risking sending a zipped file so I loaded everything onto the laptop and went to see the client. I was there for about half an hour &#8211; 25 mintues talking about the next project they want done, and 5 minutes deploying. The guy who did the deploying did his black magic about which I know nothing. Two screens, each with half a dozen open windows filled up with line after line of voodoo incantations, and suddenly it was deployed. He checked the new features and the changes. He checked a few old things and it all looked fine. I left feeling relieved, knowing that this was more good luck than good management.</p>
<p>I said in the<a href="http://midnightmuse.com.au/2009/05/08/setting-up-a-build-server-part-2/">last article</a> that I used Windows Server 2008 because I wanted to try it out. I nothing of servers and I had trouble getting the network working properly. After a few days of frustration I removed it and installed Vista because I have set up a Vista network previously. In any event it is really a peer to peer network that I am after, not a client-server network. So getting to know Server 2008 is for another day.</p>
<p>Getting a few PCs to talk to each other is a piece of cake for a network person. Not for me In the old days when I worked for an employer and had a network problem I would ring up a network guy (it was always a guy) who would come up from the bowels of the building, or whereever they lived. He would ask a few questions that I couldn&#8217;t understand. I would shrug my shoulders so he would ring up another network guy. They would talk in acronyms for a while and suddenly I was back on the network. I don&#8217;t know how it works.</p>
<p>Eventually I got the network setup. The computers could talk to each other and I could login to SqlServer remotely. It was time to continue.</p>
]]></content:encoded>
			<wfw:commentRss>http://midnightmuse.com.au/2009/06/05/setting-up-a-build-server-part-3-interlude/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a Build Server &#8211; Part 2</title>
		<link>http://midnightmuse.com.au/2009/05/08/setting-up-a-build-server-part-2/</link>
		<comments>http://midnightmuse.com.au/2009/05/08/setting-up-a-build-server-part-2/#comments</comments>
		<pubDate>Thu, 07 May 2009 14:09:03 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[Build Server]]></category>
		<category><![CDATA[General]]></category>
		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://midnightmuse.com.au/?p=158</guid>
		<description><![CDATA[The first step towards looking smarter. Get the right tools <a href="http://midnightmuse.com.au/2009/05/08/setting-up-a-build-server-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The <a href="index.php/2009/05/07/setting-up-a-build-server-part-1/" target="_self">previous article</a> was an introduction by way of setting out the problem. There are a few tools that will help you get the job done. But first I should explain what I want the end result to be.</p>
<p>What I want is to be able, at the press of a button, to produce a release version of my program ready to be deployed onto the client machine. That sounds reasonable, doesn&#8217;t it?</p>
<p>So what tools do we need? first is <a href="http://www.visualsvn.com/" target="_self">VisualSVN</a>. I have <a href="index.php/2007/12/05/visualsvn/">written about this before</a>. It isn&#8217;t free, it costs $US49.00 but it is worth every penny. It installs Subversion and works a treat.</p>
<p>I also managed to get an old, not too old, PC set up. It needed a hard drive, but I had a spare one of those lying around. If you have been developing for any length of time you tend to accumulate bits and pieces that can sometimes come in handy. The PC needs a memory upgrade, but that is not an issue &#8211; memory is pretty cheap.</p>
<p>You don&#8217;t need a separate PC, but I thought it worthwhile, performance and all that.</p>
<p>First you have to set up the PC. I installed Windows Server 2008. You don&#8217;t need server software, XP or Vista will do. You can even install Linux and Mono. So long as you can compile your C#, or VB.Net code you are OK. But I used Windows Server 2008 because I had it and I wanted to try it out.</p>
<p>There are a couple of things that need to be installed. First you need the CLR of the version you are developing on. These days there is no point in not installing 3.5, even if you aren&#8217;t using its features yet. By the end of the year you will probably want to install 4.0. But you will certainly want at least version 3.0. However, that doesn&#8217;t mean that you want to install Visual Studio, just the framework, because all you really need is the compiler.</p>
<p>You will also need to install VisualSVN Server. This will setup the Subversion Repository on your server. You client, or development PC will connect to the Build Server and hence the Subversion Repository. More on setting up the Subversion Repository next time.</p>
<p>The next piece of software that you want is Continuous Integration software. There are a few of these around. I suppose the most common has been<a href="http://cruisecontrol.sourceforge.net/">CruiseControl</a>. I looked at this a year or so ago and it seemed fairly complex to set up. At that time I didn&#8217;t think that it was going to be of any great benefit to me so I didn&#8217;t pursue it. But a few months ago I came across <a href="http://www.jetbrains.com/teamcity/index.html">TeamCity</a>. It was love at first site. It is incredibly easy to set up and we will look at that after we have examined Subversion more closely.</p>
<p>Finally, I installed<a href="http://www.vmware.com/">VMware Workstation</a> to help me create virtual machines. You can use something like VirtualPC but I think VMware is a better product, but you have to pay for it. We will look at VMware and what it brings to the build process in a later post.</p>
<p>Really finally, there are some other things I installed which aren&#8217;t necessary for the build proces but are useful to have. I will describe these later on.</p>
<p>That&#8217;s it for. Next time &#8211; VisualSVN and Subversion.</p>
]]></content:encoded>
			<wfw:commentRss>http://midnightmuse.com.au/2009/05/08/setting-up-a-build-server-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setting up a Build Server &#8211; Part 1</title>
		<link>http://midnightmuse.com.au/2009/05/07/setting-up-a-build-server-part-1/</link>
		<comments>http://midnightmuse.com.au/2009/05/07/setting-up-a-build-server-part-1/#comments</comments>
		<pubDate>Thu, 07 May 2009 07:16:25 +0000</pubDate>
		<dc:creator>Richard</dc:creator>
				<category><![CDATA[Build Server]]></category>

		<guid isPermaLink="false">http://midnightmuse.com.au/?p=155</guid>
		<description><![CDATA[<p>I have looked like an idiot once too often</p> <a href="http://midnightmuse.com.au/2009/05/07/setting-up-a-build-server-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Around three weeks ago I delivered a project to a client. They did some user testing and found a few issues. There were a couple of new features that they wanted added. And if the database timed out, which it did rarely when there was a lot of traffic, then my app crashed very inelegantly.</p>
<p>The crash wasn&#8217;t hard. I caught the exception and showed a message box saying something like &#8220;There is a database error. Try again and if the problem persists then contact your system administrator.&#8221; They were happy with that.</p>
<p>The additonal features were fairly straightforward. They were all to do with searching through a collection. In days gone by this probably would have meant using regular expressions. But not any more. Throw in a bit of LINQ and voila, feature done, more or less.</p>
<p>I loaded the changes onto my laptop and took it out to the client. They agreed that it was all good and I left the files with their systems guys to load up. A little later in the day I received an email saying that it didn&#8217;t work. Nothing worked. Every screen, including the ones which previously worked fine and were all approved, now crashed. This was impossible.</p>
<p>The application worked on my laptop, they had seen it work. It worked on my development machine. My unit tests passed. Everything worked. Except where it mattered; it didn&#8217;t work on the client&#8217;s system.</p>
<p>The one response to bugs that every developer hates to give is &#8211; but it works on my machine. The client doesn&#8217;t care about your machine. If you turn it on and it catches fire and burns your house down, the client doesn&#8217;t care. The client only cares that your application doesn&#8217;t work on his machine.</p>
<p>So we developers don&#8217;t say that it works on my machine. Instead we say that we cannot reproduce the bug. That sounds much better. And if we have bug tracking software we probably even have a category &#8211; <strong>Cannot Reproduce</strong>. But it means the same thing.</p>
<p>Now, we all have clients who will ring up after you have spent three days chasing down an elusive bug and say, &#8220;I forgot to mention, we have had a blackout for the past three days. Will that stop your program from working?&#8221; Or something equally inane. But my client wasn&#8217;t like that. They had technical people there who are pretty smart and they also tried to find the cause of the bug.</p>
<p>After a few days we found the problem. Naturally it was my fault. The details aren&#8217;t important but it boils down to the fact that my development machine is not the same as their production machine. I have dlls installed that they don&#8217;t. It is easy to forget to copy them all across. It is easy to leave the database connection string unchanged. It is easy to forget to change the configuration from debug to release.</p>
<p>In other words it is easy to forget to do a whole heap of things. That&#8217;s why we use computers, they can remember stuff that we don&#8217;t.</p>
<p>Next time we will look at what we need to ensure that we are set up properly so that we don&#8217;t look like an idiot in front of the client.</p>
]]></content:encoded>
			<wfw:commentRss>http://midnightmuse.com.au/2009/05/07/setting-up-a-build-server-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

