Image for post
Image for post

We recently held our semi-annual hackathon at Instacart — the Carrot Wars 2018!

In putting this hackathon together, I noticed a pretty blaring gap — there wasn’t a simple (and free) online service that would quickly tabulate the results for a hackathon event. We looked around and found some nifty options, but most of them were a tad bit too expensive for our liking. They also were not setup for a single event use or required a monthly subscription. There other usage restrictions, too — max vote count, concurrent user count, etc.

You’d think there would be at least some option out there, given how popular hackathons are these days. We did some cursory searching but couldn’t find something that would work for us. …


Image for post
Image for post

Kotlin already has TODOs. That’s awesome! but it’s a tad bit aggressive.

Take this piece of code for instance:

fun finishAwesomeFeature() {
callAwesomeFeature()
TODO(“add analytics so data scientists stop harassing me”)
}

If your app happens to call awesome feature, Kotlin will blow it up!

Exception in thread “main” kotlin.NotImplementedError: An operation is not implemented: add analytics so data scientists stop harassing me at AwesomeFeatureKt.finishAwesomeFeature

I wanted something similar, but a tad bit gentler:

  • A reminder “in code” that I needed to get something done — the code is my documentation, to-do list etc. I don’t need to sign in or go to another tool to check my code. …


Image for post
Image for post

This is a continuation post in a 3 part series:

  1. Understanding the changes
  2. Disposing subscriptions
  3. Miscellaneous changes

This was the part that I initially found most tricky to grasp but also most important to know as an AndroidDev (memory leak and all).

Jedi master Karnok explains this best in the wiki:

In RxJava 1.x, the interface rx.Subscription was responsible for stream and resource lifecycle management, namely unsubscribing a sequence and releasing general resources such as scheduled tasks. The Reactive-Streams specification took this name for specifying an interaction point between a source and a consumer: org.reactivestreams.Subscription …


Image for post
Image for post

In case you haven’t heard: RxJava 2 was released sometime back. RxJava 2 was a massive rewrite with breaking apis (but for good reasons). Most dependent libraries have upgraded by now though, so you’re safe to pull that migration trigger with your codebases.

Folks starting out directly with Rx2 might enjoy this guide but it’s the ones that started with Rx 1 that will probably appreciate it the most.

I’ve split this guide into 3 parts:

  1. Understanding the changes
  2. Disposing subscriptions
  3. Miscellaneous changes

Let’s get started.

In this first part, I want to dive into making sense of the Rx2 changes from the point of view of an Rx1 user. …


One of the advantages of working in the Bay area is you tend to run in to tech celebrities every so often.

I was working in Palo Alto (late 2015) on a previous startup (Wedding Party). My colleagues and I decided to get coffee at the nearby cafe. I saw Andy Rubin sitting outside casually talking to two other folks. I was certain it was him and told my buddies, “Hey, I think that’s Andy Rubin”. My colleagues (the lovable jerks that they were) said: “that’s the Android fanboy in you seeing things”. …


I know it’s almost the end of January but I like to take my time with these posts. You can take a look at my previous year-end posts here: (2015, 2014, 2012, 2009, 2008).

In addition to just jotting things I was most proud/happy about this year, I also want to note down some of my learnings. There were many overwhelming moments that led to much introspection. I want to try and document some of those moments here (at least the less embarrassing ones). So here goes:

Stuff I did:

Image for post
Image for post


Image for post
Image for post

TrueTime, an NTP library for Swift and Android.

A common complaint we’ve heard from our shoppers is that when they’re deep in the aisles of a grocery store, the app is frequently held hostage to spotty network connectivity.

We try to empower our shoppers with the app and give them all the tools they need to fulfill their order quickly. Spotty network connectivity is a big problem.

In this series of blog posts, we’d like to share with you some of our ideas and learnings from moving primary parts of our shopper app offline — making the apps for our shoppers first-class partners to our APIs. …


I finished 2014 not having the slightest clue what would be in store. 2015 was a rollercoaster…

Image for post
Image for post


Image for post
Image for post

When I first started using RxJava and heard of Subjects I envisioned them as mystical trinkets. When used correctly they seemed to magically do the impossible. When used incorrectly they turned my code to a steaming pile of U+1F4A9. A friend warming up to RxJava echoed a similar sentiment: “Subjects are like a (colorful adjective) black box to me. I’m not really sure when I should ever be using them. …


Nokia X announced.

I like the name Nokia X. It rings more human than “Windows Phone 7" or “Windows Phone 8". I don’t think i’ll ever buy one, but i think the name’s good.

Metro UI (my favorite UI design style), Visual Studio (one of the most pleasant IDEs back in the day — don’t use it anymore to comment on the latest version), C# (I’ve done very little C# programming, but I secretly wish everyday Java read more like C#) and the Xbox are some of the gems that the folks over at Redmond have given us. One thing they have historically bungled up royally though, is their product naming (you know what Metro UI is called today? “Microsoft design language”).

Please don’t change Nokia X to “Windows Android Phone 1" Microsoft…

About

Kaushik Gopal

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store