Recently I have gained administrative access to an unusual piece of hardware, tasked with creating a piece of software for it. The hardware in question is the Surface, from Microsoft. It's an interesting piece of kit: it's a table that has 5 infra-red cameras which can take a pretty accurate monochrome image of whatever is touching or nearly touching it. When calibrated, input is mostly accurate, though there can be a slight delay of maybe 1/10th of a second, that's harmless but somewhat noticeable.

Simply for the sheer awesomeness of it, I decided to go ahead and make something for it, in a team with 5 others. So, having had a good week to play with it, what are my thoughts?

First let it be known that I use Linux as my only operating system. Unfortunately, being Microsoft, the Surface requires a large number of Windows-specific things... first fail point. The second fail point is when the creators of the Surface SDK (software development kit) made the installer, they hard-coded the dependencies, meaning it only installs on certain 32-bit Windows Vista distributions. That would be worth two fail points, except it is possible to hack these dependencies out of the installer and patch files for 64-bit Windows operating systems >= Vista. So, I ended up dual-booting with Windows 7 64-bit. Operating system gripes aside, here are my thoughts on the system, for real this time.

- It is undeniably cool. Microsoft's name for it, "Natural User Interface", is actually very appropriate: for the most part it feels really nice to use the Surface. Of course, it depends on the application.

- When launching an application, the app stays launched even after you return to the main menu, the idea being you can come back later and carry on. This seems like a good idea in theory, but the underlying operating system is Windows Vista, and the Surface has on numerous occasions crashed when we had too many programs open at once. Usually it has a nice error message and closes, but once (this was when the person from Microsoft was demoing it actually - it was hilarious) it hard-locked and we had to unplug it to reboot.

- It's terribly corporate. There were several cringe-worthy moments. With lots of apps launched, there is the option for the user to end their session and close all open apps. When you do, you see the following message: "We're closing everything down and starting a new experience. Goodbye." That "starting a new experience"... unfortunately we haven't yet found a configuration file/option to change the message to something less cheesy.

- Development is easy. There are really two options: WPF (Windows Presentation Foundation) or the XNA game toolkit. I've only used XNA so far: while WPF makes really nice-looking interfaces, they all look a bit samey and it doesn't really fit in with the project that we are planning to do. XNA is really something special though. While Microsoft are basically evil, they do treat their programmers with all sorts of goodies (except a viable command line interface). I've barely scratched the surface of XNA and am so far quite impressed with what's on offer.

I'm hoping to come out with something pretty awesome by the end of this (June some time). Anyway, I'd be interested to hear if anyone else here is or has been involved with any similarly interesting or unusual programming projects.