Tuesday, December 14, 2010

How to Fix Nokia E5 Problem: Text/SMS Message Tone Not Working

For the last few days (or weeks?) my Nokia E5 has an annoying problem: the text/SMS message tone is not played when receiving SMS. It won't vibrate either.

After searching through the Internet, seems like this has happened with other Nokia phones, especially Symbian S60 ones, like X6, E75, E72. I tried changing the message tone to Nokia default, but didn't work. I also tried deleting all text messages in my Inbox, but also didn't work.

I have restarted my phone numerous times.
I was about to reset my phone settings (by using *#7780#) but I remember something...

I once had a similar problem with email message tone. The solution was to change my home screen theme to 'Active'. My home screen was already 'Active', so I switched it to another home screen theme and tada! My Nokia E5 text message tone works again!

So, the solution is:
1. Go to Control Panel > Settings > General > Personalisation > Standby mode > Home screen theme.
2. Choose another theme. You can go back to your favorite theme after making sure the message tone works again.

Good luck!

Note: this bug dates back to around 2003 or probably earlier. Ironic that it still occurs with a modern 2010 device.

Tuesday, November 30, 2010

I'm Now Posting on Forum Nokia Blogs!

Great news!

I'm now also posting articles on Forum Nokia Blogs titled Hendy Irawan on Mobile Qt.

I will still be posting here, though I'm not sure which articles should be on Forum Nokia and which ones should be here.

Or perhaps I will just cross-post. We'll see.

Anyway, it's good to have one more channel to share my experiences with Nokia, Qt and mobile applications development

Monday, November 29, 2010

fatal error: alsa/asoundlib.h: No such file or directory - building Qt Mobility 1.1.0

If you get this error message while compiling Nokia's Qt Mobility 1.1.0 :

In file included from audio/qaudiodevicefactory.cpp:60:
audio/qaudiodeviceinfo_alsa_p.h:57: fatal error: alsa/asoundlib.h: No such file or directory
compilation terminated.
make[2]: *** [../../build/Debug/QtMultimediaKit/qaudiodevicefactory.o] Error 1
make[2]: Leaving directory `/home/ceefour/Vendor/qt-mobility-opensource-src-1.1.0/src/multimedia'
make[1]: *** [sub-multimedia-make_default] Error 2
make[1]: Leaving directory `/home/ceefour/Vendor/qt-mobility-opensource-src-1.1.0/src'
make: *** [sub-src-make_default-ordered] Error 2

You need to install ALSA Shared Library headers. In Ubuntu you just need to:

sudo apt-get install libasound2-dev

Sunday, November 28, 2010

Sign Symbian/Qt SIS Apps with Qt Creator on Linux (Bonus: Qt+Qt Mobility Smart Installer for Nokia)

The latest version of Qt Creator 2.0+ (included in Nokia Qt SDK) can now easily sign Qt/Symbian applications (.SIS files) with your Symbian Signed certificate and key files.

The best part of it is that it can also be used with Linux operating systems (e.g. Ubuntu). And you don't have to install Wine!
(See my previous article on how to use makesis.exe to sign SIS files on Linux for more details.)

To build a Qt/Symbian application on Linux and also sign the generated SIS file with your developer certificate and key, first you must install the Nokia Qt SDK Remote Compiler.

Open your Qt/Symbian project, go to Projects facet and add "Remote compiler" configuration.

Under Build Steps, expand "Compile at Server" details and you will see Sis Type and Symbian Signing settings.

There you only need to specify certificate file, certificate key file, and password/passphrase (if any).

As a bonus, you can not only sign the SIS file, but also automatically package it with Nokia Smart Installer!
Therefore, your Qt and Qt Mobility application now complies with Ovi Publish requirements and can be published to the Nokia Ovi Store! :-)

Example Nokia Qt SDK Remote Compiler output with Symbian Signing enabled :

Running build steps for project messagemerge...

Uploading to remote compiler

Uploaded: 16/24 kB

Uploaded 24 kB, waiting for build

bldmake bldfiles

WARNING: When building for ARMV5 platform Compiler RVCT2.2 or later is required.

ABLD.BAT build gcce urel

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/EXPORT.make" EXPORT VERBOSE=-s

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

Nothing to do

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/GCCE.make" MAKEFILE VERBOSE=-s

MMPFILE "/home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP"

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -C /home/ceefour/project/MessageMerge/messagemerge -f "MAKEFILE_0XEA138C70.MK" TO_ROOT=../../../../../../../../.. EPOCBLD=../../../../../../../../../Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MAKEFILE_0XEA138C70/GCCE TO_BLDINF=../../../../../../../../../home/ceefour/project/MessageMerge/messagemerge PLATFORM=GCCE MAKMAKE

MifConv version 1.11 build (39).

Checking: art/messagemerge-tiny.svg

Choosing...

Convert files...

.

Loading mif icons...

Loading file: /Symbian/9.2/S60_3rd_FP1/epoc32/winscw/c/system/temp/s1c0.tmp/art_messagemerge-tiny.svgb

Writing mif: /Symbian/9.2/S60_3rd_FP1/epoc32/data/z/resource/apps/messagemerge.mif

perl -S makmake.pl -D /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70 GCCE

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(51) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/osextensions/stdapis/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(52) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/osextensions/stdapis/sys/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(55) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/oem/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(57) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/middleware/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(58) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/osextensions/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(59) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/osextensions/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(61) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/applications/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(62) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/osextensions/loc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(63) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/middleware/loc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(64) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/applications/loc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(65) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/osextensions/loc/sc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(66) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/middleware/loc/sc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(67) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/domain/applications/loc/sc/" not found

WARNING: /home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70.MMP(72) : SYSTEMINCLUDE path "/Symbian/9.2/S60_3rd_FP1/EPOC32/include/osextensions/stdapis/stlport/" not found

initialiseConfig: GCCE

perl -S ecopyfile.pl "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70/GCCE/messagemerge.rsg" "/Symbian/9.2/S60_3rd_FP1/EPOC32/INCLUDE/messagemerge.RSG"

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/GCCE.make" LIBRARY VERBOSE=-s

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -C /home/ceefour/project/MessageMerge/messagemerge -f "MAKEFILE_0XEA138C70.MK" TO_ROOT=../../../../../../../../.. EPOCBLD=../../../../../../../../../Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MAKEFILE_0XEA138C70/GCCE TO_BLDINF=../../../../../../../../../home/ceefour/project/MessageMerge/messagemerge PLATFORM=GCCE LIB

make -s -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70/GCCE/MESSAGEMERGE_0XEA138C70.GCCE" LIBRARY

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/GCCE.make" RESOURCE CFG=UREL VERBOSE=-s

Created /Symbian/9.2/S60_3rd_FP1/EPOC32/INCLUDE/messagemerge.RSG

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -C /home/ceefour/project/MessageMerge/messagemerge -f "MAKEFILE_0XEA138C70.MK" TO_ROOT=../../../../../../../../.. EPOCBLD=../../../../../../../../../Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MAKEFILE_0XEA138C70/GCCE TO_BLDINF=../../../../../../../../../home/ceefour/project/MessageMerge/messagemerge PLATFORM=GCCE CFG=UREL RESOURCE

make -s -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70/GCCE/MESSAGEMERGE_0XEA138C70.GCCE" RESOURCEUREL

Creating /symbian/9.2/s60_3rd_fp1/epoc32/build/home/ceefour/project/MessageMerge/messagemerge/messagemerge_0xea138c70/gcce/urel

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/GCCE.make" TARGET CFG=UREL VERBOSE=-s

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -C /home/ceefour/project/MessageMerge/messagemerge -f "MAKEFILE_0XEA138C70.MK" TO_ROOT=../../../../../../../../.. EPOCBLD=../../../../../../../../../Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MAKEFILE_0XEA138C70/GCCE TO_BLDINF=../../../../../../../../../home/ceefour/project/MessageMerge/messagemerge PLATFORM=GCCE CFG=UREL BLD

