Freitag, 31. August 2012

Brain Party Git repository, new release 0.5.990

Back in March I've been working on Brain Party for the N950/N9, and since then, I've uploaded it to Apps For MeeGo in May. With Apps For MeeGo being down more often recently, I thought it might be a good idea to upload it to Nokia Store, so more people can discover this nice game.

Before uploading to Nokia Store, some things have to be fixed - a big icon and screenshots have to be made/taken, single-instance launching and being a good multitasking citizen (pausing gameplay when put into background) is a precondition for QA to not fail, so these things have now been implemented.

In order to properly maintain Brain Party for the N950/N9 in the future, and to track changes, I've set up a Git repository in the Collaborative Harmattan Repository on Github (which gets used a lot - as of today, we have 35 repositories and 16 organization members, and you can get yourself added easily).

The Git repository of Brain Party starts off with an initial commit that is just a copy of the 0.5.91-2 source package contents from Fremantle (sans the artwork/music, which got added in a separate commit later), and then has (in a single commit) all Harmattan customizations that I did back in March, May and today. The repository content is quite big, as the images, sounds and music are all included now, but that shouldn't stop you from cloning it and hacking the code ;)

As written in the announcement on TMO, you can get your .deb from the downloads page or wait until it surfaces on Nokia Store as free app. As with most repositories on Github, we have an issue tracker where you can file pull requests, bugs and other things that you notice while using Brain Party :)

Samstag, 28. Juli 2012

gPodder 3.2.0 (and 3.2.1) released for Harmattan

gPodder 3.2.0 "The Great Radish Famine" has been released this week, and some users (not including me, otherwise I would have caught the bug earlier) had problems with the upgrade (see bug 1627 for details), so that's why gPodder 3.2.1 is already on its way to AFM and Nokia Store today. Expect the bug fix to appear as an update in the next few days.

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, 30. Juni 2012

Impressions from the BlackBerry 10 Jam Event in Berlin

I was visiting Berlin this week for the BlackBerry 10 Jam World Tour, as a few other Maemo folks were also going, and I saw it as a good opportunity to meet up with some good old community members, and visit Berlin once again (my last visit to Berlin was in 2008 for the Maemo Summit 2008). Cosimo organized a meet-up at the c-base (same location as for the Maemo Summit 2008) the night before the Blackberry Jam. Before I get too much into details, you can have a look at all my photos from Berlin.

PreJam. The meetup on Wednesday at the c-base was great, meeting old community members and discussing.. erm "recent events". Meetups like this also provide a nice opportunity to meet the faces behind nicknames in the online community. While we were sitting outside, the Google I/O event was streamed in the c-base. The Blackberry guys also joined the party and talked with us about apps and the supported development approaches (web, native, Android, Flash/AIR).

BB10 Jam. The BlackBerry event itself was held at the Spreespeicher on Thursday. After a short breakfast, the event was kicked off with a keynote - no filming or photography was allowed for the whole duration of the event in the presentation room. A few presentations (web or native in parallel tracks) later, Lunch was served and then there were a few more presentations outlining the whole developer story and focusing on mobile development itself. Having done some mobile development on other platforms myself already, the only interesting parts were the Blackberry-specific content items: How packaging and publishing works, how to load apps onto the development device, etc.. At the end, Dev Alpha devices were given out to developers and drinks and snacks were served to finish off the event.

Developing on BB10. Andrew already described the porting procedure for pure-QML apps (e.g. from Harmattan or Symbian) to BB10. After registering with Blackberry, and requesting a debug certificate (which takes at least 2 hours to get a reply back), the registration procedure for the device can be carried out, which will set everything up, so that you can deploy apps to the device. It seems a bit weird having to get everything signed by Blackberry servers before being able to sideload apps to the device (with Android and MeeGo at least, you could just take any device, switch it into developer mode and deploy - without having to "ask" anyone for permission). The Eclipse-based SDK does help with all the steps that are required to set up the device, so it's not too difficult, but annoying fir the first time (after it has been configured, the debug certificate has to be renewed regularly, but you can just deploy the app locally without a network roundtrip). Not counting all the web-based registration process and requesting the certificate, it probably took me about 30 minutes to get everything set up to build qw The Game for the BB10 Dev Alpha - including device-specific modifications to the code. That's quite neat :)

