Tuesday, 4 May 2010

Java Developer Diaries; A month of Mobile Development

Minute 1, Unpacking...
iPhone: Wow nice packaging and an impressive device!! So excited let's turn it on!!
Android: Hmm ok doesn't look as trendy as iPhone but definitly thats something close.
Windows Mobile: Dad can we switch our phones! Ok, ok I'll give a try.
Blackberry: Oh this one seems even worse than win mobile, well at least I should be a manager at some corporation since I get this.

Minute 3, Start using the phone
iPhone: Hey why do I need to connect to iTunes to start using this?!? Ok seems like Apple is locking me up... Let me boot up my laptop
Android: Wow that was easy, hey mum its me calling this is my new phone, yeah you are right it has another mic for noise canceling thats why it is so quite..
Windows Mobile: Hmm its says it has a HD display, nice.. well how bad can this be.
Blackberry: Ohh no!! I am not a manager I got this device for development, hey anybody I want to have a big screen and less buttons please!!

Minute 5, checking the features
iPhone: Ok seems like its worth to wait, iTunes already transfered my music, pics, contacts and also backed up my phone!! Lets find some apps to install!!!
Android: Hmm the app market doesn't look bad, at least most of them are free but wait seems like I will miss my favourite iPhone apps. The live wallpaper feature is great!!
Windows Mobile: Seems like I will have the best full GPS apps!! Hey wait how come the memory is full, it has been just five minutes!!!
Blackberry: Well at least this thing supports Java. Wait need the call the BES admin to activate my data line.

Minute 10, apps, apps, apps...
iPhone: Ok,ok I'll quit playing and start working on the phone. It was easy to set up my email accounts. The GPS and the cam is not great but its is ok since I won"t be carrying a dedicated cam and gps. This thing looks great! Lets start reading some on development.
Android: Hmm interesting there are less apps and not all are as fun as iPhone apps but suprisingly these apps can perform much more than iPhone counterparts. This device is multitasking and apps can register themselves as services, hmm should be exciting to develop on.
Windows Mobile: Hmm nice set of apps. Well not trendy but lots of apps from different vendors, wish I there was a central store or something which I can browse them all.
Blackberry: Ok i got my BES activation, wow I got my emails even before my laptop. But the gps is a huge disappointment just as the app store. Well this thing is Java I"m going to write whatever i want!!

Hour 1, ok time to work...
iPhone: Wait no Java, no Flash, God nooooooo!!
Android: Wow, thats fun its all Java... and much much capable than JavaME. Everything is already eclipse integrated. All I have to do is to start downloading!!!
Windows Mobile: Oh its just JavaME or .net compact framework. Hey wait a service is down, what it is the phone service, what the hell is the phone is for if the phone service is down!! This feels like the same windows I have on my desktop!!
Blackberry: Hmm, thats interesting its all JavaME based, however, it is a superset with RIM specific APIs. I need to find more docs and samples, well nice the development platform is on eclipse but wait its for windows only!!

Hour 6, starting development
iPhone: What the hell is this Objective-C thing and why do I have to use a Mac!! Hey boss, I need a mac if you want this app complete hehe... and can we also order some books on Objective-C
Android: Hey I got my first application running on emulator. Ok doesn't seem as shinny as an iPhone app but I made it work!!
Windows Mobile: Hmm this C# thing is not very different than Java, well at least except for the substring method. But I need to setup Visual Studio or go back to JavaME.
Blackberry: The SDK and tools are suprisingly great but I still feel a little limited with this JavaME superset.

Hour 12, language and the tools
iPhone: I still dont get a single word from this Objective-C thing. What is synthesize, why do I need to create so many files, how can a syntax can be so complicated and different. I need more time read!!! Oh nooo pointers are back and there is no garbage collection!!!
Android: Ok this syntax seems so but this is not just Java! I need to learn about APIs, capabilities and the SDK.
Windows Mobile: Ok don't need this phone for a while I'll just stick with JavaME and emulators. I will get you back when I'm done.
Blackberry: This thing is definitly not an iPhone or an Android but at least a bit more than JavaME and has a proper development platform.

Day 2, SDK and APIs
iPhone: The battery was already flat. I am still reading, I must admit Objective-C seems very organized but I still not sure if I can call a method (or should i say send a message).
Android: I am confused most of the books are for old sdks. The project examples are nice but I need more documentation!
Windows Mobile: Ok I got my first JavaME app running on the emulator. Hmm so limited limited for so much ram and cpu...
Blackberry: My first app is running on the emulator!! It is much easier to use networking, GPS, cam etc... but this is definitly not much than JavaME. When compared to Android and iPhone there are no build in patterns and the programming model is not very organized unless you develop your own framework in the first place.

Day 4, Deep in development
iPhone: Hmm seems like I am getting used to Objective-C. I'm still trying to use eclipse shortcuts on Xcode but  I'll be ok. I must admit the language seems nice and organized but its really different than Java. Well at least there are lots of books with different fruits on the cover.
Android: When compared to iPhone, there are so little choice of books but I still can survive thanks to community and the low learning curve. I feel the sdk permits you to perform whatever you can dream of. This device is definitly the dream development platform.
Windows Mobile: Ups that not good, JavaME doesn't really fit this device and it doesn't seem native either. I need to switch back to .net. Oh god memory is full again!! Why applications does not have a close button. I wish this device did not support multitasking like iPhone!
Blackberry: Gosh, the device is locked up, time to remove the battery. I just learn "removing battery" is a well known term for blackberry development. Now that I see how superior is iPhoneOS, can you imagine a blackberry without a removable battery like iPhone!!

