See Matt at That … Conference!

See Matt at That … Conference!

I’m Speaking! I’m extremely honored and couldn’t be happier to announce that I’m speaking not only once… but twice at That Conference this August in Wisconsin Dells! Session One – Apple Watch Development: The Bear Essentials In the first session on Tuesday, August 11, I’m joining forces with Matt Snyder to talk about developing for Apple Watch using the Xamarin platform. Just don’t look at your watch too much and watch out for bears! Session Two – Everybody Into The Pool! Node.js for .NET Developers In the second session, again on Tuesday, August 11, we’re going to jump into the pool and explore exactly why a .Net developer would want to build server-side applications using javascript, of all things. Register Now So don’t delay – head on over to the That Conference website and get your tickets before they sell...
Aka Awesome Refactored

Aka Awesome Refactored

In the last post we talked about Akavache and frankly how awesome it is. In this post we’re going to take a simple Xamarin Forms application which uses a “home grown” caching mechanism and refactor it into one which uses Akavache. We’ll see how much simpler and more elegant Akavache makes our code and also check out some design considerations for using Akavache along the way. Why Refactor? We already have a working application, why even bother refactoring in the first place? Plain and simply, why should we reinvent the wheel? If we can swap out our (probably buggy) code for a framework which has been tested by the community, has more features, and has been thought out and designed for the sole purpose of caching – we’d be dumb not to use it. Plus when integrated, Akavache makes our code cleaner and more reliable … and who doesn’t like that? What We’re Refactoring The quick overview: In the Cold Hard Data Caching post, we wrote a Xamarin Forms application that downloaded questions from StackOverflow tagged with the keyword Xamarin and displayed those questions in a ListView. Tapping on a question displayed another page with either the answer or a ‘no answer found’ placeholder. We used a homegrown caching mechanism in the previous version and we’ll be upgrading to Akavache. The detailed specs: Xamarin Forms app Show a ListView of dates for the last 14 days Tapping on a day shows a ListView of questions from StackOverflow from that day tagged with “Xamarin” Questions should be cached when downloaded Stack Overflow should be queried for any new questions asked...
Akavache is AKA Awesome!

Akavache is AKA Awesome!

In the last post we covered how to implement data caching in a cross platform application using Xamarin. And we also showed why providing a data cache to the users of our mobile applications is important. Why caching is important Network resiliency Perceived app performance However, the plumbing for the caching can be a bit of a pain to implement. The following diagram gives an example of the flow needed to implement caching. The order in which the tasks are implemented may vary based on the business requirements, some tasks may be omitted, but generally they are the same. Then we get to the characteristics of the data we want to cache. Obviously the data’s not volatile since we’re saving it for later use. Most likely we already know where and how we want to use the data within our app, so if we thought our design through, we’re saving the data in a way that it’s easy to get it and we’re not querying it in a relational manner. And the business requirements will dictate this, but the data already in the cache may not change where we have to update it. So what if I told you there was a framework that provided everything above (and more), and made it super easy to implement the caching plumbing in a cross platform manner? Enter Akavache The official definition from Akavache’s GitHub site: Akavache is an asynchronous, persistent (i.e. writes to disk) key-value store created for writing desktop and mobile applications in C#, based on SQLite3. Akavache is great for both storing important data (i.e. user settings) as well...