make -s -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MESSAGEMERGE_0XEA138C70/GCCE/MESSAGEMERGE_0XEA138C70.GCCE" UREL

main.cpp

templatesdialog.cpp

templateeditdialog.cpp

mainwizard.cpp

messagemerger.cpp

moc_templatesdialog.cpp

moc_templateeditdialog.cpp

moc_mainwizard.cpp

qrc_images-symbian.cpp

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -r -f "/Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/GCCE.make" FINAL CFG=UREL VERBOSE=-s

make[1]: Entering directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -C /home/ceefour/project/MessageMerge/messagemerge -f "MAKEFILE_0XEA138C70.MK" TO_ROOT=../../../../../../../../.. EPOCBLD=../../../../../../../../../Symbian/9.2/S60_3rd_FP1/EPOC32/BUILD/home/ceefour/project/MessageMerge/messagemerge/MAKEFILE_0XEA138C70/GCCE TO_BLDINF=../../../../../../../../../home/ceefour/project/MessageMerge/messagemerge PLATFORM=GCCE CFG=UREL FINAL

make[1]: Leaving directory `/home/ceefour/project/MessageMerge/messagemerge'

make -s -f Makefile sis

Processing messagemerge_release-gcce.pkg...

Created messagemerge_unsigned.sis

Successfully created messagemerge.sis for release-gcce using certificate c/home/ceefour/project/MessageMerge/messagemerge/.cert/OVI_10-29-2010.crt!

make -s -f Makefile ok_installer_sis

Processing messagemerge_installer.pkg...

Created messagemerge_installer_unsigned.sis

Successfully created messagemerge_installer.sis using certificate c/home/ceefour/project/MessageMerge/messagemerge/.cert/OVI_10-29-2010.crt!

Binary downloaded to: /home/ceefour/project/MessageMerge/messagemerge-build-wcc/messagemerge_installer_qt-4_6_3_m1_0_2_s60_3_1.sis

Download complete

Signing Symbian/Qt Application in Linux

Signing Symbian/Qt Mobile Applications conventionally has to be done on Windows.
The good news is now it's possible to sign Symbian/Qt mobile applications in Linux-based operating systems such as Ubuntu, with the help of wine.

  1. First you need to get a Symbian certificate and key.
    You can get your applications Symbian signed for free and get developer certificates from Ovi Publish.

  2. Extract the signsis.exe file from this zip file.
    Source: FExplorer thread
    I recommend to make this file executable so you can run it directly with Wine and not having to prefix "wine" command for launching.
    Running this command on Terminal:
    chmod +x signsis.exe

  3. Install Wine.
    In Ubuntu, open Terminal and type:
    sudo apt-get install wine
Now you can sign your unsigned SIS application files.

Type this command in Terminal:

wine path/to/signsis.exe <application-file.sis> <certificate.crt> <certificate.key>

If you make signsis.exe executable you can simply type:

wine path/to/signsis.exe <application-file.sis> <certificate.crt> <certificate.key>

Now you can sign any SIS file at will. :-)

For example in my system this is how it looks:

$ /opt/signsis/signsis.exe -s -v messagemerge_qt-4_6_3_m1_0_2_s60_3_1.sis messagemerge_devsigned.sis OVI_10-29-2010.crt OVI_10-29-2010.key

SIGNSIS Version 4, 0, 0, 1
A utility for signing Software Installation (SIS) files.
Copyright (c) 2004 Symbian Software Ltd. All rights reserved.

Signing
fixme:toolhelp:CreateToolhelp32Snapshot Unimplemented: heap list snapshot
fixme:toolhelp:Heap32ListFirst : stub

Wednesday, November 17, 2010

Download qt_installer.sis Qt Installer for Symbian and other goodies

Your Nokia/Symbian phone doesn't have the required version of Qt framework library yet.

And you're lazy to to install Qt for Symbian SDK.

What to do? You just need to download the qt_installer.sis file.

It can be found here:

ftp://ftp.qt.nokia.com/qt/symbian/

On the appropriate subfolder (Qt version), you'll find qt_installer.sis that can be transferred and installed on your Symbian/S60 Nokia device.

Nokia Qt SDK Remote Compiler - Available Environments

Here are the list of build environments provided by Nokia Qt SDK Remote Compiler :

(see attached image)

It's pretty exhaustive. And covers about all the most common options (or *all* possible options???)

I've tried building with Qt 4.6.3 + Mobility 1.0.2 on Symbian 3rd Edition Feature Pack 1 and it builds fine!!! :-)

Really cool!

Installing Nokia Qt SDK Remote Compiler

If you want to compile Qt Symbian/S60 applications on Linux/Ubuntu, you have to install Nokia Qt SDK Remote Compiler.

During Nokia Qt SDK installation, do not choose "Full", but choose "Custom" installation.
Then you can choose to install Experimental > Remote Compiler.

However, if you've already installed Nokia Qt SDK in "Full install" mode, you don't have to uninstall it.

  1. On panel, click Applications > Programming > SDK-Maintenance-Tool
  2. Now you can choose to install Experimental > Remote Compiler
    (see attached picture)

Compiling Qt Symbian S60 applications on Ubuntu/Linux !

I've just found a (very) hidden gem in Nokia Qt SDK : ability to compile/build Qt Symbian S60 applications on Ubuntu/Linux !

It uses a feature called Nokia Qt SDK Remote Qt Compiler.

Nokia Qt SDK has made it possible to simulate/run Symbian applications in a simulator (not emulator!) environment in Windows, Linux, or Mac OS X.

However, by using Nokia Qt Remote Qt Compiler, it's possible (and practical) to build Symbian/S60 applications on Linux/Ubuntu as well.
(Note that you still need to run the generated SIS files on a device, because Symbian/S60 emulator is not available for Linux, at least not with straightforward installation.)

I'm still on my way to installing the required stuff, but the steps are outlined here :

Sunday, October 10, 2010

Nokia & AT&T 2010 Calling All Innovators North America developer contest for Nokia N8

Welcome to the 2010 Calling All Innovators – North America developer contest, presented by Nokia and AT&T. We’re challenging developers to create new applications and games for the new Nokia N8 and future Nokia devices for consumers in the U.S. and Canada. With $10 million in cash, devices, and marketing prizes up for grabs, now is the time for you to take advantage of Ovi Store’s global reach which gives you access to the world’s largest community of app-purchasing mobile consumers.

The Nokia N8 is a powerful Symbian^3 device that is a new platform for innovative developers to create advanced, graphically rich, high performance apps that will delight consumers in the U.S. and Canada. We challenge you to take maximum advantage of the new capabilities in both the N8 hardware and Symbian^3 O/S, to create the next level of apps for the Nokia N8 and Ovi Store. 

You can build apps for the Nokia N8 with Qt or Web Runtime:

  1. Symbian, Android, and iPhone developers: Nokia Qt SDK – the new way to build powerful native apps for Symbian^3, Maemo, and in the future, MeeGo
  2. Web developers: Nokia Web Runtime Plug-Ins, including Adobe Flash Lite 4.0
How to Enter

The App Submission Period is the period beginning on Sept 21st, 2010 at 12:01AM Eastern Time, and ending at 5:00PM Eastern Time on Friday, January 28th, 2011. 

STEP 1: Develop your app for the N8
STEP 2: Register as an Ovi Publisher at http://publish.ovi.com
STEP 3: Publish your app to the Ovi Store for the N8 in English for the USA and/or Canada.
STEP 4: During the App Submission Period, complete and submit the Contest Registration Form.
STEP 5: During the App Submission Period, complete and submit the App Submission Form for each App being entered in the contest. 

More info: http://www.callingallinnovators.com/10m/

Thursday, June 10, 2010

Installing Qt Mobility Final Libraries on Windows 7

By following this article, you should be ready to develop Qt Mobility applications on Windows.

Note: This is only for Qt for Windows installation. If you want to develop Qt applications for Symbian on Windows, click here.
  1. Install Qt SDK 4.6.3 + Qt Creator 1.3.1 for Windows.
  2. Install Strawberry Perl for Windows (~ 32 MB). The reason why Perl is needed is covered in the later in this article.
  3. Download Qt Mobility library sources.
  4. Unpack Qt Mobility source distribution into a drive, e.g. C:\. This will create C:\qtmobility\qt-mobility-opensource-src-1.0.0
  5. Launch Qt Command Prompt.
    IMPORTANT: You cannot use regular Command Prompt!
  6. Set the PATH to Strawberry Perl : (do not skip this!)


    set PATH=%PATH%;C:\strawberry\perl\bin
    
  7. Go to your Qt Mobility source folder and run configure:


    cd \qt-mobility-opensource-src-1.0.0
    configure
    
    This will configure Qt Mobility build with default target directory: C:\QtMobility

  8. Build Qt Mobility:


    mingw32-make
    mingw32-make install
  9. Add C:\QtMobility\lib folder (the target folder) to your PATH environment variable (more on this below).
  10. To add Qt Mobility documentation in Qt Creator: Go to Tools -> Options -> Help -> Add. Then browse C:\QtMobility/doc/qch/qtmobility.qch
Now you're ready to develop with Qt Mobility on Windows. Check out Qt Mobility Quickstart App for an example.



Setting Environment Variables

In order to use Qt Mobility some environment variables need to be extended to locate the libraries, which are placed in the lib directory of the install path.

On Windows: PATH should be extended to include: C:\%TARGET_DIR%\lib

On my setup this folder is: C:\QtMobility\lib



PATH can be extended through Start -> Settings -> Control Panel -> System -> Advanced -> Environment variables. Under System variables, select "PATH", click "Edit..." and append your Qt Mobility lib folder.

Reboot your system to apply your changes to system environment variables.

You're now ready to develop Qt Mobility applications in Windows. :-)

See also:

Friday, June 4, 2010

Installing Qt SDK 4.6.2 on Ubuntu/Linux

Meego mobile development with Qt and C++ programming language
Qt is used for cross-platform desktop and mobile development for Symbian S60, Maemo (N900), Meego, Windows, Linux, and Mac OS X using C++ programming language.

To install the latest Qt SDK 4.6.2 on Ubuntu/Linux, follow these steps. For this example I'm using Ubuntu 10.04 Lucid Lynx.
  1. Download the Qt Development Environment 2010.02. Install the
  2. Install additional development libraries:

    sudo apt-get install libglib2.0-dev libSM-dev libxrender-dev libfontconfig1-dev libxext-dev libgl1-mesa-dev libglu-dev
You're now ready to develop cross-platform Qt applications.

Thursday, May 27, 2010

25 Most Useful Nokia N900 Mobile Apps

Nokia N900 powered by Maemo 5 has great useful mobile applications.

1. Pidgin protocols plugin for Conversations and Contacts

AIM, Facebook, GaduGadu, Groupwise, ICQ, MSN, QQ, Sametime & Yahoo

A plugin for configuring accounts supported by libpurple, the same library Pidgin uses. The plugin adds support for the following protocols: AIM, Facebook Chat, GaduGadu, ICQ, MSN, QQ, Sametime, and Yahoo.
Warning: Do NOT use the Facebook Chat feature. Use Pidgin with XMPP or use the new built-in Facebook chat feature of N900 firmware version PR 1.2.

2. Conboy

Conboy is a note taking application.

It is designed to be easy to use - yet powerful. Conboy can read and write the Tomboy file format to be compatible with Tomboy on Linux, Mac and Windows.

 3. MaStory


Blogging from your hands. MaStory allows you to blog from your Maemo device. Right now it supports Wordpress, Blogger, Livejournal and Drupal. You can write posts in offline mode and edit posts already published. It interacts with photo services like Flickr and Picasa. And more features for blogging from your hands. URL: http://maemo-wordpy.garage.maemo.org

4. Pidgin

Dedicated chat application for Nokia N900.

5. gPodder Podcast Downloader

Subscribe and download audio podcasts.

6. Hermes

Update your contacts with their Facebook profile photos.

7. DocsToGo Viewer Edition

View Office files (trial version).

8. Mauku

Update your status on microblogging sites like Twitter. witter (below) has more functionality for Twitter.

9. Pixelpipe Media Gateway for Nokia Share

Upload photos and media files to Facebook and other social networks and publishing services.

10. witter

Best Twitter client for N900.

11. TuneWiki Lyrics Widget

Show lyrics on desktop while playing music.

12. TuneWiki SMP for Maemo

Play music while showing lyrics, and other features.

13. Xournal

A better app to draw notes than Sketch, but for notes I still prefer Conboy.

14. Countdown Home Widget

Track deadlines.

15. Call Blocker for Maemo 5

Block unwanted calls.

See also Call Blocker for Maemo 5 article.

Call Blocker talk.maemo.org thread.

Alternative: PyCallBlocker, which requires rootsh and maemo-python-device-env.

16. zip

Compress files with ZIP using Command Line Interface (CLI).

17. Unzip Plugin for File Manager

Extract ZIP files from File Manager.

18. PyGTKEditor

Edit and run Python scripts.

19. fbreader

Read mobile books and CHMs.

20. kchmviewer

Read CHM format books, a good alternative to fbreader.

21. Flashlight

Use the bright N900 camera LED as flashlight in the dark.

To use: Slide open the camera cover, then turn on Flashlight applet from the status area.

22. grr

Read your Google Reader RSS feeds using a fast and user friendly Maemo UI.

23. fMMS

Send and receive MMS messages.

24. Extra Decoders

Enable N900 to play all sorts of movie and video formats.

25. icedtea6 JDK

Run Java Standard Edition (Java SE) applications.


Let me know your favorite N900 / Maemo 5 apps!

Tuesday, March 30, 2010

How to Set Qt Application Icon and Title in Symbian S60

Set Symbian S60 Application Title/Caption:
  1. Alter project.loc file as necessary. Backup as project.loc.manual for future use (or if overwritten).
  2. In Qt Creator, go to Projects panel. Remove QMake from Build Steps.
  3. You can run QMake manually. Afterwards, replace the project.loc file with the one you backed up.
Set Symbian S60 Application Icon (in Launcher and in Task Manager):
  1. Create icon using Inkscape or Adobe Illustrator. If using Adobe Illustrator, export directly to SVG-Tiny. Otherwise, export to SVG (Basic) format.
  2. You need to convert SVG to SVG-Tiny format. Go to <S60 SDK>\S60tools\svg2svgt\installer and run the installer (SVG2SVGTConverter.exe) using the following settings:
    - Compatibility: Windows XP Service Pack 3
    - Run as administrator
    Use the installed SVGT Tool to convert your SVG to SVG-Tiny format. Refer to this Forum Nokia Wiki article for more information.
  3. Add the following to your project.pro : (make sure to use the SVG-Tiny file)
    ICON = project-icon.svg
After changing your application icon, you may need to restart the phone to clear the icon cache so the updated icon will be shown. This problem happens at least in Nokia E71.

For detailed Symbian development resource, check out Developing Software for Symbian OS 2nd Edition (Symbian Press).

Update: Starting from Qt 4.7.2 (which is "currently unusable" for Symbian applications, since Ovi Store doesn't yet accept Qt 4.7 apps), QTBUG-13917 provides a better way:
If developer specifies "CONFIG += localize_deployment" in .pro file, the generated .loc and .pkg will now use translatable strings from .ts files defined in TRANSLATIONS. The .ts files must have an underscore and Qt language code at the end of the filename body to be compatible with deployment localization. E.g. myapp_en.ts.
Running lupdate will generate these entries into .ts files:
  • Application short caption
  • Application long caption
  • Package name
  • Smart installer package name

Debugging on Symbian S60 Nokia device with Qt Creator

Qt Creator 1.3 and later provides support for Symbian S60 development (especially Qt apps, of course).

In addition to building for WINSCW (Symbian S60 Emulator) and GCCE (Symbian ARM target), Qt Creator also provides support for running and debugging Qt applications right on the Symbian S60 / Nokia device.

To debug/run Qt apps on Symbian S60 device:
  1. Setup the Qt for Symbian development environment properly.
  2. Install App TRK on your Nokia / Symbian S60 device.
  3. Run App TRK and if configure it as USB. (Qt Creator currently only supports USB)
  4. Connect your Nokia device to your computer. (make sure Nokia Ovi Suite / PC Suite is running)
  5. Configure Qt Creator project to build using GCCE.
  6. Configure Qt Creator project to run using "Symbian device".
  7. Run/Debug your app from Qt Creator!

Troubleshooting


You may get stuck with the message "Waiting for App TRK to start on COMxx" during Run/Debug from Qt Creator:


The cause is because Qt Creator up to version 1.3.1 doesn't work well with high port numbers. This should be resolved in Qt Creator 1.3.2, but in the meantime there is a workaround:

  1. Go to System -> Advanced Properties -> Device Manager.
  2. Expand Ports, and double-click your Nokia device to bring the Properties dialog.
  3. Click Port Settings tab. Click Advanced. And set the port to something to (COM1 to COM4 if possible).
  4. Click OK on all dialogs.
  5. Now disconnect and reconnect your Nokia/Symbian device. And you should be good to go.
For more information about Qt C++ development, check out C++ GUI Programming with Qt 4 (2nd Edition).

To learn Symbian C++ development, I recommend Porting to the Symbian Platform: Open Mobile Development in C/C++ (Symbian Press).

References:

Installing Qt Mobility 1.0.0-beta1 on Symbian S60 SDK

Qt Mobility SDK installation has been improved a lot since the previous Technology Preview.

Be aware that previous Qt Mobility installation will likely conflict with the new Qt Mobility library. I also had this problem, then gave up and reinstall my Symbian S60 SDK. :-P So, if you try and not succeed, before you begin, clean your system from:
  • Qt Mobility
  • Qt for Symbian
  • Symbian S60 SDK
  • Make sure to cleanly delete the directories of the above
You can leave ADT / Carbide.c++ and Qt Creator installed.

Then reinstall Qt for Symbian development environment: (detailed instructions here)
  1. Reinstall Symbian S60 SDK.
  2. Reinstall Open C/C++ Plugin for Symbian S60 SDK.
  3. Reinstall Qt for Symbian.
Unlike previous Qt Mobility Tech Preview, Qt Mobility for Symbian 1.0.0-beta1 is now in a separate distribution. You don't need to download the regular Qt Mobility distribution if you just want to develop for Symbian.

Now you can unpack Qt Mobility for Symbian distribution to a folder and install it:
  1. Download Qt Mobility for Symbian here. The distribution file is named like this: qt-mobility-symbian-*.zip. Unpack it to a folder.
  2. Install to Symbian SDK. Installing the mobility libraries to your Symbian SDK happens by extracting the 'qt-mobility-1.0.0-beta1-libraries<S60SDK>.zip' file to your Symbian SDK.
  3. Install Qt Mobility to Qt SDK. Copy the mobility.prf file to your QtDIR/mkspecs/features directory
  4. Optional: Install to Nokia/Symbian S60 device. Install qt-mobility-1.0.0-beta1.sis to your device using Bluetooth, USB, or Nokia Ovi Suite / PC Suite.
Run Qt Creator and you should be able to build your Qt Mobility app with the new Qt Mobility for Symbian Beta.

To learn more about Symbian development, I recommend Porting to the Symbian Platform: Open Mobile Development in C/C++ (Symbian Press).

View Qt Mobility Documentation inside Qt Creator

Qt Mobility distribution (download here) provides both HTML documentation and also .qch documentation, which is accessible from Qt Creator.

You should make use of it, since it provides convenient Index, Contents, Bookmarks, and other Qt Help features.

To add Qt Mobility documentation to Qt Creator:
  1. In Qt Creator, go to Tools -> Options -> Help.
  2. Click Add button. Then browse to your unpack Qt Mobility distribution folder, go to doc folder and choose qtmobility.qch. Click OK to close the dialog box.
Click the Help pane (Ctrl+5). You should now be able to access Qt Mobility user guide & documentation right inside Qt Creator.

If you want to learn more about Qt development & programming, I highly recommend C++ GUI Programming with Qt 4 (2nd Edition).

Monday, March 29, 2010

Installing Qt 4.6.2 SDK on Maemo 5 and N900

Qt 4.6.2 has been released for Maemo 5 (Freemantle) and Nokia N900 device as part of PR 1.2 firmware update.

Installing Qt SDK on Maemo 5 SDK / Scratchbox


For developers, Qt 4.6.2 runtime can already be installed simply by upgrading the Scratchbox environment. Run the following commands in a Scratchbox terminal:
fakeroot apt-get update
fakeroot apt-get dist-upgrade
After installing Qt 4.6.2, you can install Qt 4.6.2 SDK by running:
fakeroot apt-get install libqt4-dev

Installing Qt 4.6.2 on Nokia N900


To install Qt 4.6.2 on the device itself, you have two options at the time of this writing. Either:
  • Wait for the official PR 1.2 firmware update (which contains Qt 4.6.2 built-in). Should be any day now.
  • Install Qt 4.6.2 from extras-devel repository
Warning: Please understand the risks associated with installing software from extras-devel repository to your Nokia N900.

Click here for Instructions for installing Qt (and Qt SDK) from extras-devel. These instructions should work for future versions of Qt as well. So you don't have to wait for Nokia to officially release a Qt / Qt SDK version for Maemo SDK or Nokia N900. The downside is there is a risk of problems.

For detailed resource on Qt, I recommend C++ GUI Programming with Qt 4 (2nd Edition).

Saturday, March 20, 2010

Setup Maemo/N900 Development on Ubuntu

To setup Maemo 5 (Nokia N900) Development Environment on your computer, here's what you need:
  • Linux operating system, preferably Debian or Ubuntu (I use Ubuntu 10.04 Lucid Lynx)
  • Plenty of hard drive space. The total environment is about 3.5 GB, and more if you install the Qt SDK. If you use the Debian packages you have to free that much space in the root partition.
  • Plenty of time and bandwidth.
Before installing Maemo 5 (Fremantle) SDK, you must prepare the environment by installing Xephy, and disabling VDSO.

Install Xephyr
sudo aptitude install -y -r xserver-xephyr
  
Disable VDSO

Scratchbox does not work when VDSO32 support is enabled in the host's kernel. We're working on making it possible, but at the moment there are some workarounds, which are presented here.
If your host has VDSO32 turned on you will get an error like this when trying to login to Scratchbox.
No directory, logging in with HOME=/
Inconsistency detected by ld.so: rtld.c: 1192: dl_main: Assertion `(void *) 
ph->p_vaddr == _rtld_local._dl_sysinfo_dso' failed!

