Less is more: the 200’000 apps myth

A ridiculous race is going on in the world of Smartphones, with each competitor boasting about the number of available apps for his platform. With Apple talking of 200’000 apps and Android claiming 50’000 apps (similar to what Palm offered in earlier years, and probably similar to Symbian), a new platform such as Maemo 5 sometimes faces a difficult stand, with casual users coming from other platforms complaining about too few apps (only hundreds…)

After years of smartphone experience as user and developer, having my first app on Maemo reaching 100’000 downloads, programming a first iPhone enterprise app and spending a few evenings of App Store analysis, I believe it’s high time to debunk the app numbers craze: IMHO,  a high number of apps reflects the shortcomings of a platform as much as its mass market success. This article mainly looks at the iPhone AppStore, however the Android situation is quite similar.

One in six apps in the iPhone AppStore is an eBook. “Jane Eyre” alone is available through over a hundred apps. How ridiculous is this? Taking an eBook and packing it into an app? 36’000 books as individual apps?
On Maemo, you have one or two good e-book readers, then you simply download whatever free e-book you want. Yes, no paid eBooks (no DRM) yet, but 30’000 eBooks alone from Project Gutenberg, downloadable through the default browser.

One in six apps is a Game. Some of them are absolutely fantastic, innovative and superior to the handheld game platforms such as the PSP or the DS. But many others are imitations, variant 283 of Tetris or Bejeweled. Or crude mini-games. And quite often, games come in 3 variants  – a free, a lite and a full version.
On Maemo, the commercial games are mostly missing due to the ongoing Ovi store tragedy/mess. Angry Birds and Bounce save the day, and every possible emulator allows us to relive glorious games of the past, even using various external controllers. In addition, thanks to the in-built Flash player (take that, Steve :-) and the physical keyboard, you can play many Flash games in the browser or even download them for later offline play. Maemo would probably need just a dozen good 3D games to be up to par in the Gaming section.

The entertainment section (10% of all apps)  is another show of the tragedy of the masses. Sorted by popularity, the winner is “Boobs & Thongs Lite”. What a glorious achievement.  In fact, three of the top 20 apps are about boobs, another 3 about wallpapers. Plus light sabres, farts, jokes, beer and TV.
On Maemo, thanks to the fantastic browser and screen resolution plus the huge amount of codecs supported, you can simply get the real deal just like on the desktop. Whatever the kind of reference you’re looking for. Save any possible image by right-clicking and saving in the browser, review later on throught the Photo app. And simply use any possible image as wallpaper directly from there, too. And for all other reference lookup, just try the search widget “TouchSearch” and ad your own databases if Wikipedia, Google, IMDB etc. are not enough. And for emergencies, a light saber is available and a fart app is work in progress. Sigh.

Education has 7% of all apps, with a few fantastic items, but also lots of superficial content, similar to simple lookup lists or a number of pages packed in an app. PS: Another Boobie app in the Top 20!
On Maemo, we have a number of apps, most notably Stellarium. This alone rocks incredibly and shows the true potential of this platform.  Flashcards, Graph calculators, periodic  tables are there, too.

Going into the other 50% of apps and categories in the iPhone app store, the view is the same: a few individual gems, but mostly repackaging of existing content. Each RSS feed an app, each internet radio station an app, each reference list an app, each city map an app. Each document about whatever an app. And who needs 856 weather apps?
Desperately looking for an advantage in having this many apps, I remembered the online/offline dilemma. At least having an app installed should give me more offline freedom, or not? Unfortunately not – because many apps are indeed just frontends to existing content. And if not, every single content you would want is an individual app that you need to find and download separately. In fact, instead of googling and surfing to content, in a way Apple prefers you to search in the App Store and install the one app for just this content.
What are the reasons for this mess?

  • Conceptually, to hide the shortcomings of the input methods, the shortcomings of the browser and the shortcomings of the display resolution.
  • Commercially, the trendiness of the iPhone and it’s mass market appeal combined with a fierce competition and freeloading on existing content. Plus Apple’s strategy of consumer lock-in.

Where will it go? I’m persuaded that in a few years, 90% of the apps will be forgotten and long dead – it will begin the moment that the iPhone has a higher resolution display and and better browser and happen when Flash or HTML5 is available.

Luckily, with Maemo 5, we’re nearly there already. Less is more. Be free.

Widgets, my love: Bluezwitch

Another of my single-button widgets for the Nokia N900 got into Maemo Extras this week: Bluezwitch, a simple widget to turn Bluetooth on/off (saving you 3 clicks compared to the original way). Apparently, this widget is a great thing for many users, as it already got 12’000 downloads in just six days!

