Fix it Pat (part 2)

Monday, 5 November 2007

Photo of David from Sunday Mail As we arrived at Church on Sunday, I was greeted by a number of people saying, "We saw you in the paper today!"

So while I didn't get a mention from Thursday's interview on the day, apparently my mug is in the paper edition, along with along with some of my comments (down under the Belair sub-heading).

To be fair to the Sunday Mail, they are being pretty open about the fact that they were the ones handing out the badges, and I think I've been quoted accurately, which is reassuring.

(Photo from Sunday Mail, 4th November 2007)

Fix it Pat

Friday, 2 November 2007

Today at Blackwood Train station, I was interviewed by a Sunday Mail journalist.

Apparently they are running a campaign to encourage more investment in public transport, particularly after the problems the trains had yesterday with the computer system failing completely.

I didn't make the copy in the final article - oh well.

Owen Vinall, 56, of Coromandel Valley and Susan Lewis, 49, of Blackwood ride the Belair train this morning. Picture: JENNIE GROOM

Looks like I will need to get Owen's autograph after all (he's the guy on the left). I was sitting just out of shot behind the guy standing up near the door on the right :-)

Building Rhino Tools from the trunk

Sunday, 28 October 2007

I read about the release of Binsor 2.0, and thought that might be really handy for a current project. The problem is that you need to compile it yourself.

This was causing me a few headaches and one late night after a countless false starts I gave up and posted to the Rhino Tools Dev group.

Prerequisites

You will need the command-line SVN tools (even if you already have TortoiseSVN).

Directory layout

I've used the following directory layout (with SVN repository paths):

I then saved RhinoTools-Trunk\BuildFromTrunk-Config.build.sample to BuildFromTrunk-Config.build and edited it like this:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Update-All;Build-All;Copy-To-Artifact-Dir" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 <!-- Configuration -->
 <PropertyGroup>
 <Configuration>debug</Configuration>
 <Enable-Tests>false</Enable-Tests>
 
 <!-- User Settings -->
 <Dest-Dir></Dest-Dir>
 <Dest-Lib-Dir>$(Dest-Dir)\lib\$(Configuration)</Dest-Lib-Dir>
 <Dest-Tool-Dir>$(Dest-Dir)\tools</Dest-Tool-Dir>
 
 <Tools-Dir>$(MSBuildProjectDirectory)\SharedLibs\Tools</Tools-Dir>
 <NH-Dir>$(MSBuildProjectDirectory)\..\NHibernate-Trunk\nhibernate</NH-Dir>
 <Castle-Dir>$(MSBuildProjectDirectory)\..\Castle-Trunk</Castle-Dir>
 <Rhino-Dir>$(MSBuildProjectDirectory)</Rhino-Dir>
 <Artifact-Dir>$(MSBuildProjectDirectory)\Trunk-Artifacts</Artifact-Dir>
 
 <MSBuildCommunityTasksPath>$(Tools-Dir)</MSBuildCommunityTasksPath>
 <Svn-Dir>$(Tools-Dir)\Subversion</Svn-Dir>
 </PropertyGroup>
</Project>

The final thing that caused me grief was some missing edits to RhinoTools-Trunk\rhino-commons\Rhino.Commons\Rhino.Commons.csproj. Hopefully this will be patched soon, but I had to make the following hand-edits to the csproj file:

Index: Rhino.Commons.csproj =================================================================== --- Rhino.Commons.csproj (revision 908) +++ Rhino.Commons.csproj (working copy) @@ -158,7 +158,9 @@ <Compile Include="Binsor\Extensions\StartableExtension.cs" /> <Compile Include="Binsor\Macros\AbstractBinsorMacro.cs" /> <Compile Include="Binsor\Macros\BaseBinsorExtensionMacro.cs" /> - <Compile Include="Binsor\Macros\BaseNamedBinsorMacro.cs" /> + <Compile Include="Binsor\Macros\BaseBinsorToplevelMacro.cs" /> + <Compile Include="Binsor\Macros\BaseConfigurationMacro.cs" /> + <Compile Include="Binsor\Macros\ParametersMacro.cs" /> <Compile Include="Binsor\Macros\ComponentMacro.cs" /> <Compile Include="Binsor\Macros\ComponentMethodVisitor.cs" /> <Compile Include="Binsor\Macros\ConfigurationMacro.cs" />

I then opened a Visual Studio 2005 Command Prompt ("Run as Administrator" on Vista), and entered:

msbuild BuildFromTrunk.build /t:Build-All

3 minutes and 44 odd seconds later, Rhino.Commons.dll appeared.

One thing to note, this is built of the trunks of NHibernate and Castle Project code, so those bits may or may not be as stable as the most recent public releases.

G3 on the way

Friday, 19 October 2007

It is with great excitement that I can now announce that we're expecting our third child, due in May next year.

Not specifically "one for the country", but at least with our extension almost finished we should have enough room for everyone!

Strongly-typed primary key identifiers

Friday, 19 October 2007

Often the primary keys for tables are integer types. One problem can occur when you accidentally use the OrderID when you really meant to use CustomerID. This bug can happen inside the database and it can also arise in your code data layer.

One solution for this at the code level is to create custom types (eg. OrderIdentifier and CustomerIdentifier) so that the compiler will throw an error if you try and assign or compare different types.

The down-side to this is that because Integers are value types, you can't just inherit from the Integer class. Instead you need to store the actual integer value inside the class and expose it through a property.

eg.

Public Class OrderIdentifier
 
 Private _value As Integer
 Public Property Value() As Integer
 Get
 Return _value
 End Get
 Set(ByVal Value As Integer)
 _value = Value
 End Set
 End Property
 
 Public Sub New()
 End Sub
 
 Public Sub New(ByVal value As Integer)
 Me.Value = value
 End Sub
 
End Class

I've also noticed that NHibernate doesn't like having custom types for primary keys, as it tries to use the System.Type.IsAssignableFrom method to see if it can convert an Integer to the OrderIdentifier object (which fails).

I'm not sure that there's a workaround for that, as I think it would require a class to inherit from the Int32 structure, which isn't possible.