The good parts. The Dev Alpha is a nice device, with hardware specs that are up to date. The SDK is available for Windows, Mac OS X and Linux (that's how you do it, developers should be able to use the host operating system of their choice!). The SDK uses Qt by default, but you can write against pure OpenGL ES, too if you want - and according to the developer docs, an SDL port is also available. Some folks are working on a Python port to BB10, which will allow developers to easily port PySide-based applications (gPodder?) to BB10.

Improvement suggestions. You don't have root on the device. While it's okay to have a consumer device locked down, it'd be great if there was the option to have root on the developer device, if just for looking around the QNX system. Another problem is that - as far as I know - there are no UX guidelines published. Harmattan has them. Android has them. iOS has them. Publish UX guidelines and provide good example applications (not just "widget galleries" or "cookbooks") - ideally something that will look and behave like stock applications. It would be great if instead of having the PlayBook Tablet UI on the Dev Alpha, they would have provided a barebones BB10 phone UI just so that developers get a better feeling for how everything behaves.

All in all, BlackBerry has done a great job with the BB10 Jam World Tour, and I really enjoyed my time in Berlin - it was great to meet up with Maemoistas and see what they are up to these days :) Hopefully I'll get the chance to see you guys at some future events. Keep on hacking!

Sonntag, 24. Juni 2012

qw The Game ported to Android

I decided it's time to port qw The Game to Android, as a way to see how the publisher story works on Google Play compared to Ovi Publish and also to see how mature the Qt port to Android is.

For my port, I used Necessitas alpha 3 update 4, which you can download from the project website. Necessitas already includes both the Android SDK (that's the SDK you use in general, and contains all the Java APIs, etc..) and the Android NDK (that's used if you want to do native C/C++ development), so no need to install anything else. You can start Necessitas Qt Creator using "QtCreator/bin/qtcreator" in the Necessitas installation directory, but Necessitas also creates a launcher icon if you shy away from command lines.

The assumption is now that you have an existing Qt project with a qmake project file (.pro). Just open that .pro file in Necessitas Qt Creator and let it create the Android scaffolding. You can now try to build the project and run it - either in the Android emulator, an actual Android device or your N900, N950 or N9 running Nitdroid (the N950/N9 port is actually quite nice these days, and can be installed alongside Harmattan by flashing an open mode kernel with Android patches, replacing some init files and placing the Nitdroid rootfs inside /home/nitdroid/).

When you first start a Qt-based application on Android, it will redirect you to Google Play to download Ministro, which will take care of downloading the Qt libraries and storing them in a central, shared place, so that all Qt-based apps can use the same Qt libraries (which means that you can do closed-source apps, because they are dynamically linked to the LGPL'd Qt, and it also means that apps are smaller, because Qt doesn't need to be shipped with each app). One disadvantage is that the end user experience is not seamless on first startup, because your users will have to install Ministro first and wait for the Qt libraries to download.

Anyway, now you got that far and got your application running - or not. If you are missing libraries, and your application doesn't start, open the "Projects" tab in Necessitas Qt Creator and click on the "Run" tab for the Android target. There, open "Package configurations" and click on "Libraries" and check all Qt libraries that you need. When you compiled your application, there's a button ("Read information from application") that will analyze your binary and check the right Qt libraries. You can also add "Prebundled libraries", which are dynamically-linked shared libraries that will be shipped with your application. You can also check out the "Manifest", "Application" and "Permissions" tabs and configure it to your liking.

Protip: You can build the Android package on the command line using "ant" as soon as you have used Necessitas Qt Creator to create the initial scaffolding. The "android" folder will be created inside the folder where your .pro is located, and there you will find a build.xml.

Now to some code-level customizations that I had to do for my game, qw:
  • QtMultimediaKit was not found - I had to comment out sound effects for now
  • Automatic screen rotation - My game is landscape-only, and I had to tell the Android system in the AndroidManifest.xml file
  • Qt.labs.particles was not found - Again, I simply commented it out for now; I guess these QML plugins should be easy to add to Necessitas, but I didn't bother to find out for this first try
  • Screen resolutions! - Don't assume 800x480 (in case of the N900) or 854x480 (in case of the N950 and N9); make your app scale properly to the screen resolution at hand. Test this by creating a non-fullscreen window on your Desktop in different sizes, and see if the content looks right. For a quick'n'dirty first try, use QGraphicsView::scale
As far as the publishing experience goes: You have to pay a one-time fee of $25 to be allowed to publish to the Play Store (compare this to a one-time fee of 1 Euro for Ovi Publish and a yearly fee of $99 for the iOS App Store). What I found interesting is that there's basically no QA (apart from automated checks that are very helpful and give guiding error messages) and an application uploaded is published in a matter of minutes. I also like the fact that you can add a YouTube video link to the Play Store submission, so users can get a preview of how the experience is like. I published the app for free, and the UI warned me that it's not possible to convert a free app into a paid one in the future, which doesn't matter for me, but it might be a useful hint for other publishers.

qw The game is now available on Google Play for free. It's also available in Nokia store for free. Go play!

Montag, 28. Mai 2012

