Mittwoch, 29. Dezember 2010

qw 0.1 is now available for Maemo 5

My second new game this year - qw - has been released for Maemo 5 today. Version 0.1 (a tech demo, not a proper final release) gives you a sneak peek on the gameplay with 9 different levels and four-player support (if you hook up an external USB keyboard or get together really close for some N900 keyboard multiplayer action). The gameplay is simple: You need to control your player cursor (either via touchscreen gestures or keyboard) and enclose areas of the game with lines in order to fill them with a colored image. Beware of the enemies, as they will destroy your lines and split your points in half. If you enclose one or more small enemies, your points are multiplied.

A .deb for Maemo 5 is available from the qw homepage and packages for Symbian are also available. Try it out and send some feedback :) Enjoy!

Mittwoch, 22. Dezember 2010

That Rabbit Game 1.2 is now available for Maemo 5

I've blogged about it already, and even showed some code during an Interview at Nokia World, but there have not been any releases of That Rabbit Game so far, mostly due to Ovi Store QA not understanding what Optification means and requesting that the version number of the application appears somewhere in the app UI (after 15 days in QA). I've made the requested changes, added scoring and pushed new releases (of version 1.2) for both Symbian and Maemo 5 to Ovi QA.

Until the game gets published on Ovi, I decided to release packages on the website so you can download and enjoy the game right away - and maybe even provide some feedback. Please don't mirror/redistribute the packages, but link directly to the website. Download That Rabbit Game for Maemo 5!

Controls are via accelerometer (to tilt the rabbit head left/right) and via touchscreen (tap to flap your wings - the longer you tap, the harder the wings flap). The goal is to lose 10 coins in 90 seconds by getting shot 10 times. After that, the next goal is to lose the 10 coins in as little time as possible. Yes, you control the rabbit head, and not the crosshairs.

Updates and changes will be announced via @thatrabbitgame on Twitter, so follow it and tell your friends. Enjoy!

Sonntag, 19. Dezember 2010

gPodder 2.11 in Extras-Testing fixes YouTube downloads

A new version of gPodder is out. If you are having problems with YouTube downloads recently, this release is for you. There are also some other minor changes and fixes (detailed changelog for gPodder 2.11). No translation updates or major new features, though. Grab the new package from Extras-Testing. The usual disclaimers apply. If you can, please test and vote for gPodder 2.11-1 in Extras-Testing, so other users can enjoy the fixes as soon as possible.

As always, a new Diablo package has also been uploaded and should be available in Diablo Extras for all N8x0 users soon.

Mittwoch, 15. Dezember 2010

The Qt promise and what Maemo 5 needs

