Monthly Archives: May 2010

Why I’m switching from webOS to Android

HTC Droid IncredibleI’ve been using the Palm Pre Plus on Verizon Wireless since February this year. I really enjoy the operating system, webOS. And the hardware (once I got used to it) isn’t bad. It’s relatively lightweight, easy to hold, and overall a nice-looking device.

But the more I think about it, the more I’d rather have an Android. Here’s why.

The app paradigm

webOS is stuck in the app paradigm. So is the iPhone. Android isn’t, especially with the HTC Sense UI.

When I turn on my phone, I’m looking for information, not apps. My phone comes with me everywhere and ought to know my context. I’m not turning on my phone to open an app. I’m turning on my phone to accomplish something–to get some information from my friends, to see what my next tasks or calendar items are, to determine whether I need to bring an umbrella.

In the app paradigm, I have to open a Twitter client and read updates. Then I open a Facebook client and read updates. Then I open my calendar and look at appointments. Then I open a weather app and check the day’s forecast. All I really wanted was the information, not all the overhead of opening and closing apps, scrolling through and searching for the relevant things I wanted to know.

I don’t want to see minimized cards with some apps. I don’t want to see an array of pretty icons. The app paradigm is simply too inflexible and too siloed to provide me the information I want in the way I want it.

Hardware

Let’s be honest. As cool an operating system as webOS is, it’s confined to hardware that is all but antiquated. Small screen, slow processor, a finnicky keyboard that was only recently fixed.

Current Android devices are so much faster and more capable than current webOS devices. While rumor has it that hardware improvements are coming, I want a phone that’s up to snuff in the market today. A 500 MHz processor powering a small 3G phone can’t compete in this market anymore.

Geolocation

This is both a hardware and a software issue. Admittedly, the GPS experience on non-Verizon apps is spotty at best. It’s the unfortunate truth that the missteps of the carriers of webOS devices have tarnished its image in the location realm. Whether it’s caused by hardware limitations or carrier restrictions, the fact remains that geolocation on the Palm Pre leaves much to be desired.

Turn-by-turn navigation is only available on the Pre if you’re willing to shell out a few extra dollars a month for a subscription fee. Android phones come with turn-by-turn navigation by default at no extra charge. That, combined with the inherently better location capabilities of Android hardware, is compelling by itself.

Innovation and community

webOS has a very strong community. I have no complaints there. But the platform hasn’t garnered the attention of many developers outside that community, meaning that the app selection is extremely limited. There’s no Yammer app, for example (something that I desperately need). There are few Google apps for webOS (Maps and YouTube are the obvious exceptions).

Google is innovating incredibly fast with the Android platform. Android 2.2 brings incredible speed improvements across the board. Palm is in the middle of an acquisition by HP, so I’ll forgive them for the time being. But acquisition notwithstanding, innovation in webOS has been a slow process. Some are optimistic that innovation will improve with the better corporate backing that Palm will get from HP. I’m more inclined to run and develop for a platform that already has a proven track record of adoption and improvement.

Conclusion

Perhaps I’m being pessimistic. Perhaps I’m too easily distracted by new, shiny toys. But I’m more than likely going to make the switch to Android and devote my energies to that platform.

I still hope for the best for webOS. It is an awesome operating system with a lot of potential, but that potential has yet to be realized. Hopefully the new deal with HP will provide the necessary boost to get webOS onto its next wave of innovation.


UPDATE: I should note (as is duly apparent in the comments now) that I’m not yet completely sold on the idea of switching to Android. Feel free to leave your thoughts about either platform. Why should I or shouldn’t I switch?

Adventures with PhoneGap

Palm Pre, Motorola DROID, iPod TouchI’ve been working with PhoneGap this week to create a simple geolocation app. It’s a framework for creating mobile applications in HTML, JavaScript, and CSS that will run on all the major platforms. You write your application and reference the APIs that PhoneGap provides. Then you simply drop your HTML and JavaScript into the various platform-specific template projects they provide and compile it with the platform’s native compiler. Simple as that.

But the devil is in the details. Every platform and device has subtle differences that make cross-platform development painful. There are even differences between how an emulator and a device run the application.

