DevFests are community-run events by local Google Developer Groups. I saw a Call for Proposals this summer for DevFestDC this summer, applied, and was excited to be accepted.
Here are some thoughts on the conference, and summaries of the talks I attended:
Venue
Capital One's headquarters in Tysons Corners, VA was the conference site. The main building on the campus is enormous, with a beautiful atrium, conference theatre and large meeting rooms that easily held the 600+ attendees.
Although it looks to be an easy walk from the Crowne Plaza where I was staying, the presence of the I-495 Beltway and Washington Metro lines made a pedestrian route impossible. Google Maps computed a path that would take over an hour! Fortunately, the hotel offered a free shuttle service within a one mile radius.
Keynote
Yuriko Horvath (@SquashedTwinkie) gave a talk entitled Pivotal Time to be a Developer: A Global Perspective:
Yuriko started by asking the audience whether we could explain our current job to our grandmother 15 years ago, compared to now. Her point was that technology today is pervasive and touches the daily lives of all generations. It has moved from being part of our world's infrastructure (telecom networks in the '60s) to being on-demand (search engines in the '90s) to being pushed to us (notifications, auto-renewing subscriptions).
Technology has benefited workers in all kinds of industries, especially around location and time flexibility. From telecommuting, to collaborative document editing, to video conferencing, to low-cost storage, our working lives are made much easier. Personally, I am a bit of a slow adopter of new tools, and don't completely abandon my old favourites. How many people still use Post-It notes, even though we have software to take notes or organize tasks? It's sometimes easier to just pick up and re-arrange pieces of paper.
As a budding public speaker, I'm keenly aware of techniques that good speakers use to engage an audience. I liked how Yuriko asked for answers from the audience, anticipated their responses, then followed up with more information.
.@SquashedTwinkie explaining how tech touches our everyday life. #DevFestDC pic.twitter.com/vtMaVvQbUi
— Annyce Davis (@brwngrldev) September 23, 2016
Espresso: A Screenshot is Worth 1000 Words
Sam Edwards (@HandstandSam) gave this talk about using screenshots in Android testing. I heard Sam talk about Host Card Emulation last year at Droidcon NYC.
This talk gave a lot of practical tips about why and how to use screenshots in testing. Images are a reflection of your app's UI, and test reports that include screenshots give developers and non-developers a way to see what your tests are doing.
He reviewed a number of existing screenshot solutions for Android, including Firebase Test Lab, and AWS Device Farm, as well as libraries like Spoon, Falcon, UIAutomator, and fastlane screengrab.
Some useful testing tips I learned:
- Setting a
FailureHandler
on Espresso, so that a screenshot is taken automatically when a test fails - Defining a low-res
mdpi
device as a baseline for tests with screenshots, to reduce the amount of time to transfer images (higher-resolution images take more time to transfer) - Jake Wharton's talk about the robot pattern as a way to separate the concerns of what is to be tested, vs. how that is accomplished, resulting in more robust tests
- LinkedIn's Test Butler to disable Android animations when running tests
- When using mock test data, consider creating models at test runtime, then serialize those to JSON. This allows you to generate "live" data that reflects the current date. A static file with fixed data wouldn't give you this.
Learning about the importance of using screenshots when writing Espresso tests with @HandstandSam #DevFestDC #AndroidDev pic.twitter.com/f5Gw94assY
— Annyce Davis (@brwngrldev) September 23, 2016
Making Sense: The Road to Mobile Awareness
Jared Sheehan (@jayroo5245) gave a talk about dealing with all of the sensor data on a modern Android device, like GPS, gyroscope, accelerometer, etc.
User context, e.g. where a user is, what she is looking at, what he is doing, etc. can give apps useful information they can act on. For example, disabling a device if it detects that it belongs to someone currently driving, or offering a discount when someone walks into a store. Jared described his experiences with accumulating sensor data, building a framework to process the (possibly noisy) data, and then interpreting it. This process is a lot of work, and there are a number of pitfalls to getting usable data. Third-party alternatives exist if you don't want to build something from scratch, but many of them cost money and might not do exactly what you want.
The key takeaway from this talk was that Google is now offering the Awareness API. It combines the data from 7 different context signals, and exposes them in an easy-to-use, high-level way.
Mantra for lowering battery costs -- Let Google take the blame for sensory data costs. Use their API! @Jayroo5245 #DevFestDC pic.twitter.com/KGcGDqmq9Y
— Shauvik Roy C. (@shauvik) September 23, 2016
Tensor Flow at the Museum
Josh Gordon (@random_forests) is a Developer Advocate on the TensorFlow team, and began his talk by describing an object recognizing app he built without writing any lines of code. He did this by training a TensorFlow neural network on photos he took of sculptures and paintings, then generating an Android app via Mobile TensorFlow. This app could then be used to later identify those same items!
Another impressive demo he showed was using ML to create art. By implementing a neural style algorithm, we can take a photograph and a painting as inputs, then create a new image of the photograph, in the style of the painting!
Most exciting for me were the mobile SDKs for doing tasks like vision, OCR and speech-to-text. Josh said that there have been significant improvements in the implementation of these difficult tasks within the last 5 years, all thanks to TensorFlow. And now, you can get these "superpower" features in your own apps!
Doing Period Work, Another Android Headache
Mark Murphy (@commonsguy), is a well-known Android speaker and entrepreneur, but this was the first time I've heard him speak in person. He covered the various APIs Android developers have to schedule work to be done in the future. Among them, were AsyncTask
, View.onPostDelayed()
, ScheduledExecutorService
, AlarmManager
, JobScheduler
, GCMNetworkManager
, and Firebase JobDispatcher
. In addition, he also highlighted an open-source library from Evernote, android-job
.
He did a thorough job explaining the evolution of the newer APIs, and subtle changes in their behaviour, as Google nudged developers towards better practices.
With so many approaches available to developers, we have long had the freedom to be bad app citizens. However, Google is tightening what you're allowed to get away with, in an effort to help improve device battery life.
The takeaway from this talk was that apps should downplay automatic background refreshing, and offer manual refresh. If you can live with running only on devices that have Play Services, then GCMNetworkManager
is the "modern" way to schedule background jobs.
I liked how Mark used an editor with a whole bunch of source code open, so that he could quickly switch from his presentation to a specific example, scrolling through it if necessary.
A Hitchhiker's Guide to Progressive Web Apps
Chris Nguyen (@uncompiled) presented an overview of what Progressive Web Apps are, and how they are blurring the line between native and mobile web apps. There's a whole gallery of examples available at PWA Rocks.
For a recent Shopify Hack Days, a colleague and I explored PWAs a bit, but I didn't work on the JavaScript side of things, so this talk offered some new content to me.
A key part of how PWAs work is a client-side, programmable network proxy, called a service worker. This piece of code can cache resources (like images or CSS) and make them available, even when a device is offline. Nowadays, web apps can incorporate things like push notifications and accelerometer data, so to an everyday user, they might not even know the "app" they're using is really a website.
If you're interested in developing PWAs, Chris mentioned two useful libraries: sw-precache and sw-toolbox. There is also lighthouse for auditing your PWA.
Poke-a-Mongo: How to Write Online Game That Works Offline
Oleg Godovykh (@0legg) spoke about how to write native apps that worked well offline. He described strategies like splitting your data and loading portions on-demand, gracefully handling offline situations to avoid annoying the user, prefetching and predicting user behaviour, and, caching state changes for replay later.
Unfortunately, I found his talk hard to follow, and wished that there were more concrete techniques I could apply in my own Android apps.
Be Together, Not the Same
Romain Piel (@_rpiel) and Anastasia López (@AnastasiaLopezD) flew all the way from the UK to present at DevFestDC. I got to chat with both of them in the speaker's "green room" a bit, and was eager to hear them talk about diversity.
I've written a blog post on why we need to have soft talks in the Android community https://t.co/BF60GhTrZ9 feedback welcomed 😊 #AndroidDev
— Anastasia López (@AnastasiaLopezD) August 8, 2016
They began by pointing out that among tech conferences, there is often a lack of "soft" talks, ones that aren't about technical subjects. Personally, I'm interested in these types of talks, especially as I will soon serve as a mentor, conduct interviews on a regular basis, and struggle with Imposter Syndrome and being an older (!) worker in technology.
The lack of diversity (whether it's gender, ethnic, or otherwise) is not just an issue in tech, but among society in general. Romain and Anastasia talked about what makes a community, and what affects its culture.
What followed were a series of sobering slides showing the disparity between tech workers, and the US population as a whole. It's well-known that the demographic breakdown of tech workers doesn't mirror that of the US workforce in general, when looked at from gender, ethnic or age perspectives.
The speakers gave good reasons why we should pursue diversity, and how we can support each other, and how we can build better communities.
This talk was only attended by about 20 people, which was disappointing. Everyone attends conferences for different reasons, but I personally want to learn about both technical and non-technical subjects, hear from speakers that are well-known as well as first-time speakers, as well as to challenge my own thinking.
I'm not really doing their talk justice, because there was a lot of thought-provoking content in it, and I kept reflecting on my own attitudes and actions, and ways in which I could improve. The Android developer circles that I observe and am a part of, are definitely working to improve their community, to make it more diverse and inclusive. For example, last year, at Droidcon NYC, there was an effort to get more female speakers, and Chiu-Ki also used an anonymous CfP selection process when co-running her own conference this year.
Anastasia and Romain put together a list of sources for a lot of their data in this document. In addition, they linked to a few other interesting things:
- A talk called Debugging the Tech Industry by Lena Reinhard
- Community Covenant, a code of conduct for online communities
During the Q&A, an audience member informed us that O'Reilly offers a Diversity and Inclusion Scholarship program that covers the cost to attend select conferences for under-represented groups
Our very own (and insanely talented) @AnastasiaLopezD and @_rpiel presenting their fantastic talk "Be together, not the same" @ #DevFestDC 👌 https://t.co/brWV6HAff5
— SongkickTech (@songkicktech) September 24, 2016