x86-64 kernel

x86-64 Linux kernels starting from version 2.6.25 enable VDSO32 by default. To temporarily disable VDSO32 execute
sysctl abi.vsyscall32=0
On Linux kernel 2.6.24 <= you can disable VDSO32 by executing
sysctl vm.vdso_enabled=0
or
sysctl kernel.vdso=0
The current setting of VDSO32 can be verified by using sysctl. Only values 0 and 2 are compatible with Scratchbox. In our examples we use 0 (disable). 2 enables compat mode.
You can set all of these permanently by adding the following lines to /etc/sysctl.conf
vm.vdso_enabled = 0
abi.vsyscall32 = 0
kernel.vdso = 0
Save the file and run the command:
$ sudo sysctl -p
Please note the correct line depends on your Linux kernel version. When you execute sysctl -p you may get a warning about unknown keys. You can safely ignore those warnings as long as one of the 3 settings works.
WARNING : You should try setting these values by echoing them to the given locations before adding them to sysctl.conf to see if they cause any problems. For example, in some Ubuntu Gutsy installations, it has been observed that changing the VDSO settings will hang the system and thus making permanent changes in sysctl.conf may, in these cases, make your system unbootable.

Install Maemo 5 SDK

There are two ways to install Maemo 5 SDK:
  1. Automatic Installation (using downloader)
  2. Manual Installation (using apt-get)
