Two months with a Google Nexus One…

… has left me with the firm belief that this is the best toy I’ve bought in the last six years.  It’s certainly the best phone; previously I had an HTC Kaiser running Windows Mobile 6, which was frankly laughable by comparison, and irritated me most foul since the first week of my owning it (seriously, did the WM team ever actually use their own software?!).

Anyhow; I love it.  I like:

  • the fact that AppBrain exists, which gives me a nice website for browsing the Android Market from a real browser, and not through frigging iTunes (I have an iPod Touch, and, well, being tied to iTunes is a bit annoying).
  • the integration with Google accounts, including Google Apps.  I have a few of these and it was a breeze to sync them up and use them (though I did have to turn off email sync, since a) I prefer to actively go fetch email rather than be interrupted on someone else’s schedule, and b) it drained the battery noticeably when it was turned on).
  • Google Maps – finally I have a smartphone that can tell me where I am, with a decent interface!  The previous phone’s app was barely alright for finding myself, let alone finding my way around.
  • the possibility of actually writing some software for it – I’ve got a couple of reasonably achievable-sounding ideas that, if I ever get around to, aren’t going to be subject to Apple’s draconian protocols.
  • the idea that the Android OS will get upgraded and the upgrade be pushed to my phone independent of the damn carrier.  T-Mobile UK sucked at keeping up with Windows Mobile updates; it took them 2 years to make a ROM for 6.1 for my phone with their poxy crapware branding on it…
  • the apps; CardioTrainer for tracking exercise; KeepassDroid + DropBox for syncing my password database; NewsRob for being an awesome offline feed reader; Twidroid for getting me into Twitter properly; Subsonic for streaming my home music on the move (though T-Mobile’s spotty 3G coverage doesn’t help…); Evernote; TripIt…  I was childishly amused at the spirit level I found, and I’ve found the WiFi analyser useful in every friend’s house I’ve gone to, advising them to change to a less contested WiFi channel for better signal.

So, yeah.  Heartily recommended – except not, of course, since the problem with Android is that manufacturers are releasing newer better handsets at such a prodigious rate that 2 months later there are already better handsets just about to come out.  That said, I don’t regret the purchase the tiniest bit.

Battery life could be better (but at least it’s a changeable battery, so I could get a spare if it’s really a problem, and it hasn’t been yet), and I’m peeved at T-Mobile’s aforementioned crappy coverage from time to time, but, well…  I’ve been seen using my phone to browse the web while idly sitting in front of my turned-on computer (with, obviously, a full, proper screen and so on), and then mildly ridiculed by my girlfriend for not noticing the computer in front of me.

It’s a really nice phone to use!

TeamCity v5.0.1 with NUnit v2.5.3

If you want to see per-test reporting during TeamCity build-running, with NUnit 2.5.3 (which isn’t mentioned as being supported in the TeamCity v2.5.3 release notes, but actually seems to be fine) executing tests via a command-line command (instead of TeamCity’s built-in NUnitLauncher), where your nunit-console.exe is stored in source-control, you need to:

  1. Jump onto an agent machine
  2. Open up {agent-install-dir}\plugins\\bin
  3. Pull out JetBrains.TeamCity.NUnitAddin-NUnit-2.5.3.dll and .pdb
  4. Drop those into your {nunit-in-source-control}\bin\net-2.0\addins directory in source-control
  5. Commit
  6. Marvel at the per-test reporting that then happens (because a build will kick off)

Thanks to John Leger for getting me most of the way there :-)

Getting Fluent NHibernate and Castle NHibernateFacility to play well together

There’s an interface, Castle.Facilities.NHibernateIntegration.IConfigurationContributor, which gives one the opportunity to hook onto the NHibernate.Cfg.Configuration that the Facility will create, and add on the FluentNH mappings that you’d like (or do anything else you might like to enrich it, actually).  You register your config contributor into your IoC container – the Facility will look for these during start-up (so, if you have more than one SessionFactory, you’ll need to filter on the ids).  This ends up looking something like:

