Archive for October 2016
I failed to give a demo to Thomas Dolby tomorrow. He’s visiting Microsoft, but my amazing music project Holofunk is currently not working, so I’ve missed a chance to show it to one of my heroes. (I banged on it last night and it wouldn’t go, and I’ve learned from bitter experience that if it ain’t working 48 hours before go time, it’s time to bail.)
And therein lies a tale. If I can’t have the fun with Mr. Dolby, I can at least step back and think about exactly why not, and share that with you all, many of whom have been my supporters and fans on this project for quite a few years. Sit back and enjoy, this is going to be a bit long.
Holofunk: Amazing, yet Broken
Holofunk at its best is a pretty awesome wave-your-hands-and-sing-and-improvise-some-surprising-music experience. I’ve always wanted to try to get it out into the world and have lots of people play with it.
But it uses the Kinect. The Kinect is absolutely key to the whole experience. It’s what sees you, and knows what you’re gesturing, and knows how to record video of you and not the background. It’s a magic piece of hardware that does things nothing else can do for the price.
And the Kinect is a failure. As astonishing as it is, it is still not quite good enough to be really reliable. Holofunk has always had plenty of glitches and finicky interactions because of it, and really rapid motions (like video games tend to want you to make) confuse it. So it just hasn’t succeeded in the marketplace… there are almost no new games or indeed any software at all that use it. It doesn’t fully work with modern Windows 10 applications, and it’s not clear when it will.
Moreover, Holofunk also uses an audio interface standard called ASIO, that is actually quite old. Support for it varies widely in quality. In fact, support for sound hardware in general varies widely in quality… my current miseries are because my original audio interface (a Focusrite Scarlett 6i6) got bricked by a bad firmware upgrade, with tech support apparently unable to help; and an attempted replacement, a TASCAM US-2×2, has buggy drivers that blue-screen when I run my heavily multi-threaded, USB-intensive application.
So the bottom line here is: Holofunk was always more technically precarious than I ever realized. It’s probably kind of a miracle that I got it working as well as I did. In the two-plus years since my last post, I actually did quite a lot with it:
- Took it to a weekend rave in California, and got to play it with many of my old school techno friends from the nineties.
- Demonstrated it at the Seattle Mini Maker Faire, resulting in the video on holofunk.com.
- Got invited to the 2015 NW Loopfest, and did performances with it and a whole lineup of other loopers in Seattle, Portland, and Lincoln City.
- Played it at an underground art event sponsored by local luminary Esse Quam Videri, even getting people dancing with it for the first time!
But then Windows 10 was released, and I upgraded to it, and it broke a bunch of code in my graphics layer. I don’t hold this against Microsoft — I work for Microsoft in the Windows org, and I know that as hard as Microsoft works to keep backwards compatibility, there are just a lot of technologies that simply get old. So after some prolonged inertia in the first half of 2016, I finally managed to get the graphics fixed up… but then my audio hardware problems started.
It’s now clear to me that:
- Holofunk is an awesome and futuristic experience that really does represent a new way to improvise music.
- But it’s based on technologies that are fragile and/or obsolescing.
- So in its current form, I need to realize that it’s basically my baby, and that no one else is realistically going to get their hands on it.
- Nonetheless, it is a genuine glimpse of the future.
And all of this leads me to the second half of this post: I realized this morning that Holofunk is turning out to be a microcosm of my whole career at Microsoft.
Inventing The Future Is Only The Beginning
It’s often said about art that it cannot exist without an audience. That is, art is a relationship between creator and audience.
I have learned over my career that a similar truth holds for technology. Invention is only the beginning. Technology transfer — having people use what you’ve invented — is in some ways an even harder problem than invention.
I got hired into Microsoft to work on the Midori technical incubation project. I started in 2008, and we beavered away on an entirely new operating system (microkernel right up to web browser) for seven years, making staggering amounts of progress. We learned what was possible in a type-safe language with no compromises to either safety or performance.
But ultimately the piper had to be paid, and finally it was time to try to transfer all this into Windows… and the gap between what was there already, and what we had created, was unbridgeable. It’s not enough to make something new and wonderful. You have to be able to use that new wonderful thing together with all the old non-wonderful stuff, because technology changes slowly and piece by piece (at least if you are in a world where your existing customers matter, as Microsoft very, very much is).
So now I am working on a team that is taking Midori insights and applying them incrementally, in ways that make a difference here and now. It’s extremely satisfying work, since even though in some sense we’re reinventing the wheel, this time we get to attach it to an actual car that’s already driving down the road! Shipping code routinely into real products is a lot more satisfying than working in isolation on something you’re unsure will actually get used.
The critical part here is that we have confidence in what we’re doing, because we know what is possible. The invaluable Midori glimpse of the future has given us insights that we can leverage everywhere. This is not only true for our team; the Core CLR team is working on features in .NET that are based entirely on Midori experience, for example Span<T> for accessing arbitrary memory with maximal efficiency.
So even though it is going to take a lot longer than we originally thought, the ideas are living on and making it out into the world.
Holofunk in Metamorphosis
Microsoft has learned the lessons of the Kinect with its successor, HoloLens. The project lead on both Kinect and HoloLens is very clear that HoloLens is going to stay baking in the oven until it is irresistibly delicious. The Kinect launched far too soon, in his current view. It was a glimpse of the future, and it gave confidence in what was possible, but the world — and all the software that would make its potential clear — was not ready.
So now I view Holofunk as part of the original Kinect experiment. Holofunk in its current form may never run very well (or even at all) for anyone other than me, or on anything other than the finicky hardware I hand-pick.
But now that I’ve admitted this to myself, I am starting to have a bajillion ideas for how the overall concepts can be reworked into much more accessible forms. For instance:
- Why have the Kinect at all? The core interaction in Holofunk is “grab to record, let go to start looping.” So why not make a touchscreen looper that lets you just touch the screen to record, and stop touching to start looping?
- Moreover, why not make it a Universal Windows Platform application? If I can get that working without the ASIO dependency, suddenly anyone with a touch-screen Windows device can run it.
- I can also port it to HoloLens. I can bring Unity or some other HoloLens-friendly 3D engine in, so now I will be free of the graphics-layer issues and I’ll have something that’ll work on HoloLens out of the box.
- I can start on support for networking, so multiple people could share the same touch-screen “sound space” across multiple devices. I really would need this for HoloLens, as part of the Holofunk concept has always been that an audience can see what you are doing, but HoloLens will have no external video connections for a projector or anything. So a separate computer (perhaps with a Kinect!) will need to be involved to run the projector, and that means networking.
All of these ideas are much, much more feasible given my existing Holofunk code (which has a bunch of helpful stuff for managing streams of multimedia data over time), and my Holofunk design experience (which has taught me more about gestural interface design than many people have ever learned, all of which will be immediately applicable to a HoloLens version).
I’ve had a glimpse of the future. It’s a fragile glimpse, and one which I can’t readily share. But now that I’ve accepted that, I can look towards the next versions, which if nothing else will be much easier for the rest of the world to play with.
Holofunk is going into a cocoon, and what emerges is going to be something quite different.
Thanks to everyone who’s enjoyed and supported me in this project so far — it’s brought me many new friends and moments of genuine musical and technical joy. I look forward to what is next… no matter how long it takes!