Both Maemo 5 SDK Installation methods are described here

With Automatic installation, you just download a tiny Maemo 5 SDK installer provided by Nokia (there's also a pretty GUI one). Note that if your connection is flaky, chances are you can't resume and will have to start over.

My connection is very flaky so I used Manual Installation. Despite how it's called, it's not actually so manual.

Manual Maemo 5 SDK is included below for convenience. (Note: these instructions work as of March 2010)
On x86-32 Debian based systems:
  • You can add the following line into your host machine's /etc/apt/sources.list file.
deb http://scratchbox.org/debian/ maemo5-sdk main
  • Install the needed Scratchbox packages with root permission
$ sudo apt-get update
$ sudo apt-get install scratchbox-core scratchbox-libs scratchbox-devkit-qemu scratchbox-devkit-debian scratchbox-devkit-doctools scratchbox-devkit-perl scratchbox-toolchain-host-gcc scratchbox-toolchain-cs2007q3-glibc2.5-arm7 scratchbox-toolchain-cs2007q3-glibc2.5-i486  scratchbox-devkit-svn scratchbox-devkit-git scratchbox-devkit-apt-https

On x86-64 Debian based systems:
  • Download the Scratchbox packages from here.
  • Force the installation of the x86-32 packages with root permission as follows:
$ sudo dpkg -i --force-architecture scratchbox-core scratchbox-libs scratchbox-devkit-qemu scratchbox-devkit-debian scratchbox-devkit-doctools scratchbox-devkit-perl scratchbox-toolchain-host-gcc scratchbox-toolchain-cs2007q3-glibc2.5-arm7 scratchbox-toolchain-cs2007q3-glibc2.5-i486  scratchbox-devkit-svn scratchbox-devkit-git scratchbox-devkit-apt-https  

The Scratchbox packages will be unpacked to /scratchbox directory and the installation procedure will ask you some questions about the group and user accounts. Default group to Scratchbox is 'sbox'.
  • Users who will be using Scratchbox should be added using the following command with root permission:
$ sudo /scratchbox/sbin/sbox_adduser USER yes

It will automatically include the user to the Scratchbox group, create user directories under /scratchbox/users and mount several directories (/dev, /proc, /tmp) under the user directory.
  • Some of the Nokia applications shipped with the final SDK use a hard coded path for user home directory which presents a problem since the default username on the device differs from the username on the developer's machine. To make these applications work, it is required to create a home directory that matches the hard coded value. This needs to be done outside scratchbox using root privileges.
$ sudo ln -s /scratchbox/users/<username>/home/<username> /scratchbox/users/<username>/home/user


  • For the group membership to be effective in the current terminal session, run the following command:
$ newgrp sbox
Note: This command will change the existing group ID during the current login session to 'sbox'. If you do not want to change, simply logout and log back in for the group membership to be effective.


  • Log-in to Scratchbox.
$ /scratchbox/login


  • Configure the scratchbox x86 and armel targets as follows:
[sbox->:~]>sb-conf st FREMANTLE_X86 -c cs2007q3-glibc2.5-i486 -d perl:debian-etch:doctools:svn:git -t none
[sbox->:~]>sb-conf st FREMANTLE_ARMEL -c cs2007q3-glibc2.5-arm7 -d qemu:perl:debian-etch:doctools:svn:git -t qemu-arm-sb
  


  • Download the minimal rootstraps.
[sbox->:~]> wget http://repository.maemo.org/stable/5.0/armel/maemo-sdk-rootstrap_5.0_armel.tgz http://repository.maemo.org/stable/5.0/i386/maemo-sdk-rootstrap_5.0_i386.tgz
  


  • Switch to x86 target, install the devkits, etc and fakeroot into the target, install the minimal rootstrap and finally the Maemo development files.
[sbox->:~]> sb-conf se FREMANTLE_X86
[sbox-FREMANTLE_X86: ~] > sb-conf rs maemo-sdk-rootstrap_5.0_i386.tgz
  • Some users seem to have problems downloading all files with apt http pipelining enabled. If you want to make sure or you get download errors like "104 connection reset by peer" at the fakeroot steps below, then disable http pipelining with the next command:
[sbox-FREMANTLE_X86: ~] > echo 'Acquire::http::Pipeline-Depth "0";' >> /etc/apt/apt.conf.d/00maemo
  • either way, continue here:
[sbox-FREMANTLE_X86: ~] > sb-conf in -edFL
[sbox-FREMANTLE_X86: ~] > apt-get update
[sbox-FREMANTLE_X86: ~] > fakeroot apt-get install maemo-sdk-debug

The meta-package 'maemo-sdk-debug' installs all needed open source runtime, development and debug pakcages into the target. Use maemo-sdk-runtime if you want only runtime packages to be installed or user maemo-sdk-dev if you want only the runtime + development packages to be installed.
  • Accept the EULA from here to obtain the URL to access the Nokia binaries repository.
  • Add the URL thus obtained to the Scratchbox target's /etc/apt/sources.list and do the following:
[sbox-FREMANTLE_X86: ~] >apt-get update
[sbox-FREMANTLE_X86: ~] >fakeroot apt-get install nokia-binaries nokia-apps


  • In order to facilitate installing applications under /opt on the device, a symlink /opt has been created pointing to /home/opt. The SDK inherits this feature. Under Scratchbox, /opt points to /target/links/opt which in turn points to /targets/<target_name>/opt. Installing the rootstraps makes this point to /home/opt, which is not what we want, since we need /opt to be target specific. In order to resolve this situation,
[sbox-FREMANTLE_X86: ~] >rm /targets/FREMANTLE_X86/opt
[sbox-FREMANTLE_X86: ~] >mkdir /targets/FREMANTLE_X86/opt


  • Execute similar steps on the armel target too to set it up:
[sbox-FREMANTLE_X86: ~]> sb-conf se FREMANTLE_ARMEL
[sbox-FREMANTLE_ARMEL: ~] > sb-conf rs maemo-sdk-rootstrap_5.0_armel.tgz
  • again,the next command disables http pipelining, if you like:
[sbox-FREMANTLE_X86: ~] > echo 'Acquire::http::Pipeline-Depth "0";' >> /etc/apt/apt.conf.d/00maemo
  • pipelining disabled or not, here we go again...
[sbox-FREMANTLE_ARMEL: ~] > sb-conf in -edFL
[sbox-FREMANTLE_ARMEL: ~] > apt-get update
[sbox-FREMANTLE_ARMEL: ~] > fakeroot apt-get install maemo-sdk-debug


  • Add the same URL obtained above to access the Nokia binaries repository under /etc/apt/sources.list file of the Scratchbox armel target.
[sbox-FREMANTLE_ARMEL: ~] >apt-get update
[sbox-FREMANTLE_ARMEL: ~] >fakeroot apt-get install nokia-binaries nokia-apps


  • Create the /opt directory.
[sbox-FREMANTLE_ARMEL: ~] >rm /targets/FREMANTLE_ARMEL/opt
[sbox-FREMANTLE_ARMEL: ~] >mkdir /targets/FREMANTLE_ARMEL/opt

With this, you must now have both the targets setup and ready to use.

Start the Maemo SDK UI Framework
Before starting the UI framework, ensure that you have installed the following:
  • Xephyr X11 server on the host machine outside the Scratchbox environment
  • The SDK as described above
  • The Nokia proprietary binary packages
1. Now, run Xephyr outside the scratchbox environment:
$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb &

2. Login to Scratchbox X86 target
$ /scratchbox/login

Welcome to Scratchbox, the cross-compilation toolkit!

Use 'sb-menu' to change your compilation target.

See /scratchbox/doc/ for documentation.

[sbox-FREMANTLE_X86: ~]>
  

3. Set the DISPLAY variable to match the display setting given for the Xephyr server.
[sbox-FREMANTLE_X86: ~] >export DISPLAY=:2

4. Start the UI framework .
[sbox-FREMANTLE_X86: ~] >af-sb-init.sh start

5. You will now see the UI framework up and running on the Xephyr window.
6. You can shut down the UI framework as follows:
 [sbox-FREMANTLE_X86: ~] >af-sb-init.sh stop

Wednesday, March 17, 2010

Maemo 6 / MeeGo / Dui UI on N900


I'm very impressed with Zchydem's article on Nokia N900 and the new Maemo 6 (MeeGo) UI frameworks on top of Qt. They're called Direct UI and Orbit or what we're seeing now: Uiemo. (there seems to be a lot of confusion regarding what these mean, so do I) ;-)

