Dave Goes Build

Microsoft invited me out to their annual developer conference

June 09, 2016 •

At the end of March, I was invited out as a part of the #davegoeswindows experiment to attend Build 2016, the annual Microsoft developer conference. Think WWDC or Google I/O, but for Windows developers. Over three days of keynotes, roundtables, breakout sessions, and an expo I was able to learn from and speak candidly with many people at Microsoft. Most of my questions were centered around the state of software, hardware, and where things are going in the Windows ecosystem.

A New CEO, a New Microsoft, a New Perspective on Technology

It all started with CEO Satya Nadella giving the opening keynote on the first day. He started his keynote with three big questions; “Is technology empowering us? Is technology generating wealth? And is technology protecting our privacy?”

Microsoft has a new mission statement about “empowering every person and every organization to such and such…” It’s a great mission statement. It has words. The best words. But as the keynote went on the biggest impression I received was:

Microsoft’s view of technology seems to be “We want your thing to work with our thing.”

I found this view of technology refreshing. I think I’ve gotten tired of Google telling me “This is how you have to build websites now.” Or Apple coming down from the mountain once a year saying “Here are the two new products you will buy this year.”

To be clear, Microsoft is a for-profit business that wants you to pay money for their consumer and enterprise, cloud-based technologies. But how they did it was different. Over the course of Build, dozens of new APIs and SDKs were introduced. It was like the entire Microsoft product line was opened up for developer access. It wasn’t some fast-talking salesman approach, it was almost an open source approach; “Here’s this thing, let me know how it works.”

Microsoft under Nadella is a very different business. In fact, everyone from Microsoft I talked to mentioned this. From the top down they’re encouraged to try new things, even contribute to open source, which for some long time employees was absolutely a foreign concept. Microsoft is a very different company now.

In a lot of ways Windows was Bill Gates and Steve Ballmer’s baby in which they could see no flaw and sought to protect. Nadella, however, was in charge of Azure which requires integrating with non-Microsoft products. That subtle change in perspective cascades down, creating a new Microsoft.

Armed with this new perspective on technology, I further tumbled down the Microsoft family of products at Build. I played with things I had never heard of or already dismissed and I saw things I never thought could exist…

Bash on Ubuntu on Windows

When Bash on Ubuntu on Windows was announced I let out an audible “Holy shit!” I never thought this would happen.

If there’s one thing I’ve learned from #davegoeswindows it’s that a lack of a Linux Bash environment makes modern day web development more difficult on Windows. Most tutorials and readme files for large open source libraries are all written from a Bash point of view, with the occasional hard-dependency on Linux.

In response to this, the team at Windows have somehow managed to get a complete Ubuntu binary (not a virtual machine) running natively in Windows!

After the keynote, I got to meet with a very excited John Shewchuk, a Technical Fellow at Microsoft and host of DECODED (a YouTube show about people who make open source). John knew Build just dropped a bomb on me. I asked about the impetus for such a bold move and his reply was something to the effect of “We know it’s important to a lot of developers.” Again, we we want your thing to work with our thing.

But I had to know how well it worked. John introduced me to Dustin Kirkland of Canonical, one of the people working on the Bash on Ubuntu on Windows project. He graciously fired up his machine and said “What do you want to try?” And I replied “helloworld in ruby”. We created hello.rb and I watched Dustin type the following:

# apt install ruby
.. some matrix stuff happened here ..
# ruby hello.rb

It just worked. No Stack Overflow articles. No installers to unzip from the web. No binaries being maintained by one person. No mingw. Native ruby running in minutes.

Bash on Ubuntu on Windows has a way to go, but the future is bright and it’s set to remove a major blocker in my development environment.

Edge

I learned a lot about Edge at Build. I’m not sure everyone knows this, but Edge has been my browser of choice for nearly 11 months. I repeat: Browser of choice. To me it looks the best and feels the fastest. I have to pinch myself every so often that I use the spawn of Internet Explorer for daily browsing and web development, but it works well.