For me, the main work in this was to find out on how to programmatically enable/disable Bluetooth with Bluez 4.x using D-Bus – all the examples I found online only talked about the older Bluez 3.x versions. After digging through the Bluez Docs and some experimenting, here is how it works in Python:

  1. Find the default Bluetooth adapter.
  2. Modify the “Powered” property of the adapter.

The following snippet of code toggles the adapter on/off on each run:
import dbus
self.bus = dbus.SystemBus();
self.root = self.bus.get_object('org.bluez', '/')
self.manager = dbus.Interface(self.root, 'org.bluez.Manager')
self.defaultAdapter = self.manager.DefaultAdapter()
print "Default adapter is at", self.defaultAdapter
self.obj = self.bus.get_object('org.bluez', self.defaultAdapter)
self.adapter = dbus.Interface(self.obj, 'org.bluez.Adapter')
props = self.adapter.GetProperties()
powered = props['Powered']
if powered:

Accidentally, “Bluezwitch” (Bluez-Switch :-) was rather a byproduct on my quest to another widget I’m currently working on: “Carmode” is a widget that toggles a number of things when entering the car. But more about that in another post of my “series”.

And BTW: From now on, I’m changing the button icon size on all my widgets from “Finger” (48px) to the “Thumb” (64px) size, as apparently the smaller icons were just too small for many people (dragging these icons became a mini-game in itself ;-). Bluezwitch has been updated today to version 1.0.0 to accommodate this change – it will show up in your favourite repository soon.

Widgets, my love: Sleeper

I just LOVE making widgets for Maemo, but sometimes it’s hard to get back after the initial release to clean up and finalize the software. Luckily, I found the time and energy to do it last weekend for the Sleeper widget, which allows your N900 to pause the music player (or the Panucci audiobook player) after a defined amount of time, e.g. 15 or 30 minutes – It’s really handy when listening to music (or now audio books!)  while falling asleep.

Therefore, you can now find version 1.1 in Extras-Testing, in desperate need for testing and votes :-) I think it’s well worth your time, as it now not only features Panucci support, but also extensive layout settings (orientation, number of sleep values/buttons) plus Help/Licence/Donate information buttons. I took the time to build me a nice framework based on the work done by Brent Chiodo with TouchSearch, as I really want to clean up all my widgets and add configuration options to a number of them (e.g. Multi DSLR brand support in Shutter).

In addition, this also made me do something I’ve wanted to do for a long time: test using the maemo wiki as a help framework for applications. Therefore, I’ve created a wiki page for my app and am linking to that from the “Help” button using the Maemo browser. I will try to do that for all my apps from now on and believe something like that should be included with every app we do in the community. Having a help page is really valuable in many cases, and having it in the wiki allows other users to add help information / tutorials / tips & tricks.

And yes, I also added a Donate (through Paypal) button as an experiment – netting me my first 5 Maemo-Dollars in 24 hours :-) Thanks Ryan! Now to find a sharing agreement with tpl ;-)

A (phone) recorder widget for Maemo

The power of the N900 continues to amaze me again and again. I’ve been a big fan of the gstreamer media framework since shortly after I got my N900 at the Amsterdam Summit, but the possibilites that this brings to Maemo are really extraordinary compared to every other handset. Here is the latest example:

The last few evenings, I spent putting together a very simple (one REC button!) recording widget called “recaller”. Now, it is available for test and comment in extras-devel (CAUTION – this is the repository for possibly highly unstable software). From the description:
A simple widget to record the current phone conversation (AAC, 1 MB/min). Please be aware of local laws guiding the recording of telephone conversations!

  • Can also be used as a normal voice recorder.
  • Press ‘REC’ to start recording, make your call or record anything else using the in-built mic, press ‘REC’ again to stop.
  • Recordings are saved to MyDocs and can be played back through e.g. the File Manager.

Roadmap/ToDo (might get done someday):

  • Make it look better
  • Allow recording of bluetooth conversations
  • Add option to choose saving location
  • Add beeping option

Wishlist (no idea if possible or interest in doing it)

  • Autostart
  • Include contact info / phone number in filename

Once you have a good environment and package setup in place, making new Maemo widgets becomes easy :-) In the last 10 days, I’ve released a IR remote widget for the Nikon DSLR (“shutter”), a sleep timer for the Media Player (“sleeper”), and now “recaller”.

Time to polish or churn out even more? Ideas abound :-)

PS: If this is your first python-homewidget, you need to reboot before it will show up on your desktop. Sorry, not my mistake, but a bug in a library I’m using.

My N900 plays .ts MPEG2

gst-launch playbin2 uri=file:///path/to/file.ts

It plays, but still low framerate and playbin2 bickering about “this computer is too slow.” :-)

Now looking for disabling scaling, improving pipeline and going fullscreen