Pretty cool stuff...!

UI Extensions for Mobile (Orbit) vs. Maemo 6 UI Framework - Zchydem's Blog

Now many of you readers will think that “Oh no… Now this guys is doing another Peek to XXX series of Uiemo”:) Don’t worry I won’t do that. I just don’t have time for doing such a large review at the moment. Instead I want to go through couple of things related on Uiemo. One interesting detail is that the following diagram from my previous post was not so far from the truth.

DirectUI vs. DirectUI

The only difference is that the underlying platform can be Symbian, Windows or Linux/Maemo. Yes, there is a support for Maemo also. Check Kypeli’s post from his blog where he built Uiemo for Maemo 5. Current version of Uiemo is not a cross platform though. It doesn’t support Mac (OS X) at the moment  which would be nice to have at some point.

So Nokia has released two different Qt based UI frameworks and they both run on Maemo also. I could say that this brings interesting thoughts into my mind. I also found couple of videos from youtube where Uiemo application is already running on N900.

Tuesday, March 16, 2010

Qt Python Programming on Nokia N900 (Maemo)




Actually I have written a thorough article on this, but Modest (Maemo/N900 email application) failed to send the article email and eventually I lost the article and I can't recover it. ****. :-(

Getting N900 Battery Level via Python & D-Bus

