Getting Started with Azure Mobile Apps

Earlier this year I worked on an awesome project for IMSA. While the project was full of challenges such as Xamarin.Forms there was one part of the project that ran smoother than the rest. That part was our Azure Mobile Service. Since completing that project Azure has released a new product named Azure Mobile Apps which is an even more comprehensive solution for creating Web APIs for mobile apps. The new name is a bit confusing, but rest assured Azure Mobile Apps does not refer to the actual App package running on a device.


Before Azure Mobile Apps and Azure Mobile Services the work a developer had to perform to provide a simple API to their mobile app was quite extensive. Standing up a website with a RESTful API was only step 1. If you wanted to see metrics about how healthy your API was you’d have to go find a solution from another provider and integrate it manually. You’d have multiple places to manage your mobile app. Your database might have lived in Azure, but it’s wouldn’t have been related to any grouping of services. The ability to manage this world effectively became unreasonable and difficult very quickly.

Azure Mobile Apps provide all the necessary services to provide and support an API for your mobile app. It also groups all those services in one easy to manage location in the Azure Preview Portal. In my experience the provided services and grouping of those services has provided critical time saving and sanity preserving assistance compared to previous solutions. This is especially true because of the awesome integration with Visual Studio.

What does it do?

Azure Mobile Apps provide a suite of Azure services which are used for working with mobile app development and support. You can read their details here. All of the services are grouped into a single Resource Group. This organization is awesome! It helps you comprehend and manage all of the services used by your mobile app effectively. The default services included are:

  • Web App (aka: A website which hosts Web API Controllers)
  • Application Insights (For the Web App)

You can also add in any number of services into this Resource Group. For example you’ll probably add a Database Server and Database to store the data for you mobile app. Adding theses services allow you to leverage Entity Framework in your mobile app, which is a really cool feature.

How much does it cost?

It would be silly for me to try to repeat the values quoted my Microsoft since Azure changes things quite frequently. You can find the official pricing here. Everyone has a different definition of “affordable”, so I’ll only say that in our experience here at InterKnowlogy this service has been worth every penny!

How do I set it up?

Go to the Preview Portal. In the bar on the left click the “+ New” button. Select the “Web + Mobile” category. Select the Mobile App offering. Fill out all the data. I suggest creating a new Resource Group specifically named for this Mobile App. In my demo I’m creating a Secret Santa app so my Resource Group name is SecretSanta and my Web App name is SecretSantaApp.


Click the Create button and Azure will now create all the services mentioned before in a single Resource Group. When Azure notifies you that it’s done you’ll see something like this when you navigate to your Resource Group.


You can modify what level of service you want to use for your Web App. From the Resource Group blade click your Web App which is the item with the blue sphere. You’ll see a pair of blades like this:


On the right you’ll see Application Settings where you can modify any AppSetting or ConnectionString that is specific to this deployment in Azure. These settings persist in Azure across publishes. This means that you can have AppSettings and ConnectionsStrings for Local development that do not get used in Azure.

To change you Web App’s service plan look under the Essentials section and click the link under the header “App Service plan/pricing tier” which will open the following blade:


Click the “Pricing tier” block to open the “Choose your pricing tier” blade for different plan tiers.


In the image above you only see a few of the many options. For this demo I selected F1 Free which is a very limited plan, but it doesn’t cost anything which is nice for a demo or proof of concept. You can change your plan at any time. After selecting your desired plan click Select and your plan will be applied.

Now there is a bug in the link to Quickstart at the time of this writing. So at this point if you’re following along, close all the open blades using the ‘x’ button in the top right of the dark blue header.

Reopen your Resource Group and then open your Web App again. This time pay attention to the far right Quickstart blade which should look like this:


Azure has provided us with an awesome set of getting started tools for a bunch of different platforms. For the sake of this demo we’ll stick with Windows C#. Click on the Windows C# option. You should now see:


