Friday, June 18, 2010

Now I can manage my life from the command line

GoogleCL (http://code.google.com/p/googlecl) is entirely too cool.

sudo apt-get install dcraw graphicsmagick python-gdata
[...]
sudo dpkg -i http://googlecl.googlecode.com/files/googlecl_0.9.5-1_all.deb
[...]
for nef in *.NEF; do
jpg=`echo $nef | sed 's/\.NEF$/\.jpg/'`;
gm convert $nef $jpg;
google picasa post --title="Vegas ATV Trip" $jpg;
rm $jpg;
done

.NEF is Nikon's RAW file format. dcraw is a utility that can convert NEF to standard formats, and graphicsmagick is a utility that can do various manipulations of images, including transcoding.

The script above converts all the NEF files in the current directory to temporary JPEG files, and then uploads them to my Picasa Web Albums account, in the "Vegas ATV Trip" album. That is, it's an extremely simple but effective Picasa uploader.

I think I will be having some fun with this thing. I'm even posting this via GoogleCL.

Sunday, June 6, 2010

On 'On Android Compatibility'

[I'm going to talk about Android a bit in this post. You should know that I'm Android's Open-Source and Compatibility Program Manager, so this is near and dear to my heart. But remember that this is still my personal blog, and thus my personal opinion. I'm not necessarily speaking for Google here. This post describes some of my personal perspectives on the mobile industry.]

On Monday we posted a blog I wrote about Android's approach to compatibility over on the official Android blog.

The results were interesting. Tom Gibara made the great point that in exchange for handling device diversity you get a much larger audience in return. Engadget has presented both sides of this topic, including the good and the bad. Although my personal favorite example of the negative point of view is Harry McCracken's somewhat histrionic (IMO) post.

A Name for the Ailment
The gist of the main criticism is that there are multiple versions of Android available at the same time. What I think has been missed is that I never said this was a non-issue; I just said that calling it "fragmentation" is too vague to be helpful (and then moved on, since Monday's official blog post wasn't about this.) Regardless, I actually liked the word Mr. McCracken used to describe this -- "versionitis" -- because it's a pretty evocative but descriptive term.

So, what about versionitis? It's certainly true that there are several Android versions extant at the moment, but I believe this isn't a big deal. For one thing, the risk of user confusion is extremely overblown; you've really got to be cynical if you think the buying public is somehow too stupid to comprehend the concept of last year's model, as applied to mobiles.

From a developer's point of view it's admittedly a bit trickier, though. You can do without features from later versions and rely on Android's forward compatibility to target the largest possible audience; or you can make a flashy cutting edge app for the latest version and wait for audience size to catch up. Although sometimes you don't even have to choose, because with a little extra work you can make an app that will run on old versions AND take advantage of new features if they are available. Nobody likes extra work, but at least as Tom Gibara pointed out, you're getting something in return.

But all that said, it comes down to choice: consumers and developers have to make some decisions, and the argument is that this all treads dangerously close to a tyranny of choice. Personally, I don't think it's nearly that bad, but of course that's just my opinion, and I respect that some people don't agree. And anyway, in an ideal world we'd like to see all devices running the latest version of Android -- it's not as if we are somehow opposed to the idea.

Wherein We Invoke a Business Cliche
But the main reason why this issue just isn't that big a deal is because we're right in the middle of a sea change that will wash this all away.

Rewind to about 5 years ago. This is recent enough you had feature phones and smartphones mostly as we do today, but long enough ago that it was before the mobile revolution really got underway. Back then as today, it was practically unheard of for a feature phone to ever get a software update. As for smartphones, it wasn't unheard of to get an update, but it was pretty uncommon (at least in the consumer space.)

Why? The reason was that the smartphone platform vendors controlled the software. It was exceedingly difficult for OEMs to differentiate on software because they had little control over the software. It was difficult for them to differentiate on features because they could only ship features supported by the OS they were using. But it was still a fiercely competitive market and they still innovated as hard as they could.

So they innovated on the only dimension they had control over: hardware and industrial design. The inevitable result was that as soon as an OEM released one phone, it was immediately on to the next. The follow-on to a successful device was another device. "Version 2.0" wasn't an upgrade, it was a replacement. This is how we ended up with 16 different RAZR models (if I counted correctly), each with different hardware. It was easier for OEMs to rev hardware than software, because they had little control over the software.

Think about that. Easier to rev hardware than software! This flies in the face of everything we've learned from the personal computer. It's almost like the cell phone world ran counter to the laws of nature, so as soon as someone offered the OEMs the chance to control their own software destiny they jumped at the chance. And that's exactly what Android as an open platform is doing.

And the Point Is...?
So what does this have to do with versionitis? Simply this: it takes time to rebuild a manufacturing process.

When all you do is rev hardware, you get pretty good at it. You optimize around it. You make being good at it a competitive strength. The OEMs are transitioning to a more PC-like world where they control their own software destiny, but to do this they need to update their procedures and tools.

This takes time, and today we're right in the middle of it. Device manufacturers want your brand loyalty. They also know they aren't going to get it unless their users have a good experience, and they know that users are expecting that the new $500 tiny computer they just bought comes with a year or two of support. OEMs know this, they are hardly dumb.

The updates are coming. You can see it already, with devices like the Samsung Moment and HTC Hero (for Sprint) getting 2.1, and commitments to upgrade other models. Section 12 in the Compatibility Definition Document even requires that compatible Android devices be upgradeable, which at least sets the stage. Device manufacturers are getting better and better at doing these updates -- and I mean, it's not like they are going to get slower at it.


That's why it just doesn't make sense to me to worry much about this versionitis thing. It's certainly true that today some people aren't getting the updates they want, but that will change over time. And while it may be poor consolation when your buddy's got a later Android version than you, your current phone isn't just going to stop working. And of course the reality is that to the vast majority of the millions of regular-Joe Android users, this isn't even an issue.

So for some people it's painful today, but really they're just impatient for the future to arrive. We have to take the long view, though -- and as far as I can see, the view is pretty good.