The Internet of Thing (IoT)

shutterstock_216137437Recently a new technology buzz word has come to light, the Internet of Thing or IoT.  It is all the rage. Everyone is getting on the bandwagon Microsoft, Google, Apple, you name it they are probably trying to figure out how to take get a piece of the $300 billion in 2020 by Gartner estimates. At the beginning of the year I wrote a series of posts on ubiquitous computing.  IoT definitely falls into ubiquitous computing.  Here are those earlier post:

I am going to continue on with my exploration of the Internet of Things.  I want to explore all facets from the over all architecture to individual “things” and everything in between.

Is it Really the Internet

When most people hear IoT they think of all the home automation products that they can talk to through their phones. Enterprises think of all the sensors they have distributed throughout their network that are providing them data. Potentially there will be billion upon billions of “Things”, most of which will never directly access the internet. Home owners don’t want random strangers control the temperature of their house and enterprises don’t want their sensor data exposed to the public.  Maybe it should be called the Intranet of Things instead!

This is where you will hear people say “Well I can set my thermostat while I am not on my home network.” True, you can, but you usually do that through an application. You don’t directly talk to the “Things” in your ecosystem. I will show you this in the future when I do a post dedicated to architecture.

Let’s get back to talking about the internet. First off have billions of “Things” on the internet would be impossible.  IPv4 couldn’t handle that.  Obviously IPv6 could but that poses different challenges that I will address in a minute. Could you imagine all that traffic floating around on the wire?  If you thought Netflix took up bandwidth what would happen if these billions of devices, some of which transmit data every millisecond, were flooding the wire with their data?

One of the principals of IoT is having actionable data. For years we have had “Things” that have provided data, so why all of a sudden is IoT hot? We now have the computing power to aggregate, analyze and visualize all the data that is produced making it actionable. So having devices flooding the network with data that is not actionable. IoT is about making “neighborhoods” of “Things” that talk to each other but are actionable in that neighborhood. I put neighborhoods in quotes because enterprise “neighborhoods” can span globally.

Security is another concern with billions of “Things” on the public internet. Like I said before you don’t want to have just anyone controlling the temperature of your house. Keep the devices in your “neighborhood” will help prevent unauthorized access. I will address security again when in my architecture discussion.  Security has another challenge, the “Things” themselves.

Think about the “Things” themselves. Most of these devices have minimal memory, processing power, and battery life.  They don’t have a security stack as well as an IP stack. Most sensors transmit bits of data.  It doesn’t make sense to surround a few bits of data from a sensors with the bytes of  overhead for an IPv6 packet and do that a couple a times a second.  That is why other protocols, that are not normally associate with the internet, are involved.  I will cover those in a future post.

Much More to Come

There is a lot of confusion around what IoT is.  Hopefully you can see from this brief discussion around the I in IoT, that there is much more to cover. 

Posted in Computer Science, Contextual Computing, IoT, Modern Application, Ubiquitous Computing | Leave a comment

“Your Fans are Waiting” Microsoft’s Build Conference–Day 1

build2014_devconferenceI am recently attended Microsoft’s Developer’s Conference, Build 2014.  When I have attended conferences, in the past, I have blogged about all the great announcements usually throughout the conference.  As I sit here, at the beginning of Day 3, I have not written about a single announcement.  I have decided to change up how I report on the conference. This time around I am going to give my two cents on different announcements made.  There are plenty of articles that list the many announcements made. In future posts, I will dig deeper into different topics.

Windows Phone 8.1 – Long Live Silverlight

So one of the biggest announcements was the next version of their phone operating system, Windows Phone 8.1.  This release caps the “Blue” series of products that started with Windows 8.1.  For the last couple of years, Microsoft has talked about operating system convergence. Their goal is to have one operating system core run across all devices and to have a common API to code across them.  With Windows Phone 8.1, they are one step closer to reaching that goal.

