Hands on with Microsoft HoloLens

At the recent Microsoft Ignite conference, I got the opportunity to try the Microsoft HoloLens. CvpEnq4VUAA-4sc

All I'd seen up to that point were videos like these:

[embed]https://www.youtube.com/watch?v=aThCr0PsyuA[/embed]

Sure, marketing videos will always look better than the real thing. I'd been bitten once before - by Google Glass. Google Glass had great marketing but really just sucked once on your face.

But once I put on the HoloLens it was completely different. It was totally legit.

First, a bit of knowledge. Back at university, during my honours year, I did a great course on Augmented Reality. It was taken by well respected researcher Dr Mark Billinghurst. He taught us the concepts required to understand AR. To sum it up, for an AR system, a computer must recognize points of interest in an image (corners, edges, etc) and then place the object, scale it, and orientate it correctly. This is quite computationally complex, and expensive. Oh, and it must be done every frame, roughly 25 times a second.

With that in mind, I expected HoloLens to suck at that, but to my sheer and utter delight, it freaking nailed it.  We later learned that the HoloLens has a dedicated processing chip for the above process, and that's what allows it to be so fast.

That being said I did have some gripes. Firstly, the field of view (eg how much of your field of view that could possibly contain holograms was small. I suspect this is just a V1 thing, and the ability to expand that is coming. However, this might be easier said than done, due to the above process. But for now, for example, you'll not see a floating space ship in your peripheral vision.

Secondly the unit was a bit heavy. I'd say after an hour of playing/watching/using the HoloLens your neck might be a bit sore. Once again, V1, once again, probably fixable.

The gestures worked well, but took a couple of gos to get used to them. Watching the Microsoft employees (who had been using it for a while) use it, they were able to have their hand movements recognised first time. Right now it supports just a few, but I'd really like to see some gesture inference going on, and then it could get really cool.

Overall, a great first start. I'm looking forward to see where they take it next.

Developers: If you're keen to start writing apps for this (hey, it's just Windows 10 Apps or Unity), then go here. Developers can buy up to five devices with shipping to the US, UK, Canada, France, Ireland, Germany and New Zealand (woo!).

 

On Tooling

I started coding in two ways. When I was 13, I tried a little bit of C. I didn’t get very far, in fact I wrote something like this before I got confused and bored:

Basic C program — Hello World.

The other way I tried was using iWeb  — A visual WYSIWYG editor for making websites. I of course hacked around with the CSS and HTML it spat out. But I ask you — can you guess which one I enjoyed more?

Tools + language, not just the language itself, makes a developer productive. And somewhere, I feel we lost that. Tools can make up for flaws in languages, but can also enhance productivity for languages that are just fine.

Yesterday as I went to write some Swift 3 code in Xcode 8.1, the editor crashed. A restart of Xcode didn’t fix it and I was unable to even use autocomplete to fill out some nontrivial block syntax.

screen-shot-2016-11-05-at-6-54-22-pm

Adding insult to injury, I certainly can’t refactor my stuff either! In fact, try use anything from Xcode 8’s (7, or 6!) ‘Refactor’ menu and you’ll get this depressing dialog box.

Error message stating Xcode can’t refactor Swift

We’re on year three of Swift. Version 3. And the tooling still sucks. 

I was just at Microsoft Ignite here in New Zealand, and I have to hold Microsoft up as the company that does Tooling so well. I spent a few years doing .Net as a student, and quite frankly, I loved it. C# is a solid language to work in, with lovely OO and Functional (LINQ) capabilities and around it, a bunch of awesome tools such as Visual Studio, intellisense, ReSharper and more!

I spent the week quite frankly being quite jealous of the tooling. From VS you can publish directly to Azure and all sorts of other things. And then even Azure is a brilliant collection of tools that intertwine and integrate better than a plate of linguini.

Typescript, Microsoft’s new is actually leading the way with something they call a language server protocol, meaning as long as your editor speaks the protocol, you get all the features like intellisense and autocomplete. Even Rust is following. Such innovation. Wow.

In the other camp, our frenemies in Android land have Android Studio which is superb, and they love to bemoan Eclipse, which is still better than Xcode. Sure, they have to put up with Java, but since Java 7 it’s been quite nice and 8 just came out and it looks great too. Heck, even PHP has been good since v5.

You might say “Oh I’m too good for IDEs, I just use Vim”. Sure.. but wanna try tell me you have no vim plugins? Exactly. Tools.

Look, I’m not trying to have a go at language innovation (it’s great!), but this obsession we have with building new languages such as Swift and it’s features just has to be be matched with the innovation of tooling as well. Refactoring, renaming, style checking, unit testing and more must come with a new release. Rust is doing well with errors. Elm is following suit. And one could argue Go has had notable influence in its focus on really fast compile times and standardised syntax formatting (by way of the gofmt tool). Why is Swift lagging?

Sure, the official line seems to be “it’s on the list”, but I’d argue we could have at least got class renaming before several versions of Swift. It’s great they’re adding new features from other languages — but it’s not great that it is at the expense of the surrounding developer experience. With that said, do Apple really expect us to commit to Swift? How about for the Server and other places?

Still not getting it? How about this: since we like to call ourselves engineers, let’s take a more direct metaphor from our Civil Engineering friends. Swift is a new type of material, but we have nothing to mold or shape it with. Tools and materials go hand in hand, and we’ve forgotten that. It’s no different with Software Engineering.

Hey Chris Lattner. Love your work, but how about next year we don’t get a week-long migration process and instead get some better Swift tooling?

Don’t forget, Tools + language, not just the language itself, makes a developer productive.

¯\_(ツ)_/¯


/rant So that’s my current thinking on this topic. What are your thoughts? Leave a comment or ping me on Twitter — I’m @samjarman.