One Device for Everything … ?

One Device for Everything … ?

I am currently dogfooding my own blogging platform, Blogmask.  I have written a post on the challenge of one device for all of our needs over there, and I’ll link to it here.


With the Droid Maxx, Motorola does Android right


I have used an Android device of some kind since October 2009, when I got the ‘OG’ Motorola Droid.  Since then I’ve had the Droid 2, Samsung Galaxy Nexus, and now the Droid Maxx.  With each phone I bought into the Android/Google ecosystem even more, and in 2010 I started developing Android apps.  I’ve always loved my Android devices, but until recently I’ve had a hard time recommending that my iPhone-toting friends switch to Android because it’s never been the simplest platform to use.  Recently, Samsung and HTC have made phones that, in my opinion, are clearly better than the newest iPhone and have finally made me able to recommend Android to nearly everyone I know.  However, the Samsung Galaxy S4 and HTC One are far from a ‘pure’ Android experience, and they compensate for most of Android’s shortcomings with extremely fast processors and beautiful screens that make any experience pleasant.

While HTC and Samsung threw faster and newer hardware at Android until it acted how they wanted, Motorola has gone the opposite direction.  As you’ll see below, I think they’re the first hardware manufacturer to make a non-Nexus phone that really does Android right.

First Hour Experience

When I opened the box to my Droid Maxx and turned it on for the first time, I was ready for an absolute barrage of tutorials, notifications, and setup screens.  I was surprised to find just the opposite, and I was using my phone right away after setting up my Google account.  Over the next few hours, Motorola slowly prompted me to enable and explore each of the many features they’ve added to Android.  I was never bombarded with multiple features at a time, or nagged to do anything I didn’t want.  Touchless Control, Active Display, Motorola Connect, Motorola Assist, and Quick Capture were introduced one at a time, and explained through beautiful tutorials.  This was a very pleasant user experience, and something that most manufacturers would not take the effort to do.

Another excellent piece of the first hour experience was the Motorola Migrate app.  The app seamlessly transferred my texts, call log, and more from my old Galaxy Nexus without asking me to sign up for any proprietary accounts or backup services.  It’s clear that Motorola has no motive here but to make using this phone as easy as possible from the beginning.


As much as I have enjoyed owning Android phones, their battery life has always been the Achilles heel.  On my previous phones I could expect anywhere from 12-18 hours of battery life with light usage, and 6-10 if I used the phone heavily.  I never found a better solution than turning off key features (like LTE or GPS), or buying a bulky aftermarket battery.  With the Droid Maxx, Motorola has solved this problem in a very interesting manner.

First, they dropped out of the spec war and focused on experience, not numbers.  The Maxx has a dual-core processor and a 720p screen, features my 2 year old Galaxy Nexus can match.  On paper, this seems like it could never stack up to the quad-core 1080p magic of an HTC One or Galaxy S4.  However, Motorola’s new X8 computing system leverages all of Moto’s hardware experience to boost the performance into the “no lag ever, period.” category, while maintaining the battery-life benefits that come with mid-range hardware.  Here’s a screenshot of my battery today:


I had the phone off the charger for 7+ hours, using the screen for just over an hour.  Throughout that time I had Wifi, GPS, and LTE on.  I live in an area with very weak signal, so LTE has been a sure way to drain my battery in the past.  All of this is without turning on Motorola’s “Battery Saver” option, which I’m sure would make my phone last into the next decade.  While I’m sure there are phones on the market that last longer than the Droid Maxx, it is pushed clearly over the boundary of a full-day battery life, which means I can spend all day without worrying about the nearest charger.

Many people understate the importance of good battery life, but in my opinion it’s the most important feature on a smartphone.  It’s simple: if your phone is dead, it doesn’t have any features.  Beyond that, long-lasting phones offer entirely different use cases than their short-lived competitors.  With this phone, I can comfortably tether my laptop for hours on end, navigate home after a long day without electricity, or watch Netflix on LTE without worrying about my phone giving out halfway through.  Motorola has made a phone I can count on, without giving up any features.

Stock Android, Almost