(tl;dr: Nokia should provide updated Qt packages as official SSU for Maemo 5.) Before I start, here are some facts (correct me if I'm wrong):

  • The N900 runs the Maemo 5 operating system
  • Maemo 5 received some updates (the latest one being PR1.3)
  • We don't really expect PR1.4 to come out any time soon, if at all
  • The MeeGo Handset images from meego.com are inferior to Maemo 5 and not a replacement (and never will be)
  • The MeeGo operating system on the first Nokia MeeGo handset will have a proprietary UX and proprietary apps, and won't be available for the N900

In summary, it means: We are stuck with Maemo 5 on the N900. And that is a good thing! Lots of useful apps, a helpful community (if you subtract the trolls) and a polished OS. Sure, there's room for improvement, and lots of open bugs that should be fixed, but that's another issue (which will ideally be solved by open sourcing closed components with bugs that Nokia isn't interested in fixing anymore and by the Community SSU). This one is about Qt.

Two days ago, an e-mail was sent to maemo-community, proposing a "community service pack", which basically is a big pile of workarounds. Read my response for some initial thoughts.

When Qt arrived on Maemo 5, the promise was two-fold:

  • Write your apps in Qt and you're ready for MeeGo (apps written now will run on the platform released in the future)
  • Maemo 5 gets Qt support, so MeeGo apps will run on the N900 (apps written in the future will run on the platform released now)

It turns out that the first one will probably hold true (surely with QML, maybe even with QWidget), while the second one is doubtful, as Maemo 5 has only got Qt 4.7.0 through the official channels (PR1.3), with no real official update in sight. If you use QML, use QtQuickCompat as workaround ("Qt Qml plugin that reregisters all “Qt 4.7” types in the “QtQuick 1.0” namespace … useful if you’re forced to stay with 4.7.0 (e.g. on N900), but still want to use the new namespace.").

There is also a real bug (yes, a bug!) in Qt 4.7.0 on the N900, and the fix isn't released as update - it's a new package: libqt4-bearer-hotfix ("This is a hotfix for the broken ICD package in Qt 4.7.0. It can be removed once Qt mobility 1.1 is released."). Now, the proposed "Community service pack" would combine all these fixes into a single dependendable metapackage (yes, a new one). It becomes the "Unbreak my Qt" feature that every app developer has to depend on and specify in the packaging.

This is wrong! No developer targetting MeeGo who has not heard about Maemo 5 will go through all those ugly workarounds and spend a week fixing things up for Maemo 5 just so that the app works. Now imagine what would happen if the first MeeGo device also introduces such kludges once it falls out of its support life cycle. Or what if the problems on Symbian are similar, and developers have to special-case things there. Not only for Symbian^3, but also for S60v5? Fragmentation.

How to avoid fragmentation? Simple: Provide Qt as a "feature" with a quicker release cycle that can be updated every month if need be. Provide Qt updates also for operating systems that don't get updates for the OS anymore. Here's my proposal:

  • Provide SSU updates for Maemo 5 for Qt (and Qt Mobility) through official channels (that's the important part here!)
  • A new Qt (and Qt Mobility) release should be available on all platforms (Maemo 5, S60v5, Symbian^3, MeeGo) at the same time through official (end-user approved) channels
  • Apps targetting stores and repositories (Maemo Extras, Ovi Store, MeeGo Apps/Downloads) should be able to depend on the latest Qt (and Qt Mobility) version

Without that, you'll get fragmentation similar to Android: The 1.5, 1.6, 2.1 versions are similar to Qt 4.6, Qt 4.7.0 and Qt 4.7.1 (for example). Again, you don't need to update the OS, just update the framework - through official channels!

Dienstag, 7. Dezember 2010

PySide/QML tutorials online, workshop next Sunday

To get myself accustomed to PySide UI development using Qt Quick (aka QML) and to check out what works already and what does not, I've experimented with creating some common elements that I'd use in an application (i.e. a QML version of gPodder - a blingy demo already exists) and decided to share my experiences and results as tutorials.

Here are all the tutorials in their current state:

Screenshots are available on Flickr:

I'd like to get some feedback on whether or not the tutorials worked for you and were helpful and what else you would like to see. You can try out all the examples on your N900 today! Just install python-pyside and python-qtmobility (for the last example) from Extras-Devel and copy the examples from the Wiki. The usual disclaimers for software in Extras-Devel apply.

In related news, there will be a PySide/QML workshop at the December meeting of the Python User Group Austria, so if you happen to be in or around Vienna on Sunday, 2010-12-12, stop by at the Metalab and meet fellow Pythonistas.

Samstag, 4. Dezember 2010

Hildon UI elements in QML

I've been playing with PySide and QML this week (more on that soon), but here's something that might be interesting to the Maemo community: Using the native Hildon look and feel of Maemo 5 in QML.
This QML demo uses the current theme graphics of Hildon and provides QML components that can be used just like their Hildon counterparts, but inside QML UIs. This is not a complete library, just a test of what could be possible in case anyone wants to step up and create and maintain a Hildon library of QML components. Here's a video:
The code for this demo is on Github - you can try it out on your N900 using qmlviewer.

Montag, 29. November 2010

gPodder 2.10 for Maemo 4 and Maemo 5 released

As promised last week, a new release of gPodder is out. The package for Maemo 5 is already in Extras-Testing, so test it and vote for it. The package for Maemo 4 has already been uploaded to the autobuilder and should be available shortly.

This new release brings yet another round of UI improvements, and it also incorporates the feedback that I got at the MeeGo Conference:

  • Expose "Pause subscription" in UI
  • Multi-delete in episode lists (Maemo bug 5182)
  • Setting for episode auto-delete on startup
  • Custom episode list model (faster loading)

You can find a detailed ChangeLog at gpodder.org/changelog/2.10.

If you are not yet a user of gPodder, why not take the opportunity to try it out? You could subscribe to the MeeGo Conference 2010 Video Podcast (Yahoo Pipe) and (re-)watch the sessions on your device. Of course, audio and video podcasts are supported as well, as are YouTube user channels and Soundcloud users.

Freitag, 26. November 2010

Maemo 5 app UIs: {The,A} big picture

Sooner or later it will be necessary to create a QML UI for gPodder if it is to integrate nicely with devices on which Qt is the "native" toolkit for third party apps. At the moment, the reusable UI elements that can be used with QML (Qt Components) have not yet been officially released (the Git repository is available on Gitorious, though), and there are no UI style guidelines for Harmattan out (yet?). I'm also not able to locate UI style guidelines for QML apps on Symbian^3, and there are only a few small sample QML apps out right now.

Let's look at what we have on Maemo 5 right now. Here's a simplified overview of the current Maemo 5 UI of gPodder:

You can also check out the full-size image (~ 3.5 MB).

The UI follows the Maemo 5 Style Guide where it makes sense and tries to come up with better solutions where the Style Guide does not have a definitive answer. I'd like to hear your opinion about the current UX of gPodder and how these concepts can be translated into a QML app that integrates nicely with "future" UIs (Harmattan, S^3). The new-style episode list that can be seen in this picture will be made available with the next release that will be out Really Soon Now™.

Donnerstag, 25. November 2010

Please test: MaePad 1.9, MaePadWeb 2.1, Trophae 6

Version 1.9 of MaePad is out, with a new translation into Catalan, updated Finnish (thanks to Marko Vertainen) and German translations, a "No items" indicator in empty checklists and full auto-rotation support (detailed changelog).

The File Transfers application seemingly does some weird things to "Open file" dialogs in other apps (not only MaePad, but reportedly also Xournal), so MaePad now conflicts with it until the problem is fixed (this means you can't have both "File Transfers" and "MaePad" installed at the same time). Test and vote for MaePad 1.9 in Extras-Testing!

Also new is MaePadWeb 2.1, which adds a missing dependency on python-simplejson. The app worked fine for me since the initial release, so I'm also promoting it to Testing now. Test and vote for MaePadWeb 2.1 in Extras-Testing!

And as a third release this week, I noticed that Trophae, the PS3 Trophy Viewer app, didn't get its newest release (6) uploaded to Fremantle Extras-Devel for two months, so I've re-uploaded it, and also put it up for testing. And even though the code is lame, it's now published in a Git repository if you want to hack on it. Test and vote for Trophae 6 in Extras-Testing!

A new release of your favourite podcatcher is coming in the next few days. There is still time to submit updated translations :)

Samstag, 20. November 2010

MeeGoConf 2010: Fun, QML, gPodder, Python

I've attended the MeeGo Conference 2010 in Dublin this week. Meeting people, playing werewolf or table tennis and discussing MeeGo Python are just some of the great things about this conference.

One of my burning questions for third-party app development ("QWidget? MeeGo Touch? QML? Which one of those?") was answered with "QML". I've played with QML before, and it's great, but right now, one has to work on a very low level (as in "design your own buttons") and without any UI style guidelines. Let's hope the Qt Components provide reusable UI parts there and that the style guidelines are published as soon as possible.

I've also got some gPodder feedback: Niels suggested subscription pausing and auto-deletion of episodes (both are already implemented and just need exposure as UI elements). Murray suggested a custom TreeModel implementation for the episode list, which I've started working on now. Mike suggested the often-requested multi-episode deletion feature, which is also something I plan for the next release.

On Wednesday, we had a Python BoF to discuss the state and future of MeeGo Python. I'm looking forward to using PySide for the QML UI of gPodder. A PySide/QML workshop is planned for the next PyUGAT meeting, so join in if you are in Vienna in early December.

Oh, and the IdeaPad that we got from Intel is great. Thanks a lot for that. Will come in handy for prototyping and testing Touch UI interfaces!

Hope to see you again in a future MeeGo event :)

Dienstag, 2. November 2010

MaePadWeb 2.0: Take your MaePad anywhere (even on a N8)

The companion app to MaePad that has been announced some days ago is now available in Extras-Devel for your N900, with some nifty features:

  • Fully edit the checklists in your database
  • Native Maemo 5 look and feel in the browser (title bar, toolbar, lists, ...)
  • Dynamic themeing based on current Maemo theme
  • Per-session password for some security (inspired by MAD Developer)
MaePadWeb in a web browser

This means that if you are using the NSeries theme, it looks like this, but if you are using Digital Nature, this is how it looks (and that should work for all themes). On your device, you will see a simple info window. Now, that's bringing the Maemo 5 UI to your Desktop computer's web browser. But does it work on mobile devices as well? Of course! Let me present you MaePadWeb running in the Symbian web browser on a N8-00:

MaePadWeb on a N8-00

If you think that this looks shopped, check out the video for further proof and to see the checklist editor view in action :)

This project brings together some great technologies: Python (for the backend) and HTML/CSS and JavaScript (using JQuery for convenience) for the frontend. Apart from the artwork, it does not depend on anything from Maemo 5/Hildon that isn't available in MeeGo already. In fact, Python with SQLite3 support is the only real dependency of this app on the backend side. With all the confusion on what to use for MeeGo Handset UIs (MeeGo Touch Framework, QWidget-based Qt, QWidget inside QGraphicsView, QML, Qt Components, ...), the HTML/CSS/JavaScript combo seems like a good cross-platform alternative (you still have to run the backend somewhere, but it can run on the same device, of course). All you need is a good browser/JS engine/rendering engine combo (Fennec/QtWebKit on MeeGo Handset, MicroB on Maemo). This also works on the N8x0 with MicroB :)

Donnerstag, 28. Oktober 2010

MaePadWeb - A Web UI for MaePad running on your N900

One of the annoyances with task lists on mobile devices is that there is no easy way to view or edit your task list on your computer as well (there are some web services that allow for these things, but you have to trust your data to these services, and not all these services have a full-featured Maemo client app, and they mostly need to synchronize data between different clients).

So, what about having a simple HTTP server that you can start on your N900 and access from your computer's web browser to view and edit your MaePad checklists? Here's a short video of how it works at the moment:

Here's a screenshot of how the checklist view looks right now:

The MaePadWeb application will be available soon. On a related note, MaePad 1.8 is out now with live search support for the memo list - check it out and test it/vote for it!

Montag, 25. Oktober 2010

SSH agent forwarding in Scratchbox

I usually have the Maemo SDK running inside a VM - either completely remote or on the same machine (so I can have a 32-bit minimal Debian install containing Scratchbox independent of the host system). I can then SSH into the development VM from my working machine using public key authentication and the SSH agent. I also have agent forwarding set up, so that I can SSH from the SDK machine directly to the N900 (to deploy binaries and .debs) or to some server requiring SSH access (e.g. drop.maemo.org) without having to generate lots of keys and distributing the key to all kinds of different machines.

Using -A (or ForwardAgent yes in .ssh/config) when SSHing into the SDK machine makes it possible to connect to other machines from it, utilizing your SSH key. This sadly does not work when starting scratchbox, because it opens a new environment, and the $SSH_AUTH_SOCK environment variable is lost. To fix this, I simply write the contents of this variable into a file accessible from Scratchbox and then export this variable in the Scratchbox login script. I usually also have a symlink in $HOME pointing to the SDK $HOME:

ln -s /scratchbox/users/$USER/home/$USER ~/sdk

With this in place, I can now edit the "normal" user's login script by adding the following line at the end of .bashrc:

echo $SSH_AUTH_SOCK >~/sdk/.ssh_auth_sock

Scratchbox has its own login script (also called .bashrc, but sitting in the Scratchbox home folder), so we edit this and add the following line:

export SSH_AUTH_SOCK=`cat .ssh_auth_sock`

After this, logout of Scratchbox, logout of the SSH session and then connect again with SSH forwarding:

ssh user@maemosdk -A
scratchbox
ssh-add -l

The last command should display the fingerprint of your SSH key. You can now connect to remote hosts from within your Scratchbox session while your SSH key still resides only on your local machine, loaded into the SSH agent.

Montag, 11. Oktober 2010

gPodder 2.9 for Maemo 5 in Testing

A new release of gPodder is out. Test it and vote! It has got some fine-tuning of the UI for Maemo 5 users that you will discover one by one. I just want to highlight two UI changes that should enhance the user experience, and compare them to what the previous version had.

The episode list

gPodder 2.8 introduced MAFW integration, and with it came the ability to save position and duration information for each episode. This was displayed in the episode action dialog, but not in the episode list. We now display the position and duration in the episode list, which allows you to quickly scan for an episode depending on its duration (or check how far you have come for a given episode). In the "All Episodes" list, we also display the podcast name for each episode so that it is clearer from which podcast an episode is coming (the content of the episode "Mini Book Reviews" is much more predictable if you know that it comes from "Python411").

Updating feeds

Previous versions of gPodder changed the "Check for updates" button into a combined progress indicator and cancel button. It was not really obvious to first-time users that you can cancel the feed update, and if you accidentally tapped the button twice, the feed update would be cancelled and you might be confused. gPodder 2.9 introduces a fancy new progress bar that appears (and even slides in and out thanks to hildon.AnimationActor) during the update and has a more obvious red cancel button. With the gained screen space (the progress bar is much bigger), we can also show more information about the update process, like the name of the updated podcast.

A detailed changelog can be found at http://gpodder.org/changelog/2.9. Of course, the Maemo 4 (N800, N810) package has also been updated, and is available from Diablo Extras right now.

Mittwoch, 6. Oktober 2010

Modifying the Maemo 5 task switcher and launcher

This will be the last post for this week, I promise ;) After playing around with the MeeGo Handset launcher and task switcher, I decided to have a look at how this could be implemented in Fremantle, because the big previews and the paginated launcher are easier to use in some cases (you can also checkout the contents of a window while scrolling by without having to activate it). hildon-desktop manages the task switcher and launcher, among other things. The results of two days of hacking are two patches:

What I'm missing right now and did not succeed in implementing straight away is the "snapping" of TidyFingerScroll to page boundaries, so that whenever a scroll operation is finished, it automatically scrolls to center the icon page (for the launcher) or a preview window (for the task switcher). Obligatory demo video (.debs and patches are linked from the threads above if you want to try it out yourself) here:

If you happen to have experience in Clutter, why not give it a try? I suppose you would just need to implement another scroll mode in TidyFingerScroll and then request this mode in hd-task-navigator.c and hd-launcher-page.c. Who's up for the challenge? :)

Random observation: Hidden in hd-task-navigator.c one can find a geeky gem:

  xthumb = ythumb = 0xB002E;

A new gPodder release should be ready next week. And now back to some Uni stuff :)

Dienstag, 5. Oktober 2010

Fast MeeGo Handset UX on a N900 (Video)

I've had the chance to play around a bit more with the MeeGo Handset UX on the N900 yesterday (1.1.80.0.20101001.1). Carsten provided experimental graphics drivers, which still crash at a few points, but for the first time provide acceptable performance in the UI. I also decided to build the gPodder MeeGo Touch Prototype UI against libmeegotouch. Unfortunately, there's no SDK yet, so I had to use zypper on the device (via SSH) to install libmeegotouch-devel, make and gcc-c++ and then take a long coffee break after entering qmake ; make. As it's using plain Qt, the TRG binary built from the Fremantle SDK worked fine on the device.

If you don't see the embedded video, click here: MeeGo Handset UX on a N900 (w/ TRG, gPodder UI test, HW-accelerated).

Montag, 4. Oktober 2010

Qt: Write once, #ifdef everywhere?

Despite what the title of this post might suggest, I really like Qt. But as a developer, I also know that "write once, run everywhere" isn't realistic without writing some special-cased platform-specific code. Qt does take care of many platform-specific things, and I think it's the closest you can get to "write once, run everywhere" right now.

This post should serve two purposes: To provide a real-world example of what needs to be done in the code for the app to work on both Maemo 5 and Symbian^3 (with example code), and to get suggestions on what parts I could rewrite in a more platform-agnostic manner with existing APIs (so please comment if you are in the know!).

Here's the story: In early September, I've rewritten my game "That Rabbit Game" to use QGraphicsView on the N900, and in the last weeks, I've ported it to Symbian^3. I use the macro Q_OS_SYMBIAN to check for Symbian and Q_WS_MAEMO_5 to check for Fremantle. Here's the current main menu on a N900 and N8 (different screen resolutions and aspect ratios):

Qt modules: In the qmake project file, I can use linux-g++-maemo5 to add Maemo-specific configuration, and symbian for Symbian-specific settings. I use D-Bus module on Maemo, but obviously not on Symbian, so my project file contains something like this:

linux-g++-maemo5 {
QT += dbus
}

This is nice, because I only have to maintain one project file, and the block structure is very readable (and I can even use different Qt submodules for each platform).

Screen orientation: Symbian has auto-rotation for Qt apps by default, and Maemo 5 has landscape-only mode by default. For my game, portrait mode does not make sense, so I have to request landscape-only on Symbian (similarly, if I want auto-rotation everywhere, I have to request it on Maemo 5 and do nothing in Symbian). For this specific case, I need some libs in Symbian, so I add this to the project file:

symbian {
LIBS += -lcone -leikcore -lavkon
}

I also need to add this to the top of my main source file:

#ifdef Q_OS_SYMBIAN
#include <AknAppUi.h>
#endif

And finally, I have to copy'n'paste a code block into my main() function before I create the first window:

#ifdef Q_OS_SYMBIAN
CAknAppUi* appUi = dynamic_cast<CAknAppUi*> (CEikonEnv::Static()->AppUi());
TRAPD(error,
if (appUi) {
// Lock application orientation into landscape
appUi->SetOrientationL(CAknAppUi::EAppUiOrientationLandscape);
}
);
#endif

It would be nice if Qt (or Qt Mobility?) has some generic API for this, where I just need to do something along the lines of QRotation::setMode(QRotation::LandscapeOnly); and let it take care of the platform-specific stuff.

Accelerated QGraphicsView: On Symbian^3, QGraphicsView is automatically accelerated via OpenVG (I think), but on Maemo 5, it can use OpenGL for this (but does not by default), so in the code where I create my QGraphicsView, I have to have this at the top:

#ifdef Q_WS_MAEMO_5
# include <QGLWidget>
#endif

And then somewhere down that file where I create the QGraphicsView, this code goes there:

#ifdef Q_WS_MAEMO_5
QGLWidget *glw = new QGLWidget(QGLFormat(QGL::DoubleBuffer));
view->setViewport(glw);
#endif