You’ll now notice that step 1 is to get Visual Studio 2015 installed. Microsoft offers the Community Edition straight up here in case you don’t have it yet. Step 2 allows you to download a starting point for your service in the cloud. Download this code and explore it. There is a lot going on. We will not cover the source in this demo. The source in basically a Web API project where you can add your Web API Controllers and build it out like you would any other Web API project. Lastly step 3 allows you to download an app that is ready to use with the Web API project you downloaded in step 2. This is an awesome starting point. The project in step 3 for Windows C# is a Windows 8.1 Universal App. If you want to do UWP and/or switch to another language you can do that just fine. At the top of this blade is a toggle button. Toggle it to Connect an Existing App and then follow the instructions to wire up your custom app that you created to the Mobile App service in Azure.

Finally I want to walk you through getting the Database to set up. At the top of this blade you’ll notice a message stating you need a database in order to complete the quick start. Click that banner. It will open a Data Connections blade. We’ll create a new data connection. Click the Add button. Follow the wizard to fill out all required data. Be sure to select “Create a new database” not “Use an existing database” if you want a new place to store your data. If you already have data that you will now leverage in this Mobile App then point at your existing database. Also, make sure you’re aware which pricing tier you’re selecting for your database. The default is standard which for most demos may cost too much.


After your database is created navigate back to your Resource Group. It should look something like this now:


You’ll notice the 2 new items. The Database Server ands the Database itself. Now you’re Azure Mobile App is ready for use.

Let’s run it!

You’ve downloaded both the Server and the Mobile App. Before you can use the server app you need to deploy it. The sample code you downloaded is ready for upload with all the settings matching your Mobile App settings. Azure does not auto deploy the server code for you because you will always change it for real projects. Go ahead and deploy the project. Follow the instructions in Microsoft’s Tutorial under the heading “Publish the server project to Azure.”

Limitation Notice

In order for your app to access the database using the default settings you need to modify your ConnectionString named MS_TableConnectionString to use admin credentials not user credentials. This is because Entity Framework code first requires permissions to create a schema for your database. Once the server code is deployed go back to the Azure Portal and open the Web App again. Open the Settings blade and select Application Settings. Modify your connection string MS_TableConnectionString to use admin credentials.


Save your changes. Then try out your API. You can try it out in the browser by hitting the URL for your Mobile App and then adding on /tables/todoitem. For example: You should see JSON output similar to this:


Once this is working you can run the demo app that you downloaded from Azure. The first load of the app should look like this:


WOOT WOOT! Demo DONE! You’re now an expert!

The take away…

While it may have taken 15-30 min. to walk through this demo, after becoming familiar with the creation process Azure Mobile Apps take very little time and effort to get up and running. I’m very grateful for this solution. Here at InterKnowlogy we have used Azure Mobile Apps on many different projects in order to support mobile apps on Windows, Android, and iOS. Maintenance has been very straight forward and the flexibility is great. It feels like such a small thing, but has a profound impact on creating successful mobile app solutions. If you have any questions feel free to reach out on twitter @dannydwarren or here in the comments.

How I met Alexa

On my second week at Interknowlogy they gave me a great task :) work around with Amazon’s Echo, which is a voice command device from that can answer you questions, play music and control smart devices. This device responds to the name “Alexa” (you can configure it to respond to Amazon too). So my main job was to try to find out how Alexa works.

Alexa’s knowledge is given from her skills which you can add at the developer site of amazon . To access this site, you have to register and go to the  Apps&Services section and get started in the Alexa Skill Kit.



Each skill has a Name, Invocation Name (how users will interact with the service), Version and an Endpoint. The last option is the URL service that will provide all the info of your skill to Alexa, you can choose between two options for your endpoint, you can decide between Lambda ARN (Amazon Resouce Name), that has to be developed with Java or Node.js, or your own service, the only thing that amazon requires its that it has to be a HTTPS server.

So I am going to explain how to do an Alexa skill in C# using your own server.

The technologies I used are:

  • Azure Websites

So, to create your Web API you follow the next steps:

Create new project -> ASP.NET Web Application


Choose the Web API option ( from ASP.NET 4.5.2 Templates) and connect it to an Azure Web App.


And then you have to Configure all your Azure Website stuff with your credentials to be ready to code :)


2015-08-12 (1)

So what we want to do is to create a Controller that will have a post method and this method will receive all the requests from Alexa.

