AlarmBot – Part 1

Introduction

Waking up is a real struggle for me in the morning. This is why every night I set multiple alarms, most of them every 10-15 minutes, so my alarm looks pretty much like this (that is my actual list of alarms from this morning):

And since every day I have a different schedule (and because the Android app doesn’t allow more than 20 alarms), each night I have to setup my alarms manually, and I often set them up 5, 10 or 15 minutes apart. So I have to do it 7 or 8 times manually, which I really hate.

In the next few weeks, we are going to build AlarmBot – a bot that takes natural language queries from Slack or Facebook Messenger and starts the alarm on an Android or iOS phone at the right time.

LUIS

LUIS (Language Understanding Intelligent Service) is a service from Microsoft Cognitive Services that allows you to compute natural language query and return a list of intents and entities from it.

One of the key problems in human-computer interactions is the ability of the computer to understand what a person wants, and to find the pieces of information that are relevant to their intent. For example, in a news-browsing app, you might say “Get news about virtual reality companies”, in which case there is the intention to “FindNews”, and “virtual reality companies” is the topic.

LUIS is designed to enable you to very quickly deploy an HTTP endpoint that will take the sentences you send it, and interpret them in terms of the intention they convey, and the key entities like “virtual reality companies” that are present.

LUIS lets you custom design the set of intentions and entities that are relevant to the application, and then guides you through the process of building a language understanding system.

Once your application is deployed and traffic starts to flow into the system, LUIS uses active learning to improve itself. In the active learning process, LUIS identifies the interactions that it is relatively unsure of, and asks you to label them according to intent and entities.

We will build a model that will be able to understand the intent and entities from a queries like: Set an alarm at 6:45 tomorrow morning, please!, or Set some alarms starting at 6:00 every 10 minutes until 7:30.

Azure Notifications

Azure Notification Hubs provide an easy-to-use, multiplatform, scaled-out push infrastructure that enables you to send mobile push notifications from any backend (in the cloud or on-premises) to any mobile platform.

With Notification Hubs you can easily send cross-platform, personalized push notifications, abstracting the details of the different platform notification systems (PNS). With a single API call, you can target individual users or entire audience segments containing millions of users, across all their devices.

We will use Azure Notifications to start the alarm on the mobile phone, with a very simple app built using Xamarin (see below).

Xamarin

Xamarin is a framework that allows the usage of a common C# code base in order to build iOS, Android and Windows apps.

Build native apps for multiple platforms on a shared C# codebase. Use the same IDE, language, and APIs everywhere.More on the Xamarin website

If you want to have an app that works on iOS, Android and Windows, and it doesn’t require some very deep platform integrations with iOS or Android, then most probably, building your app with Xamarin is the best course of action.

A few weeks ago, Xamarin was bought by Microsoft, so it will only get more traction among developers.