gPodder 3.1.2 for MeeGo Harmattan

It's another month, and (given the monthly release schedule of the app) it's not really a surprise that a new version of gPodder has been released. This is mostly a bugfix release, but brings one very useful feature to gPodder: The ability to hide downloaded podcasts from the Music app. While this is nothing new to command-line fans who edit tracker-miner-fs.cfg by hand, there has not been an end-user friendly way to do it. Now there is: You can just flip a switch in the gPodder Settings and hide the podcasts from the Music app (which does nothing more than adding or removing the gPodder directory to tracker-miner-fs.cfg's IgnoredDirectories list), which is especially useful in a situation where your downloaded podcast accumulate (this happens to me right now - less time to listen to podcasts) and you play your music in "Shuffle all" mode.

Other improvements include a small fix for the episode list filter button for locales where the text sometimes became longer than the button:


As you can see, in the left screenshot (gPodder 3.1.1) the "Hide deleted" text (in German: "Gelöschte verstecken") goes over the toolbar button. To "fix" this, the toolbar button has been made wider (right screenshot, gPodder 3.1.2), which (in my opinion) also looks a bit nicer.

The rest of the improvements include some fixes to the CLI, updated and added translations, and some minor build system fixes - read the full changelog if you want the gory details :)

The MeeGo 1.2 Harmattan package for gPodder 3.1.2 has been uploaded to Apps For MeeGo and Nokia Store already, it should hit Apps For MeeGo Staging in a few hours (please do the QA procedure for it then, so it can land in Apps For MeeGo proper) and it should hit Nokia Store in a few days when QA has finished.

Samstag, 26. Mai 2012

Billboard now available in Nokia Store

At the last Hack-A-N9 meetup, I've been working on a test app to show the currently-playing song. This has then been extended to a fully-fledged app that is easily configurable for the user, so that non-developers could use it (after all, hacks and scripts existed before that did the same thing).

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.

Montag, 14. Mai 2012

Tizen Conference 2012 Review

The Linux Foundation sponsored my trip to the Tizen Conference 2012 in San Francisco last week, and I'm supposed to blog about it. Also, I think it's good to share what I've seen with fellow Maemo/MeeGo community members, even if Tizen is something different. You can find my photos of the event on Flickr.


As with last year's MeeGo Conference 2011, the Tizen Conference took place in the Hyatt Regency in San Francisco, the same hotel that's also featured in Mel Brooks' High Anxiety from 1977. I arrived on Sunday evening, but in contrast to last year's event, there were no weekend activities (the Hacker Lounge was already open, though), and the event itself only really began on Tuesday, with Monday afternoon and evening used for registration and a keynote by Jim Zemlin.



Tuesday started with a proper keynote that showed actual Tizen demos, which was nice (it was the Tizen Conference, after all). Throughout the day, the demo sessions were open where companies like ProFUSION showed off demos like a fridge interface and experimental JavaScript bindings to use EFL (not as nice as QML, but better than using EFL from the C API).


On Wednesday morning, the Linux Foundation was giving Tizen developer devices to attendees, with a remote shell accessible via the "sdb" tool from the Tizen SDK (similar to "adb" in the Android world). Oh, and basic X11 tools like "xeyes" and "xclock" were pre-installed, allowing for quickly checking how normal X applications would work in the window manager. Also on Wednesday was my talk about gPodder on mobile devices and the gpodder.net web service - I'll post the slides soon.


On Wednesday evening, Quim Gil and the local Qt chapter Silicon Valley organized the Qt Overlapping event for Qt developers being in town for either the Tizen Conference or the Ubuntu Developer Summit. After coming back, the Hacker Lounge was still open, so we played a round of ping pong until the early hours. I left on Thursday evening and had some time for sightseeing in the afternoon - check out the photos if you are interested.


After coming back from the conference, my first goal was to get Python and some GUI running. That's done now: You can run Python and PyGame on Tizen. Similar to this, PySide should also be possible once one takes the time to get it to compile it using the Scratchbox2-based SDK. I've also got Qt 4.8.1 running on the device, but of course it needs some more polishing and integration.

Still, Tizen has a long and challenging road ahead until it will become useful (from what we see now), but maybe they will get something good going. As for now, there's still Harmattan and all the great things about it (and compared to the supposed-to-have-a-future Tizen, the supposed-to-be-dead Harmattan looks very, very good today and works really great, no question about that!).

It was good to meet again some people that I knew since the beginning of Maemo events in 2008 and new people that have been involved in MeeGo recently. Looking forward to doing some more hacks on Harmattan, and maybe also looking forward to that wind-named future OS from that company that already brought you wind-named OSes a few years ago. Thanks for the great time so far :)