After experimenting with Python and Qt (PyQt) on the Nokia N900, I need to access some device capabilities.

The simplest is getting the battery level. I use D-Bus to access battery charge percentage level with Python. It's not Maemo specific, but a cross platform API that works on any Linux / FreeDesktop-compliant environment. So the code below should work on your Linux desktop too. I've tried with my Ubuntu 9.10 desktop but doesn't work, so I guess I should learn more about it.

Similar API is available through System Information API in Qt Mobility. But I'm not sure how to access Qt Mobility through Python at the moment.

#!/usr/bin/python
import dbus

bus = dbus.SystemBus()
hal_obj = bus.get_object('org.freedesktop.Hal',
  '/org/freedesktop/Hal/Manager')
hal = dbus.Interface(hal_obj,
  'org.freedesktop.Hal.Manager')
uids = hal.FindDeviceByCapability('battery')
dev_obj = bus.get_object('org.freedesktop.Hal', uids[0])

print 'battery percent', \
  dev_obj.GetProperty('battery.charge_level.percentage')

Monday, March 15, 2010

Exporting Nokia E71 (Symbian S60) GPS Landmarks to Google Maps

I've been migrating my data from my two-year-old Nokia E71 to the new Nokia N900. One of the data is GPS Landmarks aka POI (Points of Interest) aka Map Places.

Though I haven't yet found a way to import the landmarks to Nokia N900 (I'm not even sure if I can add a new Place in Ovi Maps!), but you can export Nokia/Symbian S60 landmarks to Google Maps. Which is good enough in the mean time since Nokia N900 runs Google Maps + Latitude beautifully (with some patience).

My steps to export Nokia E71 landmarks to Google Maps were:
  1. In Nokia E71, go to GPS -> Landmarks.
  2. Select all the landmarks (mark all) and Options -> Send. Send via Bluetooth or email so you can save the resulting file (Landmarks.lmx) on your computer.
  3. Download the excellent free GPS tool RouteConverter here.
  4. Run RouteConverter, open the Landmarks.lmx file and save it as Google Earth 5 Compressed (.kmz) file.
  5. Go to Google Maps. Click My Maps -> (your map) -> Edit -> Import. Then upload your Landmarks.kmz file and all landmarks are imported beautifully! :-)
As a programmer it should be doable to develop a tool which reads a LMX or KMZ/KML file and import the GPS Locations to the Nokia N900 Ovi Maps Places database. You up for a challenge? ;-)

Sunday, March 14, 2010

Jetty Java servlet container on Nokia N900


The powerhouse Nokia N900 plus Eclipse Jetty 7.0 Java EE server means... Another fun experiment!

Default Jetty configuration will run out of space due to usage of tiny /tmp folder. So I start Jetty with:
~/jetty-distribution-7.0.1.v20091125 $ java -Djava.io.tmpdir=/home/user/tmp -jar start.jar

And it runs! Very admirably!


A pretty advanced Comet demo runs very well, and demonstrates the N900's web browser support for Comet AJAX push!


I can also access the N900 Jetty web server from my laptop using Wifi and join the Comet Chat.

I can't use WebSocket chat since the N900 browser hasn't supported it yet, neither is Firefox for Maemo 1.0.

Jetty and the Sun Embedded Java SEJVM uses about 22 MB of memory, which is quite admirable. Equal to 9% of N900's total memory of 1 GB (256 MB RAM + 768 MB swap).

Nokia N900 Unlocked Phone/Mobile Computer with 3.5-Inch Touchscreen, QWERTY, 5 MP Camera, Maemo Browser, 32 GB--U.S. Version with Full Warranty

Excited? Get a Nokia N900 here!

Check out more Maemo/MeeGo/Nokia N900 resources at Maemo on Amazon and Nokia N900: Mobile Internet device.

Running FreeMind Swing/Java app under Nokia N900/Maemo


I really am curious how good N900 really is at running Java applications. By this I mean Java SE not J2ME (Mobile).

So I installed Sun Embedded Java 6 JVM for ARMv6. I'll detail the steps in a later post because currently I'm using N900 to compose this blog post, and I'm not used (yet) to writing complex articles using it.

I'm hoping I could run Eclipse IDE or NetBeans or GlassFish on N900/Maemo/MeeGo ;-) but I'll try a moderately complex app first: FreeMind mind map editor.

And here it is!

It works PERFECTLY! Save for the tiny buttons & UI (Thank God Nokia provided a stylus!)
BTW N900 has a builtin screenshot tool, just press Ctrl+Shift+P.

I admit this post isn't very Qt-ish.. But Qt and N900 should be close friends anyway. As for Java, I guess it doesn't hurt to demonstrate Maemo/N900's versatility. ;-)

The Nokia N900 Safety Guide

