Monday, June 14, 2010

World Cup Recipe Apps for Good from Hungary

Over the last couple of weeks I've used Twitter to ask for user recommendations on Hungarian, Recipe, and World Cup apps. It seemed unfair to keep the results to myself.

I also recently had the pleasure of working with a Apps for Good, a program from CDI Europe that teaches young people how to create apps that change the world - a philosophy I could not possibly agree with more. The class I was involved with recently graduated, and published 3 new apps to the Android Market in the process.

So, for your enjoyment (and with limited commentary) here are some of the apps I've been checking out recently.

Apps for Good
  • Stop and Search: Really useful reference app that walks you through your rights and obligations when you're stopped by the police in the UK. Bonus points for providing a mechanism for rating and mapping the experience, as well as viewing a map of other reported stops.
  • StudioPhly: For aspiring musicians, this app will let you find a local recording studio with the gear you need.
  • StudentVoice: Lets prospective students find out more about the prospective Universities.
Some Hungarian Apps
  • Ball Madness (by A-Droid): A satisfyingly difficult bouncing ball puzzle game. Recommended despite my difficulty in getting past level 3 :(
  • VibraSeq (by A-Droid): Love this. A sequencer to create complex device vibration patterns. But wait! You can export the recorded vibration patters for use in 3rd party apps that support them.
  • Names (by Elek, Márton): Simple widget that tells you what Hungarian name day it is. Bonus points for searching your contacts and triggering notifications to remind you of anyone's name day.
  • GPS Status (by EclipSim): There's a few apps out there that will show you the position, strength, and details from the GPS - but from what I've seen this is the best of them. Nice UI, lots of information, perfect for the data obsessives amongst us.
Recipe Apps
  • Cooking Capsules (by Smart Capsules): Recipes + shopping list + video of the recipe being made. An ADC1 winner, it's an oldie but a very goodie.
  • Epicurious (by Condé Nast Digital): This seemed a popular choice, and with 28,000 recipes I can see why.
World Cup Apps
  • Mobile (by Handmark): Live scores, breaking news, good stuff.
  • World Cup News Pro (by Mippin): All the World Cup news for all the teams you follow, presented in Mippin's familiar flip-card UI.
  • Sun Football (by News International): Live scores, highlight videos, and world cup news from The Sun newspaper.

Wednesday, June 02, 2010

Google I/O Session Videos Available Now!

I had the honour of presenting the first Android session of Google I/O 2010, and it was clear very early on that Android was going to be a popular topic.

The room started filling about half-way through the day one keynote. By the time David Glazer was wrapping up, there were no empty seats. By the time I got started there were around 1,000 people packed into the 700 seat session room and the fire marshal had shut (and guarded!) the doors to stop anyone else from joining us.

A Beginner's Guide to Android

I was supposed to present "A Beginner's Guide to Android". I chose to interpret this title liberally, and quickly segued into "Android Best Practices for Beginners".

If you want to play along at home, you can download the slides.

Regular readers should recognize many of these tips as being remarkably similar to the suggestions I make during my Android App Surgeries.

Standing Room Only SOLD OUT!

The door guards never left. With people setting up camp once they found a seat, there were times when speakers found it difficult to gain entrance. With people locked out of each session, it's great that the video and slides for all the Android I/O sessions are now available.

There were some really great Android presentations this year. During my session I called out Justin's "Casting a wide net: how to target all Android devices", and "Android UI Design Patterns". Personally, I'm keen to find out more about the Android Cloud to Device Messaging Service and pick up some tips on building faster Android apps.

The Other, Other Sessions

All the I/O session videos will be made available over the next week or two.

As well as Android, you can already see the sessions for App Engine, GWT, and Enterprise. Chrome, Social, Geo, and Wave will all be available by next Monday.

What's in a Word?

There's some interesting discussion on ModeratorBuzz, Twitter, and in the comments of my last post asking you guys to tell me what you mean when you say "fragmentation".

My theory (stolen shamelessly from Dan Morrill) is that the term has been overloaded to the point of uselessness. The aim of my previous post is to unwrap the (genuine) concerns hidden within this term to allow us to discuss them without dissolving into an argument over the semantic meaning of one word.

I'm going to let the discussion continue for a while but I'll definitely respond to some of the most prominent / popular(?) issues soon. In the meantime I wanted to highlight some tweets I got from NinjaCyborg on Twitter.

He raises some interesting points, which I'll respond to, but I wouldn't have considered any of them to be good examples of fragmentation. For the most part you could happily substitute "openness" or "annoying" depending on your point of view:
  • Fragmentation is launching apps that only run on the new OS release when the previous one barely had a 6 month lifecycle.
  • Fragmentation is allowing licensees to ship hardware that isn't powerful enough to run your OS and makes web apps crawl
  • Fragmentation is changing the browser location API in between 1.6 and 2.0
  • Fragmentation is not including basic APIs for things like Bluetooth OBEX so we have to hit the hardware. OBEX is a basic, fundamental part of Bluetooth. Not complying with the standards == fragmentation
  • Fragmentation is pretending most Android users are on 2.1+ when there are still phones being sold on 1.5 and 1.6 with no upgrade
  • Fragmentation is letting your licensees choose whether to have browser chrome or fullscreen browsing
That doesn't make his questions any less valid, but it does demonstrate just how overloaded the term "fragmentation" is.

[To make keeping track easier, comments for this post are closed. Please use Moderator or the comments from the previous blog post to continue the discussion]

What Do YOU Think Fragmentation is?

Dan Morrill, Google open source & compatibility program manager extraordinaire, wrote a great post on compatibility on the Android Developer Blog yesterday. It explains - in some detail - why device and platform variety is a good thing for developers, and what the Android team are doing to make sure it stays that way.

Within the post, Dan makes what some might consider a bold claim:
Because [fragmentation] means everything, it actually means nothing, so the term is useless. Stories on “fragmentation” are dramatic and they drive traffic to pundits’ blogs, but they have little to do with reality. “Fragmentation” is a bogeyman, a red herring, a story you tell to frighten junior developers. Yawn.
If that pull quote makes you angry, I strongly suggest you go ahead and read the full article. Seriously. I'll wait.

By reading it you'll learn all about the Compatibility Definition Document [PDF] and how the Android Market and Compatibility Test Suite are used to ensure that the apps you write will work consistently across all compatible devices.

As an apps developer, Dan addresses my concerns completely. As long as there's a process in place to ensure I only need to write one app, launch it in one place, and know that it will behave as expected on any device for which it's available, I'm happy.

Judging from some of the abuse I get when I link to the updated platform distribution graph, or urge developers to start using new APIs when we release a new SDK, it seems some people have Strong Opinions on the matter. So, if having read Dan's explanation, you're still angry (or angrier still), I'd be interested in finding out why.

As Dan says, fragmentation has been used as a catch-all for "things that are different", making it impossible to have a meaningful conversation around any of the individual topics. I've created this Moderator page to find out what YOU think is a "fragmentation" problem on Android -- and more importantly why you think this does / could cause issues for developers -- hopefully while avoiding an argument over what "fragmentation" is or isn't.

Tuesday, June 01, 2010

Android App Surgery: Simple GPS

This review is part of my series of Android App Surgeries, you can vote for which app I should review next, or nominate your own app for review on the Android App Surgery Moderator page.
I've spent the last couple of weeks preparing for, rehearsing, and presenting at Google I/O. As a result, I skipped last week's App Surgery.

I'm going to ease back into things this week by taking a look at a very simple app: Simple GPS Info. It's a simple app that displays some additional information from the GPS - including the relative position of the satellites being used to triangulate your position, and the latest GPS fix accuracy.

Once you've been found, the app then lets you share that location.

Next week I'd like to tackle something a little juicier, so be sure to nominate your own app, or vote for something substantive on the Moderator site.

User Experience

The primary user experience for Simple GPS requires no user interaction. You launch the app, wait for it to get a GPS fix, and then observe the results. With limited user interaction it's particularly important that you find effective ways to engage the user and keep their attention.

GPS Status starts off well by keeping things simple. The screen is (relatively) uncluttered with the data displayed clearly and intuitively without any unnecessary distraction.

Generally speaking, there's too much blank space. The text could be bigger, as could the compass dial - there's no reason a third of the screen should always be blank. With no user interaction the data is the only thing engaging the user, so it needs to really stand out.

On the plus side, the latitude, longitude, and accuracy return values are all of predictable fixed length, so it should be easy to optimize the UI to make the data as visible as possible.

There are some specific UI choices that I think detract from the apps usability:
  • The app has hidden the standard title bar, and replaced it with a custom version. Generally users prefer familiarity, so given that the replacement bar offers no additional functionality I would avoid replacing it. 
  • Getting a GPS position fix can often take longer than your screen timeout, and with no user interaction you risk the device going on standby before your location is found. It's worth considering asking the Window Manager to hold a WakeLock until the first GPS position is found. Thereafter it would be a useful menu option for people who want to monitor changes.
  • It would also be good to know how far along we are at getting a lock. Perhaps show an overall signal strength that gives and indication of how many more satellites are needed before a result will be available?
  • Scientifically speaking, precision and accuracy are different things, GPS result quality is usually related as a measure of accuracy. 
  • Landscape mode has been disabled. As an alternative, I'd consider creating a different layout optimized for landscape orientation.
It would also be great to color-code the satellites, green if they were used to calculate the last position, red otherwise.

The one area of interaction is around sharing your current position. It's a pretty good idea, but the implementation could do with some more polish:
  • The share button looks out of place. I'd consider moving it into an Activity menu rather than cluttering the screen.
  • If you try to share a position before a GPS lock has been found, the toast displayed has a number of spelling and grammatical errors that make the app look significantly less polished.
  • Using a URL shortener adds a dependence on an Internet connection that isn't strictly needed. Currently the app fails if no Internet connection is found - perhaps a better alternative would be to fallback to the full-length URL?
  • The shared position page is hosted on a private domain. This is great for allowing customization of the data being shared, but it might put some heavy load on your servers! I'd consider making the sharing data more generic. Using the Google Static Maps API you can create a pretty good custom map-based landing page.
    Android Features

    I briefly considered suggesting a Live Wallpaper or Widget, but the power implications of such a thing would quickly make it untenable.

    Instead, I'd like to suggest use of the Reverse Geocoding Maps API. Using this API you could find the street address of your current location, adding additional context (and engagement) to the app, as well as additional information to "share".

    Stability / Performance / Risk

    Stability-wise -- no crashes, no failures.

    I did notice one possible issue. If you launch the app with the GPS disabled, it prompts you to allow it to force it back on.

    1. It's bad form to modify settings like this directly. It would be better if it displayed a message (similar to Market with background data disabled) suggesting that you can't use the app without GPS and offering a link to the appropriate settings page.
    2. If you say yes, then exit the application and disable the GPS, reentering the app doesn't prompt you to re-enable the GPS.
    Get Your App Reviewed!

    If you'd like to see your app reviewed, you can self-nominate at the moderator site. You can also go there to vote for which app you'd like to see reviewed.