public class FooConfigurationContributor : IConfigurationContributor 
	public void Process(string name, Configuration config)
		if (name == "foo") // only enrich the session-factory configuration with id="foo" in the facility ioc-config.
			var maps = from t in typeof (FooMap).Assembly.GetTypes()
			                   	t.BaseType.Name.Contains(typeof (ClassMap<>).Name)
			                   select t;
				.Mappings(x =>
					foreach (var map in maps)

IncludeCombiner merged into MvcContrib as MvcContrib.IncludeHandling

Over the last few days, I’ve forked MvcContrib on github and merged in my IncludeCombiner library to it as MvcContrib.IncludeHandling.  It was accepted (thanks Jeremy!), and is now part of MvcContrib/HEAD.

So, if you’re running off HEAD, you’ll get it in the continuous-builds’ artifacts [most-recent successful build] at the teamcity instance.  You can also download it from – I just noticed builds are published there automatically.

There are a few known issues / areas for improvement that I’ll push into the issue tracker from the issue tracker where I was keeping them, over the next few days.  I’ll also transfer documentation from my blog to the codeplex wiki, though there is a demo-site; see MvcContrib.Samples.IncludeHandling.  But, essentially, it’s there.

rake-dotnet 0.1.15

I just released rake-dotnet 0.1.15.  Here is the changelog:

=== 0.1.15 / 2009-09-23
CHANGE: Xunit.NET – cope with v1.5 release which packages an x86 console runner as well as x64 one, in combination with wanting to run x86 one if it exists because of WatiN seeming to not be happy running under x64.
=== 0.1.14 / 2009-09-08
FIX: Versioner: Replace the RDNVERSION constant with calls to
CHANGE: Added version task for convenience
=== 0.1.13 / 2009-09-01
FIX: Versioner: Need to make the version.txt file a file-task, so assembly_info can depend on it.
=== 0.1.12 / 2009-08-29
FIX: Versioner: Cache the version number to a file, so CI can pull/push it and maintain same version number throughout CI pipeline stages
  • CHANGE: Xunit.NET – cope with v1.5 release which packages an x86 console runner as well as x64 one, in combination with wanting to run x86 one if it exists because of WatiN seeming to not be happy running under x64.
  • FIX: Versioner: Replace the RDNVERSION constant with calls to
  • CHANGE: Added version task for convenience
  • FIX: Versioner: Need to make the version.txt file a file-task, so assembly_info can depend on it.
  • FIX: Versioner: Cache the version number to a file, so CI can pull/push it and maintain same version number throughout CI pipeline stages
Note: there is still an off-by-one error with the build-number of the Versioner feature.

rake-dotnet Skillsmatter talk – the podcast

I forgot to post, but the recording of my talk at Skillsmatter about rake-dotnet is available online.

rake-dotnet 0.1.9

I’ve done a bit of work on rake-dotnet since the last release I blogged about (which was 0.0.8); the latest release is v0.1.9 and includes:

  • NEW: MsBuild: Can now take arbitrary properties list
  • NEW: MsBuild: Default to treating warnings as errors, as stringently as possible
  • NEW: MSBuild – support for building VB.NET and WiX projects
  • NEW: AssemblyInfo – support for generating AssemblyInfo.vb into {project}/My Project/ (which I hope is the by-convention place)
  • NEW: RDNPackageTask – generate a named task per package so they can be built individually
  • NEW: SevenZip – wrapper for extracting an archive
  • NEW: NCover: Generate the full-coverage report
  • NEW: Add the ability for ncover.reporting to generate more than one report at a time
  • NEW: Add FxCop -> TeamCity code-inspections reporting via TeamCity’s service-messages feature
  • NEW: If VERBOSE=true is passed on the command line, command-line calls will get echoed before they’re run (otherwise, they get ellipsis’d by rake’s error tracing, which doesn’t let one see the arguments)
  • NEW: clobber_fxcop will kill off the fxcop report in isolation
  • CHANGE: SevenZip – wrapper is more useful ;-)
  • CHANGE: MsBuild; use constants rather than hard-codings for verbosity of output and source-directory
  • CHANGE: Harvesters – harvest dumps output into a config-version named directory now
  • CHANGE: NCover: Ignore ISymWrapper assembly by default; seems to be an NCover artefact
  • FIX: When TeamCity build-configs are out-of-sync, number-wise, we cannot rely on RDNVERSION to be a sensible default.
  • FIX: Initialise bin_dir to correct defaults
  • FIX: FxCop – support for running against .exe files instead of just DLLs.  Exclude *.vshost.exe by default
  • FIX: NCover: Exclude-assemblies can be an array
  • FIX: NCover: Implement working-directory on ncover so it executes from the same location as the DLLs it’s using a tool to profile
  • FIX: If BUILD_NUMBER environment variable is not a number, use 0 (since only numbers are valid to the AssemblyFileVersion and AssemblyVersion attributes)
  • FIX: Automatically create {project}/Properties directories when generating AssemblyInfo.cs files (git does not version empty directories)
  • FIX: Detect processor architecture from environment variable rather than require user to figure it out and pass it in.
  • FIX: make get_tools_dir correctly return the path instead of just think about it.

