General Ramblings comments edit

This is probably going to read almost stream-of-consciousness style because I’m all hopped up on Mountain Dew.

Saturday my parents came over to visit the new kitty. I have awesome parents. They brought over some very cool Da Vinci Code jigsaw puzzles, a nice picture for us to hang in the house, and a Twinkies bake set for Valentine’s Day. (Twinkies were a staple in high school and I still love me a good Twinkie. Zingers are my all time favorite snack cake. In fact, I found them in the vending machine this morning at work and didn’t hesitate a second in cramming them into my mouth. They’re that good.) Jenn and I took them to their first Indian restaurant experience at The Curry Leaf and they liked that. Good times.

Sunday Jenn worked and I had to take little Jack to the vet because he’s been sneezing a lot in the last few days and we thought he had a cold. Turns out some kitties have a virus in them that makes them sneeze and have a runny nose when they are stressed out. There’s not much you can do for them since they have to fight it off themselves, but the vet gave me this nasty amino acid paste that is supposed to slow down the virus enough for the cat’s immune system to fight it off. We have to give it to him and our other cat twice a day.

Of course, giving them this paste is easier said than done. Some cats like it, some don’t. You can fool Xev into eating it by putting it on a couple of cat treats. Jack will do everything he can not to eat it, so we have to put it in a syringe and jam it down his little throat.

Jack has also started a new trick of taking a flying leap at you and climbing you like a tree. He’s a wild little cat and we’re going to have to break him of that because his little claws hurt. I spent a good portion of Sunday walking around with him clinging to my leg like a velcro monkey. It sounds funny, but it wasn’t as cool as you think.

I refrained from doing too much Xbox playing this weekend because I’m all set up for the Xbox Rewards challenge starting today and I didn’t want to get a bunch of Gamerpoints that could be credited toward my run in the challenge. Of course, at the time I’m writing this, the contest hasn’t started yet so I’m wondering when they’re going to get on the stick over there and roll out the signup form. Let’s go already.

This coming weekend is going to rock. Jenn and my mom are headed to my cousin’s wedding shower and will be there overnight, so my dad and I are going to play Xbox and watch movies and hang out all day. (Don’t you wish your dad was as cool as my dad?) I’m not sure what all we’re going to play, but I’m sure there will be some Halo in there because dad is a Halo addict. (Of course, it’d be nice if he’d play the single-player game more often to perfect his skills… hint-hint, Dad…)

I’m wearing my Mooby’s Funployee shirt today, complete with Mooby’s nametag. I found a label maker around work that laser prints on clear labels so I was able to put my name on the nametag and have it look perfect. Hey, it’s the small things.

General Ramblings comments edit

Now this is what I’m talking about. Being a Gamerpoint Whore, I’m all about getting achievements on Xbox 360. Wouldn’t it be cool if you actually got something for the points?

You can.

On February 12, visit http://www.xbox.com/rewards and register. You’ll be placed in an “experience category” based on your Gamerscore at the time of entry. Then if you can raise your Gamerscore by 1500 points between February 12 and April 12, you get a reward (MS points, a shirt, a game… lots of different prizes).

Check out Gamerscore Blog and the Xbox site for more details. I’m totally in.

process comments edit

We’ve all got our source code in source code control systems (right?) that get backed up on a regular basis (right?) so we can reasonably easily recover from any issues and get right back to coding. You might even have a backup program running on your development workstation so you can restore corrupted files or settings.

Are you backing up your continuous integration server?

“Why,” you might ask, “would I back that up? If I have all of my source in the backed-up source code control system, what else is there?”

It’s something I know I take for granted - the continuous integration build server just being there and working. But ask yourself some questions:

  • If you had to re-create your build server, how long would it take you?
  • If someone modifies your build configuration and messes it up, can you roll back the changes?
  • How easy is it to add or remove a project from your build configuration?
  • How easy is it to set up a brand new build server?

Sure, some of those don’t sound like disaster recovery issues, but by solving some of the issues, you can make your life easier on others.

Here are some tips that might help you make your continuous integration server experience a little more trouble-free. (We use CruiseControl.NET at Corillian, so I’ll use that in my examples.)

  • Check in your build server configuration. Store your build server configuration files (e.g., ccnet.config) in source code control, just like your product source. If you ever have to restore the configuration or roll back a bad change, this will make it vastly easier.
  • Isolate build artifacts from the rest of the server. Put everything that has to do with your build - your source, the build server configuration files, state information - in an isolated folder. If you can, put it on its own logical drive. This will help you in backing up, restoring, and moving to a new server (should you ever need to). You’ll know that all you need for the build server to run is in this one folder; everything else is peripheral.
  • Standardize everything. Your source code repository layout. The build output structure. The format of logs that get generated. Everything. This doesn’t sound like it’d be helpful in easing your continuous integration experience, but it is very helpful. By standardizing your source code repository layout across all the projects you build, it’s far easier to script any large changes to the build configuration. It also makes your configuration files look a lot like copy/paste work with minor substitutions. This ties into the next tip…
  • Generate your server configuration. If you have a standard repository layout, a standard build output structure, and so on, you’re only a step away from using a code generation tool to generate any server configuration you need. We have a small XML configuration file that has the differentiating bits for each project - the location of the source code repository, the name of the project, the version label prefix - and use CodeSmith to generate our ccnet.config file. We use that same XML configuration file and CodeSmith to generate a NAnt script that automatically adds any folders for the projects on the build server and do the initial source code checkout. Using Subversion as our source code provider and tagging after each successful build, we can even script re-creation of the CruiseControl.NET state file for each project. A keen side benefit of all this is that adding or removing a project on the server is as simple as updating the small XML configuration file and regenerating all the config.
  • Build on a virtual machine. If your build server is a virtual machine, you can easily take periodic snapshots of the system and restore the whole system to a previous state. It also allows you to start new build servers easier by cloning a good build server image and creating/generating the configuration for your new projects.

Check out your continuous integration setup. If the server died a horrible death in the middle of the night, how long would it take you to get running again?

General Ramblings comments edit

Everyone, I’d like to introduce Jack:

This is
Jack!

Jack is our new kitten, an eight-week-old Siamese/Tabby mix. You can see his body is light tan with white stripes, while his tail is dark brown with white stripes. It’s fairly subtle coloring on his body, but it’s really cool. He also has bright blue eyes like a Siamese.

Jack is a Siamese/Tabby mix - you can see the
stripes.

He’s wild - really wild - which is fun and will be good for our other cat once she warms up to him. She’s needed a playmate for some time. (Right now she’s being very territorial, but I don’t think she’ll be able to hold out for long - she just wants to be loved and you can tell she’s just jealous of the new baby.)

This little guy has more energy than I know what to do with, but once he’s played for a couple of hours straight, he crashes pretty hard.

Say goodnight,
Jack.

We name our cats after TV show characters we like, and this one is Jack for Jack Bauer (from 24) and Jack Bristow (from Alias). (Our other cat is Xev, from Lexx.)

Some folks post baby pictures, I post cat pictures. So there you have it - the new addition to the Illig clan!