Sunday, July 18, 2010

Android: It's a keeper. I have feedback though.

So it's been a week since I started my Android Challenge and it's time to decide whether I stay with the Nexus One or pull out my old 3GS. Over the course of the week, the answer has become more and more obvious - the Android is a keeper.

This is a big deal for me. Almost every computing device in my home is made by Apple - 3 MacBooks, 2 iPhones, 2 iPods (where are they?), an iPad and a Mac Mini. I really love Apple products and, although the closed Apple ecosystem annoys me intellectually, it has served me very well in practice.

In addition, I've tried Android before and been unimpressed (I lasted about a day on the G1 back in Cupcake days...) So what changed? Why stick with Android now? The answer comes in 3 parts: two amazing differentiated features; the fundamental shift to cloud services; the continued iteration on the OS to close the gap in user experience.

(1) Two amazing features:

Google Voice
I live several thousand miles away from my extended family in the UK. TO be able to call them on Google Voice for a reasonable rate is amazing. Using the service on the iPhone is
hard work - you have to open a browser, your call log is littered with these calls to random Google numbers that you can't identify with a person. On Android, it is a dream. Use your phone as normal and get Google Voice. It uses all the power of the OS to be almost completely invisible. One of the best designed, built and integrated products from soup to nuts that I have ever used...

Google Maps Navigation
Our TomTom died last week. We're not buying a new one. Navigation on Android is amazing.It's a first class GPS hooked up to Google Maps so you can search just like you would on the internet. No more of this 'city', 'street', 'number' crap, just type (or even speak!) the address and you're away. Don't know the address? Just say the name of the place. Hook your phone into the line-in on your car stereo and it'll even pause the music you're listening to (from rdio - see below) to tell you when to turn. I've always been sceptical about 'convergence'. Not anymore.

(2) Cloud services

I was really worried about using a device that wasn't designed to just work when it came to syncing with my Macs. But then I thought about it. Where does my data live? It lives in the cloud. I use Gmail, Calendar, Twitter, Facebook. They're all in the cloud. I just hook up the apps and let the syncing begin (wirelessly, as they say).

But my big concerns were music, podcasts, books. I am pretty invested in iTunes. What am I going to do. well, again it was cloud (and a bit of good timing) to the rescue. We're finally at the stage with all of this stuff that cloud based data, wireless syncing and live streaming can solve all ills. I went ahead and replaced my Apple products as follows:

  • iTunes Music -> Rdio
  • iTunes Podcasts -> Google Listen
  • iBooks -> Amazon Kindle (this works on my iPad too - tell me why I was using iBooks again?)

Rdio scans my iTunes collection and makes it available via the cloud from a nice little app. That app can also sync tracks offline so that I can use it while I'm out of coverage. Listen syncs my podcasts (and even suggests new ones) without a cable. And Kindle is, well exactly the same as iBooks. Only it works on every device I do or would own. And the books are cheaper...


(3) The growing maturity and polish of the whole platform

Froyo feels good. It's more responsive, it's better behaved and it has a cared-for look about it that was missing from previous revs of Android. This matters. I spend a lot of time with my phone and so little aggravations add up to big time-syncs or major frustrations.

There  is still a gap to iPhone on this one. Scrolling and transitions just aren't as smooth.The interaction model (certainly when coming from an iPhone) feels a little more clumsy. Applications make highly inconsistent design decisions. But you know, after a week of using it, I adjusted to the new interaction model (and would concede that it is certainly more extensible than the iPhone); I got used to the new look and feel of key applications; and I stopped looking out for the little glitches in scrolling.

In addition this feels like an area that has just gotten better and better with every OS release and flagship phone launch. The feel of the Nexus One is not at all far from the iPhone (at least the 3GS) nowadays. I am really confident that my Android will feel even more plush in 6 months and in a year.

The feedback