It's not that difficult, and is already cross-platform (on platforms where OpenGL is available), but maybe QGraphicsView can be OpenGL-accelerated on Maemo 5 by default. Maybe there is some non-obvious side effect that using an OpenGL viewport has that I'm not aware of, and that's why one has to do it manually.

Accelerometer readings: This might actually be a bug in Qt Mobility. For my game, I have to read the accelerometer's Y axis on Symbian, and its X axis on Maemo to determine the rotation for the same holding position of the device, so there's another platform-specific #ifdef there. Again, this will hopefully be fixed in a future release of Qt Mobility, and will most likely be fixed for MeeGo as well.

Task switcher: It's customary on Maemo to have a task switcher button in the upper left corner. There's no platform-agnostic way of going to the task switcher, so I needed to special-case it for Maemo 5, and have not bothered implementing it on Symbian^3 (suggestions welcome!). First, I need to include D-Bus headers for this (I've already mentioned how to request the D-Bus module in the qmake project file above) :

#if defined(Q_WS_MAEMO_5)
# include <QDBusConnection>
# include <QDBusMessage>
#endif

When I'm in the handler code where I need to do the actual task switching, I can utilize it to activate Maemo 5's task switcher:

#if defined(Q_WS_MAEMO_5)
QDBusConnection c = QDBusConnection::sessionBus();
QDBusMessage m = QDBusMessage::createSignal("/", "com.nokia.hildon_desktop", "exit_app_view");
c.send(m);
#endif

This is very much Maemo 5-specific, and will very likely not work on MeeGo Harmattan. Again, here it would be nice to have a cross-platform way of doing window management (in Qt or Qt Mobility?). I can imagine this being useful not only on handsets, but also on netbooks and tablets (from a MeeGo PoV). Again, trying to come up with pseudo-APIs here, QWindowManager::showTaskSwitcher(); could be a nice way to handle this in a cross-platform way, hiding platform-specific implementations. From what I've seen of MeeGo Touch, activating the task switcher there simply iconifies the window on the Desktop, so maybe if I would iconify my main window, it should activate the task switcher on Maemo 5 and Symbian. It does not work on Maemo 5 right now, though, and I haven't tested it on Symbian.

Screen resolution: This was (thanks to QGraphicsView) less of a problem than I thought it would be. Symbian^3 (or at least the N8) uses 640x360 as its resolution, and Maemo 5 uses 800x480. Maybe the MeeGo Harmattan device will use yet another resolution. I still configure my QGraphicsScene object manually via #ifdefs to get a good resolution, but the code could just measure the resolution and configure the scene as well. Here's what I use:

#if defined(Q_WS_MAEMO_5)
setSceneRect(0, 0, 800, 480);
#elif defined(Q_OS_SYMBIAN)
setSceneRect(0, 0, 640, 360);
#endif

I then use the sceneRect() of my scene to calculate a scale factor for all contents and call setScale() on all root items of the scene to scale the contents to the current screen size. You might have to take care of different aspect ratios on different devices, too - but it was unproblematic for my use case (the game) this time.

Dienstag, 28. September 2010

It's about time...

...displayed inside gPodder. Not only the total time of a podcast episode, but (thanks to the MAFW integration that has been added in 2.8) also the position that you stopped listening to, so you know how much time is remaining. There are several possibilities how to display the progress: A circle sector image, a "position/total" text display and a "remaining" text display. Right now, I opted for the "position/total" display (with "total" in cases where you haven't started listening to an episode). Here's how it looks in the current development version of gPodder:

If I remember correctly, the idea for this came up during the Barcelona Long Weekend and was suggested by Tuomas while we were discussing gPodder's UX. Back then gPodder did not store any kind of time-based length information in its database - only the file size in bytes, which isn't that helpful for listening purposes. But since then the work on gpodder.net and the desire to synchronize episode status information between different devices has put everything in place that's needed to detect the duration of episodes (it's even provided as <itunes:duration> (spec) in some RSS feeds) and with the MAFW integration to detect the current playback position when playback is stopped.

If you are using gPodder 2.8 and the built-in Media Player, gPodder already collects this information, so when the next release comes out, you will immediately have some useful data there. This should also help you in deciding which episode to pick on your commute.

What do you think of this feature? Is the current representation the best one, or would something else be more useful to you?

Montag, 20. September 2010

Please test: Maemopad+ 0.37, MaePad 1.7 and Trophae 3

It's time for another release round of some of my lesser-known apps. First up is something that will make all the proud N8x0 owners happy: Maemopad+ has seen its first new release in 7 months, fixing a crasher bug that happens when creating a new database. The new version, 0.37, is now available from the Extras repository. I also noticed that I forgot to promote the version from February to Extras (it was sitting in Extras-Devel all this time), so if you are running on Extras-only, you should now see the first Maemopad+ update since early October 2008 ;) In this case, you also get a new feature that you didn't have before: Full-text searching in the toolbar.

Next up is MaePad, Maemopad+'s Fremantle-ified descendant. Still fighting for its place in the Extras repository, MaePad has not entered Extras due to some unfortunate typo in the bugtracker link. Now that this one has been fixed, you will also get the aforementioned bugfix (from Maemopad+), an update to the Russian translation (by Serge Broslavsky) and two new translations: Simplified Chinese (by hyao) and Czech (by fri). If you are on Transifex, submit your translation for MaePad to be included in the next release! If you are into testing stuff, test MaePad 1.7 now!

Last but not least is Trophae (known in the app manager and app menu as "PS3 Trophy Viewer"), an app that simply shows your trophy progress for your PS3 games. There has been a change on the PS3 website recently, which broke the app, so this provided a nice opportunity to not only fix the bug, but also properly package it up for Extras-Testing - with a new icon, bugtracker link and all these things that lazy developers tend to forget in a hasty first release ;) Please also test Trophae in Extras-Testing if you have about 4 minutes to spare and a PSN ID to test.

Sonntag, 29. August 2010

Playing around with MeeGo Touch

While the MeeGo Touch Python Bindings are still not packaged and released, I though I'd give the C++ library a try and have a look through the class hierarchy. After getting the basic "Hello World" app running, I decided to create an application that can load the list of subscriptions from gPodder's SQLite database:

This view uses MContentItem, which already provides an icon and two lines of text - correctly styled and ready to go. Menu and toolbar items are MAction objects that can either appear everywhere or only at specific places (e.g. only in the toolbar). The great thing is that this all works on your Desktop in a normal window, so testing applications on your computer will be much easier with MeeGo Touch than it is with Hildon (which does not really run without its own hildon-desktop session in Xephyr).

The screenshot above is from the prototype written in C++, and shows how a gPodder MeeGo UI could look like. The MeeGo Touch UI of gPodder will be implemented in Python once the bindings are ready - the framework seems to be fun to work with so far. If you would like to play around with it yourself: MeeGo Touch is available from the MeeGo PPA of Ville M. Vainio if you are on Ubuntu and don't want to build it yourself.

gPodder 2.8 for Maemo 5: Notifications and MAFW integration

It's been some time since the last gPodder release, and I've been busy adding some nifty features to make the best use of the on-board facilities of Maemo 5. As already mentioned in a previous post, this new version comes with built-in notification support. After installation, you might have to re-start hildon-home (or your device) for the changes to become effective. That's what you will get when new episodes are found:

The other and more "invisible" change is that gPodder now listens to MAFW and also talks to it at times. MAFW is the backend of the Media Player application, and you profit in two ways from this integration:

  • The last playback position and duration of an episode are displayed in gPodder and synchronized to gpodder.net
  • Playback can be resumed even with the Media Player application

This means that users of the normal Media Player application will benefit from all the goodies that were previously only available in combination with Panucci. Combined with the new notifications, this makes for yet another great release with even better integration into the Maemo 5 environment.