[Route( "alexa/hello" )]
public async Task<HttpResponseMessage> SampleSession()
   var speechlet = new GetMatchesSpeechlet();
   return await speechlet.GetResponse( Request );

To understand all these requests I used AlexaSkillsKit that is a NuGet package made by FreeBusy which you can find in this link, it’s pretty great, it helps you understand how Alexa works. Once you install that package you want to create a class that will derive from Speechlet (FreeBusy’s class) and override the following methods :)

  • OnSessionStarted

private static Logger Log = NLog.LogManager.GetCurrentClassLogger();

public override void OnSessionStarted(SessionStartedRequest request, Session session)
    Log.Info("OnSessionStarted requestId={0}, sessionId={1}", request.RequestId, session.SessionId);
  • OnLaunch

This method is called at the start of the application.

public override SpeechletResponse OnLaunch(LaunchRequest request, Session session)

    Log.Info("OnLaunch requestId={0}, sessionId={1}", request.RequestId, session.SessionId);
    return GetWelcomeResponse();

 private SpeechletResponse GetWelcomeResponse()
    string speechOutput =
       "Welcome to the Interknowlogy's Yellowjackets app, How may I help you?";
    return BuildSpeechletResponse("Welcome", speechOutput, false);
  • OnIntent

This method will identify the intent that Alexa needs, so the API will receive an Intent with a name and it will be compared to do some action.

private const string NAME_SLOT = "name";

public override async Task<SpeechletResponse> OnIntent(IntentRequest request, Session session)
   Log.Info("OnIntent requestId={0}, sessionId={1}", request.RequestId, session.SessionId);

   Intent intent = request.Intent;
   string intentName = (intent != null) ? intent.Name : null;

   if ("LastScore".Equals(intentName))

      //method that does some magic in my backend
      return await GetLastMatchResponse();


   if ("GetPlayerLastScore".Equals(intentName))

      Dictionary<string, Slot> slots = intent.Slots;
      Slot nameSlot = slots[NAME_SLOT];
      //method that does some magic in my backend
      return await GetLastMatchPlayerResponse(nameSlot.Value);


      return BuildSpeechletResponse("Hey", "What can I help you with?", false);

   throw new SpeechletException("Invalid Intent");

Intents names are preset at amazon’s developer site with a json, and the example is the following:


In this page you will preset an Intent Schema which is in a Json format:

 "intents": [
 "intent": "LastScore",
 "slots": []
 "intent": "GetPlayerLastScore",
 "slots": [
 "name": "name",
 "type": "LITERAL"

This json format text describes that there will be two available intents, one named “LastScore” and the other one “GetPlayerLastScore”, and the last one recieves a “field” that is text.

Now the question is… How do I define the sentences and the parameters that the user of my echo will tell to alexa? In the same page of the developer site is a field that let you provide examples of the usage of Alexa. Which are the following:



Taking the last samples the interaction with alexa will be the following:

Alexa, ask Yellowjackets..

Welcome to the Interknowlogy’s Yellowjackets app, How may I help you?

What was the last ping pong score for Kevin?



Build Responses

To Build responses (in custom methods) you will need to build a Speechlet response that contains a speech response and also can contain a card (optional), that is a graphic representation of a response of alexa that is displayed in the Echo App which is available online and in the following mobile OS:

  • Fire OS 2.0 or higher
  • Android 4.0 or higher
  • iOS 7.0 or higher

The only available cards for devs (right know) are the Simple cards, that only contain plain text. Cards with pictures are not open for non-amazon devs.



To create a Speechlet response we will be using the cool Freebusy’s Nuget package class SpeechletResponse like this:

 private SpeechletResponse BuildSpeechletResponse(string title, string output, bool shouldEndSession)
    // Create the Simple card content.
    SimpleCard card = new SimpleCard();
    card.Title = String.Format("YellowJackets - {0}", title);
    card.Subtitle = String.Format("YellowJackets - Sub Title");
    card.Content = String.Format("YellowJackets - {0}", output);

    PlainTextOutputSpeech speech = new PlainTextOutputSpeech();
    speech.Text = output;

    // Create the speechlet response.
    SpeechletResponse response = new SpeechletResponse();
    response.ShouldEndSession = shouldEndSession;
    response.OutputSpeech = speech;
    response.Card = card;
    return response;

The next steps will be to complete the skill configuration at amazon’s developer site.  Which will be the SSL certificate, that will be pointing to my domain, because our WEB Api is a wildcard certificate from Azure.

Also you need to enable test mode to check out your service and Alexa’s interaction in your Amazon Echo.

So, there it is, hope this blog helped you in your adventure with Alexa (Amazon Echo) :)

Your Design, Our Development | Agency Partnerships


You Have Unique Needs as a Design Agency

We understand that and work with you to build innovative and creative application solutions.

InterKnowlogy Agency Partners are some of the most innovative and technologically savvy digital design firms in the business today.
If you want to set your brand apart from the competition, consider a Design Agency Partnership with InterKnowlogy. We partner with agencies to add value to their company by being their “Go To” custom development team and give them an inside track on the latest technology developments in the software solution industry.

InterKnowlogy is the leading source and expertise in the area of custom software and application solutions for Fortune 500 companies.  At InterKnowlogy we meet and collaborate with our partners to understand the project needs and the best approach to tackle it. We want to equip your agency to offer leading edge solutions that make you stand above the rest of the marketplace.
We truly enjoy working with all our agency partners. If you’re part of a design agency that is looking for a quality software development team to partner with, we encourage you to reach out and get in touch with us! Visit our website at and checkout some of our projects we are happy to answer any questions or provide you with additional information.

We create impact through technology. Get the edge, contact us!



New IMSA app is maximizing the user experience during live race events!

IMSA Mobile Apps

Though the re-developed version of the IMSA app only launched on May 1st, it is already completely changing the user experience during live race events in a number of significant ways. IMSA can now publish app updates to all user devices with immediate effect, getting important updates, videos and other content out to the people with the press of a button. The app itself is incredibly easy to manage and has already been utilized at a variety of events (including the continental Tire Monterey Grand Prix) without intervention from the IK development team. It’s been downloaded over 31,000 times on the iOS platform alone and almost 3,000 times to the Windows Phone platform. Each platform has its own matching app, allowing users full access to this incredible experience in a format that is designed to work on their own personal mobile device.

The Second Screen Experience

The IMSA app isn’t just a way to recreate the broadcast TV experience on a smaller and more personal device – it’s a way to completely tear it apart and rebuild it from the ground up. If a user is already watching TV, they can use the app to maximize their experience by viewing in car cameras or by getting team and driver details on their mobile device via the app. If the user is at the live event, they can listen to IMSA radio to make sure that they always have the information they need when they need it the most.

At its core, the IMSA app isn’t about taking something old and putting a fresh coat of paint on it – it’s about taking something that already exists and making it exponentially better for the benefit of users everywhere.

The New IMSA App and the User Experience

Even though the IMSA app was only recently released, it is still completely revolutionizing the user experience in a number of interesting and important ways. The IMSA app includes the native ability for a user to receive push notifications, for example, allowing them to get automated reminders prior to certain events that they may want to watch. This means that they won’t have to worry about missing even a second of the high-stakes action that they’re already so heavily invested in.

The IMSA app also allows users to view post event videos, which lets the user continue the experience on their own terms and catch up on certain activities even if they originally missed them when they were broadcast on live TV.

At its core, the new IMSA app is all about empowerment. It’s giving the user the tools necessary to experience live race events however and wherever they want without restriction. If the user wants constant, unfettered access to live footage, they’ve got it from one easy to use platform. If they want to catch up on events that they missed after a hard day at work or school, they’ve got that, too. In just a short period of time, the IMSA app is already changing the face of live race events for all time and for the better.

Want to take your app to the next level?

We would love to hear from you! Visit us at or email us at

IoT: Ping Pong Scoring via Netduino

Combining InterKnowlogy’s thirst for using the latest and greatest technology with our world famous ping pong skills provides the following result:  during RECESS, I am making a small device that allows us to quickly keep a digital score of our ping pong matches.

Internet of Things (IoT) is a hot topic these days, so I decided to implement the ping pong scoring system on a Netduino board.  I had dabbled with an older board a year or more ago, and was frustrated: one of the first things I wanted to do was make a call to a web API service, but there was no network connectivity.  Enter the newest board, the “Netduino 3 WiFi“.  It has a built-in button and LED, but it’s extensible by way of the 3 GOBUS ports, where you can easily hookup external modules.

Hardware setup

Netduino 3 board with Gobus modules

My shopping list

Required Software

Netduino is a derivative of the Arduino board, with the ability to run .NET Micro Framework (NET MF) code.  This means you get to write your “application” for the board using familiar tools like Visual Studio and .NET.  Here are the steps I went through (loosely following this forum post, but updated to current day):

Network Configuration

This board has WiFi (sweet!), which means you need to get it on your wireless network before you go much further.

Use the .NET Micro Framework Deployment Tool (MFDEPLOY) to configure WiFi on the board.

  • Target, Connect
  • Target, Configuration, Network
  • Set network SSID, encryption settings, network credentials, etc.
  • Reboot the device to take on the new settings!
  • GREEN LIGHT means you’re successfully connected to the network (yellow means it’s searching for a network)

Write Some Code!

After installing the VS plug-in, you now have a new project template.

File, New Project, Micro Framework – Netduino Application (Universal)

Go to the project properties and confirm two things:

  • Application, Target Framework = .NET MF 4.3
  • .NET Micro Framework, Deployment.  Transport = USB, Device = (your device)

On-board light

static OutputPort led = new OutputPort( Pins.ONBOARD_LED, false );
led.Write( true );

On-board button

NOTE: There is a bug with the on-board button in the current Netduino 3 board firmware. While your application is running, pressing the on-board button will cause a reset of the device, not a button press in your application. The work-around until the next version of the firmware is to reference the pin number explicitly, instead of using Pins.ONBOARD_BTN. See my forum post for more information.

static InputPort button = new InputPort( (Cpu.Pin)0x15, false, Port.ResistorMode.Disabled );

GO Button

Now attach a GOBUS button module and the code is a little different.  The Netduino SDK provides classes specific to each module that you use instead of general input / output port classes.

The natural way in .NET to react to button presses is to wire up an event handler.  The GoButton class has such the ButtonPressed event, BUT, there’s a bug in the firmware and SDK:  If you react to a ButtonPressed event and in that handler method (or anywhere in that call stack), you make a call on the network, the call will hang indefinitely.  I discuss this and the work around with others in the a Netduino forum post.

It’s kind of ugly, but instead of wiring up to the events, for now (until the Netduino folks get it fixed), you just sample the IsPressed state of the button in a loop.

Add a reference to Netduino.GoButton.

var goButton = new NetduinoGo.Button();
if ( goButton.IsPressed ) { // do something }

Go Buzzer

Add a reference to Netduino.PiezoBuzzer.

var buzzer = new NetduinoGo.PiezoBuzzer();

Talk to the Web!

You bought this board because it has WiFi, so you must want to call a web API or something similar.  In my case, I wrote a simple OWIN based Web API service, hosted in a WPF app that is my ping pong scoreboard display.  This gives me the ability to receive HTTP calls from the Netduino board & client code, straight into the WPF application.

So a call from the Netduino application code to something like will give player 1 a point!

I do this using the HttpWebRequest and related classes from the .NET MF.

// error handling code removed for brevity...
var req = WebRequest.Create( url );
req.Timeout = 2000;
using ( var resp = req.GetResponse() )
	var httpResp = resp as HttpWebResponse;
	using ( Stream strm = httpResp.GetResponseStream() )
		using ( var rdr = new StreamReader( strm ) )
			string content = rdr.ReadToEnd();
			return content;

In my case, the results from my API calls come back as JSON, so I’m using the .NET Micro Framework JSON Serializer and Deserializer (Json.NetMF nuget package).

var result = Json.NETMF.JsonSerializer.DeserializeString( responseText ) as Hashtable;
if ( result != null )
    Debug.Print( "Score updated: " + result["Player1Score"] + "-" + result["Player2Score"] );

Putting that all together, I have a couple physical buttons I can press, one for each player, and a WPF based scoreboard on the wall that removes any confusion about the score!

Hope you too are having fun with IoT!


Create A Great User Experience For Your App

User Experience Design Pyrmid

If your app is infuriating to use, users will give up and find an alternative. User experience design also referred to as UXD or UED, is the process of enhancing user satisfaction by improving the usability, accessibility, and pleasure provided in the interaction between the user and the product. User experience design combines the user interface, user workflows, animations, gestures, artwork and the overall feeling your app gives to the user. The mobile UX design can make or break the entire user experience and high attention and effort is required on features and designs of an app.

Consider these questions before you start designing an app:

  • Usefulness – How can it simplify or make tasks easier?
  • Usability – Is it user-friendly?
  • Uniqueness – Is it offering something other apps don’t?
  • Accessibility – What is the load time? Do users quickly and easily find what they’re looking for?

Collaborate With the Design & Dev Teams Early On

Involve your UX designer and developers as early as possible into the project. Working with both a UX designer that has an understanding that software is not simply code and a developer team that appreciates the expertise of beautiful and intuitive design can lead to stunning results. The whole team can work together to perfect the app’s user interface.

Ensure There Is a Primary Action and a Next Action On Every Screen

Screens can often be cluttered with too many actions to take, but lower functionality pages often leave users with no next action to take to continue their journey. This also brings up the topic of habituation. Habituation is when a user becomes trained to do a certain action they no longer need to think about it. Using consistent actions to create a focused experience will allow users to quickly and easily explore the app.

Know Your Audience

When designing your app, you need to understand who you are designing it for. App developers tend to be in the age range of 30 to 55, also known as Generation Xers. The two largest demographics in the U.S. are Baby Boomers (55+) and Millennials (Under 30). Knowing who will be using your app can help you build what they want: an intuitive app that meets a need.

Want to take your app to the next level?

We would love to hear from you! Visit us at or email us at

InterKnowlogy and Microsoft partner to bring a new technology era for 2016 Iowa caucuses

The Iowa caucuses provide a unique forum for civic engagement.

Every four years, Iowa commands the national spotlight. As the first official contest in the nominating process for president of the United States, candidates from both political parties and the citizens of the State of Iowa take the process seriously.

At Microsoft, we understand that technology can empower people and organizations to discover creative ways to address enduring problems and opportunities. That is why we are honored to support the 2016 Iowa caucus via a new, mobile-enabled, cloud-based platform that will facilitate accuracy and efficiency of the reporting process.

We are excited to work with such a great partner to bring the citizens and political parties in the state of Iowa the technology, data, and business intelligence to help make the caucus reporting efficient, accurate, and secure. Watch this video by Microsoft to learn more about the exciting project!

View the press conference here (live from Des Moines on Friday, June 5 at 1:30 pm PT).


The big news was also picked up on several media outlets which was very exciting for us! Checkout these press releases for more coverage.

CNN’s Coverage

Washington Times

Iowa Democratic Party

Iowa Republican Party

Microsoft On The Issues


We’d love to know your thoughts on this article or if  you have any questions, feel free to drop a line.

Crossing The Finish Line With IMSA

This slideshow requires JavaScript.

As Tim called out the other day, we recently went live with a brand new mobile experience for IMSA, and I had the privilege of leading the engineering team on the project here at IK. The scope and timeframe of the project were both ambitious: we delivered a brand-new, content-driven mobile app with live streaming audio and video, realtime in-race scoring results, custom push notifications and more, across all major platforms (iOS, Android, and Windows), with custom interfaces for both phone and tablet form factors – all in a development cycle of about twelve weeks. It goes without saying that the fantastic team of engineers here at IK are all rockstars, but without some cutting-edge development tools and great partnerships, this would have been impossible to get across the finish line on time:

  • Xamarin allowed our team to utilize a shared codebase in a single language (C#, which we happen to love) across all of our target platforms, enabling massive code reuse and rapid development of (effectively) six different apps all at once.
  • Working closely with the team at Xamarin enabled us to leverage Xamarin.Forms to unlock even further code-sharing than would have been otherwise possible, building whole sections of the presentation layer in a single, cross-platform XAML-based UI framework.
  • On the server side, our partners at Microsoft’s continued world-class work on Azure made utilizing Mobile App Service (née Azure Mobile Services) a no-brainer. The ability to scale smoothly with live race-day traffic, the persistent uptime in the face of tens of thousands of concurrent users making millions of calls per day, and the ease of implementation across all three platforms, all combined to save us countless hours of development time versus a conventional DIY approach to the server layer.
  • Last but not least, being able to leverage Visual Studio’s best-of-breed suite of developer tools was essential to the truly heroic amounts of productivity and output of our engineering team at crunch time. And Visual Studio Online enabled the Project Management team and myself to organize features and tasks, track bugs, and keep tabs on our progress throughout the hectic pace of a fast development cycle.

The final result of this marriage between cutting-edge cross-platform technology and an awesome team of developers is a brand new app experience that’s available on every major platform, phone or tablet, and this is just the beginning – we have lots of great new features in store for IMSA fans worldwide. I’ll be following up with a couple more technical posts about particular challenges we faced and how we overcame them, and be sure to check out the next IMSA event in Detroit the weekend of May 29-30; I know I’ll be streaming the live coverage from my phone!


Somewhat lost in the jaw-dropping awesome announcements at Build 2015 was going live on a pretty incredible suite of Mobile apps for IMSA (The International Motor Sports Association).

What we built in such a short space of time is nothing short of awesome. From idea to production on the cutting edge: an app that runs cross platform, built by our team in a little over 3 months


The App Experience

The new app includes enhanced features such live broadcast television, IMSA radio, live timing and scoring of the race events, multiple in-car cameras feeds, live tweets and custom viewing options for fans to access straight from their device.

Through a collaborative effort InterKnowlogy partnered with IMSA and Microsoft to deliver a new, game-changing, multi-platform mobile experience for all of IMSA’s fans, both at the race and from wherever they watch the action. 

Technical Stack

VS and MSFT stuff

Visual Studio 2013

Visual Studio Online

Resharper 9

Windows 8.1 Universal Phone and Tablet

Azure stuff

Azure Mobile Services

Azure Redis Cache

Azure App Insights

Xamarin stuff

Xamarin.Forms 1.4

Xamarin Studio

Xamarin Insights

Other stuff

Akamai CDN

iOS 8

Android Kitkat (HLS video streaming media)

Little Watson


Get the app on your own device

Download the Apps for your devices here:

Windows Phone

Windows Tablet



About IMSA:

The International Motor Sports Association, LLC (IMSA) was originally founded in 1969 with a long and rich history in sports car racing. Today, IMSA is the sanctioning body of the TUDOR United SportsCar Championship, the premier sports car racing series in North America. IMSA also sanctions the Continental Tire SportsCar Challenge and the Cooper Tires Prototype Lites Powered by Mazda, as well as four single-make series: Porsche GT3 Cup Challenge USA by Yokohama; Ultra 94 Porsche GT3 Cup Challenge Canada by Michelin; Ferrari Challenge North America; and Lamborghini Super Trofeo North America. IMSA – a company within the NASCAR Group – is the exclusive strategic partner in North America with the Automobile Club de l’Ouest (ACO) which operates the 24 Hours of Le Mans as a part of the FIA World Endurance Championship. The partnership enables selected TUDOR Championship competitors to earn automatic entries into the prestigious 24 Hours of Le Mans.

Apple Watch versus Microsoft Band?

Most people seem to have interest in product comparisons even when the products have different intended audiences. These comparison usually are quite slanted in one direction due to the predilections of the author and provide little to no value because it is an opinion piece and not a true evaluation. So the discussion either resonates with you or feels completely ridiculous. With devices, authors seem to enjoy rating similar products through the same lenses even if does not make sense.  Why would a purely home consumer ever want a business centric device? The sway is trying to make other people see the world through your lenses instead of educating people to make their own choices that are right for them. This is completely true for phones, and it’s also true for wearables.

I have been using a Microsoft Band for several months, and my son just received his Apple Watch. My world is app UX design and architecture for large enterprise systems, which mixes in complex mobile and large screen immersive data visualization experiences. My son’s world is that he is attending Art Center College of Design for Interaction Design and is about to embark on a summer internship at Facebook. We both own Apple and Microsoft products. His center of gravity is in elegance and beauty of design, where mine is in elegance and performance of design. But what is also different is what do in life which changes what we need from our devices.

For wearables, my world is fitness. I want to know steps, how well I’m sleeping, and, most importantly, detailed tracking of my mountain biking adventures with gps, heart rate, and calorie burn. On a second tier of importance are the notifications through email, calendar, Skype, SMS, Twitter, and Facebook. With my activities (mountain biking) I’m often in dirt and rocks and slamming into things on the mountain, so I can’t worry about the health of my wearable. At the end of every ride I shoot off an email to my buddies that has these attachments:


This is my lense. For $200, I feel I am getting my money’s worth out of my Microsoft Band. I don’t care that it is ugly and is not distinguishable from other wearables. It’s a touch bulky but I’ve gotten used to it. I wish the battery life were a little better. Putting that into context, I can do a long 20 mile mountain bike ride only if I’m near a full charge. It is hitting pretty much every sensor on the device with GPS sucking up most of the juice. I wish there was a little better control of how notifications are managed. For example, I may just want my work email pushed to my Band and not my personal email and not have to define a discrete list of people. No device is perfect and we will all need to judge whether or not the compromise you would need to make justifies its continued use.

My son would never use a fitness band, and would never use a Microsoft Band. He decided on an Apple Watch long ago. The only reason he has an Apple Watch so soon is that he prioritized a quarter of his net worth (i.e. $800) to this device. He has never worn a watch before. I would never wear a device so expensive on a mountain biking ride. I hear my son extol the sapphire glass on the watch, but he also used to talk about the shatterproof gorilla glass on his Android phone before it lost a battle against cement. The leather band is from a European country and costs $150 alone, and it’s handmade and smells of new leather. It is the stainless steel version, and the buckle on the leather band is milled from same metal as the housing. When my son was telling me all this, my wife laughed at the look of complete and utter disinterest on my face. Clearly, vanity is important to him and a core reason why he purchased the device.

So after about 24 hours living with the Apple Watch, I asked my son of his first impressions:


To hammer home my point about my son and fitness, his daily caloric goal was set to 300. The screen real estate feels small after using iPhones. The force touch is a new and interesting interaction being shared to other types of Mac devices, meaning a tap versus a pressed touch will behave differently. My impression is that although the interaction is interesting, it may not be discoverable for the less sophisticated users and if apps sporadically adopt it. The digital crown has been designed very well as animations that react to its movement feel natural and unforced. After apps are loaded, reactions to touch and the crown are smooth making the device not feel underpowered.

App navigation is not quite worked out because tapping the wrong app is too easy – you need to be precise and not move around while doing it. Siri integration seems snappy. My son asked Siri “how far is the moon” and she responded promptly. I had to ask Cortana on my Band the same question and the response was obtained in about the same time. Voice quality seems to have been nailed. It’s very Dick Tracy, but I had to explain to my son what that means. I could hear my son’s voice quite clearly, and he could hear my voice just fine through it. It was tested in quiet room in ideal conditions.

What Apple is doing with tactile feedback is interesting. Vibration patterns can be used for different things. For example, my son has CarPlay. When using navigation his Apple Watch starting vibrating with one pattern when he had to turn left, and another vibration pattern when he had to turn right.  My son enjoys the one less step he needs to do to buy things via Apple Pay on the Apple Watch. Not sure I like that it is even easier to spend money. Basically you just need to move the watch to the NFC reader and boom – you have been charged. The idea here is that since the device is strapped to your arm, it remains authenticated after supplying the passcode once per day. If the Apple Watch is taken off, it would need to be authenticated again before it could be used. Another interesting feature is a use of a meta language to communicate to your friends. Of course they will also need an Apple Watch. Through this digital touch, you can send vibration patterns to a friend. This could even be your heart beat. Also, you could send simple sketches to each other. He doesn’t know anyone yet with an Apple Watch so it remains to be seen how well used this feature will be.

So these are the lenses of my son. He loves new gadgets and loves the Apple ecosystem. Vanity is important to him. At $400, the device feels worth it to my son. But at $800, he says it doesn’t. The vanity effect seems to balance out the feeling that it is not worth it. It will be interesting to ask him the same questions he has worn the device for a couple of months. Perhaps he can sell it this week for 4x what he paid for it. Anyone?