Since receiving my N900 Maemo-based device from Nokia (thanks Nokia!) yesterday (March 13, 2010) I haven't yet written anything about it. Which is probably unfair.

So... in general I'm very excited about this device. It's very new to me. I've used several different mobile phones (both Nokia and not) and my last mobile phone is a Nokia E71.

However, Maemo 5 in N900 is a really different gem than Symbian S60. It's as wonderful as it's different.

My first tip is: Update your N900 firmware immediately!

Updating N900 firmware/software is very easy. Connect to a Wifi network and it will search for updates, and can apply updates OTA (Over-The-Air). You don't need Nokia PC Suite or Nokia Software Updater to do this (under normal conditions).

Stock Nokia N900 firmware had a nasty bug that bricks your N900 after 17 times of crash-reboots. The workaround is simple: on next successfully boot, shutdown N900 using the power button and turn it back on again. The latest firmware solved this problem. (I'm now on firmware 3.2010.02-8)

I mentioned crashes, and yes my N900 crashed a lot. During my almost two days of use, the boot counter is 44 which means it has crash-rebooted about 14 times! Some people also experience N900 crashing but some say that their N900 is just fine. I hope the N900 team will continue improving the firmware so that there will be very minimal crashes.

Sunday, January 31, 2010

Twitter API client library for C++ and Qt framework

QTwitterClient is an API client library for the ubiquitous Twitter microblogging service written in C++ and using the Qt framework.

QTwitterClient is cross-platform and works on all platforms supported by Qt such as Windows, Linux, and Mac OS X, even mobile platforms like Symbian and Maemo.

Usage is very simple:
QTwitterClient *twitter = new QTwitterClient(this);
twitter->setLogin(login);
twitter->setPassword(password);

twitter->tweet("I feel really good today!");
QTwitterClient is free/open source software and licensed under LGPL 2.1 or later.

Check out QTwitterClient project page to get the source code. I will appreciate any feedback you have.

Update: Moved QTwitterClient project to Gitorious.

Pastebin API client library for C++ and Qt framework

During my pursuit of Qt Mobility Contest, I created several utility class libraries. The first is QPastebinClient, which as its name suggests, is an API client library for the popular Pastebin service written in C++ and using the Qt framework.

QPastebinClient is cross-platform and works on all platforms supported by Qt, even mobile platforms like Symbian and Maemo. Usage is very simple:
QPastebinClient *pastebin = new QPastebinClient(this);

connect(pastebin, SIGNAL(finished(QString)), this, SLOT(setPastebinUrl(QString)));
connect(pastebin, SIGNAL(failed(QString)), this, SLOT(showError(QString)));

pastebin->paste("Some worthy code");

QPastebinClient is free/open source software and licensed under LGPL 2.1 or later.

Check out QPastebinClient project page to get the sources. I will appreciate any feedback you have.

Update: Moved repository to Gitorious.

Friday, January 29, 2010

Troubleshooting Qt Mobility Messaging for Symbian

My issue is compiling a Qt Mobility Messaging app for the WINSCW is not working. Qt Contacts work fine.

It seems to complain about two header files (only): qmessageglobal.h and qmessagedatacomparator.h

Other Qt Mobility headers are properly in C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include

Error messages:

make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\WINSCW.make" MAKEFILE VERBOSE=-s
WARNING: Can't find following headers in System Include Path
<qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessagedatacomparator.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h> <qmessageglobal.h>
(Sys Inc Paths "\Qt\4.6.1-symbian\include\QtCore\" "\Qt\4.6.1-symbian\include\QtCore\tmp\" "\Qt\4.6.1-symbian\include\QtGui\" "\Qt\4.6.1-symbian\include\QtGui\tmp\" "\Qt\4.6.1-symbian\include\" "\Qt\4.6.1-symbian\include\tmp\" "\Users\ceefour\Documents\qtcontest\message-merge\" "\Users\ceefour\Documents\qtcontest\message-merge\tmp\" "\Qt\4.6.1-symbian\mkspecs\common\symbian\" "\Qt\4.6.1-symbian\mkspecs\common\symbian\tmp\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\sys\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\stdapis\stlport\" "\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include\variant")
Dependency list for "\Users\ceefour\Documents\qtcontest\message-merge\mainwizard.cpp" may be incomplete


Basically the errors boil down to :

the file 'qmessageglobal.h' cannot be opened

Solution

Make sure you've already added to the .pro file :

CONFIG += mobility
MOBILITY += messaging

You need to #include <qtmessaging.h> instead of individual qmessage* header files.

Then if it complains:

WARNING: Can't find following headers in System Include Path
<qtmessaging.h>
qtmessaging.h: No such file or directory

This means you have not configured Qt Mobility Messaging properly. (copying headers happened in "configure" stage, not "make")

Redo the configure, and check that you have qtmessaging.h in C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include

If it still doesn't show up, like in my case, there's a hack/workaround. Copy the following files manually from C:\QtMobility\src\messaging to C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include :
  • qtmessaging.h
  • qmessageglobal.h
  • qmessagedatacomparator.h
Assuming Qt Mobility Messaging was built successfully, at least in my case, my Qt Mobility Messaging app works fine.

Thursday, January 28, 2010

Qt Mobility for Symbian Problems & Solutions

This is mixed log of my troubleshooting attempts while developing using Qt Mobility for Symbian.
  1. Ensure WINSCW for Command Line
  2. Install Qt For Symbian
  3. Install Qt Mobility for Symbian
  4. Qt Mobility libraries:
  5. In C:\QtMobility\symbian\install_to_sdk\Qt_Mobility_tech_preview_libraries.zip
  6. Extract to C:\Symbian\9.4\S60_5th_Edition_SDK_v1.0_2
  7. Qt Mobility includes:
  8. Launch Qt for Symbian Command Prompt
  9. Make sure Perl is still in path (perl -v)

This seems wrong: "Rather than building the libraries it is also possible to deploy a prebuilt set of libraries. Under the c:\QtMobility\%DISTNAME%\symbian directory there contains Mobility_tech_preview_libraries.zip. Extract this into the SDK root directory to add the necessary libraries. If you have multiple SDKs then repeat this step for each of them."
because it only installs the binary lib files but not the header files, so we still need to at least "configure" Qt Mobility.
That should create "qcontact.h" etc. on C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\include
"make" is not needed
Rebuild debug helper -- masih error
How to Build & Run:
Build configuration: using Symbian, compiler: WINSCW
Run configuration: Symbian emulator

What is WINSCW ?
WINSCW is Symbian emulator. The WINSCW compiler builds Symbian programs that can be run or debugged on the S60 Emulator.
Symbian Emulator only accepts WINSCW built programs, it cannot run apps built using GCCE, ARM9E, ARMV6.
What is CodeWarrior?
It's the former, expensive IDE for Symbian. Now replaced by Carbide.c++ which is free.
What is GCCE?
From Forum Nokia Wiki
GCCE (GNU Compiler Collection for Embedded) is an ARM-based compiler used in Symbian OS 9. Before Symbian OS 9, GCC is used to compile for the target. It is intended for building third party applications. It cannot be used to compile the full operating system.
What is RVCT-ARMV6?
It's the proprietary compiler from ARM. It is needed to compile Qt (for now), and for debugging Symbian apps using Qt Creator.
RVCT vs GCCE: http://discussion.forum.nokia.com/forum/showthread.php?t=109299
To run using Emulator:
1. Shutdown the Emulator first (make sure it's not running)
2. Then run app

Error during installation of Qt_Mobility_tech_preview.sis to Emulator:
Certificate error. Contact the application supplier.

Error during Emulator (but ignorable):
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.
exe
Terminate batch job (Y/N)? n

Unhandled exception filter called from program C:\S60\devices\S60_3rd_FP2_SDK_v1
.1\epoc32\tools\make.exe
ExceptionCode = c0000005
ExceptionFlags = 0
ExceptionAddress = 416569
Access violation: write operation at address 428
Solution --> Set Emulator compatibility to Windows XP SP3

Error during make run:
C:\Qt\4.6.1-symbian\examples\animation\animatedtiles>make run
call /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/winscw/udeb/animatedtiles.exe
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: [run] Error -1073741819 (ignored)

I got this error during Clean:
make[2]: \S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW: No such file or directory
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\WINSCW\MESSAGE-MERGE_0XE6F7F146.WINSCW'. Stop.
make[1]: *** [CLEANMESSAGE-MERGE_0XE6F7F146] Error 2

I got this error during Build (Symbian Debug):
mwldsym2.exe: Invalid object 'main.o': unknown machine (0x457f)
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\WINSCW.make" FINAL CFG=UDEB VERBOSE=-s
Errors caused tool to abort.
make[2]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\message_merge.exe] Error 1
make[1]: *** [TARGETMESSAGE-MERGE_0XE6F7F146] Error 2
Solution --> http://discussion.forum.nokia.com/forum/showthread.php?t=105186
1) delete all *.o files manually (for some reason "clean project" is not enough)
2) rebuild.
In my case it helped. Problem arose because I created hole project on Linux ("normal" qt) and then copied files (including *.o) to windows machine to play with Carbide.

