My Re:Invent 2017


The conference is over, I’m back home and it’s time to digest and make plans. AWS re:Invent 2017 was my first big conference and it was a lot of fun. I learned a lot, and now I have a bunch of new stuff to learn. When will it end? Hopefully never!


Here is the list of the announcements that I was hoping for and never dreamed they would announce.

DynamoDB Global TablesAmazonDynamoDB

The biggest and most welcome announcement at re:Invent for me was DynamoDB Global Tables. Yep, Kubernetes support, graph databases and Golang for Lambda is great and all, but cross-region replication is going to be a hit at work. No more loading 100’s of GB in three regions from a Data Pipeline job that takes days. YAS!!!


The announcement of AWS Neptune was a complete shocker for me. I’ve been researching graph databases for a couple of months and the industry is decidedly against using the common graph database flavors in a transactional system like the one I work on.

Time will tell, but from what I’ve read, Neptune is limited to an in-memory store with read replicas in the same region. For me, that won’t work. I still think Dgraph would be a better fit with their distributed transaction and multiple machine support. I might start a Dgraph POC in a few weeks and I’ll try to blog about the results.


Most cloud providers now have Kubernetes support and it could not have come at a better time. I still need to dig into Kubernetes more and start using it in anger. This announcement was expected but nice to hear.

Go for LambdaAWSLambda

This was a surprise and a very welcome announcement. It’s not released yet, and we did not get a good timeframe for its release. Or at least good enough for me.  When it is, we will be using it heavily at work.

My Schedule

For those of you that have never been to one of these conferences, here is what my days looked like. I was lucky that all of my sessions were in the Venetian Hotel. Other people I went with had to move between two or three hotels during the day.

Code Description Time
ATC303 Cache Me If You Can: Minimizing Latency While Optimizing Cost Through Advanced Caching Strategies 11/27/17 10:45 AM
ATC301 1 Million bids in 100ms – using AWS to power your Real-Time Bidder 11/27/17 12:15 PM
GAM307 Ubisoft: How For Honor Runs Using Amazon ECS 11/27/17 1:45 PM
GAM401 Designing for the Future: Building a Flexible Event-based Analytics Architecture for Games 11/27/17 3:15 PM
DAT321 From Minutes to Milliseconds: How Careem Used Amazon ElastiCache for Redis 11/28/17 9:15 AM
ARC209 A Day in the Life of a Netflix Engineer III 11/28/17 10:45 AM
ARC401 Serverless Architectural Patterns and Best Practices 11/28/17 1:45 PM
DEV206 Life of a Code Change to a Tier 1 Service 11/28/17 3:15 PM
DAT305 ElastiCache Deep Dive: Best Practices and Usage Patterns 11/28/17 4:45 PM
GEN25 Andy Jassy’s Keynote 11/29/17 8:00 AM
DAT328 Tinder and DynamoDB: It’s a Match! Massive Data Migration, Zero Down Time 11/29/17 11:30 AM
DEV314 Monitoring as Code: Getting to Monitoring-Driven Development 11/29/17 1:45 PM
DAT304 DynamoDB – What’s new 11/29/17 3:15 PM
GEN06 Werner Vogels’ Keynote 11/30/17 8:30 AM
ARC319 How to Design a Multi-Region Active-Active Architecture 11/30/17 11:30 AM
DAT327 DynamoDB adaptive capacity: smooth performance for chaotic workloads 11/30/17 2:30 PM
ARC321 Models of Availability 11/30/17 4:00 PM

Going Again

I think I’m going to need the rest of 2017 to recover, but all in all, I think it was worthwhile to go to the conference even though you could watch the reply on Youtube. If you ever have the chance to go, you should take it. One of the benefits of going is speaking to the engineers who built the systems you use. I had a great conversation and a good chuckle about AWS support with them. See you next year at re:Invent 2018.

Attendance with Beacons

This post is going to be a little different than my normal Xamarin.Forms posts. I want you all to know that I am more than a pretty interface. I have architectural and distributed systems chops as well.

I currently work for a local university that needs a solution for taking attendance for the first 3 weeks of every semester. You see, the university I work for is not an attendance taking university, but we need to satisfy a government requirement to take a student’s attendance to get financial aid. So I was asked to solve this little problem using mobile.

Here was the challenge

Students will walk into class and have their attendance taken automatically without the teachers involvement. Magically Delicious!


To solve the problem, I combined some very cool technology and one of them, of course, is Xamarin and Xamarin.Forms, but it’s not the star of this blog post. The star is iBeacons, specifically Estimote Beacons.

If you don’t know what an iBeacon is, don’t worry. Think of them as tiny radio stations that transmit their signal over Bluetooth. The Bluetooth signal can range from a few feet to over 200 feet for each station.

The beacons broadcast a small amount of data every few seconds to receivers that are tuned to its specific address. Each classroom at the university will get its own beacon and it will broadcast the building and the room number of the classroom.

When a phone comes in contact with the beacons signal, it will then wake the Xamarin app up and give it 10 seconds to do its work. This works even if your app is not running. Neat!

Beacon Phone Home

Ok, now that the phone has come into range of our classroom radio station, what do we do now? For this application, the app transmits the beacon data and the student’s identity to the cloud. We call this message a beacon ping. To the cloud!


The university’s student mobile application is backed by an Node.js Azure Mobile Service. I know, I use C# on the phone and JavaScript on the server, the irony!


As you can imagine, we will have a lot of pings coming into the Azure front ends. Today most of that data will be used for attendance but we have no idea where the school will place beacons in the future. Maybe they’ll put them in front of the food venues to figure out which is the most popular. Or put them on the light posts outside to see what walkways are the busiest. We just don’t know what the genie will do once it’s let out of the bottle.

Beacon PubSub

With all the unknowns for our system, flexibility was something we had to build into the system from the beginning. I decided to use the Azure Message Bus in a PubSub configuration to handle today’s and tomorrow’s requirements. This configuration is very powerful and it’s so simple to setup it borders on criminal.


Our day 1 configuration for the Beacon PubSub was for the Azure Mobile Service to take in pings from the handset and push them onto the “BeaconPing” topic inside of the Azure Message Bus. Two subscriptions are added to the topic, one for taking attendance and one for auditing.

Taking Attendance


Taking attendance is pretty simple. For every ping, we look up a student’s schedule based on the StudentId inside the ping and see if the beacon’s location matches the classroom on their schedule. If we have a match, then we mark them as attended. If not, we throw the ping away and move on. Students can easily come into contact with beacons from other classrooms so we just handle that case by ignoring the ping. The attendance module is idempotent so duplicates are not a problem.


The audit subscription will subscribe to every ping and put the pings into Hadoop for future analysis. I have no doubt our computer science students will have some fun with that data in the years to come.

The Future


One of the benefits to using PubSub like this is flexibility. With each ping, identifying the student and a location on campus, the opportunities are endless. One scenario we like to talk about is placing a beacon on our school mascot and running reports to see what part of the student body came in contact with our furry friend. I don’t know why we would want to do that, but we could. Beacons don’t have to be stationary either.

The Endless Possibilities


The one reason why I like this system and setup is flexibility and the fact that we don’t have to change the code on the mobile app when we add a new type of beacon or beacon processor. We just put more beacons on campus and another processor in the cloud and we’re done. See, like I said in the beginning of this post, I’m not just a pretty interface!

One thing to note here is that some students might not have a phone or wish to be tracked in this manner. Our students using the app have a choice to enable or disable this feature and we still have to have a manual way to taking attendance at the school. Because some student may have a Windows or Blackberry phone! 😉