October 25, 2009

Using the HTC Hero's keyboard on the HTC Magic

It is possible to use the more advanced and comfortable implementation of the screen-keyboard from the HTC Hero on the HTC Magic without having to get root access on the device.

There is an excellent german description available how to Use the original HTC HERO Keyboard on the Magic, G1, Galaxy and Pulse without rooting (german readers should head there instead). I also tried to find an english description for this but since I did not find explainations without rooting the devices here is the translation for the curious.

  1. download the file HTCIME.apk(for Android 1.5) or HTCIME.apk(for Android 1.6 - Donut)
  2. make sure you have an application installed which can install APK files (for example eoeAppInstaller or the ASTRO File Manager)
  3. copy the HTC_IME.apk to the SD-card
  4. accept applications from unknown sources in Settings > Applications
  5. start the eoeAppInstaller (or ASTRO File Manager) and locate the file HTC_IME.apk
  6. long press the entry and choose to install the application
  7. after successful installation reboot your phone
  8. go to Settings > Locale and Text and activate the entry Touch Input
  9. now bring up some text-entry box for example in the SMS messages
  10. long press on the entry-field and choose "Touch Input", voi'la

Now you should have the new keyboard active. There are more variations of this keyboard layout available in the settings to try out. Furthermore if you're using tools to kill your running apps make sure, to set the keyboard application on the exclusion-list otherwise it takes longer to launch it every time.

October 24, 2009

Where to put it?

Maybe someone still remembers my announcement from June that I want to make my project from the University available to the publicity.

Well, finally the marks arrived and since it's positive I've got the permission to open it to the public. Back in June I wanted to put it up on Sourceforge but since then this site has changed its appearance quite a bit and now I'm not sure anymore if it's the best place to make it available. In the meantime I've also made some experience with the Google Code platform and that's not so bad either.

Furthermore the current name is not very "catchy" so I'll also try to come up with something better than "SableCCTest" or "Dynamic File Parser".

October 22, 2009

Metroid SR388 down the tubes

A bit more than a year ago, the new website for Metroid SR388 opened its doors. It was very well received and had quite some fanbase which was eagerly waiting for the very promising Metroid SR388 metroid remake by a guy called "von richter".

Nowadays I've given up all hope on this project. There has been some more progress and some more trailers but around spring this year the project began to stall. There was a bit confusion in the forums (vonRichter renamed himself to ProjectLeaderGuy and some crazy stuff) but from that time on there wasn't much of any news.

And now the website domain went down and is for sale again, so I guess that Metroid SR388, as much as it has been hyped in the community, is gone for good.

What's now left for me and my need for retro is another Metroid fan project, AM2R. I hope this one survives a bit longer and releases a final product sometime in the future.

October 17, 2009

Presentation success

Yesterday evening I held a short five-minute presentation for our lecture "Project Work and Presentation". The exercise was to hold a presentation of any topic for five minutes.

The three days before I've been working on that presentation because I wanted to take the chance and try something completely new for me. My goal was to hold one of those presentations, where the visuals change every other second and match the sentences or "story" of the presenter. It was very hard for me because I had to take care that the flow of pictures and graphics matched the descriptions I'm giving in front of the audience. Another obstacle I had to get around was that I had to memorize the whole flow of the presentation, which image and which slide appeared after each click and when I wanted to proceed to the next picture/slide during my speech. It was also the first presentation where I really practiced the whole presentation several times the day (or better, night) before. I knew, either it will be a huge failure or a big success. But since it wouldn't have a large impact on my mark and I wanted to try this for a long time already I just did it.

In the end I managed to keep my mind together during the presentation and remember almost everything. To cite one of my colleagues, the audince was simply stunned. Seems, my presentation went well :) Of course, there are still things which can be improved, like my costantly expression of 'aah's and 'uhm's and I should have taken more care that some pictures contained texts which weren't unreadable to the audience (I didn't intend to make them readable, but the audience still tried) but these are things I'm arware of and I'm constantly working on.

