Thursday, March 19, 2009

Zebra Paint update

Since I practically used all my free time to develop version 1.0, I wanted to take a rest and not do anything for a while. But almost 10000 people downloaded it during the first week and even though the app is free, my rest was shorter than planned.

Some facts first. As of today, 10 and a half days after putting it onto the market, I had 15300 downloads and people still have it installed 10600 (69%). I got 263 reviews and 11 emails, most of them positive (and some of them very negative). Overall, it looks good, the app has a 4+ star rating and it is currently #7 in the Games/Casual category in the market. Better than what I was hoping for.

From the reactions it was pretty clear what to do to improve it. The most demanded features:
  • Save (send, set as wallpaper) the image - this is here with v1.1
  • More templates - I will add more eventually, but no promises here
  • Paint with black - v1.1 has dark gray now (no black because that would easily make it unusable)
  • More colors - I am not going to add more because it would be more complicated for small kids and lead to other usability problems
I have also added other features that were not explicitly asked:
  • Starts with a random template now
  • Minor stability fixes, e.g. it does not reload when opening/closing the lid
Overall, adding image saving was far more complex and demanding than my initial estimate, which was 2-3 hours. In reality it took almost 4 working days. The cause is that saving images to the SD card does not make them show in the gallery, and the API to do that is not very straightforward and easy to screw up. I even managed to render the whole gallery crash at each start so I had to erase all data from my phone. But having the code of built-in apps like the Camera app helped.

What I learned:
#1: it always takes more than the estimate.
#2: saving images in Symbian (S60) is much simpler, it magically just works.
#3: the Market is a great way to distribute applications. I would not have get so many downloads any other way.

Wednesday, March 11, 2009

Life of an Android app

After getting an Android dev phone, I was tempted to write my own app for it. Since I am the proud father of 3 girls now, I wanted to do something that they can play with: an app with which they can color an image with their fingers. Now, after about 2 weeks of development time everyone can download it from the Android market by the name "Zebra Paint".

The start was easy - even though I have never used Eclipse before, the instructions for setting up the emulator and the environment were crystal clear. Doing Hello was also a piece of cake, less than 30 minutes. Choosing a new Android project adds everything needed and the logic is about 2 lines of Java code. Even better, it keeps everything up to date during development, e.g. when one adds new resources, the pointers from the code are automatically updates. XML files containing resources are also checked on the fly. When a line is changed I can see immediately if it works or I have made a mistake. That adds a quite rapid feel for development.

Not everything is easy, though. Understanding the fundamental concepts like resources and activities needed some time. Probably the worst thing is that while there is Javadoc for everything, the documentation describing resources lacks details and examples in many places. For example there are "drawables" that can be used to paint just like anything, there is no reference docs, no tutorials. The examples cover some simple cases but I have the feeling that drawables are capable of much more than what's documented. For instance, layers and combining objects.

The other surprising thing was that the Dalvik VM is actually slow and nowhere near the speed that I predicted based on that the CPU is more than 2x faster than my Symbian E61. For a simple algorithm like flood fill a lot of int array magic and ugly design was necessary because the VM could not get through it.

Overall, doing it was faster than on Symbian, but there is room for improvement. Hope you enjoy Zebra Paint!