My switch from iOS to Android

Android vs iOSIn early April I ordered a Nexus 5 to replace my two year old iPhone 4s. It’s the first Android device I’ve ever owned so I’ve had to learn a lot of new behaviors. While doing so, I’ve kept a list (in Google Keep) of anything that I’ve found to be noticeably better or worse than iOS. Lots of my iOS-only friends have been surprised to hear about many of the differences so I’m including it here with comments added. It should also be fun to read in a few years when all of this is horribly outdated.

Better on Android / Nexus 5

  • Voice interaction – I hardly used Siri on my iPhone but use the “OK Google” features all the time on my Nexus. It’s easier to start using (you just say “OK Google”) and it very rarely misinterprets what I say.
  • Notifications list – On Android, the notifications in the top-of-screen pulldown can have action buttons on them, show rich content like images, intelligently group by app (yet stay in chronological order), and are just more useful than on iOS.
  • Home screens / icons – Being able to place app icons wherever you want is great. And being able to entirely remove icons you don’t want is even better. There’s no need to make that “Unused” folder on Android that you stick the Stocks/Video/Compass/etc apps in. Instead, any apps you don’t have represented on your screen can be found in a big Launchpad-like menu.
  • There’s a “+1″ button when you have a timer running which just adds 60 seconds. I use this a lot, especially when grilling. :)
  • Permanent buttons at the bottom of the screen for “back” and “switch apps”. It’s great to have a back button in such an easy to hit location (instead of iOS’ top left buttons) and it works the same way in almost all apps so you don’t have to learn specific behavior. And the app switcher button is so much easier to hit than double-tapping the iOS home button. I find myself using it much more often.
  • Google Apps are better. Not too surprising. But since I use them a lot, this makes a big improvement to my daily usage.

Better on iOS / iPhone

  • Notifications show up on the lock screen. On Android the phone will make noise or beep but you still have to tap a button to turn it on, then swipe down the top menu to see the contents. It’s a real pain, especially if someone texts you while you’re doing something else (video games, cooking, etc) and you can’t simply glance over at your phone and see what’s up.
  • Home button on the front of the phone. On the Nexus the on/off button is on the side which makes it far harder to hit quickly with one hand. It also has the added benefit of helping you glance at your phone and understand which way its facing. I end up picking up my Nexus upside down all the time.
  • Bottom swipe menu gives quick access to flashlight/camera/etc. On Android you can get access to some stuff from an icon in the top swipe menu, but there’s no flashlight option built in.
  • App quality. Looking for apps in the Play store reminds me of browsing for Windows shareware in the early 2000s. There are lots of crappy options full of ads that make it harder to find the good stuff.
  • Battery percentage in the toolbar. You have to install a special Android app to get this, and even then it ends up showing on the top left, not top right. Feels awkward.

There’s a lot of other random stuff I prefer on one phone or the other, but overall I am much happier being on the new setup. Of course, upgrading from two year old hardware was going to be a big improvement either way.

Five years of HipChat

Last week marked the 4th anniversary of HipChat‘s launch. We started prototyping it about a year before that which means that I’ve been focused on HipChat for about five years. That’s longer than college or any previous jobs I’ve had, though it certainly doesn’t feel like it. We’ve grown tremendously as a product and team since joining Atlassian almost two years ago and 2014 is shaping up to be our most exciting yet!

Our tiny office in 2010 (Sunnyvale, CA)

Steve Jobs on the bottom line

Jobs: We’ve been having record quarter after record quarter, so we’re very pleased with how the company’s doing. And, uh, you know, Wall Street, I’ve never been able to figure out Wall Street. But someone once told me manage the top line, which is, your strategy, your talented people, and your execution, and the bottom line will take care of itself. And I’ve always found that to be the case. So, we’re turning in record quarter after record quarter, and Wall Street eventually comes out in the right place.

Formatting JSON on the command line

If you ever work with JSON on the command line, try out the json_reformat tool included in yajl-tools package (or install from source).

Without json_reformat

$ curl http://github.com/api/v2/json/user/show/powdahound
{"user":{"gravatar_id":"d5894734b9f67c07b276319fdc2e5d88","company":"HipChat",
"name":"Garret Heaton","created_at":"2009/04/04 08:36:09 -0700",
"location":"Sunnyvale, CA","public_repo_count":18,"public_gist_count":67,
"blog":"http://powdahound.com","following_count":8,"id":70472,"type":"User",
"permission":null,"followers_count":7,"login":"powdahound",
"email":"powdahound@gmail.com"}}

With json_reformat

$ curl -s http://github.com/api/v2/json/user/show/powdahound | json_reformat
{
  "user": {
    "gravatar_id": "d5894734b9f67c07b276319fdc2e5d88",
    "company": "HipChat",
    "name": "Garret Heaton",
    "created_at": "2009/04/04 08:36:09 -0700",
    "location": "Sunnyvale, CA",
    "public_repo_count": 18,
    "public_gist_count": 67,
    "blog": "http://powdahound.com",
    "following_count": 8,
    "id": 70472,
    "type": "User",
    "permission": null,
    "followers_count": 7,
    "login": "powdahound",
    "email": "powdahound@gmail.com"
  }
}

So much nicer!

It will even tell you if there are syntax syntax errors (as will json_verify).

Hosting a static site on Amazon S3: ec2instances.info

Amazon added the ability to host static sites on S3 recently so to try it out I made a small site comparing the different types of EC2 instances: www.ec2instances.info. It’s not much of a site but it was the only thing in my ideas list that didn’t require some sort of database backend.

The setup was very simple:

  1. Buy the domain (name.com is so much nicer than GoDaddy by the way).
  2. Point domain’s nameservers at my slicehost account.
  3. Add a new DNS domain in slicehost and add a single CNAME record with a name of ‘www’ and data of ‘s3-website-us-east-1.amazonaws.com.’
  4. Install the latest Cyberduck (Mac). Windows users can use one of the tools here.
  5. Create a new S3 bucket called ‘www.ec2instances.info’ and configure it for static site hosting.
  6. Upload all my files and change their permissions to make them readable by everyone.
  7. Done!

Updating the site is easy – just select the file in Cyberduck and click the ‘Edit’ icon in the toolbar (or hit ⌘K) and it will automatically upload the file whenever you save. If I needed a real deploy system it’d be pretty easy to whip up something with Fabric and Boto.

Overall it seems like a great way to host a static site on the cheap (~$1.50/year for this). The only real downside is that you can’t have your root domain hit the bucket because a CNAME must be used. This means that ec2instances.info does not resolve properly. More details here.

Note: I tried to use Amazon’s new Route 53 DNS service instead of my slicehost account but the configuration is still a bit more involved than I’d like. Hopefully they’ll add it to the AWS web console soon.