Windows Phone 8.1 is basically WindowsRT with a phone app and a Silverlight emulator or at least that is how I think about it.  And with this leap Microsoft has reached 90% convergence with Windows 8.1 and Phone 8.1.  You can now write phone app using the same WinRT API and Xaml as modern apps (more on that later). You can also continue to write phone apps using Silverlight so your past investments on the phone are not lost. In fact Microsoft has advanced the phone Silverlight to 8.1 and allows developers writing apps in Silverlight to access the same functionality as a Windows Xaml (that is what they call the new app paradigm) phone app.

A lot of great new features are coming in the next release and you can read about them on the Windows Phone site. Overall I am impressed with what Microsoft. has done with the phone.  Some of these features should have been there from the beginning and are catch up and some are innovative and can’t be found on other platforms. This new version will be available to all devices running Windows Phone 8 later this summer.  A developer preview will be available the beginning of April.


Cortana is a fictional artificially intelligent (AI) character in the Halo video game series. ~Wikipedia

With Window Phone 8.1, Microsoft has introduced the world to Cortana. If you play Halo this is a reintroduction. Cortana is Master Chief’s AI assistant. As with Master Chief, Cortana is a personal assistant for the masses. Cortana is part Apple Siri and part Google Now

Microsoft went and interviewed real personal assistant to learn what is needed to provide a real personal assistant experiences. The key point they heard over and over again is the Notebook.  This book contains all the personal information that allows the assistant to be productive. Cortana has a notebook where your personal information is stored for analysis. The key thing to remember is that the user is in control of what information to provide.  The more they provide the better Cortana can help. Remember it is all about context.

One of the difference between Siri and Now and with Cortana is that Microsoft has allow developers to integrate their applications with Cortana. For instance a user can say “Facebook Find Jane Doe”. Cortana will pass that “Find Jane Doe” to the Facebook application.  Then Facebook can handle what to do with what is passed. 

There were a few devices available at Build to play with. Microsoft is releasing Cortana as beta.  They are saying that her voice algorithms are still being trained.  The more they are used the better they will become.  I had fairly good success with the recognition and the functionality that I tried worked pretty well. If Cortana is half as good as they advertise she will surpass the capability of Siri and be on par with Google Now.  Only time will tell how Cortana will do.  Currently Cortana is only available on the Phone but it is not hard to guess that she will be coming to Windows devices and Xbox’s in the future.

Windows 8 Update 1


Microsoft is also updating Windows 8.1 with Update 1. This update brings some more enhancements for mouse and keyboard users.  The three main updates include, right click context menus on the start screen, title bars in modern application, and pinning modern applications to the task bar.  These small steps should help make the experience better for non-touch devices. 

The update will be available for free for all Windows 8.1 users and will be required for user to continue getting Windows update. The Update will be generally available with the April Patch Tuesday (April 8).  Microsoft provided the update to attendees. I have been using since day 1 of the conference.  It is okay, I don’t have an opinion one way or another.  I have been using Windows 8 since the first developer preview and have adapted to it nicely.  Some people seem to like this update. If it makes you more productive then great.

Microsoft did not call this Update 1 they just called it Update.  There was a rumor that they were going to talk about the next version of Windows. They did not explicitly say “Windows 9 will be…” but they did hint at a few pieces that are coming, potentially in an Update later this year or vNext.  The Start Menu is coming back…with tiles and modern apps will be windowed. More to come so stay tuned.

Universal Apps

imageOne of the key points of Day 1 is “convergence’’.  Carrying that theme forward, Microsoft announced Universal Apps.  As of Visual Studio Update 2, developer will be able to create Universal Apps.  What does that mean?  Since Windows Phone 8.1 and Windows 8.1 have 90% convergence of APIs, including Xaml, it makes sense that you will want to create applications that reuse as much code as possible. 

You can currently do that with Portable class libraries (PCL) or shared files. Each of these are still possible. Universal apps have behaviors of PCL but are implemented like shared files.  Think shared files with better tooling. Universal apps have a shared project that contains no reference, only files. The shared files live here.  Since there may be times when you will need to access an API that isn’t part of that convergence you can use conditional compilation.  That tells me that the shared files care complied for each project and not as a PCL dll.

