Rob Smyth

Tuesday 12 June 2007

My Firefox configuration

I use multiple PCs each day, the following is a list FireFox add-ons that I use to help me synchronize between the PCs and I just like.

Add-ons I like:
  • PermaTabs
  • PDF Download
  • New Tab On Tab Bar
  • IE Tab
  • Foxmarks Bookmark Synchronizer
  • Bookmarks

PermaTabs is great for TV guide, weather, build box (CruiseControl), etc. I like the way it only loads the page when the tab is first selected and that you cannot browse from the page. Which pages are made 'permanent' is dependent on the PC as each has a different use (e.g. work or home).

PDF Download

PDF Download is great as I often find viewing PDF documents in my browser crashes the browser. This add-on gives me the choice of view in browser, download, or view using Acrobat external to the browser (my preference).

New Tab On Tab Bar

Because it is just real useful. I use that little button a lot.

IE Tab

Not all pages play fair with Firefox. What I really like about IE Tab is that I can configure it so that those IE preferred pages I visit automatically open in a tab using IE rendering. Cool.

Foxmarks Bookmark Synchronizer

Great for keeping my bookmarks synchronized between my boxes. Useful but not great. I only use this between my home boxes as it has no way of excluding some bookmarks. Its merge is a bit primitive but at least it is conservative so I does synchronize and does not loose bookmarks. Bookmarks

Yet to figure out why I like I have visions of one day thinking 'what was that site' and being able to go to from work and find it. I think it is good, but it has yet to prove its value to me.

Monday 11 June 2007

Rowan Was A Good Friend

After a year of chemotherapy Rowan's time came today. The last year had been good, he has been a happy dog. Today has been very sad and difficult.

We will miss him beside the bed every night, his happy groan when he gets a cuddle, his gentle demeanor, and his chuffed joy whenever he caught the kong. We are missing a very dear and loyal friend.

Friday 8 June 2007

Using Subversion Revision as the AssemblyVersion

Today I spent a few hours configuration our work projects to automatically use the Subversion (SVN) revision number as the assembly version in the AssemblyInfo.cs file in each project.

The motivation was:
  • Give direct traceability from the build number to the SVN revision.
  • With Subversion's atomic commits, make it clear which code was used for each debug/release build etc.
  • Automatic incrementing of the build number.
Googling showed a few tools to update the AssemblyInfo.cs file but this is a bit hard. The solution I used in the end was:
  • Auto-generate one AssemblyInfo.cs file using Tigris MSBuild community tasks project target for the solution (product).
  • All projects include that AssemblyInfo.c file by reference. Hence all assemblies have the same build number.
  • To make sure that the AssemblyInfo.cs file is generated first it a "Common" project was added to the solution with dependencies to ensure it would build first. Right now it does not have any source files, it just builds the AssemblyInfo.cs file.
  • Added the generated AssemblyInfo.cs file to Subversion's ignore list. This avoids the file appearing as changed in all projects.

Thursday 7 June 2007

Automated Customer Acceptance Tests - Jigs

Over the last few days at work we seem to have finally succeeded in creating an environment in which we can easily write customer acceptance tests. It is so cool! We are using a combination of NUnit, NUnitForms, and custom "jigs" (thanks goes to Nigel for the guidance and inspiration).

How it works is that NUnit and NUnitForms provide a base framework but the test actually (mostly) use jig classes. That is, a jig for each UI form. The application is one jig and all others are exposed as properties of that jig. Each child control is accessible as a property on the parent control's jig. In each case the jig returns the NUnitForms tester class, not the actual control.

The end result is that the Customer Acceptance Tests (CATs) are simple (usually only half a dozen lines each) and self-documenting. In combination with unit tests they are killers.

Now we have this it is evident that these "jigs" could be auto-generated at compile time by a tool. A jig for each user control in our project. This would also allow us to automatically add code to hide the actual control so that attempts to access (click etc) are only possible if the control is visible. In a CAT we ought to only be able to do what the user can do.

Tuesday 5 June 2007

Sipura Dial Plan Manager Now On SourceForge

I finally got around to opening a SourceForge project for my Sipura 3000 Dial Plan Manager software I wrote some time ago. It feels good just to upload to their SVN repository as now I know it is safe.

The project URL is No documentation yet, nor binaries. Just the source code.

When I Die I Want These Dogs' Lives

Our three Airedales making themselves at home. That is Golly far top right in the cage (not a great photo so take my word for it). Rowan is resplendent on the bean bag while Violet makes do with her best road kill impersonation (near bottom left).

Golly is doing just fine. He spends most of his time with Violet. Rowan is interested in him, but only on his terms. He is still getting grumpy with a little puppy nibbling on his tail.

Monday 4 June 2007

Golly! A New Puppy

On Saturday (today is Monday) we collected our new Airedale puppy Golly and brought him home to meet our other two Airedales Violet and Rowan. He was only frightened of the two big dogs for about 60 seconds and then he was chasing them! The picture was taken about an hour after he met them.

Rowan and Violet were besotted with him. As the day wore on Rowan got a bit grumpy but Violet cannot get enough Golly and has formed a very strong bond.

Rowan is not well, and normally likes to be quiet anyway so we are keeping him separate most of the time which is not hard as he loves to sleep on the carpet at Sue's feet, and Golly and Violet are either asleep or pouncing on each other.

Friday 1 June 2007

Choosing an open source license

I have an open source project (NXmlSerializer) which I want to use at work. This lead to a good discussion with other developers and managers about open source development, how both the company and the community win, and has made me spend some time taking a closer look at which open source license I use. The selection points I've come up with are:
  • Avoid any liabilities
  • Allow free use
  • Allow commerical use
  • Encourage collaboration
I've used the GPL license in the past, but now I'm not happy with the constraints this license puts on commercial use. Appropriate if competitive but the intent is to collaborate so I'm looking at licenses like the BSD.