So, the Android ecosystem is really motoring and I am excited to be a part of it going forward. That said, I do want to call out the areas that I think still need a lot of work, especially now that iPhone has closed the multi-tasking gap. Here's my list of gripes listed somewhat in priority order...

  • Browser - the Android browser is still in pretty bad shape when compared to Mobile Safari (which is by no means a perfect browser). It may have a new super-fast V8 Javascript engine, but I think it needs more focus on layout and rendering. In particular, the rendering of standard web pages is clunky and the 'tap to zoom' functionality seems highly inferior to its Cupertino-based cousin. It also seems to have much less support and hardware acceleration for the new CSS animations framework that a lot of new mobile sites are starting to use.
  • Tap response - Perhaps I'm doin' it wrong, but I have trouble tapping on links in applications (in particular Twitter). I have no idea if this is the Nexus One screen, the OS or my stupid fat fingers, but I regularly have to jab the screen 4 or 5 times to get an anchor tag to do its thing. It feels a little as though the tap target is slightly above where I expect it to be, but it also feels like some good proportion of the taps just aren't registered anywhere. The larger the tap target, the smaller the problem, so buttons seem to be fine...
  • Battery life - Generally battery usage is good. Especially given how much I am asking the phone to do (sync work and hone email, calendar, Facebook, twitter, latitude etc), but I have noticed that it fails the overnight test much more often than the iPhone. In fact, unless the phone is fully charged before I go to bed I will invariably wake up to a phone that has shut down in the morning. In contrast, the iPhone would normally be on <20% battery, but capable of checking email or making a call before a charge. Now, I know I can solve this with a dock by my bed, but it feels like a software optimization could help a little too. Certainly, I'd be happy if the phone aggressively culled background processes after it had been idle for more than 60 mins. Maybe it already does, but either way it needs a little more.
  • Android Market - This is a big deal. The Market is one of the most important apps on the phone and it is not good. The market has one cool differentiated feature (auto-updates) and a whole host for opportunities for improvement. Part of the issue is to do with volume and quality of apps (and I know this is changing fast), but a big part is the Market application itself. I love the idea of the Market being open, but if that's the case, then you need to provide a powerful, persuasive user experience so that I can both find and judge applications I might want to download. For now it is too hard to sort the wheat from the chaff and whilst on the iPhone I would regularly waste a couple of minutes perusing the App Store for new apps, on Android, I only go when I know exactly what I want.

The cool thing is, that I know that the Android team, the open-source community and hardware manufacturers are going to solve all these problems. We're starting to see the sort of competitive handset development in the Android ecosystem that will lead to some amazing devices (HTC, Motorola, Samsung et al all want to be the best Android experience). I also know that the competition from Apple's iOS will keep the core Android team keenly focused on continued innovation and that's got be a good thing...

Here's the clincher. The benefits of Android now significantly outweigh the drawbacks. And both the Android team and the whole ecosystem has demonstrated with their progress over the last 6 months that the drawbacks won't remain that way for long. I'm on Android, and I'm staying put.

Wednesday, July 14, 2010

Android challenge: initial thoughts

It's been a while since I spent some meaningful time with an Android powered device and I have to say that I'm impressed with the improvements that have been made over the last 6 months. The Nexus One (running Froyo) feels significantly more polished than any previous experience I've had with Android. There is still a gap to the fit and finish of the iPhone, but that gap doesn't really interfere with my usage of the phone and has only a small impact on my enjoyment.

Here's what I've been particularly impressed with:

  • Google Voice integration. Man this is beautiful. Using GV on the iPhone is (despite the best efforts of a very talented set of Googlers) akin to sticking pins in your eyes. The seamless experience on Android is amazing. Just dial and go.
  • Navigation. I paid several hundred pounds for a device that just did navigation (and not even very well) a couple of years ago. On iPhone, comparable functionality would cost at least $50 and would be missing lots of the Google Maps goodness.
  • Voice Search. You're walking to your car. You pull out the phone, hit a single button and say 'Navigate to Rancho San Antonio'. By the time you are in the car the deal is done and you are good to go. No remembering addresses, no typing. Voice search is science fiction brought to life.
  • Google Apps integration. As a heavy gmail and calendar user, I really like the deep integration with these products.