So now you can maximize code reuse.  There is so much more you can do with Universal Apps.  I hope to write about these in the future. Currently Universal Apps support is available for Windows and Windows Phone, using C#/VB/C++ and HTML/JavaScript. They did demo a Xbox Universal App that isn’t currently available but it makes sense since Xbox runs on Windows 8.  There were sessions that covered developing Universal Apps for Xbox so it is coming. We will soon be able to realize the “Three Screens and a Cloud” theme from many years ago!

Touch Office

The week before build Microsoft announced Office for iPad. These are touch first variation of the worlds most popular productivity suite. Windows Tablet users have has office on their devices since the beginning but not the touch enabled ones.  These were the full blown versions.  At Build Microsoft showed off the Touch Enabled Office (to be released later this year).  We have known that they have been working on these apps for a while.  They did show off PowerPoint last year at Build 2013. What they did announce was that the Windows versions are being built as Universal Apps, so the functionality you get on Windows will also be available on the Phone.

Free Windows

So there is no surprise that Windows 8 has not taken off.  They were late to the game.  Apple and Google have the market share when it comes to mobile. By bringing Office to the iPad first shows that Microsoft has shifted for a Windows first company to a mobile first company.  That is yet another theme that continued throughout the conference. There were more demos using iPads and Android devices than in any other Microsoft conference combined.

iOS devices tend to be geared toward the high end users as such Android has been able to chip away at Apples market share with low end devices.  In order to be more competitive, Microsoft is making Windows 8.1 free for 9” devices and small to include phones. The seem to be geared towards make more money off of services than off of operating systems. This makes sense since people don’t upgrade OS’s often but they do renew useful services. In fact, in order to use all the features of Office for the iPad, the user has to have an Office 365 account. Services are the future.

Day 1 Keynote

The Day 1 Keynote ended with Stephen Elop marking three new Windows Phones that won’t be available until later this year and not in the US. And with Satya Nadella delivering pre-canned answers to pre-canned questions, delivering the same talking points that he has been handing out since he took over. If I sound sarcastic it is because I am.  The keynote was 3 hours long with Elop and Nadella taking about an hour.  Three hours in an uncomfortable chair in a crowed room will make people a little antsy.  Next time keep it around 2 hours and have the CEO play more of an active roll.

That aside I think that Day 1 delivered a lot of good stuff.  It shows that Microsoft is moving in the right direction, even to the point of being innovative. It seems the days of complete secrecy are coming to an end. They not only showed off what is here but what is coming in the near future.   I still have a lot of sessions that I want to take a look at to really understand what was announced but overall I am happier with this years Build than I was with the last one.

In the next post I will cover Day 2 keynote and give you My Two Cents.

Posted in Build 2014, Windows 8.1, WindowsRT, WP8 | Leave a comment

Can Technology Go Too Far?

Over the past two posts I started to explore the concept of ubiquitous computing. I started out by defining ubiquitous computing, and then followed that up with a post that talks about how developers can contribute to the ubiquitous utopia. No conversation about ubiquitous computing would be complete without talking about privacy.  Privacy is a major concern these days, especially with all the controversy surrounding NSA data collection programs.

Recently, at work, we discussed the article AI is so over: This is artificial empathy.  This article talks about a system that can determined a person’s personality based upon a few seconds of speech.  This system is used by call centers to determine the mood of the caller and then to direct the caller to a representative that can best handle you.  Let’s think about that for a minute.  From a few seconds of voice analysis, this system has searched it’s vast amount of data, analyzed the speech, and has accurately determined your personality. In order to continually learn the system has to collect and analyze a large amount of voice samples. 

Who owns this data? It is your voice they are collecting. Can you get the data back? “This call may be monitored for quality assurance” Currently this system is used for customer services.  It may even provide the benefit of a smooth customer service experience.  What happens when they start using this system in other areas? Can an organization refuse a job because you come off as being mean?  Can/should and adoption deny someone because they don’t the right personality as determined by a few seconds of speech?

Let’s say that you agree there is some benefit of relinquishing some of your privacy for the betterment of the system.  How much privacy are you willing to part with?  In order for ubiquitous computing to work, we must be willing to sacrifice some privacy.  These computing systems rely on context to perform their task while remaining in the background.   The more information you provide, the better the chance the system get the right context, the richer the experience can be.

