Friday, May 29, 2015

I don't get UWP on IOT

On Windows 10 we'll be able to build a single app, using the Universal Windows Platform (UWP) and have it run on a wide range of device families: IOT, Mobile, Desktop, XBox, Surface Hub and HoloLens.



I've been thinking a lot recently about the idea of "write once, run anywhere" (possibly more on that soon) and it got me thinking.

While it's good to have one language and set of tools you can use to build for all platforms it's probably the exception where you want the exact same thing on each of them. Yes, to have apps and UIs that can adapt to connected peripherals and varying screen sizes is a good things but it still doesn't necessarily cover all scenarios and contexts of usage.

I assume that the platform (device family) which will be most popular for Windows 10 will be the desktop and then the second will be mobile. We have many years of experience in designing apps that work across phones, tablets and desktops. But not IOT devices.

Actually, what is an IOT device?
Well, that's a tricky question because it's not just one thing.
I'm a bit old school in this respect but I mainly think of IOT in terms of Machine-to-Machine (M2M) but it's also varying physical devices, wearables and many more things as well.

Very few of those devices will typically have screens though and so you might want to do something very different in a UWP when running on an IOT device when compared to desktop or mobile. Talking with lots of people about this a common suggestion is that the IOT version may use sensors to collect data that is displayed in the mobile & desktop versions. If that's the case, why build a UWP for the IOT part? Just put the shared code in a library that can be used by the UWP on mobile and desktop and create a separate app for IOT.  The IOT app would then be much smaller (a good thing on a highly restricted device) and you still get the same end functionality. Just putting it all in a single UWP means that when running on an IOT device it brings along a lot of extra baggage too.

But wait, when talking about IOT on Windows 10 at the moment, the conversation is often about it running on devices like a Raspberry Pi II. One thing that is especially appealing about such devices to many is that they are now quite powerful computers and you can plug in a screen, mouse and keyboard and then you essentially have a cheap PC.


So that leaves me with a different question:
Is Windows 10 running on an IOT device just a way to have a cheap PC? Or will we see other things too?

What are your plans for Windows 10 on IOT?



Thursday, May 28, 2015

What's the point of (where is the value in) Project Astoria and Project Islandwood?

Projects "Astoria" and "Islandwood" are "Universal Windows Platform Bridges" that allow you to reuse the code used to build Android and iOS apps to make apps for Windows 10.
They each work a bit differently but are typically talked about together as their very existence shows that the "new Microsoft" and Windows 10 are very different from the Microsoft and Windows of the past.

There are a couple of key differences.
Astoria allows you to take an existing APK and submit it to the Windows Store and comes with the ability to replace the use of Google specific services with their Microsoft/Windows equivalents. It also only works on "Windows 10 Mobile" - what used to be known as "Windows Phone" but now also includes small tablets (phablets).
Islandwood allows the creation of Universal Windows app, that runs on more than just the mobile SKU of Windows 10, but using Objective-C. It also includes shims and mappings for the use of the more common iOS functionality and services.


Who would use them and why would they care?
Consider someone who already has a mobile app or game. They want to reach as many potential customers as possible and so their app/game is almost certainly available on Android or iOS. It's possible that they have created both versions with a cross platform tool* but it's more common that they will have created the iOS version in objective-C and the Android version in Java.
When they now come to consider supporting Windows 10 there are considerations to make:
1. Will there be enough potential users to make the effort worth while?
2. How much effort will be involved in creating the new version?
3. Do they really want to write the app/game for a third time?

Let's look at each in turn.

1. At the moment Windows/Windows Phone has a very small market share but Windows 10 has the opportunity to help increase the number of devices running a single version of Windows dramatically. Microsoft have even said they're aiming to get Windows 10 on a billion devices in two to three years. A billion potential users could be very appealing but until it shows some traction both the market share percentage and absolute numbers remain low.

2. Ideally any business would like the amount of effort required to build an app to be as low as possible. It takes a special kind of person to want things to be harder, take longer and cost more than is necessary.

3. You should need a very good reason to have to do the same thing three times in three different ways. It doesn't just duplicate the initial effort and costs but the ongoing ones too.


So, considering the above, if there was a way to take the assets, resources and investment in existing code bases and use that to create an app that runs on Windows 10 then it should be very appealing. Enter projects Astoria and Islandwood.

But which should a company use?
As ever with technology, it depends. Obviously if someone only has an Android/Java code base then they should look at project Astoria. Or if only on iOS/Obj-C they should go with Islandwood.
But what if both? I'd suggest the following. If only interested in running on phones then look to use Astoria. Otherwise look to Islandwood.

----

The use of either (or both?) of these projects should be seen as a stepping stone if it gets a business to a position where they still have more than one code base for their app/game.
Surely, as far as possible, it's in the interest of the company behind an app/game to only need one version of their code. I therefore expect the popularity of cross platform solutions* to grow in the next few years. There are various options for this but, personally, I'd look at either PhoneGap or Xamarin based solutions depending on the specific project.

----

I assume that Microsoft hope that those people who use the above tools will be exposed to how powerful the tools and languages Microsoft have created are and then consider switching to them in future. Either in addition to building natively for Android & iOS or exclusively by use of a solution such as Xamarin.

----

Yes, they both allow you to reuse resources across platforms but are they cross platform solutions?

*Related question: How do you define a "Cross platform" tool/solution?
Does it have to produce the output for different platforms?
Does it need to support a specific number of platforms? (Presumably more than two.)
Does it count if it is based on conversion from one native format?

I don't know if there is a clear definition. Do you have one?




Wednesday, May 13, 2015

Microsoft MVP Virtual Conference May 14-15, 2015



If you find yourself with some time over the next couple of days, be sure to check out  this Virtual Conference presented by Microsoft MVPs in the Americas

The conference will have 5 tracks, IT Pro English, Dev English, Consumer English, Portuguese mixed sessions & Spanish mixed sessions, there is something for everyone!  Learn from the best and brightest MVPs in the tech world today and develop some great skills!

More details and registration at http://mvp.microsoft.com/en-us/virtualconference.aspx