The guys at Google work hard to make Android look and feel great on 900M+ phones.  This is no small task, as unlike Apple they have no control over the hardware on which the OS will run.  Until Android 4.0 Ice Cream Sandwich, Android was a good operating system, but was clearly not as mature as its competitors.  To compensate for this, manufacturers lime HTC and Samsung got in the habit of adding “skins” to Android that gave it a new (and often more polished) look and feel, and allowed them to fix perceived gaps in the user experience.  With Android 4.x, it’s clear that Android has caught up to the market and these skins are not necessary to make a great phone.  In fact, many Android enthusiasts will tell you that TouchWiz and Sense just get in the way of the user experience that stock, unmodified Android offers in 2013.

ImageWith the new Droid line (and the Moto X), Motorola shows that they don’t need to reinvent the wheel.  The software on the Droid Maxx is stock Android to the untrained eye, and Motorola added customizations only where they thought the user experience would be markedly improved.  There are no gimmicks on this phone, everything Motorola has improved my experience with the phone.  Touchless Control takes Google Now to a new level, allowing people to interact with a phone across a crowded room.  Active Display takes Notifications, one of Android’s best features, and moves them to center stage without ever nagging or annoying the user.  Quick Capture lets you get to the camera from anywhere, quickly.  Your phone tells you what you want to know, when you need to know it, and without ever getting in your way.  All of these customizations are done at two levels: the hardware layer and the app layer.  On the hardware side, Motorola added dedicated processors to allow the “always-listening” functionality without sacrificing performance or battery life in other areas.  On the application layer, Motorola implemented these features just like any other app.  It’s important to realize the distinction here: Motorola did not have to tinker with the core operating system in order to deliver these features, unlike HTC or Samsung’s custom skins.  This means that, for example, Touchless Control can be updated at any time through the Google Play Store without needing a full OS update.  Additionally, one would expect that Motorola will be able to update to Android 5.0 (or whatever’s next) quicker than most OEMs, because they’re shipping a nearly-stock operating system.  The result of all this is an Android phone that satisfies everyone: enthusiasts get the pure experience they’re looking for, newcomers get the unique features they hear about on TV, and everyone gets fast updates.

The Bad

I love this phone, but this wouldn’t be a fair post unless I listed a few things that aren’t so great about the Droid Maxx:

  • It’s big.  I am 6’4″ so I have big hands, but for many people this 5″ phone will simply be too big to handle.  It’s about the same size as a Galaxy S4 though, so clearly the market is ready for phones of this size.
  • The camera is good, but not great.  If you’re an instagram fanatic or an all-day cell phone photographer, you may want an iPhone or a Nokia.
  • It’s manly.  A 5″ black slab with a kevlar back is not the aesthetic everyone is looking for.  However, If you can get past the looks it feels very solid in hand.
  • It’s not 1080p.  Coming from a Galaxy Nexus I have no issues with the Maxx’s screen, but HTC One or Galaxy S4 owners may notice the drop in pixel density.
  • It’s got some bloat.  You can thank Verizon for the myriad of useless apps that come pre-installed on the phone.  Fortunately, you can “disable” them to get them out of your app drawer and our of your way.


I’ll just say it: in my opinion, the Motorola Droid Maxx is the best Android phone to date.  This might sound like crazy talk, especially with the HTC One showing off a unibody construction and outlandish specs.  But you can’t judge a phone by its spec sheet, it all comes down to how a phone feels and works when you’re actually holding it. With the Droid Maxx, that experience is flawless.  Motorola is Android’s Apple: they don’t care how the phone stacks up on paper, it just has to be a pleasure to use for as many people as possible.  They’re the first prominent Android hardware manufacturer to take this stance, and it will pay off in the long run.

Dynamic Programming and US Currency

Have you ever worked at a retail store, or paid close attention to a cashier at a retail store?  If so, you’ve probably seen the process of “making change”.  The problem is, in the US, as follows:

Given some desired amount, X = $, and the following coin/bill denominations {$100, $50, $20, $10, $5, $1, $0.25, $0.10, $0.05, $0.01}, how can you make X with the least number of bills/coins.

Most people (from the US, anyway) who see this problem will think it is exceptionally easy.  You simply keep giving the customer the highest denomination that’s less than the amount you still owe them.  For example, if you need to make $6.21 you need two bills and three coins ($5, $1, 2 x $0.10, $0.01).  There is no other combination that will yield less than 5 total bills and coins in the US system.