Ubiquitous in the Home

Nest_RedThe previous example may be a little too far fetch for people to grasp. Who actually calls customer support, these days, anyway?  A lot of ubiquitous computing examples can be found in home automation.  One of the latest fades in home automation is the Nest Thermostat.  This thermostat learns.  It gathers usage data to determine patterns of how you heat or cool your home. If you set the thermostat to a specific temperature every morning when you wake up it learns that time. It also knows how long it will take to heat/cool your house to that temperature.  After a while (a week according to the web site) it will start to turn itself on so that your house will be at the desired temperature around the time you wake up. 

The Nest has sensors that can determine when you are home or not and then set the temperature of your house appropriately.  If you have multiple zones in your house and you use multiple Nest devices, they can communicate with each other.  They connect through your Wi-Fi network.  There are even mobile applications that allow you to control your thermostats remotely. If you are coming home early you can kick the heat on to warm up the place.  So what is the benefit to fully embracing the Nest system, reduced energy bills. You no longer have to remember to turn down the heat.  The Nest does that by learning your habits and automatically adjusting to an appropriate temperature. Over time you should see a reduction in your bill as the system is only on when needed. So is the slight invasion of privacy worth saving some money in your bill?

Should I Care

On the surface it seems harmless that Nest is collecting all this data but let’s take a little deeper look.  The system know when you are home or away and keeps a record of that.  Do you think that burglars would like that information?  Oh did I forget to mention that Google just purchased Nest for $3.2 billion dollars.  That sales price is 10x the sales figures for Nest.  Why would Google pay that much for Nest?  Could it be because it wants the data that is collected.  This is just another touch point that Google has on your life.  Add this data with other data they collect and you have a pretty good picture into your life.  A picture that advertisers would kill for.

So What Can I Do

As a developer, you should be aware of what personal information your system requires in order to gain a usable context. Understand that some users will be very apprehensive to give up their privacy to your system.  Provide the user with some assurance on how you plan to use their data. If you plan on changing your data collection policies, provide enough notice so that the user can make an informed decision.  Finally provide a mechanism for the user to take back their data should they decide to stop using your service/system/device.

As a consumer be conscious of the information you provide.  Keep in mind that the information you provide one company may be aggregated with information you provide to a different company. Weigh the consequences of relinquishing your privacy vs. the benefit provided by the system.   Remember these interconnected systems require your personal information, in order to provide and accurate context, so that they can deliver an optimal experience.

This post covered two example of where your privacy is affected by ubiquitous computing. There are many more examples, just look around. In a future post I will look into what it means for a system to have context and how context drives the notion of ubiquitous computing.

Posted in Computer Science, Contextual Computing, IoT, Software Architecture, Ubiquitous Computing, User Experience, UX | 1 Comment

“My” Contribution To Ubiquitous Computing

In my last post, Ubiquitous Computing–Breaking Down the Silos, I talk about how ubiquitous computing is starting to make its way into the world around us.  You may know ubiquitous computing as pervasive computing, ambient intelligence, Internet of Things, haptic computing, or everyware.  No matter what you call it, it is spreading like wild fire and as developers we need to be aware of what that means for the code we write.  This wave of computing not only concerns application developers, it concerns backend developers as well.  In fact the backend developer has a bigger role than the front end guys.  They provide the backend that supports the whole notion of ubiquitous computing.

Why is ubiquitous computing taking off?  The technologies required to support it are developing rapidly.  Think about, in the past few years, how rapidly have the following technologies evolved: the Internet, advanced middleware, operating system, mobile code, sensors, microprocessors, new I/O and user interfaces, networks, mobile protocols, location and positioning? Combing these technologies is what makes ubiquitous computing possible.

The Royal “My”

InnovationI ended the last post with some general advice on how you can get involved in ubiquitous computing.  I titled this post “My Contribution”, in this case the “My” is the royal “My”.  I will not highlight any specific contribution that I have made but will go into a little more detail on how we as developers can code with ubiquitous computing in mind.  It did not make sense for me to title the article “We Contribution” so I went with “My”.

Ubiquitous Guidance

