Natty Not-quite

I've blogged before about trying to go back to Linux on my laptop, and made my requirements very clear. Windows 7 pre-installed had more working features than any of my attempts to install Linux. But as always with Windows, it got slow. After a bit of investigation and trying out, i decided to take the plunge.
So these last few months, i've been running Ubuntu 10.04 on my laptop. And it grew on me. I do like the panel integration, and got really used a lot of features. I miss the little bit of extra polish and features from KDE, but appreciate the stability and native support for Gimp and Eclipse. Most things worked great, until one update broke the sleep/suspend function - a great annoyance for a netbook! So i took the plunge and went 10.10, hoping a new kernel would fix it. This broke sleep even more - no longer just not sleeping, but not waking up and sometimes not booting after having been restarted from sleeping. Thankfully everything else was ok.
After a month or two of anger at the sleep issue and reading a bunch of reviews of 11.04 beta, i decided let me try that out - again thinking a newer kernel might help. The new 'Unity' ( not to be confused with the awesome game engine i'm growing to love ) interface intrigued me. And after a few days with it, i hate it in the same way that i hate Mac OS. It has taken exactly what i can't stand from OSX and put it in my Linux. Thankfully i can still go Gnome Classic, but if this is the future of Ubuntu, i'll take a step away for a while. That is until the following critical user experience issues ( some of which are also in OSX ) are addressed:
  • The dock is unwieldy if you have a lot of applications. I either have to scroll ( really slowly ) or drag vertically which is clunky at best with a mouse.
  • The dock is a little too twitchy and none of the behavior options feel right. There's something annoying about having to go to the top to activate it. I have to direct my mouse a bit more than i'm used to. OSX and KDE this fantastically, the dock is always ready and pops up when you need it to. Windows still has an issue - since '98 - where it sometimes doesn't focus are refuses to pop up.
  • The unified menu bar forces extra clicks. I hate it in OSX, and hate it here. I often have multiple windows open, and sometimes am mentally focusing on a background window. This may be that the foreground window is a popup or something insignificant to me. I always have to do a double take when i see the wrong menu bar. This may not make sense to some people, but i often operate with 2 screens or with small overlays and the 'foremost' app might not be immediately obvious. In which case the menu bar becomes non-obvious. I want an option to en/disable it like in old-school KDE ( remember those days? ).
  • If i have 2 windows of the same app open, there's no easy way to access either with one click. This happens a lot in apps like Empathy and Chrome. I first have to pull out the unwieldy dock, then click on Chrome - which i see has 2 little arrows. Then it zooms out and presents me with 2 thumbs of my windows. That's great and all, though a little hard to see with fullscreen apps. My suggestion here would be to look at Windows 7 as an example of the new wave of app management done right. Hover over the taskbar item, get presented with thumbs. Hover over the thumb, bringing the hovered window to the front. At first i hated the step toward the OSX style there, but i quickly realised that they made it work. Unity has basically knocked off OSX.
Not to say i hate everything about it. I like the speed, and it looks great. The new app launcher is excellent so far despite one or two crashes. The idea of a dock isn't horrible, but i'd like more control over it, not some hidden options in the Compiz settings.
And a final note for anyone who's going to troll... get used to articles like this as Linux becomes more popular... it's called constructive criticism, and i noticed the Linux community often doesn't take it very well. This is just an opinion, you're free to point out - in a rational manner - any mistakes i have made, or correct my assumptions.


Emergence of the Tablets

So recently i read an article about the iPad and how it still has no rival, even when faced with the Moto Xoom. The gist of the article was that the iPad is unrivaled and no matter how many Android iPad clones arrive, the iPad will still be the number 1 tablet on the market. The article claims that Apples R&D is years ahead of the competition and anyone playing catchup will never be as good.
This reminds me of several hundred articles from 2008, 2009 and even early 2010. About how the iPhone was dominant in the market and no one could ever compete. Clones would never be as good, and even Android was only playing catchup and hence will never be better. Lets review some mobile phone numbers from Gartner:
Q1 2010, Android at 9.6% and iOS at 15.4%
Q1 2011, Android at 22.7% and iOS at 15.7%
What that tells me is either that Android is superior ( in terms of value ) or iOS is better and that's irrelevant to mass market consumers.
Now let's assess the first possibility. I prefer the control, choice and freedom on my Android phone. For example, the menu button is something i really miss when using an iOS device. Furthermore i like having options, such as widgets and keyboards. I strongly disagreed when those articles said Android was being developed in the shadow of iOS. Back in those days, iOS didn't have multitasking or even the option to change your wallpaper ( something even my Nokia 6280 had! ). Android introduced those features from day one. Widgets came shortly after, and development has gone so quickly on Android, that feature for feature they surpassed iOS at least a year ago. Which is my general experience with healthy open source projects. Rumours are now floating around that Apple will introduce NFC into their next phone. This leads me to ask, who's actually playing catchup. However, i will admit that almost every single feature that iOS and Android share, is more polished on iOS. This may be considered a sign of quality, and some people firmly believe the quirks and roughness of Android drop its value as a market competitor.
The second possibility is something i find more likely. Most end users - sadly - don't care about freedom and choice. They do generally care about availability, reputation and cost. This is where Android clearly dominates. In the US, iPhone was, until recently, available only on AT&T. This must have hurt sales. Here in the Netherlands, T-Mobile held a similar monopoly. Last year their data network collapsed ( and i still stuggle to use at and am waiting eagerly on the arrival of my Nexus S on Vodafone ). These sorts of availability issues allowed competitors to get a foothold when it mattered. The reputation of Android started off pretty low. I was discouraged from buying my G1 when it first came out. The store clerk said bad things about the OS, that it wasn't ready. I bought it anyway, and despite working daily with iPhones, i still didn't regret my purchase. Slowly it grew to be the only other serious smart phone competitor. A year after my G1 purchase, my wife went to get a new phone, and pretty much all that was recommended in the price range were Android phones. Which is the final point. The iPhone is still too expensive. Android phones are everywhere. Even on prepaid packages. Everyone can have them. This is where the open OS shines. There's no limit to what kind of device you can buy with Android on it.
So back to the tablets. What does the above rant have to do with the iPad? Well, i feel we're in the same situation now with tablets that we were with smartphones when the G1 launched. The Xoom strikes me as the first viable tablet from the rest. Yes, it might not be better, but it's a matter of time before there are 20 Honeycomb tablets floating around with prices ranging from $250 to $1200. So unless Apple adjust their strategy, i think the likelihood is that the same thing happens as with the iPhone/Android fight.
Apple, firstly, need to catch up. The iPad's low resolution and lack of camera's currently aren't on par with most upcoming Android tablets. The iPad 2 may correct this. Apple's iPad pricing has been aggressive, but companies like Archos are known to produce considerably cheaper competitors. If they jump onto 3.0, the first $300 Honeycomb tablet won't be far behind. Once main stream retail picks up the plethora of tablets, it'll be easy to grab a cheap device that fills most of a particular user's needs. If Apple instead go against their normal grain, and release a mid range tablet device with lower specs and wider market reach, they might have more chance competing, otherwise i believe that they will be fighting to hold a lead in 2 years time.


Lucid Nexus One Development

Android development is fun. It's a lot nicer than iPhone development, and although it's not as smooth as Windows Phone 7 development, you're not tied into OS or IDE. So i've recently installed Ubuntu 10.04 ( LTS ) on my netbook, mostly for performance reasons, and need to continue work on my clock widget - which hit 400,000 downloads sometime yesterday :)
There are pros and cons of Android dev'ing on Ubuntu, but the biggest one is that by default, the debug bridge ( adb ) doesn't have permissions to access the device, namely my Nexus One. Reading many online posts the suggestion is to run the adb as root, or just restart the service with sudo. Unfortunately that sucks, why?
  • You have to keep redoing it every time you start up your dev environment
  • Running a potentially insecure service as root!!!
  • If you do restart it while eclipse is running, you get some extra output in the console window
To be honest, for me the first and third are my biggest issues, i hate admin and i don't like unnecessary output in my windows, especially not in distracting red - yes i'm a psychotically pedantic developer.
So here's the proper solution:
As recommended by Google the best thing is to add a udev rules file. So,
  1. Unplug your device!
  2. Create a file as root: /etc/udev/rules.d/51-android.rules
  3. Paste this line into the file: SUBSYSTEM=="usb", SYSFS{idVendor}=="XXXX", MODE="0666"
  4. Lookup the vendor id in this table ( from the android dev site linked above ) and replace XXXX with your devices vendor id:
    ManufacturerUSB Vendor ID
    Sony Ericsson0fce
    If you're using a Nexus One, like myself, the vendor id is NOT in that table! At least for some reason, my vendor id registers as: 18d1
  5. Save and close the file. Plug in your dev device, and start up eclipse/adb.
That's it really!
PS: To find out the Vendor id of your random android device, run lsusb with and without the device plugged in. Do a game of spot the difference, and the first 4 digit hexadecimal number ( XXXX from the number XXXX:YYYY ) is your vendor id.