[Cross-posted from blog.davemdavis.net]

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 wildfire, 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 folks.  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 the following technologies have evolved: the Internet, advanced middleware, operating system, mobile code, sensors, microprocessors, new I/O and user interfaces, networks, mobile protocols, location and positioning.  Combining these technologies is what makes ubiquitous computing possible.

The Royal “My”

I 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

Where to begin?  The first thing to consider is, should my application/device/widget contribute to the ubiquitous utopia.  Not all application need to be anywhere and everywhere. On the flip side you should evaluate the ubiquitous potential of your projects.  One of the guiding principles 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 (though 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 accessed 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 that 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 its ambient light sensor detected that it is dark out. The device kicks on your gas fireplace because it has determined the room’s 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 for this to be successful. 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 single applications that persist in 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; over time 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 also 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 your application to adapt as the users’ needs and technologies advance.  You should follow this even if you are not trying to jump into ubiquitous computing.

Moving Beyond Computing in Isolation

In this post 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 addressed 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 situations that may be addressed by building a system that can adapt to the user’s needs while appearing to be everywhere and anywhere at the same time.