There’s currently one known bug; the fact that output is put into non-friendly-to-type paths (this doesn’t interact with CI well).

Looking for a QA-engineer

The company I work for, Onalytica, is looking to recruit a quality-assurance engineer.  We’re after a developer-type that will focus on testing and assuring-quality – here, quality-of-implementation is a first-class concern rather than injected-as-afterthought-too-late.  Which is a rather nice attitude right there, IMHO! :-)

Other salient points?

  • We’re a primarily .NET-shop, but use tools pragmatically.  We have a build-script written in rake, for example.
  • We’re working on an internet-scale v2 product – v1 is currently live, successful, and high-volume.
  • Thou shalt buy-in to an agile process; automated testing (automated-everything, actually) underpins this.  You’ll be writing software to test product; scripts, test-harnesses, etc.
  • You’ll be good at breaking things to point out, clearly, how to make them better.  Personally, I’d describe that as a sadistic streak combined with tact… ;-)

[download id=”4″ format=”1″]this is the job-spec[/download]

No longer a festival virgin

(Decidedly not a post that has anything to do with software development.)

So I’ve never been to a music festival.  This is a fact that my new girlfriend (A) was taken ever-so-slightly aback by (along with news that I don’t eat Marmite and prefer coffee over tea – I retain the opinion that her opinions are not yet above suspicion…).  So, off to Download for the (last) weekend.  This is a heavy-metal, rock, and alternative music festival held at Donington race-track near Leicester.  Oh, and we’ll camp.

There’s no internet at this campsite.

I receive a three-page (formatted) word document of stuff that will come in handy, as well as a) which things A already has and shall take, and; b) which things are absolutely essential.  In the latter category are things like wellington boots, waterproof trousers and top, warm clothes, sunscreen, and many, many pocket-pack paper tissues.  Apparently, in the UK in June, it has been known for campsites to wash away in the torrential misery of rain that happens along, and waterproof trousers will allow for survival (if, perhaps, not a complete alleviation of abject misery while watching the tent collapse into a pool of mud as it rolls down the hill).  Well, I took her warning to heart and duly laid hands on waterproof trousers and top, and happily have some sturdy boots of the walking persuasion from my time spent at York University up in the Northern Frozen Wastes of God’s County – colour me prepared (at least, as much as I was going to be).

We drive up on Thursday night (I’ve had the foresight to book Friday and Monday off), and arrive to pitch tent just as twilight is waning – it takes a half hour to walk from the field in which cars are parked to the field in which tents are pitched (apparently there is some festival tradition that dictates the two must be at opposite ends of the site).  I fail to trip over any guy-ropes, what with having paid attention to the need to bring a torch.  We’re camping in style, too; no sleeping bags for us, instead we’ve got an air-mattress, pillows, and a duvet.  And very little space for anything else.

Like the internet.

It’s quite hot, too.  As events transpire, I’m feeling rather smug about the fact that all my stuff fits in one small backpack, and all hers fits in one of those travel-the-world backpacker packs – that’s slightly unfair, what with her doing the lion’s share of planning and execution and me only really being along for the ride (and said-backpack lugging duty… ;-) ).  I don’t recall a single drop of rain until we were safely in the car for the trip home, late Sunday night.  Apparently, the weather report was wrong.  Who would have thought?  Lucky we had sunscreen; my lily-white skin caught some burn even so.

The music itself was great, subjective an opinion though that is.  We saw Faith No More, Def Leppard, Limp Bizkit, Marilyn Manson (does he have to get his supporting band members to sign a contract saying he can abuse them?), Hollywood Undead, a bit of ZZ Top, Trivium, and Prodigy (who frankly, ****ing rocked, live!) and a few others.  We slept in and missed some stuff we kinda wanted to see, but not badly enough to trump wanting to find a pool to take a swim in (rather than brave the showers).  We fairly glowed with smug cleanliness as we rejoined our fellow refuge^H^H^H^H^Hcampers on the site, if I do say so myself…

It was actually very much more civilised than I was kinda expecting!  I had a fantastic weekend, even if I’ll continue to tease her about the size of her pack and some other stuff for a little while yet…  ;-)

Dear JetBrains – please implement a ReSharper lightbulb for “fix breaking changes between vX and vY of dependency”

Open-source libraries tend to move quicker than commercially-developed ones.  Microsoft seems to have a policy of preferring to maintain backwards compatibility where the choice is between that and breaking a consumer’s code (whether it’s good code or workaround for a problem in a library).

Perhaps this is the beginnings of an answer…?  I doubt it, but I still think it’s a cool feature-request ;-)

While we’re on the subject of Dear-JetBrains-Please-Fix, how about any of the following…?