Mittwoch, 15. Oktober 2025
Dzzee 1.9.0 for N800/N810/N900/N9/Leste
Samstag, 19. April 2014
My N9 apps and games now self-hosted and on openrepos.net
Here's a list of my N9 apps that you can now get for free ("deb download" is as of posting this, for new versions visit the webpage or openrepos.net):
- Billboard Standby Screen (web page, deb download, openrepos.net)
- Volume+ As Camera Button (web page, deb download, openrepos.net)
- Headset Camera Button (web page, deb download, openrepos.net)
- Personal Web Server (web page, deb download, openrepos.net)
- Mustr (web page, deb download, openrepos.net)
- gPodder (web page, deb download, openrepos.net)
- qw The Game (web page, openrepos.net)
- Tennix! Redux Demo (web page, deb download, openrepos.net)
- Petals (web page, deb download, openrepos.net)
- Brain Party (web page, openrepos.net)
- Numpty Physics (web page, openrepos.net)
- Plonk (web page, openrepos.net)
- chro.mono (web page, deb download, openrepos.net)
A list of all my apps on OpenRepos.net is also available.
Please note that unless otherwise noted, do not copy the .deb files and distribute them yourself, please always link to the project webpage (the page, not the file) or the openrepos.net page - this makes sure users can always download the latest version and from a known-good source (always be careful when downloading and installing .debs from random webpages). For end users who want to stay up to date and install the packages comfortably, the Warehouse client for OpenRepos.net is recommended.
For some of these apps (not games) that are not open source yet, I plan to clean up and publish the source at some point in the future, so interested developers can have a look, add features and/or port it to new platforms.
Donnerstag, 16. Mai 2013
Behind the Scenes: Headset Camera app for the N9
If you want to integrate such features into your own app, the code for querying the headset buttons is readily available in the gPodder source tree (src/gpodder/qmlui/helper.py):
import dbus
class MediaButtonsHandler(QtCore.QObject):
def __init__(self):
QtCore.QObject.__init__(self)
headset_path = '/org/freedesktop/Hal/devices/computer_logicaldev_input_0'
headset_path2 = '/org/freedesktop/Hal/devices/computer_logicaldev_input'
system_bus = dbus.SystemBus()
system_bus.add_signal_receiver(self.handle_button, 'Condition',
'org.freedesktop.Hal.Device', None, headset_path)
system_bus.add_signal_receiver(self.handle_button, 'Condition',
'org.freedesktop.Hal.Device', None, headset_path2)
def handle_button(self, signal, button):
if signal == 'ButtonPressed':
if button in ('play-cd', 'phone'):
self.playPressed.emit()
elif button == 'pause-cd':
self.pausePressed.emit()
elif button == 'previous-song':
self.previousPressed.emit()
elif button == 'next-song':
self.nextPressed.emit()
playPressed = QtCore.Signal()
pausePressed = QtCore.Signal()
previousPressed = QtCore.Signal()
nextPressed = QtCore.Signal()
MediaButtonsHandler is already a QObject subclass, so you can easily expose an instance of this class to your QDeclarativeView rootContext() and connect to the signals in QML (such a "headset button handler" might actually be a good candidate for inclusion into nemo-qml-plugins in Sailfish OS and Nemo Mobile?). As it's really just using the Python D-Bus bindings to get property changes from Hal devices, the code above should be easy (read: trivial) to port from Python to Qt/C++. Be aware that you need to connect to both .../computer_logicaldev_input_0 and .../computer_logicaldev_input, which can both exist if you have a cable headset and a Bluetooth headset connected at the same time.You can get the Headset Camera App for the N9 in Nokia Store now, there is also a video on YouTube showing the app. Or start integrating headset button features into your own app or scripts by adapting the code above. One use case that comes to mind is using the previous/next buttons on a Bluetooth headset to control a photo slideshow on the N9 connected to TV-Out. Enjoy :)
Dienstag, 14. Mai 2013
HTML5 Web Apps on Mobile Devices
This might also be a good time to check off XmlHttpRequest on your BB card, even if none of the following games use it - you might want to use it in your applications or game for things such as server-side stored high scores.
As far as Maemo and MeeGo is concerned, you might want to try out some of these games (especially the WebGL variant of One Whale Trip) in Fennec (aka Mobile Firefox - get it for: N900, N950/N9, Nemo Mobile).
Color Lines: This one simply uses Canvas2D, and works nicely on all mobile browsers that I tested - Maemo, MeeGo, Android, WP7.5, BB Playbook, iOS. Comes in at about 650 lines of rather well-documented JavaScript, and could easily be ported to use QML as a renderer if need be (it would be good to have a QML Plug-In that provides a JavaScript context + (a subset of) the Canvas2D API - without using WebKit (cross that off, too), that is). Also, the N900's stock browser has performance problems rendering this, while on the same device in Fennec it's quite playable.
Circle1D: This is a straight Python-to-JavaScript port of a lame 2D "Physics" Engine. It's kept very (read: very, very) simple, and collision detection could be done in a nicer way, but the inefficiency of it provides a nice benchmark for comparing JavaScript engine performance (I'm sure you can find "engine performance" on your bingo card as well) on mobile devices. The N900's default browser can't handle it at all, but Fennec can at least render/simulate it, albeit slowly.
One Whale Trip: This game actually started out as a Python game for PyWeek last September, which was also ported to the N950/N9, but as a test for trying out WebGL, I decided to port it from Python/PyGame to JavaScript/Canvas2D and then to WebGL (the Python version also contains two renderers - a "blitting" one using PyGame surfaces, and an OpenGL one using OpenGL [ES 2 on mobile]). The Canvas2D version works again in all modern mobile browsers (same as above), the WebGL only works on browsers supporting WebGL, for example Fennec/Firefox on both the N900 (even though very slowly) and not in any of the stock browsers (even not the one on the N9). As WebGL is "roughly" the same as OpenGL ES 2.x, one could imagine sharing at least shader programs for a possible C++-or-JavaScript cross-platform application.
So yeah, for smaller applications and/or games, HTML5 is definitely an option. In Firefox OS, your HTML5 web app will - also with WebGL - work and integrate nicely as "native" app. If you also want to create "native" applications (maybe after finishing the HTML5 version), consider encapsulating your JavaScript code so that you can re-use it in QML code, or (in case of WebGL apps), at least design the rendering part of your application in such a way that the code/architecture and shader programs can be shared with a C++ port of your existing HTML5 app.
Another option that's worth considering: Writing a compatiblity application layer that can load (specially-crafted) WebGL subset applications and display them on a fullscreen SDL-(or Qt)-provided window. Applications written in this WebGL subset could then be deployed on the web as HTML5 application or "natively" running on top of a JavaScript engine only. I'd call that "webglenv", and no, I haven't written it yet.
Sonntag, 12. Mai 2013
Petals for Harmattan - A pure Qt4/Qt5 JS/QML puzzle game
![]() |
| Petals: A puzzle game written in pure JavaScript and QML |
Writing pure QML applications has the advantage of easing porting to Qt 5. While QtQuick 1.1 still exists on Qt 5 (and is the only QML option at the moment if you are also targetting iOS), QtQuick 2.0 is usually the better choice for performance reasons.
In my case, the changes necessary to port from QtQuick 1.1 to QtQuick 2.0 were:
- Change "import QtQuick 1.1" to "import QtQuick 2.0" (sed(1) helps here)
- Instead of assigning a JavaScript function to a property to create a dynamic property binding (item.someprop = function() { return otheritem.otherprop * 3.0; }), this function has to be wrapped in a call to Qt.binding() in Qt 5 (see "Creating Property Bindings from JavaScript" in the Qt 5 docs)
- Instead of using SQL Local Storage directly as in QtQuick 1.1, use QtQuick.LocalStorage 2.0, which you can still do in your .js files - use ".import" as described in this blog post
- In your C++ launcher (in case you need one), QApplication becomes QGuiApplication, and QDeclarativeView becomes QQuickView
- Use "QT += quick qml" instead of "QT += declarative" in your qmake project file
Mittwoch, 8. Mai 2013
Upcoming: Billboard 1.0.9 for Nokia N9
- Fixed MeeCast icon (in 1.0.8, you can already use <<{meecast-icon-src}>>)
- New formatter that allows you to nest {} expressions used for adding dynamic content
- Optional image dithering (using # after the filename) for better colors in low power mode
If you are looking for additional ways to tweak and enhance your Billboard-on-N9 experience, have a look at billboard-scripts, a growing collection of Shell and Python scripts that provide even more ways of customizing your standby screen.
If you haven't purchased Billboard from Nokia Store yet, you can get the current version now for your N9, and get the upgrade to 1.0.9 as soon as it's available. If you are already a happy user, watch your application updates in the next few days, and get the new version.
Dienstag, 13. November 2012
The quick way to USB tethering via SSH on your N9
- Enable developer mode on your device
- Connect your device to your computer via USB
- Select "SDK mode" when asked for the USB connection type
- Use the SDK connection utility, and select USB connection
- Note the password displayed in the "Connectivity Details" screen
- On your computer, use "ssh -D 9898 developer@192.168.2.15"
- Accept the host key question, and enter the password from step 5
- You should be greeted by a Busybox prompt "/home/developer $" - leave that open in the terminal window in the background
- At this point, a SOCKS proxy server is running on port 9898, and you can use it in any applications supporting a SOCKS proxy (there are even utilities like socksify(1) (Debian package: dante-client) that make generic network applications work through a SOCKS proxy)
- To use it in Firefox, go to Edit - Preferences - Advanced - Network - Settings..., then choose "Manual proxy configuration" and set "SOCKS Host:" to localhost and port to 9898 (be sure to disable the proxy again when you want to browse via a normal Wi-Fi/Ethernet connection)
Host n9proxy
HostName 192.168.2.15
User developer
DynamicForward 9898
After that, a "ssh n9proxy" (possibly followed by the developer password) is all you need to set up the proxy. This method is arguably easier (and definitely safer) than using the Wi-Fi hotspot, and instead of using up battery on your N9, it gets charged via the USB port while you are using it.
By the way: You will have to manually connect your N9 to your mobile internet connection, this won't happen automatically.
Samstag, 28. Juli 2012
gPodder 3.2.0 (and 3.2.1) released for Harmattan
Highlights of 3.2.0 are an improved UI (e.g. cover art in the "All episodes" list) and Flattr integration, so you can now support podcast authors via micropayments (you'll find the Flattr button below the shownotes for podcasts that publish a Flattr URL).
The gory details about what went wrong with packaging this time can be found in the 3.2.1 blog post, and bug 1627 contains - special thanks to Reiner for providing the necessary debugging info needed to get this sorted out (again, I was not experiencing this bug myself).
If your 3.2.0 update worked out fine (the bug didn't affect all users), this is not for you - just enjoy 3.2.0, and install 3.2.1 when it comes out :)
Samstag, 26. Mai 2012
Billboard now available in Nokia Store
The app is called "Billboard", and its goal is to provide useful information on the low-power-mode screen of the N9 in a way that "normal" users can use it. It also tries to be very lightweight on resources, and smart about updates so that updates are only made when needed, which saves battery power.
Billboard website: http://thp.io/2012/billboard/
Nokia Store link: http://store.ovi.com/content/279408
The currently-released version on Nokia Store is version 1.0.0, and an update (version 1.0.1) with some fixes to allow co-operation with MeeCast, fLPMC and other applications has been uploaded today and is currently waiting in the Ovi QA queue.
There's also a support thread on TMO in case you need help or have suggestions.
Mittwoch, 28. März 2012
gPodder 3.1.0 in Apps For MeeGo Staging and Nokia Store
A new version of gPodder has been released, and the package is already available from Nokia Store here, and waiting for your QA feedback in Apps For MeeGo here. This works for both N950 and N9 users. To get access to Apps For MeeGo, go to http://apps.formeego.org/ on your device, and install the Client from there.
The new gPodder version comes with some improvements for Harmattan users:
- Redesigned artwork for the main window and episode list
- Better arrangement of podcast list and cover artwork there
- New preferences menu, containing gpodder.net and orientation settings
- New empty state UI for first-time users
- Various other changes to be more in line with the UX Guidelines
- Context menu item to delete episodes without downloading them
I hope you enjoy this new release - please report any issues you find or ideas you have at http://bugs.gpodder.org/ - and don't forget to QA the package in Apps For MeeGo.
Samstag, 24. März 2012
Brain Party for the N950 and N9
Download here: brainparty_0.5.91-3_armel.deb (39 MB)
Source here: brainparty_0.5.91-3.dsc / brainparty_0.5.91-3.tar.gz
The game itself has been written by Hudzilla Games, who also published the game for the iPhone and XBox 360 - if you like the game, you can support them by buying the game from there. This port is based on the open source version of the game.
Samstag, 14. Januar 2012
The N9 week: Hack-A-N9, gotoVienna, Camerra, gPodder
While the first week back in Vienna after the holidays was sad for a Maemoista walking around in the city (aka Admazing (sic) Everyday), there was also enough time to release gPodder 3.0.3 (already in AFM - thanks, testers!), catch up with local Maemoistas at the Hack-A-N9 and work on gotoVienna, the Camerra hack and even more post-3.0.3 gPodder goodness. But one after the other..
gotoVienna is a public transport live ticker app by kelvan. In the days after meeting at the Hack-A-N9, we implemented a nice line number input UI that makes it easy to quickly get live information for a given line - the code is in Git, and as a side-product, merlin1991 has implemented a stdeb/distutils extension to inject an Aegis manifest and create the digsigsums file - check it out if you want to build Python packages for Harmattan without Scratchbox/the SDK.
Next up is the Camerra hack, a quick'n'dirty "app" that monitors the Volume+ hardware button and (when the Camera UI is in the foreground) simulates a click on the shutter button, effectively making the Volume+ work as a shutter button. Ideal for all your self-portraying needs! It's called a hack, because it uses the likes of xprop and xresponse directly - a "proper" implementation would use QmSystem, XTest and Xlib from C/C++, just in case someone feels like spending time on rewriting something that Works For Me ;) There's a support thread on t.m.c, the Python and PySide powered code is available on Github, and the package is available on the website and (hopefully soon) also on Apps For MeeGo.
As for the post-3.0.3 gPodder goodness: Episode list filters (bug 1527) are currently being developed, a first patch is already written, and screenshot 1 and screenshot 2 show you how it currently looks. Don't forget to report any bugs and feature requests over at bugs.gpodder.org - don't keep them for yourself! :p
And now for the next two weeks for something completely different (i.e. Uni semester wrap-ups, exams, lab interviews and lab exercises).. ;) Enjoy the newly released stuff!
Montag, 9. Januar 2012
gPodder 3.0.3 for Harmattan
Anyway, the new king of Harmattan repos is Apps For MeeGo, as everyone knows, and so start your Community QA engines and review gPodder 3.0.3 in Apps For MeeGo Testing. If you don't have the Apps For MeeGo Client on your N950 or N9, click here to download the enabler. It has also been uploaded to Ovi Publish, but if and when it appears there is anyone's guess. Don't hold your breath and switch to Apps For MeeGo for downloading (and publishing if you do!) your open source Harmattan apps.
The 3.0.3 version of gPodder packs some long overdue improvements to the Harmattan QML UI (for example, the toolbar has been cleaned up, an about box has been added and you can now check for new episodes from the toolbar) with more to come in the future. In general, 3.0.3 should provide you with a more Harmattan-esque user experience. You can always get your wishes and problems heard at the gPodder bug tracker - make use of it! :)
Sonntag, 4. Dezember 2011
This weekend's releases: Tap Tap N950, qw.py and the IP Address Widget
Montag, 21. November 2011
Plonk (formerly known as Mong) for Harmattan
Dienstag, 15. November 2011
Hack Tuesday: Tap Tap N950 and Calenderr
First up is Tap Tap N950, a very basic QML prototype of what could become a funny DDR/TTR clone - no code published yet, it still need some more polishing (and touch area support for multi-touch, plus scoring is also missing).
The other one is a simple hack to make the Calendar app icon always show today's date (day-of-month). The existence of calendar icons for each day (1-31) in the theme on the device lets me suspect that this feature was either planned and then abandoned or that it will come built-in in some future firmware. For now, you can grab this lame shell script and execute it (ideally with "nohup" - see the comment inside - also needs customizations if you changed your root password, and you definitely need developer mode for now) to have an auto-updating calendar icon until the next reboot. Watch the accompanying video for a quick demo. There's now also a forum thread for support and discussion. Sometimes I really wish cron was pre-installed on Harmattan..
Bonus exercise: Store your app's .desktop file in /home/user/.local/, generate the icon dynamically via code and update the .desktop file for some icon overlay action / new items notification ;)
Nokia Austria N9 Photoshooting Campaign
As you might have heard in the video above, you can go to http://nokia.at/n9style to find all the details about the contest. While you are at it, if you have a N9, try out my free apps in Nokia Store. Two more are currently waiting for QA: Tennix and Plonk - yep, that's right: our Pong-style game formerly known as Mong (developed in collaboration with Cornelius Hald and Tim Samoff) is coming to Harmattan - with swipe locking - you can grab the source already now from our Git repository. And your favourite 2D tennis game is also celebrating a comeback, so be prepared for more casual gaming quality time :)
Mittwoch, 2. November 2011
Why I love the N9 and things I didn't know about WP7
As the outer shell is basically the same (or in other words: all hardware features that they fitted into the N9's form factor could just as well be fitted into the Lumia 800 form factor), these things are software limitations that are in WP7 right now (doesn't mean that these will stay in the future). Most basic things that the N9 can do (and the WP7 devices can't yet) can even be done by the N900 and Symbian devices. It's also written from a pure end user experience perspective - I've talked about SDK availability earlier.
- The Lumia 800 has a camera hardware button - the N9 does not. I would really like the N9 to have a hardware camera button (what's the progress on getting one of the volume keys to act as shutter button?)
- If you turn off the Lumia 800, wake-up alarms won't work - they do work on the N9, i.e. with an alarm set and the N9 turned off, the N9 will turn itself on and ring the alarm
- If you receive a call from a number that's not on your phone book, you can't directly add it to your phone book - you have to copy the number, then go to the contacts, create a new contact and paste the number there - on the N9, there's a button for this - and it even allows you to "Add new" or "Merge"
- The N9 has NFC - the Lumia 800 does not (WP7 does not support NFC at the moment)
- The N9 has TV-out - the Lumia 800 does not (on the other hand, some Symbian devices have HDMI out in addition to TV-out - that would have been nice for the N9 as well ;)
- The N9 can be used in USB Mass Storage Mode - the Lumia 800 can not
- The N9 shows the time (+missed calls/new mails/SMS) on its low-power standby screen (like the N8 and E7) thanks to the AMOLED screen - the Lumia 800 has the same screen technology, but (due to WP7 not supporting it, as I've been told) there's no low-power standby screen (the lock screen when the device is reactivated does have more information, though)
- You can send and receive files via Bluetooth on the N9 - I've been told that you can't do this with the Lumia 800 (Update: According to Allan, there is an app for transferring contacts from an old phone to the new one - no info about arbitrary files yet)
- The N9's marvelous virtual keyboard (an open source project, by the way) has very good tactile feedback - on WP7, the only feedback you can get is an audible one (although a long-time WP7 user told me that the virtual keyboard there is very good, even without tactile feedback)
- Swipe. It really makes a difference
It also shows that when a vendor controls both hardware and software, they might be able to put together a more interesting HW/SW mix compared to the situation where someone else controls the software. And it really lets me look forward to the Next Billion(tm) and QML there. But for now, let's enjoy the N9 and create some cool apps (and games) for it, like a FM Radio GUI for javispedro's fmrx app or gPodder 3 (coming soon) maybe?
Donnerstag, 20. Oktober 2011
Games (and their backstory) for your N9, N900 and N950
Gaberln (N950, N9 (+Symbian): Ovi Store, N900: Maemo Talk)
This game is a simple soccer ball juggling game - developed using QML, in collaboration with Tim Samoff, who did the great artwork (and who also did the Mong artwork) - we still have to add some more features, and Tim has already done the graphics for a special hacky sack mode, let's hope we get around to finishing it at some point :)
qw The Game (N950, N9 (+Symbian): Ovi Store, N900: .deb on request, @qwgame)
This game is similar to Qix, but has its own style, and the enemies are a bit different from Qix - but it basically is an area filling game. The reason why the game is called "qw" is because it started out as a small Python hack (qw.py) during the Super Gamedev Weekend 2010, and qw were the first two letters on my keyboard. A nicer explanation is that it can be spelt (in German) like Cuvée and a reference to the different blend of different photos (flowers, places, animals) that you have to play through. The photos have been done by vogelvau, the menu structure is done using QML and the gameplay itself uses a QGraphicsView-based drawing engine.
That Rabbit Game (N950, N9, N900 (+Symbian): Ovi Store, @thatrabbitgame)
This is my first game to be published in Ovi Store; it's a "inverse duck hunt"-style game where you control the flying rabbit head, and have to get yourself shot by approaching the crosshairs and keeping steady. Flapping the wings is done by touching (the strength depends on the duration of the touch) and moving left and right is done using the accelerometer. The initial version of this game was developed in Java as an Android game for an OpenGL ES course at our University (PDF). The game for Maemo, MeeGo and Symbian is a complete rewrite in C++/Qt with the artwork taken from the original game, which I did myself in Inkscape. There is also a webOS port using OpenGL ES.
Tennix (N900, N8x0: Extras)
This one is quite old, and is actually based on a really, really old codebase of a school project from 2003. In 2007, I decided to port it to SDL for Desktop Linux, Mac OS X and Windows, and since SDL is available on Maemo as well, I then ported it to Maemo 4 in January 2008. A special "2009 Edition" was created for the N900, with updated controls and a Python-based AI enemy (using the CPython API / libpython). What about Harmattan you ask? Well..
Some of these games are just free and closed source for now. I do, however, definitely plan to release them as open source in the future. The problem is having used non-free artwork in the early prototyping stages (i.e. getting "something" visible in the engine) before replacing them with my own artwork, so I'll have to make sure to remove these things from the repository history before publishing the source. Also, code cleanups need to be done ;)
Download and enjoy the games - I'd be grateful if you could leave some feedback (either via Ovi Store, Maemo Talk, comments here or e-mail).
gPodder 2.20 for Maemo 4 and Maemo 5, 2.950.14 for Harmattan
For all N950/N9 users: The Harmattan build of the gPodder QML UI is available for free in Ovi Store. The version available in Ovi Store is a development snapshot of the "tres" branch, where we will have an official release soon. I'm using it on a daily basis, and it's very stable and usable - new features will be added as we go along, so check out the new gPodder! You can grab the source code from the harmattan branch in our Git repository.





