Disarming Yelp

20 January 2015

Today, I removed all of my 2 star and 1 star reviews from Yelp. Why?

It’s not that these establishments didn’t deserve the reviews I gave them. It’s because I categorically refuse to let my words be used as ammunition for dirty practices.

For a while now, there have been complaints that Yelp was modernizing extortion by asking businesses to pay for advertisements – as in, we’ll make sure good reviews are seen more, and bad reviews are seen less. Like every other business out there, Yelp’s trying to make money. But I’m absolutely not okay with Yelp threatening businesses with my reviews. Businesses that got a shitty review from me don’t need to invest their money in ads: they need to invest it in cleaning up their fucking act.

Why not remove all my reviews and abandon the service altogether? I just can’t bring myself to do that right now because no other service compares to what the Yelp platform offers. Yes, these practices suck, but from now on, Yelp will get no bad reviews from me.

Removed reviews are available here for your viewing pleasure. Perhaps in the future I’ll spritz up their presentation. Any establishments getting a rating of 2 or 1 stars will henceforth be put in this notebook.

I know this may inconvenience some, but when I’m dishing out the unfortunate truth, I want to be in control.

Flexible Android Preferences

14 January 2015

The recommended way of building a Settings screen in Android is to define preferences in an XML file and then load that file in a PreferenceActivity or PreferenceFragment. But that only works if you know all your preferences at compile-time. And sometimes we don’t know them. Sometimes, we want to be a little more flexible with preference loading.

As expected of Android documentation, we are told, “Your app’s settings are generally pre-determined, although you can still modify the collection at runtime,” but then given no documentation as to how to add or remove things from the collection. Typical.

Fortunately, it’s not difficult to do this. Enter flexible_preferences – a short Android application that shows you how to do gymnastics with Android Preferences. Tricks include:

  • Uses a custom layout file so you can show stuff besides the preferences like a loading spinner if you’re fetching preferences over the wire.
  • Create preferences without an XML file!
  • Hide and show preferences based on input (e.g. hide all other preferences if we toggle one particular preference to the off state).

And the best part (besides using the OP LinkedHashMap data structure) is it still leverages Android’s built-in preference functionality, so you get a lot of stuff for free!

Don't Tell Me to Share a Secret

08 January 2015

My friend Spencer asked me if I could beta test Mini Audicle for iOS. I agreed and asked him if he had any performance monitoring tools set up. Long story short, I ended up integrating Crittercism (my favorite crash monitoring tool) into Mini Audicle iOS so he could collect crash data from every user.

One important part of the Crittercism integration process is uploading dSYMs - debug symbol files. For release builds, debug symbols are removed to reduce the binary size but this makes crash logs much less useful. Fortunately, dSYM files help us decode (symbolicate) these crash reports. It’s super important to upload dSYMs if you want to make any sense of stack traces.

Fortunately, Crittercism provides thorough instructions on setting up automatic dSYM upload, but it’s not all sunshine and rainbows.

Read More

Dropbox and iTunes

22 December 2014

tl;dr - If you keep your iTunes library in Dropbox, it’s all sunshine and rainbows until you realize Dropbox is syncing iTunes Library.itl and iTunes Library.xml after EVERY song play or skip.

Putting your iTunes library in Dropbox sounds like a great idea. And for the most part it is. You get your iTunes library on every computer you sync with Dropbox. You add music on one computer, and you get it on the others. Generally, it’s convenient and easy.

The trouble starts when we look at the files that manage our library: iTunes Library.itl and iTunes Library.xml. Every time a song is touched (played or even skipped), these two files are updated. Every time the files are updated, they are synced to Dropbox.

My iTunes Library (~18,000 songs) itl and xml files are 5.1 MB and 28.3 MB respectively. Let’s say the average song is 4 minutes long. If you are listening to my iTunes library for an hour (15 songs), that’s 500 MB worth of file changes that are synced to Dropbox in one hour! We’re easily talking gigabytes of bandwidth consumed daily if you listen for more than a couple of hours. It’s pretty ridiculous.

It’s not a huge deal yet. But still, with bandwidth caps looming in the future, it’s something worth thinking about. So, can we make iTunes in Dropbox less bandwidth hungry?

Read More

Context is Live in Evernote for Android!

18 December 2014

It’s been a little over a month since I joined Team Android at Evernote. I’m happy to announce that I’ve been busy along with the rest of the team bringing you an update to our Android app. Among many other things, Evernote for Android now supports Context!

What is Context? Say you’re procrastinating at work browsing the Washington Post, and you run into an article about Japan recently beating out Scotland for top scotch of the year. Take that Scotland! You use the Evernote Web Clipper to save it to your ever-growing notebook of articles you promise you’ll read one day.

Months later, you finally get around to reading that article. You reach the end and normally that’d be the end. But with Context, you’ll find articles and notes related to the one you just finished reading. Context pulls content from sources like The Wall Street Journal, your own notes, and even your LinkedIn contacts.

I’m biased, but I think it’s pretty cool. The “classical model of intelligence” is based around how much you can remember without any tools to assist you. But today people have extremely powerful and more importantly - extremely connected - devices in their pockets. I think the “modern model of intelligence” assesses how quickly we are able to access the information we need. Evernote remembers everything for us, so we’re covered there pretty well. Now, Context helps us find related information that can further augment our knowledge and increase our productivity. That is, unless spending an afternoon reading about scotch is not your definition of productive!

Want to learn more? Check out Evernote’s official press release on Context for Android, the Context FAQ, and download Evernote from the Google Play Store!