I’ve been testing on three platforms: webOS (Palm Pre Plus), Android (Motorola DROID with Android 2.1), and iPhone OS 3 (iPod Touch).

Here are a few of my frustrating findings:

Notification: alert, beep, vibrate

First off, webOS doesn’t support the alert() command at all. Android and iPhone do, in the typical fashion.

Beeping is fine on the devices themselves (the Motorola DROID even says “Droid” when you call that function). But the Android SDK emulator kills my app when I call it.

Vibration works on Android. I assume it also works on the iPhone, but I only have an iPod Touch at the moment, and it doesn’t have a vibrator in the first place. The Palm Pre won’t vibrate unless the package name begins with com.palm. Obviously for testing purposes it would be fine to label your app as coming from Palm, Inc. itself, but that won’t fly if you want to distribute the app. So no vibration on webOS. And can you guess what the iPhone simulator does with the vibrate() command? It makes the app hang. Go figure.

Moral of the story: Alert, beep, and vibrate won’t work reliably if you need to support every platform and don’t want your code to break in an emulator.

Location services

The webOS and iPhone simulators both show their location as the headquarters of their respective companies (Sunnyvale or Cupertino). The Android simulator doesn’t even provide location data, so it’s utterly useless for testing in that regard.

My Palm Pre Plus (running on Verizon) can get its location relatively accurately when I’m running it on 3G (even inside my office). Not so if I’m on the WiFi. If I get a fix at all, it’ll take a long time and may be quite inaccurate. (Note that this is the behavior I get everywhere in webOS, not just with PhoneGap.)

The iPod inexplicably thinks it’s in Lilburn, Georgia. For comparison, I’m in Provo, Utah. Only 1,927 miles off. Google Maps on the iPod gets the correct location, but not PhoneGap.

The worst of my problems, though, is the Motorola DROID. More than half the time, my app can’t find its location. It doesn’t matter whether I’m on 3G or WiFi, inside the office or out on ground level. When I compile and run the app immediately after I’ve changed something, it usually seems to get a location fix. But when I subsequently run the app (whether connected to the debugger or not), it fails to get the location. I’ve tried it on two different DROIDs and they both exhibit the same behavior. Google Maps and turn-by-turn navigation work perfectly–they find the location and track it reliably. But something between the phone’s GPS and the PhoneGap library is getting screwed up.

Device UUID

webOS and iPhone OS both return a useful UUID on the device.uuid property. However, Android (both on the emulator and on the DROID) returns simply the unhelpful “undefined.” My app needs to be able to identify users by the UUID of their device, which simply doesn’t work on the Android.

UPDATE: Android 2.2 (Froyo) returns a UUID as you would expect. Only problem is that hardly anyone has it as of now (July 2010), and a lot of older mainstream handsets won’t be getting it at all.

HTML Select boxes

This one really ought not to be a problem. But webOS won’t let you tap on an HTML select box inside a PhoneGap application. It’ll display just fine, but you can’t make a selection. Select boxes work fine on normal web pages. iPhone and Android both support the select box perfectly, including the native OS skins. No dice with PhoneGap on the Palm Pre.

EDIT: Ryan from Nitobi is working on a solution for this on webOS. You can read about it on his blog.

UPDATE: Ryan has fixed this now. See his comment below for the updated files for your project.

Conclusion

So. After wrestling with all of these issues, what have I determined?

PhoneGap is a really slick framework, and it makes it very easy to create a mobile app that is “write once, run anywhere.” But the actual implementation details get hairy, and even fundamental operations like geolocation services and vibration are not implemented uniformly across all these devices.

Caveat emptor.


For those interested, I’ve posted a few questions about these issues on Stack Overflow:

Ideas for context automation at BYU

  • The book you placed on hold last week at the BYU Library is now in for you to pick up. You receive a notification on your phone just as you enter the atrium. Want to check it out right now?
  • Your favorite stand-up comedy group is doing a show right now next to the Cougareat. Your phone alerts you to such as you walk through the quad just outside the Wilk. Care to take a look?
  • Your Physics 121 homework is in your backpack, all finished. Now that you’re in the MARB, your phone reminds you to run upstairs and turn it in before you forget.
  • You’re still on the other side of campus and class starts in 10 minutes. Since you’re on your work computer, perhaps you’re deep in thought on a project. Don’t forget to leave in time!
  • You’ve been searching Google, Wikipedia, and the Library’s website for 10 minutes with keywords all relating to Rembrandt and van Gogh. You don’t seem to have found anything satisfactory yet. There’s an art history subject librarian online right now. (She even has a specialty in Dutch painters.) Maybe she can help you break this mental block–care to chat?


Location-aware context automation is an extremely powerful and relevant concept. The possibilities are endless.

How do we make this a reality on a college campus?

BYU could use information I supply about my intent to give me relevant, useful information (call it advertising if you must): books I want to read, my favorite groups, academic interests, homework reminders, etc.

Such location-aware context automation is currently a hot topic at Kynetx, industry leader in pioneering the purpose-based, context-aware web of the future.

Kynetx provides the platform to enable the kind of context-aware applications I mentioned earlier.

What if BYU’s network routers were Kynetx endpoints? Then my smartphone (also acting as a Kynetx endpoint, probably through an app) could detect when I’m in range of one of these wireless access points. It can also trivially determine which building or perhaps even which classroom I’m in. That takes care of the location part of the context puzzle.

What if my laptop were a Kynetx endpoint that knew what building I was in and what I was working on–where I’m browsing the web, whether I’m online on my chat client, etc.?

Other data can be used to determine the intent part of my context–books of my Amazon.com wish list, books I’ve checked out or reserved at the library (both currently and in the past), classes in which I’m enrolled, clubs of which I’m a member, homework assignments that are due soon. Insert your favorite piece of data here. You get the idea.

Given that information, BYU could provide me contextually relevant information to make me more productive at my current location or the current time of day. That context automation could stretch across my web browser, my computer, or my smartphone.

That opens the doors for some really powerful applications that aren’t currently possible with the web as we know it.

What ideas do you have?

Check-in attendance

Today this article came through on my Twitter stream (via lnxwalt):

Ariz. college to position sensors to check class attendance
Devices would be installed in underclassmen lecture halls; some say infringes on privacy

Students at Northern Arizona University will have a hard time skipping large classes next fall because of a new attendance monitoring system.

The new system will use sensors to detect students’ university identification cards when they enter classrooms, according to NAU spokesperson Tom Bauer. The data will be recorded and available for professors to examine.

Some quoted in the article decried the development as “Orwellian,” others found nothing wrong with the practice.

The main concern was that the system could potentially grow to include not only recording attendance in certain large classes but also tracking students’ presence across the entire campus, potentially enabling university personnel to know the precise location or behavior of any given student. While I don’t envision such a system running that wild, it does raise interesting privacy issues.

Many colleges uses i>clicker devices in large underclassmen courses for providing quick feedback on in-class quizzes, etc. They can also be used as a means for recording student attendance, a fact referenced in the article. Interestingly,

UW professor Dana Geary, who uses the clickers for one of her classes, said the clickers do not seem to affect the number of students who attend class.

Using an i>clicker is voluntary (even though it may have obvious bearing on a student’s grades). This eliminates the “privacy concerns” raised by the opponents of such attendance-tracking systems.

Why not implement a check-in attendance system, perhaps with the RFID cards used at NAU, perhaps with smartphones, perhaps with single-purpose devices like i>clickers?

I have pondered this possibility before. College-age students regularly use smartphone applications like foursquare and Gowalla to track their attendance at social functions. “Checking in” to a restaurant, a bar, a movie theater, or a concert has become second nature to them. I even use foursquare to “check in” to various academic buildings at my university.

Rather than trying to track students against their will, why not turn it into a self-driven system of checking in to class? The system wouldn’t necessarily have to use smartphones. Indeed, RFID checkpoints at classroom doors (similar to those used in public transit systems) would likely be a simpler and more reliable solution. It then remains (as it should be) the student’s responsibility to ensure that she is in class on time.