gPodder 2.8 is now available from Extras-Testing, so please test, review and vote on the package.

Freitag, 20. August 2010

gPodder running in the MeeGo Handset UX for N900

Three days ago, a new MeeGo Handset UX image has been released for the N900. I wanted to try out gPodder on it to see how far I could come without any coding...

It was quite easy to get things going: Download the image, dd it to a MicroSD card, boot the kernel (detailed instructions) and set up USB networking. After that, I could ssh into the environment (the root password is meego) and have a look around.

Instead of using apt-cache and apt-get to search for and install packages, I utilized yum to search for and install PyGTK. Then, I used rsync to copy my Git checkout of gPodder to the device. There are two additional dependencies for gPodder that aren't yet available in the MeeGo repositories, namely feedparser and mygpoclient, so I just copied the Python modules from my Laptop into the src/ folder of the gPodder checkout. Then, just switch to the MeeGo user (su - meego), make sure that the DISPLAY variable is set (export DISPLAY=:0) and start gPodder from the source folder (with bin/gpodder - it automatically loads the modules from the right path) - gPodder says hello MeeGo.

The basic functions work, it's just that the Desktop UI isn't suited for mobile devices (the MeeGo compositor/decorator also has several problems, but that seems to be a more general problem). Python bindings for Hildon aren't (yet ?) available, so I could not test the Maemo 4 or Maemo 5 UIs, but I would like to do a proper Qt/MeeGo Touch-based UI for gPodder, anyway. Let's hope the PyMaemo or PySide teams are quick to release bindings and make them available in the MeeGo repositories, so Python developers can create usable UIs for MeeGo handsets :) Oh, and two MeeGo-Python facts: It comes pre-installed in the N900 image, and the version shipped is 2.6.

In short: Apart from the UI framework, everything is already in place (and working) for Python on MeeGo. With the recent release of Qt Mobility for PySide, let's hope that MeeGo Touch bindings are not that far away.

Montag, 16. August 2010

Desktop notification support in gPodder

Three days ago, Maemo bug 11130 was filed: It complains about gPodder stealing focus when it has finished checking for new episodes in the background. This is true, and I've been bitten by this annoyance several times already, so I decided to finally have a look into the SMS/IM/Phone-style notifications (the "yellow" bubble that merges into your task switcher after some time). Thankfully, Daniel Would (of Witter fame) has published his research results some months ago already, so getting up and running was easy from that point. Here are the results so far:

One problem that I still have not figured out how to fix (even after digging in the hildon-home source tree) is how to attach such a notification to the a given window (or application) instead of having it appear as separate "window" in the task switcher (see the second screenshot). Can somebody in the know give me a hint? On the other hand, the callback for clicking on the notification works fine already and opens the new episodes dialog.

A related change that also prevents gPodder from stealing focus was to replace the progress indicator dialog with a HildonBanner - it might not look so good without a progress bar, but it makes gPodder less intrusive when the user interacts with other applications.

Freitag, 30. Juli 2010

headphoned 1.9 for the N900 is now in Extras-Testing

The beloved Headphone Daemon, who usually sleeps in the darker corners of your N900 and makes sure that you do not embarrass yourself in front of other passengers or pedestrians with whatever kind of experimental music you happen to listen to when the headphones are accidentally unplugged (also known as public transport situations) got a small facelift (also known as code change).

A few changes that have accumulated over the last few months have now been packed up into the shiny new 1.9 release:

  • Support for libplayback / whitelisting (by Faheem Pervez)
  • Support for pausing Martin Grimme's MediaBox
  • Detect headphoned disconnect during active calls and send pause command after the hangup

The last one in this list might be of special interest to some of you who have complained about headphoned not working when the headphones are unplugged during a call. This won't happen now, as headphoned now monitors the call status via D-Bus and keeps track of active calls. When the headphones are unplugged while a call is active, the pause signal will not only be sent right away, but also a second time when the call gets disconnected. This work for all types of voice calls, and should work for video calls as well (untested).

During the summer holidays, I have had less time to do more development and releases, but things are starting to move slowly again - expect new releases of packages like gPodder and MaePad in the upcoming weeks. I'd also love to port gPodder to Harmattan and add a fancy new MeeGo Touch UI on top of it (in March I said that Maemo 6/MeeGo is for later this year - which might be very soon now), so you can all enjoy your favourite podcatcher with the usual native UI support. Let's hope that the Harmattan SDK and/or Harmattan developer images get released for the N900 soon (and then the Python bindings soon afterwards - the PyMaemo team was very fast in previous release cycles), so the community developers have enough time preparing their apps for the next big release.

For now, please test and enjoy this new headphoned release, and don't forget to vote for and comment on the package once you have verified the new release from Extras-Testing.

Sonntag, 13. Juni 2010

Fine-grained playback status in gPodder and Panucci