So where to begin?  The first thing to consider is, should my application/device/widget contribute to the ubiquitous utopia.  No all application need to anywhere and everywhere. On the flip side you should evaluate the ubiquitous potential of your projects.  One of the guiding principals should be will my, creation enhance the greater utopia.  Don’t force your applications to fit, just to check the box.  The world does not need to be able to access your fart app anywhere and everywhere (but I may be wrong).

Next you need to determine the infrastructure that will support you.  Most ubiquitous computing scenarios require a backend infrastructure to provide the appearance of the experience being everywhere and anywhere.  This is where you have to be careful to ensure that you don’t silo your users into one platform or another.  This is hard to accomplish because it is easy to adopt a platform and code to that platform. When choosing a backend infrastructure ensure that it can be access by as many different device/OSs as possible.  This will maximize the ecosystem you will be able to target. 

Don’t just concentrate on cloud infrastructure.  Look at other methods, perhaps a little closer to your devices, to provide your infrastructure.  Local Wi-Fi networks or Bluetooth protocols may be all you need to satisfy your situation. For example, take a look at cameras that can transmit pictures to a local computer as they are being taken.  The computer can then display them on a large screen, archive them to a cloud storage solution or send them to the local CVS for printing.

Embrace sensors.  More and more devices are being built with embedded sensors that can provide data to your application that can enhance the user experience.  There are gyroscopes, compasses and such.  There are external sensors that can provide data to your device such as weather data or location data.

Here is an example from the home of the future.  Say you have a device placed in your living room and that device reacts to a Bluetooth signal from your phone. You walk into the room and the device sends a signal to your Phillips Hue Lights to turn on because it’s ambient light sensor had detected that it is dark out. The device kicks on your gas fireplace because it has determined the rooms temperature is not ideal by gathering data from your Nest Thermostat. Because it is a weekday morning it tunes your TV to the local news.  Some may think that this too weird but it provides an example of how ubiquitous computing  can work in the not so distant future.

Thinking Outside Your Application

One of the challenges you will face as you embark your journey to ubiquitous utopia is thinking outside your application.  The examples I provide should show you that single applications may play a smaller role in the greater ubiquitous ecosystem. Don’t just focus on the application. On the flipside don’t focus on devices either.  Each has to work in symbiosis in order for this to work. For some developers this may prove the hardest part.

You may not start out by building a huge computing experience. You may start by building a single applications that persist is content and settings across devices.  This is fine too but always keep the bigger picture in mind.  Can my application play a larger roll in the greater ecosystem. 

Take an application like PowerPoint. It is a pretty powerful application for presenting information.  Microsoft started out by creating a standalone application overtime they have added support of auto saving to SkyDrive OneDrive, where the user can then access their presentations from other computers (without having to sneakernet it to the other device), from a web client, from their Windows Phone and soon from their iOS and Android devices. You can even control presentations from your phone through Office Remote.

This example shows how a “simple” standalone application that has evolved to a point where it can participate in the greater utopia. It is also a good example that shows you don’t have to tackle the whole thing at once.  The key take away is don’t code yourself into a corner. Provide a means to evolve you application to adapt to the users needs and technologies advance.  You should follow this even if you are not try to jump into ubiquitous computing.

Moving Beyond Computing in Isolation

In this posts I have given some general guidelines for building systems that can help advance the ubiquitous utopia we seem to be heading for.  I have not address security, privacy and technical challenges that still stand in our way.  I will hopefully address those in future posts.  For now keep an eye out for situation that maybe addressed by building a system that can adapt to the user’s needs while appearing to be everywhere and anywhere at the same time.

Posted in Computer Science, Contextual Computing, IoT, Mobile, Modern Application, Software Architecture, Ubiquitous Computing, User Experience, UX | 2 Comments

Ubiquitous Computing–Breaking Down the Silos

ButtonsDuring Build 2013, I attended a session on Ubiquitous Computing given by Bill Buxton.  This was one of the better sessions given at Build, which is saying something since there was not a single line of code shown.  I have gone back and watched that session a few times.  Recently I have been thinking about this session and how there are silos that are preventing a truly ubiquitous computing experience. 

What is Ubiquitous Computing

