I really like my new job I started in January 2010 but the way to work takes a lot of time. I travel by train so I can use my G1 to surf the web and do stuff like that so the time isn't completly wasted.
One of the websites I really want to read is DZone.com. Unfortunately it doesn't look good on mobile browsers.
So I hacked a simple iframe to make it work (at least a little bit better) on my Android phone.
To access DZone from the mobile browser just open this link in your mobile browser:
http://www.mobile-j.de/dzone.html
It's not perfect but better than nothing. It might also work on other mobile browser but I haven't tested this.
2010-01-31
2010-01-25
AlarmManager vs Task Killer
For my current private coding@home project I was looking at how to schedule alarms on Android.
I quickly realized that the AlamManager was what I was looking for. I followed one of the many resources found on the net and started to implement a simple test application. One of those pages explaining how to deal with AlarmManager and WakeLocks is http://www.androidguys.com/2009/04/02/wake-up-with-the-alarm/.
Everything was fine and it instantly worked. BUT! I wanted to see if it will also work when my app is stopped (e.g. when Android runs out of memory it will stop apps that are still running in the background). To make it easy I took one of those task killer apps you can find in the Android market. I killed my app after the alarm was set and ..... the alarm never got off.
I was really disappointed and was looking for a solution. I also had a look or two at the built-in Alarm Clock app. I did everything like it was done there. And still it wasn't working.
Then I tried what happens to the Alarm Clock when I create an alarm and kill the app. And what happened? Exactly the same. I couldn't believe what I had seen.
After some googling I found that the real problem wasn't the alarm stuff but the task killer itself. ( see http://groups.google.com/group/android-developers/browse_thread/thread/3f87972d1f99ee81?pli=1 )
I really wasn't aware that using a task killer on Android is so aggressive. By definition it means killing also the alarms registered by the app (and everything else).
Now I know better and don't use that task killer app so much as I did before because now I can imagine how much can go wrong when using those kind of apps. (And now I know why there is no such app preinstalled on the device.)
I quickly realized that the AlamManager was what I was looking for. I followed one of the many resources found on the net and started to implement a simple test application. One of those pages explaining how to deal with AlarmManager and WakeLocks is http://www.androidguys.com/2009/04/02/wake-up-with-the-alarm/.
Everything was fine and it instantly worked. BUT! I wanted to see if it will also work when my app is stopped (e.g. when Android runs out of memory it will stop apps that are still running in the background). To make it easy I took one of those task killer apps you can find in the Android market. I killed my app after the alarm was set and ..... the alarm never got off.
I was really disappointed and was looking for a solution. I also had a look or two at the built-in Alarm Clock app. I did everything like it was done there. And still it wasn't working.
Then I tried what happens to the Alarm Clock when I create an alarm and kill the app. And what happened? Exactly the same. I couldn't believe what I had seen.
After some googling I found that the real problem wasn't the alarm stuff but the task killer itself. ( see http://groups.google.com/group/android-developers/browse_thread/thread/3f87972d1f99ee81?pli=1 )
I really wasn't aware that using a task killer on Android is so aggressive. By definition it means killing also the alarms registered by the app (and everything else).
Now I know better and don't use that task killer app so much as I did before because now I can imagine how much can go wrong when using those kind of apps. (And now I know why there is no such app preinstalled on the device.)
2010-01-12
J2ME Unit Testing
In the past I tried to get happy with unit testing of J2ME code.
I used JMUnit and J2MEUnit. JMUnit is a lot more straight forward while J2MEUnit is a high ceremony framework which requires a lot of boiler plate code just to be as much like JUnit as possible.
But in the end both suck. All J2ME testing frameworks will suck.
Why? Because unit testing should be easy and fun but compile, preverify, deploy to the emulator or the device, doing some manual steps just to see that something is broken isn't fun and it's also not easy.
There is a lot of stuff you have to try on the phone but that has nothing to do with unit testing but it's tinkering around implementation issues. You will have to do that anyway and I guess both frameworks are of little help here.
So what is the answer to J2ME unit testing?
In my opinion the best approach is to do unit testing on the PC inside the IDE. Using JUnit 4 and Java SE.
I'm currently giving this solution a try. I have a separate project with a dependency on the J2ME project.
For all those J2ME classes you need stubs. I haven't found usable code on the net so I write them myself. (I don't have a lot of them yet)
The good thing is you can really take control over everything with your own implementation of the J2ME classes. Your own bluetooth connection, file connection ... you name it. It's a lot of work but you can do almost anything. Once you have your mocks and stubs in place you will see how much better this approach is.
But the best about this is that the tests run fast, you can exhaust all the cool stuff from your IDE from good debugging support to integrated JUnit support, you can use mocking frameworks like Mockito, EasyMock etc., you can use a modern framework (JUnit 4) and you could even use coverage analysis integrated into your IDE (but I haven't tried it yet).
It should also be easy to integrate this into the build and run the tests on the CI server. (This is a nightmare with the "pure" J2ME solution.)
I used JMUnit and J2MEUnit. JMUnit is a lot more straight forward while J2MEUnit is a high ceremony framework which requires a lot of boiler plate code just to be as much like JUnit as possible.
But in the end both suck. All J2ME testing frameworks will suck.
Why? Because unit testing should be easy and fun but compile, preverify, deploy to the emulator or the device, doing some manual steps just to see that something is broken isn't fun and it's also not easy.
There is a lot of stuff you have to try on the phone but that has nothing to do with unit testing but it's tinkering around implementation issues. You will have to do that anyway and I guess both frameworks are of little help here.
So what is the answer to J2ME unit testing?
In my opinion the best approach is to do unit testing on the PC inside the IDE. Using JUnit 4 and Java SE.
I'm currently giving this solution a try. I have a separate project with a dependency on the J2ME project.
For all those J2ME classes you need stubs. I haven't found usable code on the net so I write them myself. (I don't have a lot of them yet)
The good thing is you can really take control over everything with your own implementation of the J2ME classes. Your own bluetooth connection, file connection ... you name it. It's a lot of work but you can do almost anything. Once you have your mocks and stubs in place you will see how much better this approach is.
But the best about this is that the tests run fast, you can exhaust all the cool stuff from your IDE from good debugging support to integrated JUnit support, you can use mocking frameworks like Mockito, EasyMock etc., you can use a modern framework (JUnit 4) and you could even use coverage analysis integrated into your IDE (but I haven't tried it yet).
It should also be easy to integrate this into the build and run the tests on the CI server. (This is a nightmare with the "pure" J2ME solution.)
This idea is inspired by an experimental approach to unit testing on Android which is something I will try on one of my next Android projects.
2010-01-09
Nokia S40 SDK on Linux
I completely switched to Linux some months ago and I'm quite happy with it.
Unfortunately there is still a lot of Windows only software. For the most stuff there is a free and open equivalent but when it comes to mobile (J2ME) SDKs / emulators the only way to go is usually the old(!) WTK (2.5.2).
I just wanted to share the information that some really nice guy at the Forum Nokia Discussion Board told us how to run the S40 SDK on Wine.
See: http://discussion.forum.nokia.com/forum/showthread.php?t=90868 (Scroll down to yanng34's post).
I successfully tested the solution on Ubuntu 9.10 with the Series 40 6th Edition SDK.
Unfortunately there is still a lot of Windows only software. For the most stuff there is a free and open equivalent but when it comes to mobile (J2ME) SDKs / emulators the only way to go is usually the old(!) WTK (2.5.2).
I just wanted to share the information that some really nice guy at the Forum Nokia Discussion Board told us how to run the S40 SDK on Wine.
See: http://discussion.forum.nokia.com/forum/showthread.php?t=90868 (Scroll down to yanng34's post).
I successfully tested the solution on Ubuntu 9.10 with the Series 40 6th Edition SDK.
Subscribe to:
Posts (Atom)