I've just uploaded Panucci 0.9-alpha0 to Maemo 5 Extras-Devel. This package is the first one based on the new codebase, which includes support for sending fine-grained playback status messages to gPodder and also receive metadata about episodes from gPodder. This makes listening to podcasts and managing your listening queue even more comfortable. The following screenshots are from development versions of gPodder, but you'll soon be able to enjoy these new features with the upcoming release. Until then: Please test Panucci 0.9-alpha0 in Extras-Devel (I won't be promoting this package to -Testing yet, but report bugs against it if you try it from -Devel), so we can fix any outstanding bugs until the first final release.

So, what's working so far? gPodder gained the display of the current position and total time in the episode actions dialog:

This position information is automatically sent from the newer Panucci version (so it depends on you using Panucci for playing podcasts). Another cool side-effect is that this information will be synchronized with gpodder.net if you are logged in and have enabled synchronization, so you can finally start playing back episodes on your computer, and then pick up where you left on your mobile phone on the go. You can also view a detailed overview of what parts of an episode are played on gpodder.net:

This is really an important feature milestone for gPodder (and Panucci), and it's nice to finally have playback status and episode duration information inside gPodder. Expect a new gPodder release soon, released together with the new version of Panucci (due to the branching history of Panucci, there are some feature regressions, like missing display orientation controls, but these will be re-added in the next few weeks as we move along).

Dienstag, 1. Juni 2010

Streaming video to the big screen

This is a pretty obvious hack and nothing new at all, using plain command line tools that existed for ages. Still, it might come in handy, and maybe you did not even think about it yet:

Prerequisites are a computer with an installed SSH server and mplayer or a similar media player. On your N900 (this obviously works just as well for the N800 and N810), you just need the SSH client for the first variant, and Python for the second variant. No other tools or apps are necessary.

In my case, I downloaded a video onto my N900 using gPodder, but I didn't want to watch it on the small screen, and I don't have a TV to hook it up to. So I decided to just stream the video over the network to my computer (ideally initiating the stream from the N900).

What you need to do is find out the $DISPLAY variable in your X session on the computer (:0 usually works, but strangely I'm on :4.0 with Ubuntu 10.04 here). You can do this with echo $DISPLAY in a X Terminal on the computer. Remember that value. Now, let's go to the X Terminal on the N900, cd into the folder with the videos and note the file name. To stream the video fullscreen to the computer, use a command like this: ssh username@computerip 'DISPLAY=:4.0 mplayer -fs -' < filename.mp4.

If you don't have SSH access, an alternative is to use HTTP for streaming (e.g. with VLC, which is also available on Windows and Mac OS X). The easiest way to do is (if you have Python installed, which you most likely have) to cd into the directory that you want to share (the directory and all its subdirectories will be shared - be sure to have no sensitive data there!) and use the command python -m SimpleHTTPServer for some instant HTTP server goodness on port 8000. Use VLC or a web browser on your computer to access the share. You can use Ctrl+C to stop the server.

So, if you want to browse the downloaded podcasts of gPodder on your computer, use the following command sequence in X Terminal:

cd
cd MyDocs/Podcasts
python -m SimpleHTTPServer

Now, use the web browser on your computer (connected to the same network) and access http://n900ipaddress:8000/ to get a directory listing of all downloaded content. Copy the URLs into VLC and start streaming over the air.

Usually the limiting factor here is the wireless bandwidth and the reading speed of the eMMC. Apart from that, no restrictions apply - you can easily stream HD content, as the decoding is done on your computer, and the N900 just reads the data and sends it unmodified over the network without much processing (that's why everything said here also applies to the N800 and N810 and should work just as well).

Sonntag, 23. Mai 2010

gPodder 2.6 for Maemo 5: A visual tour

gPodder 2.6 (an app for Maemo that can subscribe to and download podcasts, YouTube videos and tracks from Soundcloud) has been released today. The package is in Extras-Testing, so please test it and vote for it! A package for Diablo (Maemo 4, N8x0) is also available already, and includes some Diablo-specific fixes (the "New episodes available" selection was broken, but works correctly now).

I've prepared some screenshots to compare the UI of gPodder 2.5 for Fremantle with the UI of gPodder 2.6. Here are a few examples:


The episode actions dialog now has a dedicated "Delete" button for downloaded episodes


The settings dialog has proper "Save" semantics now (close the dialog to discard changes, click on "Save" to apply changes) - this has been suggested during UX-Week 1


The progress bar for the episode list has rounded corners (useless, but looks better)

Another feature that isn't visible at first: If you get "New episodes available", and you can't decide from the title of an episode if it's worth downloading, just long-tap the episode and choose "Shownotes" from the context menu to display the complete shownotes in a window.

This release includes improved gpodder.net support (easier configuration, restoring of subscriptions now works on first run), and will feature more fine-grained episode playback status synchronization with the (yet-to-be-released) new version of Panucci.

Montag, 17. Mai 2010

U-Bahn, Keyboard Repeat Switcher and an updated RaeMote

The last three days can be described as one of the more productive weekends - at least in terms of app count. Two new mini-apps have been uploaded to Maemo Extras: U-Bahn, a scrolling subway plan for Vienna and the Keyboard Repeat Switcher widget. While the former might only be of interest to Viennese locals and the occasional tourist, the latter is really useful when you do more serious work in X Terminal and want your hardware keys to have the "repeat" functionality in the yet-to-be-released PR1.2 firmware update. If you have PR1.2, please try them out and vote for these new packages.

And last but not least: a new version of RaeMote has been released, which adds missing dependencies to the packaging information and also changes the display name of the package to be shorter and searchable. RaeMote is still not in Extras, so your votes are again very welcome on this one.

Coming up: A new version of gPodder is already in the works, bringing you lots of bug fixes and UI refinements that we introduced during the last weeks. Some progress is also being made on getting the new version of Panucci ready, which will bring play position syncing when used in conjunction with gPodder and gpodder.net.

Dienstag, 4. Mai 2010

N810 + pyDance + USB Host Mode + Dance Mat

Most of the cool hacks these days are done using the N900 for obvious reasons. For this little experiment, I needed the good old N810 with its USB Host Mode (as the N900 doesn't support USB Host Mode right now) to get things going. An alternative approach would be to use BlueMaemo running on a N8x0 (with a USB device attached) acting as Bluetooth HID device for the N900 and running pyDance from the N900 on the big screen with its TV-out.

Here's a walkthrough video on how it's done:

I hope to post the packages needed to get this going shortly. Attila was kind enough to package the joydev.ko kernel module for Diablo, so we're just missing pygame/SDL_mixer with OGG support in the repositories. It's not Stepmania, but it works just as well with only minimal code changes.

Donnerstag, 29. April 2010

gPodder 2.5 "easter egg": Diablo UI on Fremantle

As you probably already know, all gPodder versions (Linux Desktop, Maemo 4 and Maemo 5) use the same codebase, and as Python is an interpreted language, the choice of which UI to run can be made at run time (you could do this for compiled languages, too, but it's easier for interpreted ones). In current versions of gPodder, this happens by using command-line arguments. gpodder alone will start the Desktop version (which does not work on Maemo for obvious reasons - an "auto-detect" feature might be implemented in the future). On Maemo 5, you will usually want to use gpodder --fremantle, which will start the Maemo 5 UI as you know it (that's also the command that gets executed when gPodder is started from its application icon). On Maemo 4, the command is gpodder --maemo.

If you are a gPodder/Maemo old-timer, you might still remember the "good old days" of two-panel, stylus-based podcast goodness with multiple selections, the funky context menu and the thick toolbar on your N8x0. Ever wondered how that would feel on the N900? Try it out! Simply run gpodder --maemo in X Terminal and give your podcasts a little retro interaction (the database and downloads are the same in both versions and are therefore shared).

Try it out - it might come in handy if you are a stylus cowboy or have really small fingers (or a big N900 and normal-sized fingers...). Also, give the multiple-selection feature in the episode list a try. All you need is gPodder version 2.5, as it contains some compatibility fixes to make the Diablo version not be totally unusable on Fremantle.

Mittwoch, 21. April 2010

New versions of gPodder and Brain Party out

The news are a bit slow these days, because the summer term really took off after the easter holidays, and the free time for coding has decreased accordingly. Nevertheless: Some updates have hit Maemo Extras-Testing yesterday.

gPodder 2.5 "Knock knock knock Penny" was released and with it another Maemo 5 package rolls into the Extras repository (the Diablo package for Maemo 4 has also been uploaded and promoted to Extras already). Apart from some string changes ("Settings" instead of "Preferences", for example) that we found during the first UX-Week, this version fixes YouTube video downloads - the downloaded files now get a suitable extension (a bug that was introduced by YouTube changing their website a few weeks ago). Another nice feature for those of you with a fast Internet connection: YouTube video streaming. You can now chose to stream subscribed YouTube videos instead of downloading them if you prefer that. Review it and vote for gPodder 2.5-1 here

In gaming news, Paul Hudson (aka Hudzilla) has fixed some bugs in the code of his Brain Party game, and I've now uploaded a new version of the Maemo port for this game. The development repository of Brain Party has now also been opened over at Launchpad: Brain Party on Launchpad, and Paul promised to merge the Maemo patches upstream as soon as I send them to him, which I'll do today :) Review it and vote for Brain Party 0.5.91-1 here

One and a half week ago, we started the "UX Week" sprints in the Forums, focusing on one aspect of third-party applications for Maemo per week. This week, we're focusing on icons, so if you are an artist of want to help out as user or if you are a developer in need for some well-balanced icons, please get in touch in the forums and on the Wiki. And if you don't want to be productive at all, just stop by and look at the great artwork the artists have come up with so far already.

Samstag, 3. April 2010

Brain Party ported to the N900

Brain Party from Hudzilla Games has been released as open source for Linux some days ago. A thread on t.m.o suggested somebody port this over to Maemo. An afternoon of tinkering later (and with the help of Javispedro's SDL-GLES library), I've got the game to run on the N900 (see the patch for details on the changes - as you can see, the original source code is pretty clean, so porting was mostly straightforward after being told about SDL-GLES, fixing a parameter for glTexImage2D and doing some math to scale the game to the N900's screen and scale the input coordinates the same way). The package is currently in Extras-Devel, soon to be promoted to Extras-Testing. In the mean time, you can grab binary and source packages from this page (use apt-get -f install afterwards to satisfy dependencies).

Please test it and vote for it on the Maemo.org package page when it enters Extras-Testing (did you know that you can follow @maemoextras on Twitter to see packages entering Extras-Testing and Extras? Now you do..).

It's good to see developers porting their games to Linux and open sourcing them, which makes learning from their code and porting the games to other platforms very easy. If you like the game, please support the developers by purchasing Brain Party for the iPhone (you probably don't have an iPhone, so show the N900 game off to your freedom-hating friends and tell them that they should purchase the game for their iPhone/iPod touch on the App Store). The game is also available for Windows Mobile and Xbox 360.

Montag, 29. März 2010

App updates: gPodder 2.4 and MaePad 1.5

This week, it's once again time to update two of the more prominent apps in my collection: gPodder 2.4 "The Pants Alternative" for both Diablo and Fremantle and MaePad 1.5 "Productive" for Fremantle.

With the installation of PR1.2 on the autobuilder, MaePad can once again be built on it, so I've resumed uploading of MaePad releases to Maemo.org.

So, what's in it for you? Let's start with gPodder:

  • Progress bar for loading episodes (and optimized episode list loading)
  • "All episodes" view is not grouped per-podcast anymore (all episodes are now sorted descending by date)
  • Faster download resuming on application start (with progress dialog)
  • Automatic clean-up of finished downloads
  • Simplified layout of progress indicator dialogs (e.g. deleting episodes, unsubscribing from podcasts)

And now for your favourite productivity tool, the MaePad:

  • "w" in the checklist/sketch view now saves the database
  • Fullscreen mode of checklists uses portrait mode (for shopping use, etc..)
  • Node type displayed in overview (there's a themeing issue here with the highlights and the secondary text color.. suggestions welcome)

Now it's your turn: Please test the new packages and then vote for the packages here: MaePad QA page and gPodder QA page. Any bugs that you will find should be reported here: new bug against gPodder and MæPad t.m.o thread.

The PR1.2 SDK on the autobuilder adds a dependency on a newer Hildon version that cannot be fulfilled in earlier firmware versions, so I'll build a package compatible with pre-PR1.2 firmware soon and publish the package on the MaePad homepage for manual installation during this transition period until PR1.2 becomes available for end users.

Mittwoch, 24. März 2010

MaemoPad+ ported to Desktop Linux

Some weeks ago, a user of MaemoPad+ asked me if it was possible to port MaemoPad+ to the Desktop, so users of Tablet PCs can make use of it. Apart from that, this can also be useful for users of MaePad to copy their "memos.db" file from the N900 to their PC and edit the file (or just view the contents) on the big screen. The file format used by both MaemoPad+ and MaePad is the same, so users of the mobile versions can share their database files with the Desktop version (and vice versa), which by the way looks like this at the moment:

Screenshot of MaemoPad+ on the Desktop

Most of the Maemo 4 libraries are readily available in Debian (hildon, libosso, hildon-icons, etc..), so the initial port has not been too difficult, even though proper Desktop integration obviously needs more work, and there are some ugly crashers still hidden inside the code ;)

I wonder if it's possible to also package Maemo 5 libraries (Hildon 2.2, etc..) for Debian and upload them to the Debian repositories - this should make it easier to port Maemo 5 applications to the Linux Desktop without having to re-write the whole UI layer. Another cool thing would be to have Hildon 2.2 for Diablo, which would allow us to "backport" Maemo 5 apps to Maemo 4 - again, without the work of having to re-write the UI.

Packages for Ubuntu are available from the MaemoPad+ PPA, and the source is available via Git. Please send backtraces of crashes or (even better!) patches against the "desktop" branch in the Git repo.

Dienstag, 23. März 2010

Updated packages for Panucci, RæMote and headphoned

Now that a preview of the PR1.2 SDK has been released, it's time to push the latest updates into the current Extras repository, so users that won't be upgrading to 1.2 as soon as it's out will get recent packages until they decide to upgrade to the new release. Over the last days, I've updated some of my packages with minor updates and long-requested features:

  • Panucci: FM transmitter in menu, HTTP streaming (ideal for podcasts). The "rotate to landscape mode when the keyboard is open" fix has been merged from gPodder.
    QA page for Panucci 0.3.9-5
  • RæMote: Updated bugtracker URL and fixed the UI glitch where button "highlights" get stuck. It has only been out for two weeks, and therefore it has not entered Extras yet, so your votes are extra important here.
    QA page for RæMote 1.2
  • headphoned: Support for pausing FM radio has been added - this is useful when you listen to FM radio using a Bluetooth headset. Please read the info comment about FM radio support on the QA page.
    QA page for headphoned 1.8

If you can spare some minutes, please help test these applications on your device and vote for them afterwards on the QA pages that are linked above.

More updates to other apps are queued for this week, stay tuned.

Sonntag, 7. März 2010

SketchyAetch, gPodder/Qt and living in the present

After the very interesting Nokia Mobile Developers Forum in Hagenberg on Friday and Saturday (Petri Niemi did several interesting Qt introductory talks), I decided to play a bit with QGraphicsView again and this time try to come up with an app that actually does something: SketchyAetch!

Having not done much with C++ for several months, the GCC error messages (at least for C++) are still kind of cryptic. The fact that code gets pre-processed by moc does not help here, as the error messages might appear in a different location than where the real error/typo is. It should not be too difficult to get around these issues after some practice, and from that point on, getting things done (in C++) with the Qt libraries should be nice.

Already-drawn lines will fade away when you shake your device just like you would expect. The package is available in Extras-Devel.

Now something for the Qt fanboys out there: If you're running gPodder 2.3 on your device, you can try

   python -m gpodder.qtui

for a PoC "yes we could use Qt for the UI layer". This is not something that we will be working on in the near future (after all, the Hildon-based Maemo 5 UI is perfectly fine and "native" and it will get some more fine-tuning with the next release), but it shows that it won't be too difficult to do a DirectUI GUI for gPodder on top of the existing podcast client for M6/MG. We probably get around to implementing a DirectUI GUI for gPodder later this year when it's time to think about "Maemo 6" support.

Looking back how strange the gPodder Fremantle UI looked back in June 2009 (and how much changed in both the Framework and gPodder until the first Fremantle version was released), there's no rush in switching to Qt or DirectUI (at least for existing applications). I just hope that good Python bindings will be available for DirectUI/Qt when it's time to support the new UI, but I'm sure the PyMaemo team will do a great job just as they did with Hildon/Fremantle.

Maemo 5 is very polished these days, and I expect it to be even more mature when PR1.2 is out. It's also nice to see the Qt bits fall in place, DirectUI widget demos being made available, and MADDE becoming integrated with QtCreator, so the tooling support is ready when it's time to write M6/MeeGo apps. Maemo 6/MeeGo is for later this year, now it's time to enjoy Maemo 5, the N900 and all the great open source apps :)

Montag, 1. März 2010

Video of my talk from January; coming up: Nokia App Forum Alps

Back in January, I've given a talk about Maemo Development at the Metalab Vienna. It's been up for some weeks now (the talk is in German, but at least I was using the N900 during the whole presentation. BTW: Is it possible to disable auto-rotate in the image viewer?): (direct link)


Maemo 5 "Getting Started" from metalab on Vimeo.

This upcoming weekend, the Nokia Mobile Developers Conference is taking place in Hagenberg, Austria, and if you happen to have time on March 5th and 6th, register for free (free shuttle busses are available from Vienna to Hagenberg and back). I'll be giving a talk about Open Source Applications on Maemo 5. Say hi if you happen to be there! :)

Dienstag, 23. Februar 2010

Utilize the hardware keyboard with MaePad 1.3 and Vim keybindings

Yesterday, MaePad 1.3 was released. Apart from updates to the Finnish translation and a new Hungarian translation, this release adds Vim-like keybindings to the UI, which allows you to be very productive when managing lots of checklists.

The enabler here is the hardware keyboard that allows for indirect multi-touch interaction with good, tactile, haptic feedback (something that no touchscreen to date can provide - you can't type "blindly" on any touchscreen).

Watch the demo video here:

The package is available as binary .deb from the MaePad homepage and the source is available in the Git repository (no package in Extras until Bug 9070 is fixed). Leave feedback in the forum thread, including ideas for additional shortcuts.

Samstag, 20. Februar 2010

Maemopad+ 0.36 for Diablo and some Extras-Testing QA requests

I've written enough about MaePad in the last few weeks, so today I'm announcing something for all the Maemo 4 fans out there: Maemopad+ 0.36 has been released, and with it comes a nice search function (the code for which has been written in 2008) and updated translations. We also added a Git repository and the updated website to the mix.

Here's a request for all the Maemo 5 lovers: Please don't forget to give some Extras-Testing QA love to the following packages: gPodder 2.2-2, Panucci 0.3.9-2 and headphoned 1.7. These packages already have passed their 10-day quarantine (or will do so during the coming days), and are just waiting for enough votes to be allowed to go into the Extras repository, so all end users can profit from the updates. Thanks for you help!

Freitag, 19. Februar 2010

Want MæPad 1.2? Vote for bug 9070!

MæPad 1.2 is out now, and includes (apart from bugfixes and usability fixes) some cool new features such as word wrapping, mass-removal of all checked items and the often requested "share your sketches" feature that allows you to upload sketches to Flickr or send via E-Mail or Bluetooth.

Sadly, the "share your sketches" feature makes MæPad build-depend on the "sharing-dialog-dev" package, which is not available in the auto-builder. Anyway, with MæPad 1.2 you can upload useful or even pointless sketches directly to hosting services:

If you want to get MæPad 1.2 into Maemo Extras, please vote for bug 9070. Alternatively, you can grab the armel .deb for MæPad 1.2 from the MæPad website.

In other news, the MæPad Git repository and MæPad on Transifex are now online, so if you want to contribute code or translations, please feel encouraged do so (send me your Transifex username, so I can add you to the MæPad project there to allow uploads).

Dienstag, 16. Februar 2010

MeeGo wishlist

Because all the cool kids blog about it these days..

If any of these specifications/standards do not meet the requirements, please work with freedesktop.org or other related institutions to get your extensions discussed, fixed and then integrated into the relevant specifications.

People will still develop mobile UIs specifically for whatever device will come along in the future, but porting from/to "mainstream" Desktop Linux should be as easy as possible.

There's a lot of awesome open source Linux/UNIX (GUI) software out there, it just needs some UI love to be usable on mobile devices. Don't make it harder than it should be.

(And with that I mean that it's easier to relayout a GTK+, FLTK, wxWidgets, Swing or Tk UI than to port everything to "the one true toolkit".)

This is especially true since open source developers usually develop in their free time, and porting an app to a new toolkit/environment is something that can't be done in two afternoons. Relayouting UIs can be done in that time.

Adding paradigm-shifting cool new UIs will still work without breaking backwards-compatibility and without restricting developers to one language/toolkit.

Oh, and Mer solves most of these issues by basing itself on a "standard" Desktop distro and only changing stuff that's really necessary.

Montag, 8. Februar 2010

MaePad 1.1 and gPodder 2.2 hit Extras-Testing

After a week of initial testing of MaePad 1.0 in Extras-Devel and some very helpful feedback from users, MaePad 1.1 "The Large Hadron Collision" hits the street (or more precisely, Extras-Testing). You can read the list of changes or go straight to the package page to test it.

In other news, gPodder 2.2 "LA X" (release notes on gPodder.org) was uploaded to Extras-Devel at the end of last week. This new release includes the promised UI changes and some other under-the-hood changes, but there have been some minor regressions (broken streaming for example) which have since been fixed in the development repository. Please test gPodder 2.2 (on the package page) and report bugs against it in the bug tracker, so that any issues can be fixed before the next package version.

Again, please report any bugs you find to the bug tracker, and don't go whining in the forums - it's a hassle to search and hunt for bug reports on the web, and your "bug report" forum post might never be seen by any of the developers of any given app.

gPodder 2.2 is of course also available for Maemo 4, and has been pushed into the Diablo Extras repository already. Starting from this version, no Chinook builds will be provided for gPodder anymore, but due to the interpreted nature of Python code, you can install the gPodder package from the Diablo repositories should you really need to run gPodder under Chinook. If you are reporting bugs against gPodder for Maemo 4, be sure to mention "Maemo 4", "Diablo" or "N8x0" in the bug report.

Ready to go into Maemo Extras during this week: Panucci 0.3.9-1 and headphoned 1.6 (thanks to all the testers for taking the time to test, review and rate these packages).

Dienstag, 2. Februar 2010

Bluetooth support for headphoned and Panucci

The hack week continues with some goodness for your ears (and the undisturbedness of people sharing the subway or bus with you): headphoned 1.6 adds support for Bluetooth headsets, so when you disconnect your Bluetooth headset, playback of music will automatically pause, which seems to be a much-requested feature. Thanks to Alan and Faheem for making this possible. Again, now that the package is ready, it's your turn to test and vote the package into the Extras repository.

Now that headphoned supports Bluetooth headsets, the only problem is that you still need to get your device out of your pocket to start playback. That's why I quickly hacked some automatic playback start goodness into Panucci (which is of course optional). The (due to space constraints irritatingly named) "Auto-play on headset" option will automatically start playback in Panucci when your Bluetooth headset or your wired headset with microphone is connected:

(Yes, I'm a big fan of the Marina Theme...)

I'm not promoting the new Panucci version yet, as I want the previous release (0.3.9-1) to go through Extras-Testing first. The version with headset support (0.3.9-2) is already in Extras-Devel, and I'll promote it to -Testing after the first one got through (thanks to all of you who have reviewed and rated the package in -Testing).

In short, this means that you will be able to keep your N900 in your pocket and simply connect/disconnect your Bluetooth headset to control playback, which I think is quite nice... (no support for BT headset buttons in Panucci so far, as I can't really test this myself - send patches and/or D-Bus logs)

Announcing MaePad for Maemo 5

Last Thursday, Claes Norin asked me if there's going to be an app like Maemopad+ for Fremantle. "Neat idea", I thought, and started hacking, overhauling the whole UI, refactoring some ugly parts of the code and making it generally shine and be usable as every day productivity companion on the N900. Claes was kind enough to provide me with valuable feedback and the necessary artwork. Now, let me introduce you to... MaePad!

MaePad in action

Due to the big changes in the UI and source code, MaePad is only available for Fremantle at the moment, but I hope to be able to provide it for Mer as well when it becomes available for the N800 and N810.

If you are feeling adventurous, please try out MaePad 1.0, which is available from Maemo Extras-Devel now.

Sonntag, 31. Januar 2010

Panucci 0.3.9: Silent mode and landscape mode by default

Now that the winter term has finally ended, and February is in sight, it's time to do some overdue fixes, releases and other random stuff. After headphoned 1.5 has found its way into Maemo Extras (thanks to the testers), it's Panucci's turn. Here is a list of user-visible changes in Panucci 0.3.9:

  • Playback in "Silent" profile (thanks to Martin Grimme et al in bug 6694)
  • Default is forced-landscape mode, the menu has automatic rotation and forced-portrait mode
  • Volume controls removed (Maemo 5 already handles volume control for us)

If you are a Panucci user, please take the time to review and rate it: Maemo.org package page for Panucci

You can expect at least two apps/releases in the next few days: MaePad (Maemopad+ re-born for Maemo 5) and of course a new version of gPodder with my.gpodder.org sync and the re-designed UI.