It’s the holiday season, and you know what that means… Santa will be coming to town to give gifts to all the well-behaved developers out there! Do you want to know a sure way to get on Santa’s “Nice List”? Building an intelligent, Serverless, Xamarin app. Or as we like to call it, completing the Santa Talk challenge.
Time to cozy up and hack away!
Santa Talk – The App
The Santa Talk app allows you to send a note to Santa, and then find out whether he’ll deliver a gift to your house.
(A very special thanks to the snppts website for the great inspiration on the user interface for Santa Talk! Y’all are definitely on the nice list this year!)
Santa’s a busy guy this time of year though. So this Xamarin.Forms app relies on Microsoft Cognitive Services – Text Analytics and Azure Functions to determine if you’re getting a gift.
You can download the app, and read instructions on how to install the Azure components of it from this GitHub repo.
Cognitive Services – Text Analytics
Text Analytics is one of over twenty different Cognitive Services products. And it can do some pretty neat things.
For example, it can parse a string of text and pick out the key phrases. In essence telling you just the important parts. It can also identify entities, or people, places, or things contained within a sentence.
Santa Talk uses Text Analytics’ ability to detect the language a string a text was written in. And it also parses the general sentiment of a string. Positive or negative thoughts behind the text.
Azure Functions
Even though Text Analytics provides a .NET SDK, you should not invoke it directly from a Xamarin app (or any client-based application for that matter).
Rather, you should only invoke a private resource like Text Analytics from a server-based client. You do not want to leak the private API key for Text Analytics after all.
And Azure Functions makes a great server-based client.
The benefits of Azure Functions are numerous, but Santa Talk exploits the ability to have a Function run in response to an HTTP call. Essentially making a Function a backing Web API.
Santa Talk – The Challenge
So what’s the challenge? How do you get on Santa’s “Nice List”?
- Visit the existing Santa Talk app repo and fork/clone it.
- Extend it in some way.
- Open a pull request on the original repo and let us know:
- How you extended the repo, and include some screenshots.
- Your thoughts on the Azure services and/or Xamarin products that you used.
- What went well and what did not.
- Final date for submission is January 5th at 11:59PM Pacific
Get Sweet Xamarin Swag!
Everyone who participates can apply for some swag. Everyone will win Xamarin stickers and 10 entries will be chosen at random to receive a $25 gift card to the .NET Foundation Store. Which is packed with Xamarin t-shirts, monkeys, and stickers!
What Can You Add or Extend?
The world is your snow globe. Which means, any idea is a good idea!
Here are a few that we thought of:
- Add in the ability to take a photo, and use Cognitive Services Vision to have Santa figure out if you’ve been naughty or nice.
- Save the responses from Santa on device and display them with a `CarouselView`.
- Redesign the user interface using `Shell`.
- Track the user’s location when they make a request, and make annotations on a map where the naughty and nice developers live.
- Connect to Azure Logic Apps to send a Tweet whenever Santa gets a “letter”.
So Get Going!
Additionally, there is a free tier of Cognitive Services and you can run Azure Functions locally – so this can all be done for FREE!
Here are some resources to get you started:
Submitted a PR: https://github.com/codemillmatt/santa-talk/pull/19
Added code to pre-populate the sender name with the currently logged user on Windows or Android. Based on the article https://doumer.me/get-the-device-current-user-name-with-xamarin-forms/, updated to correctly request permissions to access the user account on newer Android versions.
Hey there, so instead of specifying the xml configuration file in your Android manifest, simply set this property on your application code in the manifest:
android:usesCleartextTraffic=”true
This should set it app wide on all IP addresses from my understanding.
Wow, it sounds good, It’s a good practice for Shell and serverless, what is the deadline?.