Continuous Integration
I received news this week that I was going to be starting a new project (well, just another release of my last project) so I started to prepare my build and source control environments in earnest. Because I have to be able to build for defect fixes in the production environment at any time, plus I have to pursue a new strain of development, there were a number of hurdles that I needed to overcome.
The first decision I had to make was whether I should keep only one VSS database, use two (one for production and one for new development) or move to a new source control package. After reviewing a couple of source control option other than VSS, I decided that I needed to stick with VSS. The decision was made solely because of the difficulty I would have getting a new system installed into the IT environment I work in. That left me only one choice to make, one database or two. I decided on two primarily because of the depth that the new development was going to have in the code base. The second reason that I chose this was because of the ability to ensure that changes were not accidentally made, left untested and then migrated to the production environment during a hot fix. The drawback of this is that we will have to duplicate all the code that we write for production hot fixes. That said, knock on wood, we’ve had so few problems with the system that I can’t see this happening very often, if at all.
After deciding on the layout of the source control environment, my next task was to tackle one of the things that caused us to drop the ball during our previous releases. Because we have to do two specific things, on click installs and build for 5 different environment configurations, we have to manage five different setting values for each installation parameter. The problem that we encountered was that changes were not propagated through the setup files in all environments all the time. This was primarily caused by the system of manually making these changes to the files. The solution that I decided to work with as part of solving this was Cruise Control .Net. The combination of creating installations automatically (and repeatedly) with Cruise Control .Net and the use of NAnt (kudos to the previous team lead for getting us that far into this system) for performing the builds will bring a greater confidence, if only for me, in the installation deliverables.
The one area that I’m still lacking coverage of is the automatic generation of the installation parameter files for the different environments. How I’m planning on accomplishing this is to create a command line program that can be called from either NAnt or CCNet and will generate the files just prior to the creation of the packages. My plan is to have all the different values stored in an MS Access database where I can create and store values for the parameters in an extensible way.
So far I’m really liking how our build system is growing. The only hiccup that I’ve run into so far is not being able to get CCNet running as a service. This is not because of some problem with CCNet though. It is a problem with our environment. My build servers (the just happen to be in our development sand box) are in a work group outside of the corporate domain. The VSS database is on a network share that is in the corporate domain. Everything works fine when I’m logged into the server and I have a mapped drive that uses my domain credentials. As soon as I set it to run the service it fails because the account the service is configured to run under does not have permission to any resources within the corporate domain. I’m sure I can fix this (one way is to run the service under a domain account), but I haven’t had any luck yet. I’m really hoping that this one hurdle doesn’t prove to be the one that trips all these plans up.
I’m the Igloo Coder and I think my sentimental favourites in Olympic hockey this time around are the Swiss…..but I’m Canadian and my realism is biased.
The Great Adventures of PM Boy
Recently the project I was assigned to came to a rather graceful, and most certainly successful end. As it ended the subsequent system maintenance contract began and I moved on to it along with a new project manager type. This new bloke quickly became identified by the moniker “PM Boy” (actual nickname with held to protect the not-so-innocent). Over and over he’s proven that the name will never leave him.
Let’s reminisce about the other day. PM Boy strides into my pod with one thing on his mind…..wait…..wait…..damn, I think he forgot it. Dissuaded none-the less PM Boy returns to the scene of his first volatile memory purge and begins to discuss how he would like us to record the items we work on during the day. The earlier statement I made about the project being a success is based solely on the fact we spend days on end surfing the web while we wait for the next production issue to hit us. So PM Boy, in his over eager and pure textbook ways, decides that we should have a 10 tier breakdown for the time we spend looking at these rather elusive issues. By the time he finishes discussing the 10 point plan, PM Boy has started to hit his stride. That is until he trys to say the name of the client we are working for. Our client is commonly referred to by a three letter acronym, and PM Boy just can’t spit it out that day.
Part of what PM Boy was brought onto the team for was to take some of the direct client heat away from me, or the next poor sap who performs my role. PM Boy is most definitely my senior in many ways. He’s older than me. He’s been in the industry longer than I have. He’s even the holder of a higher position within the company. Unfortunately, PM Boy has nothing real world to go with those attributes. I look at the things I’m currently doing and think “Hmmmmm…..PM Boy is supposed to do this, maybe I should teach/sucker him”. Then I come to the unfortunate realization that there is just no way in hell I’m going to expose him to the client in that situation. He’ll get eaten alive (insert mental image of circling sharks and a rag-doll corpse). Worse yet, I’ll end up having to sort through the dismembered corpse in an attempt to find the vaguest semblance of normalcy.
I’ve only given the guy 2 weeks so far, so I’ll cut him some slack. But if this is the way it’s going to be in 3 months, I should start taking names of willing and eligible liver donors.
I’m the Igloo Coder and for all you PM types out there, if you want to wear the pink tights and the lavender cape, please, for the love of Pete, spend some time wearing it in front of a mirror while you practice saying the name of your client.
Server Virtualization
Channel9 has a great video on the way MS Virtual Server is architected and a lot of discussion on how you may use it.
Like any geek, I regularly get the question “What computer should I buy?” and for the last year or more I’ve been answering that what ever people purchase, it will most likely be overkill. PC hardware has far exceeded the needs of the average home and work user. I really don’t need a 3Ghz machine with 1Gb of RAM to be able to run the company’s Excel (shudder) database. Unless you are a gamer or you absolutely require 8 instances of MS Word, 3 versions of MS Access, 29 instances of IE and 33 Messenger windows, you are probably not going to see the benefits of the 3Ghz processor. And even if you do need all this garbage open at one time, you really need to be concerned about appointment time with a psycho-analyst.
In previous lives I’ve done a bunch of work in the Network.Admin namespace and when I was looking for servers I was always concerned about the usage in my current stable of boxes. I’d always want to have my SQL Server 2k install on it’s own box, a separate box for my domain controller and so on and so on and so on. How could I justify another piece of hardware when I currently have a dual processor machine, hosting IIS, that sits there with utilisation under 10%? Oh for MS Virtual Server back then.
Today I only dabble in the Network.Admin namespace, but I still see the under use of server hardware, especially for small businesses, as being the largest drain on the IT budget. I also have the great opportunity to work in a development environment that extensively uses virtual servers. The development environment consists of 8 Win2k3 Server’s in a dev sandbox, 3 Win2k3 servers in our first level testing, 3 Win2k3 servers in our second level testing, and 5 Win2k3 servers in our final level of testing. So all in all, we have 19+ servers, all virutalized. Imagine that the environment couldn’t be serviced using virtualization. I would need over 19 separate and distinct piece of hardware, the space to house them and the electrical power to keep them whirring. In the end there’s a huge price difference and we better use the servers.
I can tell you now that my ideal development environment, from this point forward, will always include a block of virtual servers. It’s just the right economical thing to do.
I’m the Igloo Coder and I’m working on a system to virtualize the ladies that want me….wait…that’s already the case.
Cassini's Random Ports
My Inbox
I read this morning that Yahoo and AOL have announced that they will offer a pay-for-delivery, guarantee it makes it to the Inbox, email service. Will it work? Who knows. Will people pay for this service? Again, who knows. Hang on. Who cares?
I do love the way my spam filter software plucks all but the occasional penile enlargement ad (occasionally they do make for stellar reading). I even love the way that it learns that some of the recruiting agency’s I’ve dealt with in the past are now just a group of spammers to me. Yes, I do run into the rare case where someone’s valid email is redirected to the spam box, but that’s why it puts it in a box and doesn’t delete it. You can, at your leisure, peruse the crap that has collected and pluck out the good stuff. If people start paying for this, I will get the email in my inbox for the short term. If I believe that they are a spammer (or less than savoury recruiter), I will just have to revive the Kill Filter and have those emails redirected to the Spam or Delete folders anyways.
I’m the Igloo Coder and when I write a message in a bottle it’s usually incoherent. Then again, the bottle is usually alcohol in nature.