We were excited to be a sponsor of 360AnDev this year. Five members of our development team were in attendance, from left to right: Paul Trebilcox-Ruiz, Jan Birkelund, Scott Carson, Carter Hudson, and Erik Wolfe.
Our contribution to 360AnDev – the all-important T-Shirt! A big thanks to Matt Thomas from our design team for the design.
With all of the excitement around the event, and the knowledge transfer that was a great benefit to Tack Mobile attendees, we are very much looking forward to attending 360AnDev next year. Each presenter spoke with passion and insightfulness, making each topic engaging. We found the following to be some of the most interesting presentations from the conference:
After the keynote, 360AnDev kicked off with a highly technical talk by Ryan Harter titled @Eliminate("Boilerplate"). In this presentation, Ryan went over how much boilerplate code Android developers actually write in Java, and how the build system can be used with the annotation processor to generate code and save development time. Ryan went on to discuss processing rounds and how code generation occurs when building an Android app, and how to use the third-party open-sourced app JavaPoet (by Square) to generate classes based off of a simple schema. The slides for the talk can be found here. Ryan Harter can be found on Twitter: @rharter.
As software (read: Android) developers we’ve all been there: a new project is kicked off and before any thought is put into architecture, we start slinging code. As features and services are added, code complexity grows and maintainability diminishes. One AsyncTask is added to handle a network call, then another, then another. What started as a simple database schema now consists of a massive database manager and complex custom SQL statements. Activities and fragments are bloated with UI boilerplate and setting up Listeners; your fingers are sore from typing findViewById() hundreds of times. How did it come to this?
Chris Guzman came to the rescue with a great talk titled Libraries I Wish I Knew About When I Started. The talk was structured around a new app Chris was writing called TAaSTY (Tacos As a Service To You) and is basically meant to be a Tinder clone, but instead of searching for human love you swipe right for the perfect taco. Chris emphasized that all too often Android developers (and developers in general) try to reinvent the wheel by writing everything from scratch. This creates a large, unmaintainable codebase that makes it harder and harder to add features. He outlined six libraries that developers should consider on every project and how they could be used in his TAaSTY app. Below is an outline of the libraries Chris covered:
- Eliminates UI boilerplate code.
- Uses annotations to easily bind Views, set EventListeners, and inject Resources.
- Library for downloading and displaying images
- Includes features for downloading from the web, caching and loading from disk.
- JSON serialization and deserialization library.
- Can directly deserialize JSON into defined POJOs.
- Library for making HTTP requests - no more AsyncTask!
- It is typesafe and has built in support for authentication, JSON parsing (using GSON), RxJava, and asynchronous execution.
- Easy to define custom HTTP interfaces.
- Database library that replaces SQLite.
- Built for mobile from the ground up.
- Fast enough for most queries to run synchronously.
- Allows for multiple Realm databases in one app.
- Dart + Henson
- Inject intent extras as an object property.
- Dart gives you the ability to inject Extras using Butterknife inspired annotations.
- Henson generates intent Builders to easily build custom intents.
The second day at 360AnDev was kicked off with “Android is for Everyone” - an excellent keynote delivered by Denver’s own Kelly Shuster. In her presentation Kelly mentioned that Android is the “world’s phone” as there are 1.4 billion Android devices. Unfortunately about 1 billion people worldwide have a permanent disability. These disabilities can be things like poor vision, fine motor-skills difficulties and loss of hearing to mention a few. Kelly also noted that as our population ages there are several eye problems and other disabilities that become more common. On top of all of this: users affected by temporary disability. As an example, when our eyes are dilated it is very difficult to see the text on our phones as it is blurry. We would like to be able to expand the text or have the text read to us.
In her talk Kelly helped enlighten many of us on this accessibility problem and proposed ways we can make our apps inclusive of all our users.
Some of Kelly’s suggestions were:
- Describe user interface controls. Make sure to provide content descriptions for UI components that do not have visible text.
- If an image isn’t important set content description to null so the screen reader can skip it
- Tip: Create Espresso Tests to automatically check contentDescription
- Don’t provide audio only feedback (have a secondary feedback mechanism)
- Run the accessibility scanner
- Easily curate beautiful accessible color combos
Kelly Shuster can be found on Twitter: @KellyShuster
With the second day of the conference underway, Margaret Maynard-Reid gave an excellent presentation with real-world examples on creating applications that use machine learning to deliver amazing results in applications. Her presentation discussed the concept of machine learning, and the various ways that it can be integrated into your programs. The first set of examples revolved around tools that exist within an app, and include Google Play Services, with its Vision library for detecting text through the camera and finding faces in images, as well as the Awareness API for detecting user context. This section also briefly touched on TensorFlow, a new machine learning library from Google, by using a working sample that was able to classify an object viewed through the camera. Next, Margaret discussed some of the available REST APIs that are able to take input from an app and return a processed result, giving developers even more options for expanding the usefulness of their apps. Margaret wrapped up her awe-inspiring presentation by discussing design considerations for using machine learning, such as being mindful of user data and privacy, and avoiding using machine learning as a catch-all tool. Slides for this presentation can be found here.
Dependency Injection - those two words can be intimidating for developers. Many devs steer clear of the concept altogether, when in reality dependency injection is a fundamentally simple programming practice. Dan Lew broke down a seemingly complex topic in his talk Dependency Injection Made Simple. First, he defined the phrase ‘dependency injection’. A dependency is simply when one component depends on another component; in this case these components are software modules. So dependency injection is just a means of providing components their dependencies in a clean, scalable, non-coupled manner.
Dan then went on to explain the benefits of dependency injection and why it is a useful programming methodology. Dependency injection allows modules to share common dependencies. It also allows for dependencies to be configured externally, allowing for greater modularity in your code. As a result, dependency injection decouples modules, increasing ease of testing and debugging. Dan then introduced Dagger, a library for annotated dependency injection. He focused on the features of Dagger I and how it can be used to make complex dependency injection easy using an Object Graph. The slides for the talk (here) contain more details and some great code examples. Dan Lew can be found on Twitter: @danlew42.
After a successful two day conference, attendees were happy to reconvene for one last social event at Tack Mobile’s headquarters in Denver’s RiNo District. Folks from the industry showed up to share stories, learnings, and just kick-back and relax in the heart of Denver’s burgeoning tech scene and take a peek around the Tack Mobile and Assembly offices.