Day 7, Deeper in development
iPhone: Here is my first app running in the simulator. Wow the simulator is great! and I'm much used to Objective-C. Using Interface Builder for UI is great and the built in components look fantastic!! Everything is just so native and binding UI with your code is so elegant!! I really start appreciating the development model.
Android: Wait building UI was easy at the beginning but I'm bored binding this R class to references via code. Why don't they come up something like Apple's Interface Builder which is much more cleaner. I managed the deploy my first app on my phone. Seems just like the emulator!!
Windows Mobile: Although Visual Studio is much different, C# seems friendly for a Java developer and it seems much capable than JavaME.
Blackberry: I wish I had more resources and examples on Blackberry specific APIs. Managed to deploy my first app on my phone, oh wait it doesn't work. How could I know the simulator and the real device needed different parameters for network connection. Seems like I need to add an "if" for the simulator...

Day 10, Development Model
iPhone: Still need to check the books while typing but I am really impressed with the programming model. MVC, Delegates, Flyweight, Observers are all integrated and are in use even you do not realize.
Android: I can do anything on this phone, remote debugging works great and emulators can reflect the real device. Apps can trigger other apps or share data with each other. But I must confess I envy iPhone's UI programming model, sms application and its ipod feature with the cover flow.
Windows Mobile: I hate stylus, I hate windows 3.1 looking UI components, I have building UIs thinking how people use it with nails. I am ok not to have multi touch but why the stylus!!!
Blackberry: This screen is small, there is no sleeky UI components, even the default apps have just white background with some black text. I need more space more build in stuff!!! Oh by the way I managed to create an uninstallable app on my phone, wonder how will I get rid of it.

Day 13, OS Update
iPhone: New OS no problem, just install the new SDK bundled with Xcode. iTunes should already handle d the update of my phone even before I download the sdk.
Android: Great eclipse downloads the new sdk, just change the projects sdk and voila... but wait my phone is stuck on this firmware!!! Oh god now that I learn older devices are even stuck at 1.5 and 1.6. Google says I need to contact my device provider but wait isn't all those open source stuff, how can I not build it myself... or is it not???
Windows Mobile: New OS?? Need to wait and pay for the one specific to my device. Is this a Windows tradition? I should have waited the first service pack version. Now my memory exhaust faster and even my battery dies faster.
Blackberry: Very smooth to update the sdk. Also not very hard to update the phone's OS. But really not sure what the new version brings everything seems same.

Day 18. Running on device
iPhone: Wait, do I really need to pay Apple to test my app on my own phone?!? Is this a joke. Gosh I need to wait until they issue a developer certificate.
Android: I still wonder which SDK I should be targeting. Why can't they keep all devices uptodate just like apple? Seems like 1.5 and 1.6 is majority for now, but should I target 2.0 and hope them to get an update soon??
Windows Mobile: For whom it may concern, By today I am willing to resign from my job on my own request. I wish you all good luck!
Blackberry: Seems like I should be building different CODs for different SDK versions. Hopefully BES will handle them.

Day 24, Deployment
iPhone: Ok I got my cert, now need to download something to my keychain them upload something to generate something else then to download that to sign my app and deploy it to the phone.Wow thats confusing, why so much security?? Better not to miss any steps, Apple's online documentation works well if you are careful enough.
Android: Build my app, done my test and sending to market.. Hey boss can I keep the phone for another week to pla.. ehmm incase something goes wrong with the app?
Blackberry: BES admin just informed me that my app must be signed in order to be able to deployed for older versions. By the way the BES admin told me that he remotely distributed my app but my phone still doesn't have it. He says i need to wait from 2 hours to 48 hours?!?

Day 30, The end
iPhone: I managed to sign my app to send for Apple's approval which is more complicated than building for my own device. Be careful at following the documentation. Oh wait, Apple already refused my app!!! They say I need to go and read the HIG?!? Oh seems like it is the Human Interface Guide telling how apps should be to be used on Applish devices.. Well should be ok after I reflect the changes (as long my app is written originally with Objective-C without any compability layer and does not try to replace any existing functionality of the platform). Honestly there are so many rules but developing for iPhone (aka iPad) with Objective-C is fun!!! I would definitely continue developing!!
Android: Well this device does not have the looks and feel of the iPhone but seems it is much more fun for a developer to use and feels more comfortable to work on. But I still wonder about version changes and although this one seems fun iPhone seems more promising to build and sell an application if you have a nice idea.
Blackberry: Blackberry support couldn't manage to help, BES admins did not find any clue and at the end we found that something about the certificate was failed because the BES is behind a proxy but how on earth I could understand that without any error log and waiting for 48 hour periods between each deployment!!

*No offence, this post is just fiction with some humor and some real experience. I had used windows mobile more than 1.5 years, developed commercial software on compact framework using C#. Never had my own Blackberry but used most of the models and developed commercial software on the platform with my own custom MVC framework. I had been a iPhone user more than 1.5 years and has developer certificate about a year. Tried every possible way before learning Objective-C and at the end bought several books and developer some not commercial apps and also posted tutorials on iphone development. I have been an HTC Ion (android) user for a year and since then observing the sdk and tools. Very soon getting my Nexus One at Google I/O.

**For a year although I own both an iPhone and an Android Ion, I preferred to use iPhone as my primary phone. Very soon I am switching to Nexus One and leaving my old iPhone as a developer device. So you as you might see I had to decide to use one platform to other at a point of my life..