Like Ahmad and a few other OSI'ers, I am in Anaheim this week to attend Microsoft's //BUILD/ conference. This conference is centered around Windows development and in case you were disconnected from the blogosphere in the last few days, they unveiled Windows 8. It is a re-imagined Windows (as the Softies say) and it is meant to embrace new form factors and touch-centric devices (including those powered by ARM processors). They also announced Windows Server 8 which has a lot of impressive enhancements, although less "cool" than it's client counterpart :)

 

They released the "Developer Preview" of both these operating systems, as well as the developer preview of Visual Studio 11 Express, for developers to start cutting code on these. As Ahmad pointed out in his blog post, they gave all 5000 attendees a Samsung tablet device running Windows 8 Developer Preview, which came preloaded with Visual Studio 11 and a bunch of Win8 Apps to illustrate some of the new concepts.

 

(interesting to note is that most of these apps were written by summer interns... man I wish I had that cool of an internship myself, back then!!)

 

I am writing this blog post to reflect on some of the new paradigms they introduced.

 

2 Operating Systems in 1

 

First, Windows 8 (not Windows Server 8) can run in 2 main modes:

  • the touch-centric one, which expands on the Windows Phone 7 interface with a collection of dynamic "tiles" (i.e. icons on steroids)
  • the "classic" Windows mode, almost identical to Windows 7

In the classic mode, the "Start Menu" brings you back to the touch-centric Start page.

 

APIs for all!

 

As you can see in the second screenshot Ahmad posted here, Microsoft added a entire new framework for developers to use and develop "Metro Style Apps" which run in the touch-centric mode I described above. This is in addition to all the existing APIs you are familiar with today, which can still be used to develop regular "Desktop Apps" which run in the classic mode I described above. This second option will most likely fade out over the next coming years, as touch-centric apps gain popularity.

 

This new set of APIs is called the Windows Runtime (WinRT for short) and is being surfaced in a seamless manner in C, C++, C#, VB.NET as well as JavaScript (!!!). These APIs abstract out the internals of the OS and provide very rich access to various components, including the UI aspect of it in most cases. For example if you invoke the File Picker in your app, it's going to bring the user in a standard file picking environment that makes the file selection process consistent and very enjoyable. This environment reaches out to various areas of your file system, online locations like SkyDrive, as well locations being exposed by other apps (e.g. Facebook of Flickr, if you are looking for a picture).

 

As far as the UI, you need to use XAML when you develop in C, C++, C# or VB.NET (just like when you build Silverlight or WPF applications), or HTML5 when you work in conjunctino with JavaScript.

 

Note, you can develop WinRT components (akin to a .NET Assembly) in one language, which can then be referenced and used by apps written in any other language.

 

Layouts and Orientations

 

Because of the vast array of form factors and devices this is meant to run on, you can imagine that app developers will have to accomodate for various resolutions, aspect ratios, as well as the fact that a number of these devices can actually rotate (from portrait to landscape and vice-versa).

 

In addition to that, Microsoft introduced a new layout paradigm that every app needs to support: apps can be either of 3 modes:

  1. Full-screen: every single pixel of the screen is yours… no title bar, no status bar, no tool bars. Options that are not part of the main UI are relayed to areas that can be invoked by sliding your finger from the edges of the screen.
  2. Pinned: a state available when in landscape, where the app takes up 320 pixels wide (and full height) on the left or right side of the screen. Note, your app can have a different behavior than in full screen mode (or even be static and not work at all), but you have to provide that view.
  3. Filled: when an app is pinned, the rest of the screen (total width - 320px - 20x for the slider) is the app in "filled" state.

Cross-App Interoperability

 

Another interesting paradigm they introduced is this concept of "Contracts" - examples of these are the Search, Share and Picker contracts. If you implement the Picker contract, for example, then your app appears in the File Picking experience I described above, allowing users of another app to pick up something (e.g. a picture) from your app.

 

In other words the more apps implement these contracts, the more interoperable they become and the more rich the Windows 8 experience will become.

 

Live Tiles and Notifications

 

The last thing I would like to share here is about the live tiles and notifications -two great opportunities for developers of Metro style apps in Windows 8. Basically, tiles need to be more than just an icon; they are the doorway, the invitation to your app. As such, it can (and probably should) contain more than an icon and a title… it can contain content from within your app (e.g. pictures, in the case of a photo app), state and number indicators, etc.

 

Plus, these are dynamic and can change over time, which is a great opportunity to communicate/engage with the user (e.g. notify the user of something that changed). They also support what they call Toast Notifications, which consist of notifications that can be delivered whenever, not necessarily when your app is running.

 

 

 

This is a summarized summary (!) of some of my takeaways from this week, and I think all of this is pretty exciting for every single one of you - whether you are a developer or an end-user. I look forward to learning and experimenting more with Windows 8, and especially look forward to hearing your thoughts about how you see OSIsoft leveraging all this to deliver exciting products to you.

 

Talk to you soon!