For now I'm quite happy with my performance and in the future I'll try to also make important and technical presentations more professional and better than I did in the past.

October 15, 2009

Maximize your Android phones battery runtime

Now that I've been playing with my Android phone for some time, I'd like to share my experiences how to minimizing battery drain to maximize the phones runtime. These are roughly sorted by their impact on the energy consumption with the most energy-hungry features first.

  • Reduce the backlight intensity and active-time. When lit, this is the number one energy consumer so reduce the brightness and lower the timespan until automatic turnoff. Save even more, if you manually turn off the screen earlier when you don't need it anymore by pressing the red hang-up key.
  • Turn off GPS. If you don't really need it, your phone doesn't constantly need to know its exact location. Use GPS OnOff to quickly toggle the GPS status.
  • Turn off WLAN. WLAN detection and connectivity is another power-hungry feature. Turn on WLAN only if you need it. Use the WiFi OnOff widget for a fast toggle in case.
  • Use 2G instead of 3G network. 3G is faster, sure, but it also comes with an energy-penalty. If you don't need a fast internet connection all the time, use 2G instead. The 2G-3G OnOff widget allows a fast toggle.
  • Turn off Bluetooth. Mostly only used for Bluetooth headset anyway, just activate it when you're in your car. Fast switching is available through the Bluetooth OnOff widget.
  • Turn off Internet access via mobile networks completely, if you don't need it. Apndroid allows you to toggle it with just one or two clicks (depends on the version).
  • Prefer audible notifications. Vibration notification drains more power than a notification sound. And a loud notification drains more than a quietly notification or no audible notification at all. Use only as much as you really need to be notified.
  • Disable Auto-Sync if you don't real-time notification of emails and so on. Again, there's a one-click-widget for this, AutoSync OnOff.
  • Don't leave applications running in the background when you're not using them. In general only leave those background services active which you really need.

Of course, locking down your phone with all these measures won't be the ideal solution for all of you. I don't use all of them either. Just keep it to the minimum you really need to be comfortable with your own personal usage pattern of the phone.

A great application to automate many of those tasks is Locale. It allows a lot of custom settings for many of your phones settings depending on various conditions like current location, time, battery status, etc. When setting rules for locations it always requests ultra-accurate location detection via WLAN and GPS, but I found it accurate enough for me when I left it with only GSM cell detection. To give you some ideas how it can be used for minimizing energy-drain and location customisation, here are some of my rules. Many use the apndroid-plugin for locale to shut down the network access. This is not yet on the Android market but only available in the apndroid download section.

  • at-work: a time and location based rule which turns off all network access, auto-sync and makes all notifications more quiet. I've got internet access all day anyway, no need for it on the phone to use it there.
  • at-university: even more strictly this one turns the phone into silent mode and locks network access and auto-sync if I'm currently studying.
  • at-night: when I'm asleep it doesn't make sense to sync mails or anything. So turn off network and autosync again between 10pm and 7am to preserve some battery. In case I'm still using the phone during that time, the screen brightness is furthermore reduced during the no-sun time.

Be creative and try find conditions during your average day where you do not need certain functionality of your phone, there is almost always something where it does not make sense to have your phone synched with your online account or to get notified about anything.

Update 2009-10-16
Also have a look at the excellent Lifehacker article An Exhaustive Guide to Saving Your Smartphones Battery which covers also the other mobile platforms like Windows Mobile, Blackberry, Symbian, Palm Pre and iPhone and gives some more general tips.

Update 2009-10-31
With Android 1.6 you now also have the possibility to check the components and applications running on your phone for their energy requirements. Go to Settings->About phone->Battery Use to check the energy hogs of your phone.

October 11, 2009

University project is gaining speed

In the last week our group of students met several times online and we finished the generic planning phase for our project. The Scrum-like approach is working even better than I expected and the discipline and participation of the people is excellent. Bonus points apply because we're all distributed at different locations and have to schedule our meetings online only. And although our teacher for this lecture did not tell us directly I'm quite sure that he was also impressed by the things we've accomplished between the two lecture units we had so far. Everytime he brought up an issue or a question we could reply that we've already discussed that and present him a decision or solution.

