Update: We decided to pull the job ad for the foreseeable future. Thanks to all who applied.

Litmus are hiring a Rails developer. The job will be working with me on the customer facing Ruby on Rails application. There will be Ruby, Rails, Javascript and the joy of helping our little company build even better solutions to the problems of email marketing.

If you’re interested then please check out the job listing over on StackOverflow Careers:

Yesterday I said goodbye to a dear friend, a friend who had lived with us since he was a baby. He lived in our first ever house with us, since before I finished university, before we started Litmus, before we got engaged, before we were married and before the birth of our beautiful daughter. He spent nearly five years with us.

I had been afraid of dogs as a child, we never had pets other than some gerbils, but I had always wanted a dog. Charlotte’s family had lots of dogs and she’d grown up with them so when we moved into our own place together back in June 2005 — we decided to get our own dog.

I remember the first day we went to see him, his mum & dad lived together with one owner in Manchester. His dad, Olly, seemed perplexed with all the little yapping things and stayed well out of the way. His mum, Phoebe was tending to them all so thoroughly, cleaning up after them and caring for them lovingly. At a chorus of little squeaks she would dutifully lie down and roll onto her side, the little pups would all clamber up and get into feeding position.

The day we went to collect him he was ten weeks old. As we left Leeds a snow storm started across the M62 and the journey took ages. We were so excited that even my natural tendency to abandon journeys at the slightest hint of traffic went by the way. He sat on Charlotte’s knee and yapped while we drove back home, eventually falling asleep curled up on her legs.

Weeks before he arrived home, we had excitedly been out and bought him everything we thought he could need, a little plastic bed and soft lining was all he needed really — he’d brought his own little dog toy that he carried around with him everywhere.

The first few weeks we had to take it in turns to sleep downstairs with him at night. You’d be lying on the sofa awake and hear a little scuffle, followed by the sound of pattering little feet across the kitchen floor and then a squeaky cry from behind the baby gate. Many a morning I’d come downstairs after Charlotte’s shift to find him curled up on her pillow next to her head, both of them sound asleep.

We had a horrible carpet in our kitchen at the time, I remember his little claws sticking to it like velcro as he padded across the floor, normally with the little dog toy in tow.

His little blue bed moved into the kitchen in the corner, Charlotte once came downstairs to find him — headfirst down the back of the bed, his little legs kicking in the air as he howled. He never was a normal sort of dog, our little dudley.

Sunbathing on a comfy sofa was something he always loved, he’d sit for hours till he started panting with the heat and we sent him off to the kitchen to have a drink. Sofas and sunbathing were his main pastimes.

He was a happy teenager, bounding round the park and barking at everything that moved. This picture was taken at Roundhay Park in Leeds when we went out for a picnic on Charlotte’s birthday.

Just as he was around one year old, we were lucky enough to get a female puppy from the same parents. Tess came to live with us and the two of them had great fun together. Although it was mainly Tess having all the fun, Dudley started to get a bit grumpy. This was all around the time we were first starting Litmus. Unfortunately it was also the time that Dudley started to have problems.

The first signs of him being unhappy came with adverts on the TV, if a dog appeared he would pick up a toy and shake it violently. This quickly moved onto being any sound or activity he didn’t like, bin bags, tin foil, people at the door. His violence towards toys was in total contrast to his everyday, bumbling around and sniffing things behaviour.

One night while I was out coding with Paul and Matt, I received a call from Charlotte. She said that Dudley had bitten her and she wanted me to come home. I rushed back in a cab to find that she had a bite mark and was very upset. While he was sat on Charlotte’s knee a dog had appeared on a TV advert and — trying to put him down on the floor — he had struck out as he would normally do with toys but got Charlie instead. We were both very upset, Dudley looked very upset as well, I really don’t think he meant it and it’s not at all what happens when a dog is truly “aggressive”.

We soldiered on, taking him to the vets who seemed largely unconcerned. We tried changing his diet, keeping him away from his triggers and walking him to exhaustion. But whilst he was controllable if you were prepared for a trigger, sudden and unexpected noises would make him upset.

We carried on as normal for several years after the bite, but things changed last November when our daughter was born. As you would with any newborn baby, the dogs had to be kept shut in the kitchen away from her. We were so busy that his occasional behaviour became very annoying and we found it difficult not to be angry with him. So I decided to call in a dog trainer to give us one last shot at reforming him.

George Barrett is an excellent dog trainer and helped us no end in learning how to treat both the dogs. Unfortunately we were still in a situation where we could control him if we were prepared, but could not stop him if something happened suddenly.

If we didn’t have Rose then there’s no question that we would’ve have stuck with him, but we couldn’t risk the next toy being her and the stress of vigilantly keeping them separate was having an effect on our other dog Tess, who also had to be shut in the kitchen all of the time.

So, this Monday we made the toughest decision we’ve had to make in a long time and decided to have our little boy re-homed. We found a lovely charity that takes care of Westies on a farm in the North Yorkshire moors. The lady who runs the foster home was just lovely and promised to look after him and find him a good home for us. I don’t think we could have gone through with this without knowing that he was in such good hands with a very caring foster mum.

We were both upset to hand him over, it was funny to see how he wasn’t bothered at all though, still trying to wrestle free from my hug to go and sniff something. I guess in the end all that matters is that he’s got another lifetime ahead of him which is positive for everyone, it just wouldn’t be fair on him to put him in a situation where he could cause harm to a child.

So, goodbye my little boy. We’ll always remember the joy you brought us. We don’t live together anymore, but you’ll carry on being my special little pup and I hope you find a wonderful owner who’ll be lucky to have you.

This was a tiresome process and, something told me, a rather unnecessary one. It was time to investigate Git tags.

The terminology used in the capistrano config file is rather misleading.

set :branch, "staging"

When you dig into the source, branch has a much broader meaning.

# You may set :branch, which is the reference to the branch, tag,
# or any SHA1 you are deploying, for example:
#
# set :branch, "master"

Josh Nichols had beaten me to a better way of handling this, and packed in a handy gem. Enter Capistrano Gitflow (Rubygems | Github)

With this set in our Capistrano config (see the README for capistrano-gitflow) we can now tag and deploy to production or staging simply using two git, and one cap command

git commit -m "magical rainbows"
git push
cap staging deploy

With that last cap command the gitflow gem will hook into the deployment logic, prompt you to tell it something about the commit and then create a tag pointing to the current HEAD of the branch you are on, it then handles all the fetching and pulling of tags and finally passes the SHA into the normal capistrano deployment process.

If I was feeling extra mean to my co-workers, I’d hook the continuous integration server into the process and make it so you can only production tag a release that has built successfully.

The only concern I have regarding this plugin now, is how do I deal with the dearth of tags this is going to create in our Github repo?