Wednesday, January 20, 2010

Why Maemo is a powerful platform? Because of native applications!

I have been thinking what is the major difference of Maemo compared to many other platforms, and I think it is that it offers native Linux for developers. Instead of living in the limitations of javascript, Maemo enables you to do much more and enables you to use the full computing power available from this little computer. I feel that the train went already for Java, I was in the middle of the previous Java-bubble that pretty much exploded in around year 2000 depression. Been there, experience it first hand. Needless to say I don't believe in Java or .NET or similar hypes anymore. The future is for mixed offering including both native and high level environments. And that is what Maemo exactly is today, you can use both high level languages _and_ more importantly low level languages.

Coding native applications can be tricky for newbie developers, but the possibilities are vast compared to running just for example javascript on top of some runtime or some proprietary environment with proprietary closed APIs.

What helps nowadays more in Maemo is the Qt, it makes the development of native applications a magnitude easier and more efficient. Instead of tinkering a lot with the user interface, now you can build one even with Qt Creator / Qt Designer.

Qt for Maemo 5, that Antonio Aloisio and Kate Alhola among others made it possible with their long work of hildonizing Qt, is now available as beta now from the Qt-labs. This technology luckily became officially supported from the roots of community supported port and hopefully this will get now even greater audience than before and attract more Maemo developers and prospective Maemo developers than before.

While Gtk is available and Maemo 5 applications have been done with Gtk, I would recommend to use Qt in the new future projects. PeterMaemo is saying that Qt is "forward-compatible technology on Maemo for years to come...", I want to believe in that because the most wise thing to do is now stick with Qt for years to come to have best possible backwards compatibility for UI applications.

Recently there have been interesting development on native iPhone apps which utilize the power of the CPU (which would not be possible with some runtime without the CPU of the device being a supercomputer), like X-plane flight simulator, a controller for RC aircraft that streams video to the device and uses augmented reality to make a game on top of the cake, Voice Band where one can sing notes in a sequencer which translates them to notes and plays back with instruments so one can do convincing sounding compositions on the road without any musical instruments other than one's voice etc.

I would be eager to see this kind of apps to emerge on Maemo. Maemo 5 has OpenGL ES 2.0 support, Qt, and a native application development environment. I think that is very cool, and one can do really creative and innovative things with it. If somebody will do X-plane quality simulator for N900, I will certainly even willing to pay for it. Same goes for Voice Band, I would eager to use it when I am not front of my iMac which is stationary in the corner of our living room - you know, you can't really control when and how you compose, the ideas just pop in the head by itself in uncontrolled manner and they are gone (at least happens in my case) if they are not right away utilized. And I would like also augmented reality apps for the Maemo. Maemo has great camera and it is the most open phone out there, so I would think it would be the ideal place to hack this kind of things. And what's more, there is even TV-out on the Nokia N900, I was thinking that one could connect data glasses to the TV out potentially and the image from camera and some computation could be used as augmented reality - not just in someday in the future, but right now today on Maemo 5! If you have some great idea, now it is a good time for pursuing it. Just remember to use Qt as UI toolkit and it has a good chance to survive also the future incarnations of the platform (you may need to do modifications to places where you use the lower layer, but if you do it wisely and in portable manner, you might not be so unlucky with future generation of Maemo and the Maemo devices).

A long time ago I was doing a loudspeaker box design program with Qt (actually that was before I even joined Maemo). The project unfortunately almost died. However, Kate found one day a backup from one hard drive and she uploaded the code to our home gforge. Luckily it worked out of the box with Qt 4.5.x on Today's Ubuntu and possibly will also work with Qt 4.6. And luckily enough, the UI was actually designed with Qt-designer, so basically it is easily replaceable, and I can possibly produce a Maemo-version. Loudspeaker box design program may be niche, but since the current availability of them for other platforms than Windows is poor, it could be possibly cool to make this application a reality. It currently calculates correctly just closed box and the vented box calculation is broken. I will look if I can make it work with the vented boxes as well and then it could become somewhat useful compared to otherwise nothing available. It will not have all the features of e.g. WinISD initially, but it is cross platform and will run on Mac, Linux and Maemo, so that should be something. The cool thing about Qt is that you don't need any high level language that would potentially cripple the features and performance to achieve cross platform compatibility (the calculation algorithm takes some time even on desktop machine, so it would be possibly too heavy for some Java app or similar). I think I will give it a try because it turned out that I will need this little software myself right now, so do it yourself is the best help yourself. It will be free GPL software.

