First Thoughts on Microsoft Surface Development

A brand new Microsoft Surface development unit arrived this week in the Moncton T4G office. As I start to develop some prototypes, I will be doing some related posts, but I wanted to start by talking about the platform a little, and the development environment.

For anyone who has no idea what the surface is, it is a multi-user, multi-touch platform released by Microsoft a couple of years ago. Have a look at this video to see what it can do.

Other the last few weeks, before the unit arrived, I have learned quite a bit about the Surface. The first interesting thing I learned was the the surface is not a touch screen in the sense that your iPhone or multi-touch laptop are. The surface of the Surface is just glass – it is not a capacitative or pressure sensitive material at all. All of the touch behaviours and interactions are based instead on a computer vision system. Inside the box there is a fairly standard PC running Windows Vista, with an DLP projector pushing the image up to the table top. There are also 5 cameras inside the box which perform the actual "vision". These feed into a custom DSP board which analyses the camera feeds into something a little more manageable for the PC. The fact that it is a vision-based system leads to some interesting capabilities, as well as some idiosyncrasies.

When the Surface is running in user mode, the Windows Vista UI is completely suppressed. There are no menus, no windows, and no UAC dialogs – nothing that would indicate it is even running Windows. There is also an Administrator mode which shows a standard Vista UI for administrative functions or for development.   

As far as development goes, the good news is that it is all pretty standard stuff. There are two approaches to programming for the Surface. The first is to use the Microsoft XNA Studio platform, the other is to use Windows Presentation Foundation (WPF). Using XNA gives you a little bit more power, as well as access to more of the "lower level" information like raw images from the video feed. Using WPF is a higher-level programming model, and comes with a set of controls specific to the Surface UI model. The nice thing is that all you know about .NET and WPF programming applies to the surface. And from a larger architectural perspective, Surface can tie into any infrastructure accessible to any other .NET-based model. It is just a different .NET UI layer.

The bigger challenge in developing for the Surface is changing the way we think about the UI, and selecting the right solutions. First and foremost, Surface applications are not just a port of a standard Windows UI. Stop thinking about Windows, Icons, Menus and Pointers (WIMP). The surface calls for a completely different models, one that I am just learning. One of the interesting statement I have read describing the Surface model is "the content is the application."
The Surface is more than just a multi-touch platform. Sure, you could implement a multi-touch solution on the Surface exactly the same as a Windows 7 multi-touch solution, but that is only using a subset of the Surface capabilities. The key characteristics of Surface interaction are:

  • multi-user, multi-touch (up to 52 simultaneous touch points)

  • social interaction – multiple simultaneous users, collaborating or working independently

  • 360 degree user interface – users on all sides of Surface at the same time, with UI oriented to support all of them

  • Natural and immersive – like the physical world, only better

  • Support for physical objects integrated into the experience (tokens, cards, game pieces, merchandise)

When it comes to selecting a solution to deploy on the Surface, the two most important keywords are "social" and "immersive". Social, because the best Surface applications are those in which the computer is not replacing human interaction, it is enhancing it. Immersive, because you want the user(s) to forget that they are using a computer, and to only be thinking about what they want to accomplish. The how should be transparent.

Over the coming days and weeks, I will post more about the Surface and what we are doing with it. Hopefully next week I will be able to post a short video. If you have any thoughts or suggestions, I would love to hear them.

Is eMail dead?

I have always been a big fan of email (well, since email became prevalent, anyway). For me, it is a big help to be able to interact with people asynchronously – to be able to send questions or requests and let people deal with them when they have time (and them to me). This as opposed to a phone call or walking over to their office and demanding immediate attention, and interrupting whatever they are doing. I know not everyone shares my views on this. My peers at Whitehill felt pretty much the opposite about email – that it was a medium of last resort, and that face-to-face or phone communication were preferred. As with most things, I think the real answer is in balance and using the right tool for the context.

More and more, however, I am finding that email has become less useful. As a way of distributing specific documents within a team, it is still good. Same for setting up meetings. However, I have noticed a trend over recently (or longer than recently) for people to just ignore email. For the most part, unless a message is marked urgent, or is part of a project-specific interaction, I receive responses to only about 20% of email. I find it hard to believe that this could all be because of poor email etiquette (mine or others). I suspect the bigger problem is email overload – most of us receive far more email than we can possibly respond to. Perhaps email was more productive before it became so widespread. Then there were the years of spam overload, causing many to give up on email as a useful tool. Now (for me, anyway) email spam is no longer a problem. However, many people are still overloaded, even with spam eliminated.

So, is email as a useful business tool dead except for limited communications on projects?

Is Software High Tech? If not is it a Commodity?

I was reading Is Software High Tech? If not is it a Commodity? « Tech IT Easy. It struck me that the question is not entirely meaningful. I agree with the statement “software by itself is no longer high-tech.”

However, the same question may be asked of many other aspects of technology. Take electronics, for example. There is no denying that there is a great deal of electronics which is obviously “high tech”, but being electronic is not, by itself, is not enough to make something high tech. Is a transistor radio high tech?

In the same way, there are many, many kinds of software out there which are decidedly not high tech (including much of the web). This is not to say they are not innovative – being innovative is about much more than the technology.