If you’re a programmer, you’ll recognize this ‘algorithm’, as the greedy solution.  With a simple proof, you can see that for US denominations the greedy solution is always optimal.  If you’ve only ever thought about this problem in the real, physical world, you might think that this problem has a greedy optimal algorithm in all currency systems.  But this is not true.  Consider the following example:

How do you make change for $8 using the following denominations {$5, $4, $1}?

A fast-moving cashier using the greedy method would give a $5 and three $1’s, but that’s not optimal.  You can see that in this (strange) currency system it’s better to give two $4’s.  This is a simple example, but you can see how in a poorly conceived currency system change-making could require a lot of thought.  In fact, the only way to give the optimal solution to this problem for any amount in any system is to use Dynamic Programming.  We have the following DP algorithm which solves this problem in all cases:

Given coins denominations d1…dn such that d1 < d2 < … < dn (with d1 = 1, for simplicity), make change for an amount C using the least coins possible.

Let M[j] = optimal number of coins for an amount j

M[j] = min over all i (such that di <= j) of (M[j – di] + 1)

M[0] = 0

The algorithm for solving this program builds up from M[1] to M[C] with each one taking O(n) time to solve.  That leads to an O(n*C) time algorithm.  The greedy algorithm was just O(C), so this DP algorithm is much harder when you have a complicated currency system with many denominations.  If you’re a cashier forced to solve this quickly in your head hundreds of times a day, you don’t have time to run anything but the greedy method!

Before reading this, you might have thought, as I did, that the denominations we use every day were chosen because they are convenient round numbers.  But now I hope that you can see how  currency denominations are a carefully tuned system that yield a greedy solution to common problems.  This is just one cool example of how humans are constantly optimizing algorithms, even when there’s not a computer or computer scientist in sight.

Sizer – A Simple, Useful Chrome Extension

Windows 7 debuted one of my favorite mainstream OS features of all time – Aero snap.  With just a drag one could resize a window to be full or half screen without annoying clicking and dragging.  Recently there have been a wave of OS X apps replicating (and even expanding upon) this functionality such as SizeUp, Spectacle (my personal choice), and Cinch.  However I have now become so dependent on this functionality I find it almost unbearable to use a computer without it.  My workflow has completely adjusted to the side-by-side window style and I can’t go back to dragging my windows to that size manually 5+ times an hour. Continue reading

Opening the Gates to the Tech World

One of the great myths of the startup world is the belief that the recent proliferation of internet technology means that anyone can start a business.  While it is true that in recent years the cost of starting a tech-based business has dropped sharply and many of the barriers to entry have disappeared, there are still many people without the opportunity to get in on the “tech revolution”.  Don’t worry, this is not another article blasting the technology industry for a lack of diversity.  Instead, I want to discuss an idea for a new type of productive philanthropy organization about which I have been thinking for the past few weeks.

Continue reading

Quick Tip: Restore Deleted Google Calendar Events

I use Google Calendar extensively, but I use iCal to view it when I’m at home.  Sometimes the syncing is less-than-ideal, and occasionally iCal will delete some events on the server that I wanted to keep.   I tried a ton of things to fix this, going so far as to get the XML dump of my Google Calendar from the past and finding a way to import it back into iCal.  If you’ve ever had this problem, try Spanning’s Calendar Undelete Tool.  I promise this isn’t some paid ad or spam, this tool just saved my whole calendar so I thought I’d post a shoutout.

Making a Simple, Database-Driven Website with Sinatra and Heroku

When I want to make a website, my instinct is to use Rails.  However, sometimes I don’t need everything (or even 50%) of what Rails provides and it feels like a waste for a quick project.  Sinatra may be the simplest web framework ever, but it is also incredibly powerful.  Combined with Heroku, anyone with a little coding experience can have a website running for free in just a few minutes.

There are plenty of good Sinatra tutorials on the web, however I have found that most of them focus on static content.  For those that don’t, I’ve found that very few will also cover how to integrate Sinatra with Heroku Postgres and get your app up and running in the cloud. After having to do so myself earlier this week, I thought it would be useful to others if I posted a quick and to the point article about how to get Sinatra and ActiveRecord up and running on Heroku.  All of the code that follows is available on my GitHub, right here.  In this tutorial you’ll notice that I bold all filenames and shell commands, this is just for readability and you’re free to ignore it.

Continue reading