I hope many people get inspired with the vast possibilities of the great Maemo platform and start making really cool things that utilize the CPU and GPU of Maemo device fully. Anybody can for example write a simple calculator app with some high level language, or maybe like somebody wrote the silly "I am rich -app" for iPhone, even entirely on QML, but when there are dozens of little calculator apps and silly apps which have no usefulness after 1 minutes of trying, it starts to be no point to be yet another on the sea of many. My recommendation: find something that does not already exist, get yourself an inspiration, aim for superhigh quality, and just go for it! Maemo is cool, but it is even cooler with your app, and your audience will love your creation!

9 comments:

Unknown said...

hi, thank you for this very good post! I started to use Qt for desktop applications a year ago and I really like this great framework. The possibility to facilitate Qt for development on a mobile device is the number 1 reason for me to get into Maemo - actually I am waiting for my N900 to arrive... A point which IMHO is often overlooked: Qt is much more than a GUI framework - it comes with many other nice and useful features and classes. Therefore chances are high that porting the non-GUI-code of an app to a Maemo device is not more than copying code files....

Anonymous said...

IMHO: I still think that Java is a better language to develop on mobile phones (excluding games).

I wonder that maemo is going to bring officially java for the device-development.

ajf said...

Interesting article. IDaniel: the N900 is not considered a mobile phone, it is a pocket computer with phone capabilities, that is why Maemo is a better platform for developing.

Anonymous said...

I'd like to see the box design app ported to the N900, especially if you get vented boxes working. It's a royal pain as a Linux user having to resort to windows to use WinISD or BassBoxPro to design boxes.

igagis said...

Hi, I have not seen the Voice Band app for iPhone, but you can check out my app for maemo which is called Theremin. It is available for N900 but it is in extras-devel so far because of some problem with promoting. Its a misucal instrument app. Now I regret I didn't choose Qt when I started developing it, but used GTKmm. Now, porting to Qt would take too much efforts and time which I don't have.

Ian Monroe said...

Of course Symbian will also have a well-supported Qt port. :)

The unique thing about Maemo IMO is how with technologies like GStreamer and Telepathy let you can extend the built-in applications. Eg there isn't a Skype application, you just use the Phone app.

@iDaniel supporting android apps to bring in the "long-tail" niche apps wouldn't be a bad idea. But overall, Java is just one API too many for Maemo.

Unknown said...

I agree that a low level language like C++ and Objective-C is a huge edge for a mobile device as a development plattform.
But it is my ceterum censeo that a sytem - and ever more so a mobile device - will always be cripled as long as there is X-Windows in the stack. It will be unstable and performance will be bogged down (reflected in battery life and build size).

Unknown said...

There is no big difference between X and rendering to framebuffer as all graphics is rendered with HW accelerated GL anyway. Not having X would not solve anything really or make the graphics drivers magically much faster. Also for battery consumption, I don't think X plays any major role. Framebuffer or X, whatever, when all computing anyway goes to computing polygon transformations and textures with GPU.

Unknown said...

And what it comes to build size: it does not have any effect to battery consumption and as everything is optified (to the large 32 GB storage space of N900), it does not make difference as long as it fits to the flash space (where the rootfs relies currently). I think the image size difference is quite minor unless we would be talking about very limited devices what the Maemo devices (N900) today are not.

I think those who have Mac running both Linux and MacOSX and use for example X-plane flight simulator either side, can't see any siginificant difference between the speed of the two platforms despite the MacOSX does not use X with the same sim.