Areas that still need work:
  • The Market. Too many unofficial apps. Not enough official apps (Instapaper, BBC?). A feeling of unease with each download as to what you're actually getting. A long way to go.
  • Tap targets. I feel like I have to tap just above the place where the tap target is shown on screen to activate it. Not sure why this is, but I have felt it consistently and even experimented a bit. It seems to be real.
  • Font sizes / app styling. App developers are all over the place with their design. Many of them use crazy small fonts (Twitter - I'm looking at you) and there is not enough consistency to give you hints as to how the apps work. To be fair, the iPad has similar problems, but that's brand new and Android should have matured toward some consistent visual metaphors by now.
That said, today I was very pleased to download the Rdio app and the Kindle app to replace iTunes and iBooks respectively. I'm feeling bullish on Android. The gap to iPhone is a lot smaller than I thought it would be. I might yet be converted...

Tuesday, July 13, 2010

Android Challenge

I've decided to take the plunge and do the Android one week challenge. I've been told by many folks that Froyo is the OS revision we've all been waiting for, so I've put my beloved iPhone 3GS in a drawer and have switched entirely to the Nexus One.

I'll try to blog or tweet my joys, frustrations and overall experience over the next week. It'll be interesting to see how the two phones (and OSes) match up.

Sunday, May 03, 2009

Randomness, Throbbers and the <canvas> tag

[caveat - if you're reading this in a feedreader, I have no idea how the iframes below will work. If they do, then great. If not, then maybe click through to the site...]

As I've been on holiday for the last week, I thought I'd take the opportunity to learn a little bit about some of the new funky stuff that's in HTML 5. The Google mobile team just released an awesome new version of gmail for iPhone and Android that relies heavily on HTML 5 and it seems that there are some pretty cool things you can do with it.

In an amusing twist, the fact that iPhone and Android browsers are based on WebKit means that for once, (smart-phone) mobile developers can build on top of the new standard with more confidence before their desktop cousins (assuming of course they don't need their sites to work on a Blackberry). On the desktop, Safari and Chrome are built on WebKit, so they are fine, and Firefox is gradually introducing all of the features through each new build to Gekko. As the standard is still evoling, no browser has comprehensive support, but as far as I can tell, WebKit is most in tune (get the nightly build for the latest bells and whistles), with Firefox and Opera not far behind and Internet Explorer (as ever) a distant fourth (IE 7 and before have none of these features, IE 8 may have some but I'm on a Mac and so haven't tested it...)

The three areas of HTML 5 that I am most interested in exploring are the <canvas> tag, the Application Cache and the Web Storage API (mainly because these are the ones that my colleagues blogged about and I caught the bug). So far I've spent a couple of days playing with <canvas> and have to say I've enjoyed it immensely. Posts on the App Cache and Storage capabilities will follow just as soon as I'm finished drawing (I promise...)

So, what is <canvas>? Well the wikipedia article has some good history, but in essence <canvas> lets you define an area of the DOM that you can subsequently use for scripted vector graphics. There is a detailed tutorial over on Mozilla Developer Center that I used to get started, which I don't intend to reproduce here. That said, here are a few useful pointers:
  • <canvas> takes two explicit parameters height and width to specify the size of the area on which you can draw. Apparently setting these in CSS is not a good idea.
  • You draw inside your canvas using Javascript. Get hold of your canvas object from the DOM and you'll find it is imbued with all the helpful vector drawing methods you need
  • You can animate your canvas by using the Javascript setInterval() function to redraw it at regular intervals.
Armed with the Mozilla tutorial and the latest nightly build of WebKit  I set off to try my hand at a bit of canvas scripting.

First order of the day was to try to recreate a fun test that I saw recently on In The Dark (a great physics blog if you're on the look out for one). The test works on the basis that humans are really good at identifying patterns (even where there are none), and that this can lead us down the wrong path sometimes. We are shown two images of seemingly randomly scattered dots and asked to identify the one that is truly random. In lab tests, humans consistently pick the wrong image. We pick the one where the dots are scattered more smoothly, because we identify 'patterns' in the clumping caused by truly random behavior that throws us off the scent. And now, by the miracle of HTML 5, here are the two images:

No prizes for which one folks normally choose as the random image. Interesting huh?

There is a really simple piece of Javascript running these simulations (and because it's Javascript you can add interactivity just like the customisation I added to the right hand box). If you want to see the code, just view the source of the frame above. The whole thing took next to no time to put together (especially given that I was learning about <canvas> at the same time). Onto my next exercise.

In their blog post the gmail team said that they had decided to build a throbber for gmail mobile using <canvas> and Javascript so that they could reduce server round trips and page weight. I thought this sounded pretty amazing (after all a throbber gif is never more than a few kB right) so I set out to see if I could recreate their efforts. After a bit of gnashing of teeth and a lot of fun tweaking my design I came up with the following 49 lines of code (1668 Bytes or just 702 when gzipped) :

function Throbber(containerId) {
  this.options = {
    speedMS: 100,
    center: 4,
    thickness: 3,
    spokes:8,
    color: [0,0,0],
    style: "line" //set to "balls" for a different style of throbber
  };
  this.t = document.getElementById(containerId);
  this.c = document.createElement('canvas');
  this.c.width = this.t.offsetWidth;
  this.c.height = this.t.offsetHeight;
  this.t.appendChild(this.c);
  this.throb = function() {
    var ctx = this.c.getContext("2d");
    ctx.translate(this.c.width/2, this.c.height/2);
    var w = Math.floor(Math.min(this.c.width,this.c.height)/2);
    var self = this;
    var o = self.options;
    var draw = function() {
      ctx.clearRect(-self.c.width/2,-self.c.height/2,self.c.width,self.c.height)
      ctx.restore();
      ctx.shadowOffsetX = ctx.shadowOffsetY = 1;
        ctx.shadowBlur = 2;
        ctx.shadowColor = "rgba(220, 220, 220, 0.5)";
        for (var i = 0; i < o.spokes; i++) {
        r = 255-Math.floor((255-o.color[0]) / o.spokes * i);
        g = 255-Math.floor((255-o.color[1]) / o.spokes * i);
        b = 255-Math.floor((255-o.color[2]) / o.spokes * i);
          ctx.fillStyle = "rgb(" + r + "," + g + "," + b + ")";
        if(o.style == "balls") {
          ctx.beginPath();
          ctx.moveTo(w,0)
          ctx.arc(w-Math.floor(Math.PI*2*w/o.spokes/3),0,Math.floor(Math.PI*2*w/o.spokes/3),0,Math.PI*2,true);
          ctx.fill();
        } else { ctx.fillRect(o.center, -Math.floor(o.thickness/2), w-o.center, o.thickness); }
        ctx.rotate(Math.PI/(o.spokes/2))
        if(i == 0) { ctx.save(); }  
      }
    };
    draw();
    this.timer = setInterval(draw,this.options.speedMS);  
  };
  this.stop = function() {
    clearInterval(this.timer);
    this.c.getContext("2d").clearRect(-this.c.width/2,-this.c.height/2,this.c.width,this.c.height)
  };
};

You just add this code to your site's JS, create a new Thobber object passing in the ID of the element you want your throbber to live inside and call the throb() method on it. You can use your parent element to style the background color and the options within the throbber element to customize it. For context, the gif-based throbber on a website I built a while back was fully 3,208 bytes while the code above at 702 bytes covers not just one kind of throbber but a vast array of customizations. Here is a little demo:



Obviously there are more impressive things you can do with canvas, but I really enjoyed coding this up and think I'll find it useful (especially for projects that are focussed exclusively on iPhone or Android). I hope you might too. There's even a whole framework (processing.js) designed to make scripting canvas easier. I think I may look at that next...

So it seems like canvas is a welcome addition to the HTML family (it is a lot nicer than Flash and ActionScript in my humble opinion). I guess as browser adoption increases, we'll see more and more of it.

Tuesday, February 03, 2009

Simple maths

Seems like the music industry proved again this week that it is incapable of acting rationally (seriously, there is a great paper for any budding behavioral economist in how the music industry incentives got so screwed up).

The offending action came this time in the form of labels leaning on fabulous new music streaming service spotify to add greater restrictions to the service. No doubt a bunch of these restrictions were needed to support the arcane company and rights structures the music industry dreamt up over the years. As an example of how crazy this can be, if you want to set up a site which lets users watch, interact with and mashup music videos you need:

  • at least 5 separate rights (covering the performance, the score, the recording, the video be the sync/mashup right - it's different in every country, but this is about it)
  • deals with a ton of different subsidiaries and rights middle-men in each of the countries where your users live
  • oh, and if your users want to use TV or movie clips, then try repeating the whole process with the moving picture industry - even hulu hasn't managed to get rights outside the US and they are owned by the TV industry!
But this is just another symptom of an industry that has become so overrun with lawyers that they have lost both the ability to do simple maths and the imagination to identify a massive opportunity when of comes to them and offers a substantial slice of the pie.

So let me spell it out for them:

People don't steal music
This is the first thing the industry needs to learn. When I see estimates of revenue lost to piracy they infuriate me. At the right price (and the right convenience) many of the folks that torrent stuff today would buy (especially if they knew that most of their payment went to the artist). That price might be very close to zero, but for legitimacy alone many folks would pay a nominal fee (either direct of
through advertising). The problem is that the music business has invested virtually no effort into providing a low cost, legitimate, easy alternative to bit-torrent and has instead spent lots of effort trying to shut down every promising avenue.


There is way more demand than you thought
Seriously, you did your elasticity calculations and optimised around your £10 price point. But you completely missed the explosion of demand when prices approach zero. You just labelled it piracy and moved on.

Distributing music is free now
Virtually. Which means you can make a gross profit at few pence per track if you think it through.

And then there is the simple maths:
£1 Pross Profit * 20k units << £0.01 GP * 20m units

So record companies, please, get with the programme. And in the meantime try to help build businesses that represent the bull of your future earnings rather than shutting them down.
!-- +disqus -->