At the time, Edge had more than 180 million unique users and a growth curve matching that of Chrome’s early days. The good news is Edge is being actively developed with great developer relations and there are lots of new things on the horizon:

The last one was the most impressive. Using the Web Authentication specification (formerly the FIDO 2.0 Web API) and Windows Hello, you will soon be able to log into websites using biometric information like your face or fingerprint.

Visual Studio, Azure, Office, and Skype

Lots of updates to Visual Studio, but the biggest was the Xamarin acquisition. Xamarin is a cloud-based, cross-platform device testing service that now lives inside Visual Studio. Like Browserstack for native apps.

I wasn’t extremely impressed until I saw iOS Simulator running on Windows! There was even an Interface Builder-like tool right there in Visual Studio. In some ways testing iOS apps on Windows is better than on a Mac, since most modern PC laptops have touchscreens you can test touch interactions on without ever leaving your laptop.

Office Add-ins were another surprise. Lots of people use Office every day (like ~1 billion people) and the good news for Web Developers is these Add-ins can be written in HTML/CSS/JavaScript and run as web apps in the native Office clients.

Skype also announced a slew of new APIs as it makes the transition over to WebRTC and bot users. Oh yeah… bots, bots, bots.

Bot Framework

Microsoft is betting big on bots. So big they designed and built Bot Framework, an application and framework that helps you build, deploy, give bots language parsing abilities.

