Microsoft Research Mobile Backend as a Service: Introducing Project Hawaii
Microsoft
Research(MS Research) is an infinite source of technical innovation. Because of
my academic background, I am constantly following the new MS Research projects
and drawing ideas and inspiration from them. Recently, I came across Project
Hawaii (http://research.microsoft.com/en-us/projects/hawaii/
) which provides a set of mobile services hosted in Windows Azure for
computational and data storage. Sounds familiar? Yes, Project Hawaii
overlaps slightly with Windows Azure Mobile Services but it focuses on new and
innovative service capabilities. In this first release, Project Hawaii
enables the following capabilities:
·
The Key-Value service enables a mobile
application to store application-wide state information in the cloud.
·
The Optical Character Recognition (OCR)
Service returns the text that appears in a photographic image. For example,
given an image of a road sign, the service returns the text of the sign.
·
The Path Prediction Service predicts a
destination based on a sequence of current locations and historical data.
·
The Relay Service provides a relay point
in the cloud that mobile applications can use to communicate.
·
The Rendezvous Service maps from
well-known human-readable names to endpoints in the Hawaii Relay Service.
·
The Speech-to-Text Service takes a spoken
phrase and returns text. Currently this service supports English only.
·
The Translator service enables a mobile
application to translate text from one language to another, and to obtain an
audio stream that renders a string in a spoken language.
Obviously,
given my recent work in the mobile
backend as a service (mBaaS) space, Project Hawaii results
super interesting to me. After spending a few hours playing with the current
release, I thought the experience would make a few interesting blog posts.
Let’s
start with the Hawaii’s key-value service:
Project Hawaii’s
Key-Value Service (KVS) provides a simple key-value store for mobile
applications. By using the KVS, an application can store and retrieve
application-wide state information as text using key-value pairs.
Obtaining a Project Hawaii
Application ID
Prior to use any of the Project Hawaii services, developers need to
obtain a valid application ID. We can achieve that by going to the Project Hawaii signup page (http://hawaiiguidgen.cloudapp.net/default.aspx.) and registering your Windows Live
credentials. After that, you will obtain an application identifier that can be
used to authenticate to the different cloud services. As illustrated in the
following figured.
After
having completed this process, we need to register our application in the
Windows Azure Marketplace.
Using
the Project Hawaii Key Value Service
As
its name indicates, the key-value service provides a service interface that
enables mobile applications to store information in key-value pair forms. The
main vehicle to leverage this capability is a RESTful interface abstracted by
SDKs for the Android, Windows Phone and Windows 8 platforms. In the case of
Windows 8, the KeyValueService class included in the Microsoft.Hawaii.KeyValue.Client namespace abstracts the
capabilities of the Project Hawaii Key-Value service. The following matrix
summarizes some of the operations provided by the KeyValueService class.
Methods
Name |
Description |
CreateAsync |
Initiates
a call to create a key-value item. The item must not already exist. |
DeleteAsync |
Initiates
a call to delete key-value items. |
DeleteByKeysAsync |
Initiates
a call to delete key-value items by keys. |
GetAsync |
Initiates
a call to get key-value items. |
GetByKeyAsync |
Initiates
a call to get key-value items by key. |
GetByKeysAsync |
Initiates
a call to get key-value items by keys. |
SetAsync |
Initiates
a call to set one or more key-value items. If the key does not exist, the
method creates it. |
Like
any good mBaaS SDK, the KeyValueService class provides a very succinct syntax
to integrate with the Project Hawaii key-value service. For instance, the
following code illustrates the process of inserting different items using the
Project Hawaii key-value service.
private const string clientID = "My Client ID";
private const string clientSecret = "My Client Secret";
private void SetItem_Test()
{
KeyValueItem item1 = new KeyValueItem() { Key = "Key2", Value = "value2" };
KeyValueService.SetAsync(clientID, clientSecret, new KeyValueItem[1]{item1}, this.OnSetComplete, null) ;
}
private async void OnSetComplete(SetResult result)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
if (result.Status != Microsoft.Hawaii.Status.Success)
Result.Text = "Success";
else
Result.Text = "Error";
});
}
Similarly, applications can query items stored in the key-value infrastructure using the following syntax.
private void GetItem_Test()
{
KeyValueService.GetByKeyAsync(clientID, clientSecret, "Key1", GetByKeyComplete, null);
}
Key-value
storage can be a really useful capability in mobile applications. The Project
Hawaii Key Value service provides a very simple mechanism to enable mobile
application to leverage these capabilities using a very simple syntax.
We
will cover other capabilities of Project Hawaii in future blog posts.