Ubiquitous Computing is an advanced computing concept where computing is made to appear everywhere and anywhere. – Wikipedia

Mr. Buxton gives the example of the cell phone.  When you are sitting a car, what is the phone?  The car is (if you car is so equipped).  If you are having a conversation while you are driving, the conversation can be heard through the car speakers and the voice is captured through a microphone in the car.  The phone is still handling the call but the driver is not directly interacting with it. Then the driver turns off the car and can continue the conversation, without interruption, on the phone.  Here the computing device adapts to the situation and is made to appear as if it is everywhere.

Mr. Buxton also points out that the computing device does not have to be invisible for it to be ubiquitous.  I believe his point is that the device should adapt to the situation without causing major disruption.  Does it really make sense to have a touch enabled interface in a car?

You see operating system vendors trying to do that today within their ecosystems.  For example Microsoft is in the process of uniting all their operating systems into a single code base.  This has development implications but let’s look at it from an users point of view.  They are unifying the user experience across all devices from mobile, to desktops, even to their Xbox platform.  They also provide an infrastructure to deliver the user’s content to any device.  If you want to listen to you music on phone and then listen to the same song on their Xbox, they can.  Pretty soon it won’t matter what Windows device a user logs into, they will have access to their content anywhere. Again the device hasn’t disappeared, it has adapted to the situation.

The Silos

Apple has a similar ecosystem with their iCloud and Google with their Android platform.  Here is where the silos get erected. Each vendor keeps their ecosystems locked and most third party vendors don’t help.  For example if I have my music in iTunes it hard to get it out to another device. They want to lock you into their ecosystems. 

Third party application developers don’t help either. They build their apps for each of the different platforms and deploy them to the various app stores.  A user with an iPhone and a Nexus 7 would have to buy the same app twice. It also makes switching between phones a costly venture.

So users are married to their platforms until death do them part.  How much innovation do you think there is going to be in the next version of the iPhone.  Sure they will make lighter, faster, and prettier but are those truly innovations. I think that they are expectation, but is it enough to keep you locked in their ecosystem. Now compare that to the Android ecosystems, fragmented, yes but they are at least innovating. A variety of Android form factors are available to better adapt to a users needs.

The point is not to bash one ecosystem vs. another.  It is to point out that these silos exist and that they may be stifling innovation. You can’t blame the different vendors.  They are in it to make money and Apple doesn’t make money from a user on a Windows device. But Microsoft does make money off of Android users, that’s a different story.

Ubiquitous Computing Utopia

Is it possible for an ubiquitous computing utopia to exist?  What does it mean to have a utopia? Do we have to put a computer in everything and then interconnect these devices? What are the security concerns? Privacy concerns? For the foreseeable future we may have to settle for pockets of utopia, especially while the silos exist.  The silos need to be removed before we can truly see utopia. 

There are vendors out there that are trying to do just that.  Sonos is a good example of of one of these vendors.  They have a line of wireless hifi speakers that connect to a used home network and can seamlessly stream music from various sources.  To the users the computing device is “everywhere” in their homes.  Other devices and applications are starting to appear in market, further moves us to a ubiquitous computing utopia.

The Nest Thermostat is another example where silos are minimized.  These are programmable thermostats that learn a user’s preferences.  There is some initial configuration required but once they are set up they blend into the environment.  They have sensors to determine when you are home so that they can set the temperature to an appropriate level, saving the user money. These device can talk to each other and can be controlled from the web.  Thus adapting to the user’s needs and giving the appearance of being “everywhere”.

Where Do We Go From Here

These examples are are making just a small dent in the wider ecosystem.  I don’t think that there will ever be a true ubiquitous computing utopia.  Users can kind of create one by picking a silo ecosystem and go from there. They can then choose devices and application that further advances them to utopia. 

Developers can help lead user further down the path to utopia by ensuring that applications they make or devices they build don’t silo users.  You can still monetize your application by monetizing the content these applications deliver and making that content available on any platform.  Microsoft recently adopted this model for their Xbox Music platform. Originally Xbox Music content was only available on their devices. Now you can access this content on competing platforms.