Currently we're in the detailed planning and design phase and I expect the teams to begin the actual work after our regular meeting on Tuesday. I guess that with the zeal of the teams we'll have no serious problems meeting the expectations for the first iteration which ends at the end of October.

October 5, 2009

First university weekend roundup of the new term

Last weekend was again filled with mostly university attendance. And with every new term there are new challenges of course. What's better than in the previous terms is, that it seems that now we're having only qualified lecturers. In the previous terms we always had the one or other teacher where we had more difficulties with the style of lecturing than with the topic itself.

So, whats on the next half year? A surprise was a lecture on project work and presentations because I only realized shortly before the start of the lesson that this is a full-english lecture. But should be no problem at all. The lecture on security and cryptography delivers exactly what the title suggests. Think of hackers trying to break into computers, applications and websites, that's one part of what this lecture contains. I guess the other part will be the opposite, how to prevent these attacks and to develop a feeling on security or insecurity of certain stuff.

For me personally the most interesting lectures so far are on mobile computing, system-close programming and specific chapters of software development. In mobile computing we'll be programming applications for mobile devices using JavaME and the Android Platform (on which I incidentally already created my first application last week). System-close programming will lead us into the depths of C where we'll be creating an own shell on the Linux platform. And in the last lecture on specific chapters of software development our class got split in three teams which will be working on a common project using agile and Scrum-influenced development methods. I'm on the integration team there but since I'm already very experienced with these methodologies the lecturer asked me to give more support to my classmates than doing actual work myself.

This all sounds as if it'll become the most interesting term so far but I also expect it to be the most work-intense either.

October 2, 2009

Android development is just beginning

Yesterday I spent a few hours trying to develop a minimalistic application for my new android phone. With the help of a quick Hello World tutorial I got up and running quite quickly. Within a few minutes I had Hello World showing up in the Android phone emulator.

When I tried to start it on my real device, I had the problem, that my phone was not showing up as connected device when I plugged it in via USB but only its internal memory was available as drive. After some investigation and research I found out, that I plugged in my phone before I activated the USB debugging mode on the phone which causes some driver irritation on Windows. This thread explains the details and how to solve the issue.

The next thing I did was to find out how to load the contacts stored on my SIM card. This is not a very well documented task so here is the required code to use Content Providers for loading contacts from the SIM module. This method returns the contacts as ArrayList of Strings which consist of the three fields name, number and _id.

private ArrayList<String> retrieveSIMContacts() {
    Uri uri15 = Uri.parse("content://sim/adn/");

    ContentResolver resolver = getContentResolver();
    Cursor results = resolver.query(uri15, null, null, null, null);

    // Android 1.6 has a different URI
    if(null == results) {
        Uri uri16 = Uri.parse("content://icc/adn/");
        results = resolver.query(uri16, null, null, null, null);
    }

    final ArrayList<String> simContacts = new ArrayList<String>();
    final int nameIndex = results.getColumnIndex("name");
    final int numberIndex = results.getColumnIndex("number");
    final int idIndex = results.getColumnIndex("_id");

    while (results.moveToNext()) {
        final StringBuilder builder = new StringBuilder();
        builder.append(results.getString(nameIndex)).append(" : ");
        builder.append(results.getString(numberIndex)).append(" : ");
        builder.append(results.getInt(idIndex));

        simContacts.add(builder.toString());
    }
    return simContacts;
}

All in all I got a small app running on my real phone showing the contacts from both the phone itself and the SIM card in two listviews selectable via tabs within two or three hours.

Quite fast, I'm impressed. I expected that Android development would be a bit more complicated...

Update 2010-01-04: Update for Android 1.6

October 1, 2009

Last holiday

Yep, tomorrow the university continues. At 2pm I'll be already in a meeting with a professor and a colleague to talk about a possible work for my required Bachelor thesis (pt. 1). And after that it'll continue straight until Saturday evening.

I'm curious what the new lectures will contain...