A Conversation About Diversity Let’s examine what lies across country borders. Growing up, I wondered what lay across country borders. What makes their country special compared to any other? Why is their food so different from ours? I was always curious about what people from other nations were like, so I dreamed of visiting distant lands. My mother’s stories, stories…
Yammer
https://medium.com/yammer-engineering · 10 posts · history since 2016 · failing
15 Mar 2017
12 Dec 2016
Since the introduction of Xcode 8 in late September, Swift 3 has become the default version to develop iOS and Mac OS apps. As an iOS shop, we had to consider a migration project to port our codebase from 2.3 to 3 while maintaining a good relationship with the Objective C part of the project. To Migrate or Not To…
13 Oct 2016
See my conference talk here: Youtube link: https://www.youtube.com/watch?v=ZmI-NZ1akow SpeakerDeck: https://speakerdeck.com/jaredsburrows/the-road-to-single-dex-gradle-summit-2017 Original Post: The Yammer for Android app was over the dex limit. This means the Android application was being shipped with more than one .dex file because each .dex file can only hold around 64k methods . I was determined to make our Android application much smaller in order to…
15 Sept 2016
It’s been 4 years since Microsoft acquired Yammer, and we easily remember how being acquired was our springboard into a bustle of structural adaptations. An acquisition by such a large company alone presents all kinds of new and exciting challenges. Not to mention, Yammer is a pretty unique product under the Microsoft umbrella; we’re a Linux shop. Microsoft-owned datacenters are,…
Using RxJava’s Observable.fromAsync() to convert asynchronous APIs while properly dealing with backpressure Since we started using RxJava in our Yammer Android app we’ve often encountered APIs that don’t follow its reactive model, requiring us to do some conversion work to integrate them with the rest of our RxJava Observable chains. APIs usually offer one of these two options when dealing…
The pattern for loading and displaying data for our Yammer Android app is roughly as follows: When wanting to show content query two sources: one being the disk (cache), and the other one being the network (API). Show the cached data while waiting for the network. When the network request comes back, cache it to disk, then show it. This…
Re-register GCM push notifications on app upgrade with MY_PACKAGE_REPLACED When implementing push notifications using GCM (Google Cloud Messaging) on Android, one of the gotchas of which to be aware is the “application update” scenario. The Google documentation states: When an application is updated, it should invalidate its existing registration ID, as it is not guaranteed to work with the new…
Using Otto and Retrofit to log out users when receiving 401 error responses from the API I was recently working on an Android project where we needed to log out the current user whenever you encountered a 401 Unauthorized HTTP response from our API. I am a fan of all the Android libraries from square , so for this post…
Microservices have been a popular topic recently. People argue over whether you should start with microservices or evolve there from a single ‘monolithic’ app . Maybe in a well designed app microservices are simply a deployment option ? It all seems rather academic when you have upward of 100,000 lines of (non-test) Ruby code glowering back at you. (And that’s…
Myo Thein & Dan Lee Everybody loves a good rewrite. It feels great to throw away a crusty, years-old codebase and replace it with something shiny and new. Rewrites come with some serious tradeoffs though, and in a lot of cases, the decision to start again from scratch is not the right call at all. In the seven-year history of…