I got this error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
--> It means the file does not exist (the Build process fails)

Building Symbian Release + GCCE gives .. last words:
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" TARGET CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL BLD
make -s -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MESSAGE-MERGE_0XE6F7F146\GCCE\MESSAGE-MERGE_0XE6F7F146.GCCE" UREL
main.cpp
templatesdialog.cpp
templateeditdialog.cpp
mainwizard.cpp
messagemerger.cpp
moc_templatesdialog.cpp
moc_templateeditdialog.cpp
moc_mainwizard.cpp
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\GCCE.make" FINAL CFG=UREL VERBOSE=-s
make[1]: Entering directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
make -s -C \Users\ceefour\Documents\qtcontest\message-merge -f "MAKEFILE_0XE6F7F146.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Users\ceefour\Documents\qtcontest\message-merge\MAKEFILE_0XE6F7F146\GCCE TO_BLDINF=..\..\..\..\..\Users\ceefour\Documents\qtcontest\message-merge PLATFORM=GCCE CFG=UREL FINAL
make[1]: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/Users/ceefour/Documents/qtcontest/message-merge'
Exited with code 0.


Prepare the Emulator with Qt :
File -> Open. Install qt_demos.sis
Error: Request application access not granted.

Qt looks awful in E71
Solution --> I was using Dark Personal, switching to Grey Steel works fine.

Build successful (Debug WINSCW), but Error during Run
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\message-merge.exe...
The process could not be started!
Cause: Project name contains '-'. Output filename is message_merge.exe, but tried to run message-merge.exe. Seems like Symbian does not support dash in app names.
Solution: Either
Rename project using underscore "_" instead of dash "-", or
Run message_merge.exe manually

Trouble: App crashes when accessing Qt Mobility / Symbian features
Cause: SYMBIAN.CAPABILITY is not properly specified in the .pro file
See: http://discussion.forum.nokia.com/forum/showthread.php?t=158729
http://discussion.forum.nokia.com/forum/showthread.php?t=90428
After doing this, during installation, it shows dialog for ReadUserData and WriteUserData. So the capability is requested well.
But --> Problem persists! :-(

Trouble: Required application access not granted.
When installing samplephonebook.sis, E71 says "Required application access not granted."
See: http://mobile.antonypranata.com/2006/06/16/interpreting-signing-error-messages-in-s60-3rd-edition/
Hint: Check that your certificate can be used to sign all capabilities needed by your application. For example, if you use self-signed certificate, you can only sign basic set capabilities, i.e. NetworkServices, ReadUserData, WriteUserData, LocalServices and UserEnvironment. If your application requires one of the extended capabilities, for example SwEvent, you cannot sign it with self-signed certificate. In this case, apply for developer certificates from Symbian Signed.

Is Carbide.c++ needed?
If Qt Creator comes with the Nokia C/C++ compiler (WINSCW) then yes, you can ignore Carbide.c++ completely. Of if you don't plan to do any emulator builds ...

Compilation Error release-gcce
Doing make release-gcce on writemessage QtMobility example throws this error:

make -r -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\GCCE.make" FINAL CFG=UREL VERBOSE=-s

make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\ARMV5\LIB\QtMessaging_tp.dso', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\writemessage.exe'. Stop.

make[1]: *** [TARGETWRITEMESSAGE_0XE6E34AD4] Error 2

make[1]: Entering directory `C:/QtMobility/examples/writemessage'

make -s -C \QtMobility\examples\writemessage -f "MAKEFILE_0XE6E34AD4.MK" TO_ROOT=..\..\.. EPOCBLD=..\..\..\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\QtMobility\examples\writemessage\MAKEFILE_0XE6E34AD4\GCCE TO_BLDINF=..\..\..\QtMobility\examples\writemessage PLATFORM=GCCE CFG=UREL FINAL

make[1]: Leaving directory `C:/QtMobility/examples/writemessage'

C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\tools\make.exe: Leaving directory `C:/QtMobility/examples/writemessage'

Exited with code 0.



Running "make sis" also errors, which means the above build was unsuccessful, even though "exit code 0" :

C:\QtMobility\examples\writemessage>make sis
make -s -f Makefile ok_sis
Processing writemessage_release-gcce.pkg...
 Error : Cannot find file : /S60/devices/S60_3rd_FP2_SDK_v1.1/epoc32/release/gcce/urel/writemessage.exe

writemessage_release-gcce.pkg(28) : error: file I/O fault.
file I/O fault, cannot open writemessage_release-gcce_unsigned.sis.

SIS creation failed!
Solution --> Unpack the QtMobility for Symbian SDK binaries.

WINSCW Debug, Build Success, Error during Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code -1073741819
Solution --> Close already running Emulator.

Qt Mobility Contacts when accessing a QContact object crashes on E71, but runs well on emulator
Seems like something to do with "weird" contacts. On my E71, the first two contacts (Groups) are just fine.
I think my Contact LocalId 1460 is somewhat corrupted or has data that Qt Mobility Contacts Symbian cannot cope with. :-(

WINSCW Debug, Build Success, Error During Run:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 100
Solution --> Connect to a network, at least loopback. Or just try again.

How to know if WINSCW Debug Qt Mobility Contacts app is good:
Starting C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe...
Plugin paths: ("C:/Private/e6fe6e03", "C:/resource/qt/plugins", "C:/Private/e6fe6e03")
Looking for plugins in "C:/resource/qt/plugins/contacts" ("mobapicontactspluginsymbian.qtplugin")
Dynamic: found an engine plugin 0x3d9e3828 with name "symbian"
Found engines: ("symbian[]")
Found actions: ()
C:\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\winscw\udeb\contactsgo.exe exited with code 0

Qt Mobility Contact doesn't run at all on E71, but runs well on emulator
This runs:
    QList<QContactLocalId> contactIds = cm.contacts();
This doesn't:
    QContactFilter filter;
    QList<QContactLocalId> contactIds = cm.contacts(filter);

Can't build Qt Contacts app WINSCW Debug:
make[2]: *** No rule to make target `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\QtContacts.lib', needed by `\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\WINSCW\udeb\messagemerge.exe'. Stop.
make[1]: *** [TARGETMESSAGE-MERGE_0XEA138C70] Error 2
But --> QtContacts_tp.lib exists !!!
Cause --> Mismatch between Qt Mobility binaries on S60 SDK and the Qt Mobility header files.
Solution -->  Make sure use the exact same Qt Mobility version installed in the S60 SDK and the header files used for development.