In the end, integration and standardization, are needed to truly make computing appear everywhere and anywhere.  Device makers need to provide the platform and Application Developers need to make the software that adapts to the device/situation.   And all this needs to be seamless and require as little user intervention as possible. 


I know that it has been a while since I did  a post. I got really busy towards the end of last year.  I hope to get back into posting more regularly.  Thanks for reading. I want this to be a conversation so please leave you comments.

Posted in Computer Science, Contextual Computing, IoT, Mobile, Modern Application, Software Architecture, User Experience, UX | 3 Comments

2013 in review

The stats helper monkeys prepared a 2013 annual report for this blog.

Here’s an excerpt:

The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 18,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 7 sold-out performances for that many people to see it.

Click here to see the complete report.

Posted in Uncategorized | Leave a comment

What Happened to My LayoutAwarePage?

Recently at the //Build/ Conference Microsoft showed off the development environment for Windows 8.1.  In less than an year Microsoft has rev’ed Visual Studio.  For Windows 8, Microsoft tried to provide project templates that got you heading in the right direction.  If you did File-> New Project and you chose the Grid App template you got a solution explorer that looks like this:

Solution Explorer VS 2012

One of the first thing people noticed was that all the xaml pages inherited LayoutAwarePage.cs.  In Windows 8 an application could be in a coupled of different states, Filled, Full, Snapped (320px).  The LayoutAwarePage took care of setting the ViewStateManager to the appropriate state.  It also took care of maintaining state in the case of app suspension. At first this class confused some people, myself included.  So I did a post about it, What is This ‘LayoutAwarePage’ You Speak Of

Fast forward to today.  Fire up Visual Studio 2013 and choose the same template.  Your solution explorer now looks like this:

Solution Explorer VS 2013

No more LayoutAwarePage, no more StandardSyles.xaml and a few other changes.  Where did that LayoutAwarePage  go?  Well in Windows 8.1 there is no hard and fast starts that the application has to fit in.  The developer sets a minimum size and the user can choose any size above that minimum size. This was one of the improvements that was made in 8.1. With that the user can have more than two apps going at the same time.

Multi-Snap Screen Shot

Now that you can have variable sized windows, the killed the ApplicationViewState enumeration.  Developers will now have to determine at which size, the view state of their application should change.  If you used the ApplicationViewState enumeration, you will have some refactoring to do. With this change they did away with the LayoutAwarePage.  So the LayoutAwarePage was also responsible for state management during the application life cycle events.  What happen to that?

There is a new NavigationHelper class to handle that.  In the Solution Explorer you will now see NavigationHelper.cs in the common folder. If you read the comments at the top of the class, you get some instructions on how to use it.

NavigationManager aids in the navigation between pages.  It provides commands used to navigate back and forward as well as registers for standard mouse and keyboard shortcuts used to back and forward.  In addition it integrates SuspensionManager to handle process lifetime management and state management when navigating between pages.

I have not had a chance to take a real good look at what this class is doing, so I don’t know if I will use it as is, modify it, or create a different paradigm.

Another file that is missing is the StandardStyles.xaml.  These styles still exist. They are just baked into the generic.xaml for the controls. You can access those through  the new xaml intellisense feature and you can override those styles to apply your own.

One more change that I want to point out can be found in the Add New Project Dialog.

New Project Dialog

Notice the two new templates.  There is a new Hub App template and the new Coded UI test Project. The Hub App template is similar to the Grid App but it makes it easier to create groups of items, think the Windows 8 new application.  The other template lets you create Coded UI tests.  Microsoft has made some improvements in xaml to allow for UI testing.  These changes have helped made Automated UI testing possible.  I haven’t had a chance to look at all the changes made but when I do I will report on what I find.

These templates provide a great starting point for your projects.  It is hard not to believe that future changes will not break what they have done.  My advice is to use the new files as a template to creating your own implementation.  This is what I did with the LayoutAwarePage and I am glad that I did.  This should help make refactoring easier in the future.  I am  excited to take the new features for a spin.  Stay tuned!

Posted in Build 2013, Metro, Modern Application, MVVM, Software Architecture, Windows 8.1 | Tagged , , | 1 Comment