The demo for this was incredible, a PizzaBot (#FunFact: There are more PizzaBots than humans) that used natural language parsing to map to API endpoints. The linguistic capabilities of the bot were trained using a machine learning interface all with zero lines of code.

I find the release of Bot Framework incredible because it’s so counter-current to what other bot platforms are doing. Facebook Messenger wants you to build bots for its platform. Slack would rather have you building bots for their platform. But Microsoft is like “Meh, let’s try to make ‘em work everywhere.”

That’s the style of thinking that I find really refreshing. They’re not just only solving their problem (Skype bots and Cortana extensions) but trying to co-exist in an whole ecosystem of conversational bots and make it easier for developers to be cross-bot-platform.

Cognitive Services

Powering the core strength of the Bot Framework is Microsoft’s Cognitive Services API that emulate human capabilities like Vision, Speech, Language, and Knowledge. These APIs are the easiest way I’ve come across to leverage the power of machine learning for your application.

Need to add image recognition and captioning to your app? It’s almost a one liner. Need to detect emotion? It does that too. Don’t have time to figure out Natural Language Processing on your own? Meet LUIS. These APIs are the backbone of the Microsoft apps that have been making the social media rounds: How old am I? What dog am I? Who is my celebrity lookalike?

The majority of demos on the expo floor were using these services as well, but the best demo was in the opening keynote with Saqib Shaikh. Shaikh, a developer at Microsoft, built an application for his smart glasses that takes a picture and using the cognitive services API it will describe back the environment around him.

What is technology if it doesn’t empower people?

Ink

During the opening keynote, Microsoft’s uncomfortably charismatic Bryan Roper (aka “the Fedora Guy”) spent a lot of time talking about Ink. I didn’t think much about styluses until Bryan threw out some interesting data points about pen usage:

  • 72% of people use a pen for 1hr/day
  • 32% of people use a pen for 3hrs/day

Bryan did a good job demonstrating “the power of pen and the PC coming together”, but most impressive of all is you can integrate Ink into your Universal Windows Applications with just 2 lines of XAML1

<InkCanvas x:Name="myInkCanvas"></InkCanvas>
<InkToolbarTargetInkCanvas="{x:Bind myInkCanvas}"></InkToolbar>

I couldn’t really imagine implementing something like this on the Web, iOS, or Android. Seems like gallons of code to do well, but here it is for free.

HoloLens

Hell or high water, I was going to put a HoloLens on my big dumb head and after waiting in a few lines, I succeeded! There’s lots to say about this experience and VR/AR/MR in general, but that’s for another post.

The first impression of the HoloLens is that it’s impossibly light. You put it on your head, twist some knobs, and great sound with no headphones projects into your skull. I think here’s where things went wrong.

I have a large head (7 ⅞ hat) and glasses and the device never quite fit right. Enough to tarnish my impression.

The field of view was an issue as well. One common critique of the HoloLens is that it doesn’t extend to your periphery, it’s just a narrow field of view (120°) in front of you. I think this was compounded by the Destination: Mars demo.

Don’t get me wrong, it was amazing to witness Buzz Aldrin walk into the room like a Harry Potter ghost, but you could also see the square outline of the projection in the dark room. It broke the illusion of a seamlessness transition between reality and mixed reality, and felt like I was just watching a movie (which I was). The magic was removed.

I want to give it another try with a better fitting headset. I think it’d be more impressive in higher light situations.

Surface Hub

Now, I want to go on record and say I care very little for the “How do we design for large screens?” question. But seeing one of these wall mounted 84” behemoths in person, I was curious about what in the design of a Universal (aka Responsive) app didn’t scale to the ultra-large screen.

  • Controls are either in the center of the screen or repeated on both sides. This allows for less walking back-and-forth while presenting.
  • There are a few “zones” or distances to consider. Imagine a board room with a long table in the middle. There are people close, near, and far away from the screen. This affects type sizes, how small and complex designs can be, etc.
  • Input methods: People closest to the screen can touch, but people towards the back of the room may mirror the screen on their device.
  • Privacy is a major concern. You can’t have a sensitive documents like “PEOPLE_TO_FIRE.xls” lingering on the screen when the next meeting walks in. On the Surface Hub, all data is erased after every session when people leave the room, so developers must be prepared for that. Every time your app runs, it’s like the first time.

I wanted to hate this monstrosity but it’s actually a pretty good piece of hardware. Infinitely better than most of the heartaches I’ve seen littering conference rooms across the world. The touch responsiveness was uncanny for how many pixels are on the screen. By the end of the conference I wanted one in my office shed and have started scheming in-office co-op applications specific to the hardware.

Windows IoT

There was a Smart Mirror at Build. I’ve seen Android Smart Mirrors on The Verge before, they’re cool but the Internet of Things is sometimes creepy so I tend to shy away. I almost didn’t attend, but my need for food landed me nearby a demo.

Curiously, it was members of the Edge team giving this talk. They invited a member of the audience to get a selfie taken, then he walked in front of the smart mirror, it recognized him, and it greeted him. Wow!

They mentioned the Magic Mirror repo on Github, I pulled it up dug through the code… it was just a Node app. Then I put it together. The IoT device was just projecting a hosted web app behind the mirror. White text on a black website. Seeing this got me kind of excited to build embedded web experiences on a Raspberry Pi.

An interesting limitation of the Raspberry Pi is that it has 200MB of memory (for page size and JS heap), so animations and fancy JavaScript stuff is probably a no-go.

Thanks for having me, Build

I want to thank Microsoft for having me out to Build. In private backroom roundtable discussions, I got the chance to talk with and vomit my problems on people who are very good at their job and very respectable. They took the feedback to heart and one VP of Product even said, “This is how we get better.”

The most important thing is that Microsoft was listening. Again, and I can’t stress this enough, it feels like an entirely new Microsoft. An organizational change of that magnitude is hard, if not impossible to pull off.

As the Anniversary Edition of Windows 10 approaches I can say without a doubt that things have improved over the last 11 months. It’s great to see software iteratively improve over the course of a year. The new level of transparency and feeling of confidence that comes from Microsoft trying to get “your thing to work on our thing” is better than all the marketing dollars in the world.

  1. XAML is Microsoft’s XML-based user interface markup language, like React but from 2008.