Posts mit dem Label harmattan werden angezeigt. Alle Posts anzeigen
Posts mit dem Label harmattan werden angezeigt. Alle Posts anzeigen

Samstag, 19. April 2014

My N9 apps and games now self-hosted and on openrepos.net

As the versions of my apps on Nokia Store grow more and more outdated, I've decided to remove the apps from there and instead self-host them on my web page and/or put them on OpenRepos.net instead. A handful of apps stay on Nokia Store; those are mostly S40 apps or apps for which a Symbian version also exists.

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):
And here's a list of my N9 games that you can now get for free (again, "deb download" is as of posting this; new versions on the webpage or openrepos.net):
Of these, the "greatest hits" and most useful apps/most fun games are (in my opinion): Billboard, Volume+ As Camera Button and chro.mono, but also give qw The Game and Petals a try :)

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

The logical step after the "Volume+ as Camera Button" app (Nokia Store link) for the N9 is another app that allows you to take photos while not touching your N9 at all. While time-triggered photos are fun, remote-triggered photos are.. erm.. "funner"? So what kind of remote "buttons" can we easily get on the N9? The remote control button on the headset is both "remote" and a "button". Also, as seen in Panucci and gPodder versions since the N900, Bluetooth headset buttons can also be queried by applications. So what do we get by combining remote control and photo taking? The Headset Camera app (Nokia Store link) for the N9! Or - for the visual reader - this:



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

Get out your Buzzword Bingo cards, we're talking HTML5. And Canvas2D. And WebGL. See? Check them off and then continue reading. So, while writing "native" apps using JavaScript is definitely possible and works great with QML, some games are just simple enough (or want to have a broad enough audience) to warrant writing everything in HTML5.

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

Next up in my list of things I did in the last weeks/months and never blogged about is Petals (Nokia Store link), a "beautiful, brain-teasing puzzle game for 1-4 players" if the game's website is to be believed (I would like to think it is...). As always, there's some technical details about the porting and creation of this game. While another recent game (Tetrepetete) has been done on a low level (C++ using no frameworks, and interfacing with multiple front-ends directly, including an OpenGL ES frontend, a console-based ncurses frontend(!) as well as a server-sent events/XHR/Canvas2D-based HTML5 frontend(!!)), this one is approaching things from a very high level: JavaScript.

Petals: A puzzle game written in pure JavaScript and QML
The gameplay logic of the game is implemented in pure JavaScript (without any QML dependencies), so it could easily be ported to, say, HTML5, but for integration reasons, QML seemed like the better choice for a release on the N9/Harmattan. Also, writing things in JavaScript wouldn't preclude a console-based frontend using nodejs and node-ncurses from happening should the need arise (making the flowers look good in ASCII art would be the challenge there - or cheating by using libcaca). Ok, ok - stop cursing, I'll stop talking about curses (cue laugh track).

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
And that's basically it. Of course, as this is a full-screen game with custom UI, no platform-specific components (such as Harmattan Components or Sailfish Silica) are used, so porting is a bit easier there (no need to "wait" for specific components to be compatible with QtQuick 2.0, which might realistically not happen at all for Harmattan Components). More screenshots of Petals and download links for multiple platforms can be found on the Petals Website.

Mittwoch, 8. Mai 2013

Upcoming: Billboard 1.0.9 for Nokia N9

Turns out I haven't posted here for two months, so here we go again: Billboard, your favorite low-power mode standby screen will soon receive a new update - version 1.0.9 has been uploaded to Nokia Store QA two days ago, and should hopefully pass QA and be available as an update in the next few days. This release brings a few major under-the-hood improvements and small bugfixes:
  • 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
With the new formatter, you can now output {} expressions in your scripts so that they get replaced, and similarly pass {} expressions as parameters to your scripts (for example to modify them in some way before displaying). This should allow for even more customization, some examples of what users have been doing on their N9 standby screen can be seen in the Billboard Standby Screen support thread on talk.maemo.org.

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, 5. März 2013

Porting Harmattan Apps to Sailfish Silica (and back)

So the Sailfish SDK was released last week, and as explained in the last blog post, gPodder is already running on Sailfish Silica Components. Of course, this has only been possible because Silica is quite similar in API design to Harmattan Qt Components (whenever I write "Harmattan" in this blog post, I usually talk about Harmattan Qt components, and whenever I write "Sailfish" it usually means "Sailfish Silica Components"). But of course porting "from" Harmattan "to" Sailfish with no way back would be kind of annoying - either Harmattan gets dropped, or somebody has to maintain two codebases, something I'd rather avoid. So, just like in "good old" Maemo 4 and Maemo 5 times, the goal here is to convert a Harmattan-only codebase to Harmattan-and-Sailfish, so that both can be maintained in the same codebase and improvements to Harmattan benefit the Sailfish port and vice versa.

In fact, while porting gPodder from Harmattan to Sailfish, it reminded me of porting from Maemo 4 to Maemo 5 - same toolkit (then Gtk+, now Qt/QML), similar extensions (then Hildon, now Components) but different concepts (then normal menus in Maemo 4 vs. HildonAppMenu in Maemo 5, now toolbars and context menus in Harmattan vs. pulley menus in Silica).

Obviously, as gPodder is written in Python here, this applies mostly to PySide-based applications, but the real difference is in the QML (there's really only one short snippet in the Python code that decides which QML import path to use). The approach taken is somewhat simliar to what the Jolla guys have been presenting at FOSDEM 2013, but I don't recall everything and have tailored the approach to better fit my workflow.

Before we start, be sure to know that qt-components is in the Sailfish Emulator (once you install it via "zypper in qt-components" as root), so that could be a shortcut for quick porting exercises and as an interim solution.

For starters, I've cleaned up gPodder's QML UI to make better use of Qt Components (historically, gPodder's QML UI was started at a time where Harmattan Qt Components were not even out or announced, so wazd and me came up with our own style - yes, that's pre-feb11 even!). So, instead of custom transitions and state management, everything is a Page, and transitions happen via the PageStack (the Silica equivalents are also called Page and PageStack). So, assuming you only have pages and so on, you could theoretically already use this or that depending on which platform you are on. Unfortunately, QML doesn't have conditional imports or something like that, so we have to add some abstraction layer.

Here's the basic idea:
  1. Create a new "Components" set - I'm calling mine "org.gpodder.qmlui"
  2. You define which items your components have, and a common API
  3. You implement your components twice: Once for Harmattan, once for Sailfish
  4. At runtime (or even compile time if you would want that) you decide which set of components you use
  5. Your application GUI code only imports QtQuick, maybe QtMultimediaKit (if you need it - it's available on both platforms) and your custom components (org.gpodder.qmlui in my case)
Just in case you are already running to the gPodder Git repo now to check it out, here's a short disclaimer: The UI isn't fully ported yet, so there's still a few remaining "com.nokia.meego" (Harmattan Qt Components) imports in my QML UI, but that's just temporary until I have found a good replacement for things like Sheet and MultiSelectionDialog in Silica.

My custom components at this time look like this:
Most of these are just thin wrappers around the "native" components on the target platform. For example, WindowWindow.qml (harmattan, sailfish) is just a wrapper for PageStackWindow (on Harmattan) and ApplicationWindow (on Sailfish). Where I said "import com.nokia.meego 1.0" and "PageStackWindow {}" previously, I now say "import org.gpodder.qmlui 1.0" and "WindowWindow {}". In the case of the Harmattan implementation, this is just the same as before, but on Sailfish, an ApplicationWindow will be used.

Other wrappers just deal with API differences. For example, ScrollDecorator exists in both Harmattan and Sailfish, but in Harmattan the property is called "flickableItem" and on Sailfish it's "flickable". So my ScrollScroll (harmattan, sailfish - also, noticed a naming pattern there? ;) takes care of hiding the differences, and I just use "flickable" on a ScrollScroll, and it will do The Right Thing on the platform it's currently running on.

When the API is the same (e.g. for Button), you still need to create pass-through components because of the different import path: Button (harmattan, sailfish).

But there's also some more elaborate differences. For example, I want to have menus - a toolbar menu on Harmattan and a pulley menu on Sailfish. So I defined a very simple Action (I'd be surprised if such a component doesn't already exist, but I didn't find one when I wasn't looking (sic)) that basically has a text and some signal attached to it. In my application code, I define actions as a property on my PagePage (which is a Page with some special code to transform actions into whatever the platform representation is). See the main page actions for an example. The ActionMenu (harmattan, sailfish) then takes care of creating a ContextMenu (Harmattan) or PullDownMenu (Sailfish) and PagePage (harmattan, sailfish) takes care of creating a toolbar on Harmattan and forwarding a reference to the listview to which the PullDownMenu should be attached to (in Harmattan, I still need to pass the listview there, but it's not used).

The same customization also happens for the ListList (harmattan, sailfish), which is a ListView (Harmattan) or SilicaListView (Sailfish), but also takes care of displaying a header (which still needs to be styled correctly on Sailfish) if the platform requires it.

Once you've created your custom set of components, you have to create a qmldir file that lists the components available and in which version of the components they are available. Read up on Declarative Modules in the official documentation.

So there you have it. One QML codebase, two UX targets that are well-integrated. You can see the results in the just-released gPodder 3.5.0, which is more Harmattan-ish on the N9 than before (although some items have moved from the toolbar into the menu for simplicity reasons, and I actually think it's cleaner now) and also looks and feels quite native on Sailfish (it's not done yet, and I'm sure the UI will evolve and adapt once Silica gets more mature and we see more Sailfish apps).

What I'd like to see in the Sailfish SDK: Different Ambiance backgrounds (darker, brighter, different hues) so that developers like me can test if their apps look good atop more than just the nice blue default background.

As a last hint (I couldn't find that in the API docs, but in the component gallery): Sailfish Silica's Label Component has a "truncationMode" property. If you set it to "TruncationMode.Fade", you never want to see elided text again, because it looks so sexy! :)

Samstag, 2. März 2013

How to try out gPodder in the Sailfish OS Emulator

You might have seen this one coming: gPodder is already working on Sailfish OS. If you want to try it out in the emulator yourself (no MP3 playback due to missing codecs, and some parts of the UI have not yet been ported), install the Sailfish SDK and start the emulator (thanks to the interpreted'ness of Python, we don't have to care about cross-compiling at this point). Then, SSH into the emulator as user "nemo" (I'm purposefully vague here - if you can't figure out how to SSH into the emulator, then you probably shouldn't be trying it out at this point).

From the "nemo" user, become root (use "su -", root password is "nemo") and then install some dependencies:

zypper in python-pyside git qt-components

With that in place, go back to the "nemo" user and get gPodder from Git:

git clone git://github.com/gpodder/gpodder.git

Then, cd into the Git checkout and start it as usual:

cd gpodder
python tools/localdepends.py
bin/gpodder

Again, you don't have to do any installation or compilation steps for gPodder - it will work straight out of a Git checkout (that's how I use it all the time). If you "export" the Emulator as appliance in VirtualBox and then "import" it on a different machine, you can even work with this nicely on Mac OS X and Windows. The fact that the emulator is just another Mer installation also means that you can install a compiler and -devel packages for quick development and testing. Vim 7.3 is already installed, I only wish zsh was also available in the Mer repos :)

Sonntag, 23. Dezember 2012

gPodder 3.4.0 for MeeGo 1.2 Harmattan

As promised, following the 2.20.3 release for Maemo 4 and Maemo 5, a new version of gPodder 3 has been released today. This release brings some new improvements to the QML UI that should make scrolling in the episode list faster, as well as align a bit more with the Harmattan UX Guidelines.

gPodder 3.4.0 running on MeeGo 1.2 Harmattan (N9)
As always, updated packages will be available via Nokia Store once the QA process has finished. As there have been problems with apps.formeego.org recently (3.3.0 isn't even out of the staging area yet, after 3 months), we now provide a package of gPodder for MeeGo 1.2 Harmattan on gpodder.org/downloads for those who want to avoid or can't use Nokia Store (you have to enable packages from unknown sources, and you might have to uninstall the previous version if it came from Nokia Store or Apps For MeeGo due to the Aegis security policy). The source and packaging is available in the "harmattan" branch in Git, as has always been the case.

I hope you like the new UI changes. If you are missing the feed update button in the lower left corner, try "pull to refresh" on the podcast list (this avoids accidental updates when pressing the back button twice). I'd like to create a nicer "pull to refresh" implementation, but the limitations of Qt 4's QML Flickable prevent me from creating a better one (if you have a better implementation than gPodder's PullDownHandle, I'd love to hear from you). Scrolling the episode list should now also be faster (than before), and some unnecessary animations were removed in the process.

Dienstag, 23. Oktober 2012

Dalvik "Hello World" on Harmattan (in a chroot)

Here's a quick and boring tutorial on how to get a Java "Hello World" application running on the Dalvik VM of Nitdroid within Harmattan. This requires the Nitdroid Open Mode Kernel (might or might not work with Inception), all Nitdroid files and a bit of patience. This might brick your device or worse, and require a reflash at best. As you can see from the screenshot below, it's not that exciting ;)
  1. If you want to avoid the Open Mode Warning on each boot, remove the disclaimer from the cal area (this can only be done while in closed mode, as the cal area becomes read-only when flashing open mode until closed mode is re-flashed. This is also the reason why you can't set a device lock code in open mode - the lock code is saved in the cal area) - this is an optional step, and just a cosmetic fix.
  2. Flash the Nitdroid Open Mode Kernel (be sure to read the "Known limitations" on that post) - this works both on the N950 and N9.
  3. Boot into Harmattan open mode and replace the preinit script to allow booting into Nitdroid (again, read and understand the warnings on that post)
  4. Then, download a Nitdroid tarball (the latest is alpha 5, but I had better luck with alpha 4) and extract it to /home/nitdroid/ - the post explains the steps in great detail, including the kernel flashing and preinit replacement
  5. Reboot into Nitdroid (this might be optional, but do it just to check if your Nitdroid installation is working)
  6. Reboot into Harmattan again - the following commands are all carried out as root user inside Harmattan (using "devel-su")
  7. Bind mount /dev/ and /sys/ into Nitdroid:
    mount --bind /dev/ /home/nitdroid/dev/
    mount --bind /sys/ /home/nitdroid/sys/
  8. chroot into the Nitdroid hierarchy:
    /usr/sbin/chroot /home/nitdroid/
  9. Set some environment variables (not all of them might be needed, you can find them in "setup the global environment" of init.rc -- save these commands into "setupenv.sh" or something in /home/nitdroid/ and save yourself some typing):
    export PATH=/system/bin:/system/xbin:/usr/sbin:/usr/bin:/sbin:/bin
    export LD_LIBRARY_PATH=/system/lib
    export ANDROID_BOOTLOGO=1
    export ANDROID_ROOT=/system
    export ANDROID_ASSETS=/system/app
    export ANDROID_DATA=/data
    export EXTERNAL_STORAGE=/mnt/sdcard
    export ASEC_MOUNTPOINT=/mnt/asec
    export LOOP_MOUNTPOINT=/mnt/obb
    export BOOTCLASSPATH=/system/framework/core.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/sys
  10. Start the Dalvik VM:
    / # /system/bin/dalvikvm
    Dalvik VM requires a class name
Ok, great - 10 steps to start the Dalvik VM, but I promised a Hello World. For that, you need the Android SDK (and the corresponding Java JDK) and follow the "Basic Dalvik VM Invocation" instructions (steps 1 to 6 on your host computer, from step 6 on your Harmattan device):
  1. With your favorite editor (mine is vim), create a file "Foo.java" with the following content:
    public class Foo {
        public static void main(String [] args) {
            System.out.println("Hello, world");
        }
    }
  2. Compile it:
    javac Foo.java
  3. Use the "dx" utility (from the Android SDK) to package the Foo.class (generated by javac) into a .jar
    dx --dex --output=foo.jar Foo.class
  4. Bonus exercise: "less" the foo.jar file to see its contents:
    % less foo.jar
    Archive:  foo.jar
     Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
    --------  ------  ------- ---- ---------- ----- --------  ----
          72  Defl:N       70   3% 2012-10-23 15:51 1294a38f  META-INF/MANIFEST.MF
         732  Defl:N      404  45% 2012-10-23 15:51 b6e3654e  classes.dex
    --------          -------  ---                            -------
         804              474  41%                            2 files
  5. Copy this over to your Harmattan device (assuming USB Networking + Developer Mode + "user" access, "developer" should also work):
    scp foo.jar user@192.168.2.15:
  6. SSH into your Harmattan device, become root (devel-su) and copy the .jar file into the Nitdroid hierarchy:
    cp /home/user/foo.jar /home/nitdroid/
  7. chroot into Nitdroid again and set up the environment (see above)
  8. Finally, run Dalvik VM, telling it to run the class "Foo" and using a classpath of "foo.jar":
    / # /system/bin/dalvikvm -cp foo.jar Foo
  9. ...

Montag, 24. September 2012

gPodder 2.20.2 for Maemo 4/5, gPodder 3.3.0 for MeeGo 1.2 Harmattan

gPodder 2.20.2 has been released today, and gPodder 3.3.0 has also been released. Version 2.20.2 is for users of Maemo 4 (N800/N810) and Maemo 5 (N900) and version 3.3.0 is for MeeGo 1.2 Harmattan users (N950/N9).

The reason why another 2.x release comes out at this point in time is because YouTube downloading was broken by another website change recently, and of course we don't want to leave our good old Maemo users without their daily YouTube video fix. A full list of changes for Maemo 4 and 5 can be found in the 2.20.2 release announcement.

Version 3.3.0 for MeeGo 1.2 Harmattan brings some nice features like download resuming, filters for unfinished files, scroll position improvements and display of the publish date and file size in the shownotes. Of course, 3.3.0 also includes the YouTube download fix. A full list of changes can be found in the 3.3.0 release annoucement.

As a side note, Maemo 5 support has now been completely removed from the master branch as of 3.3.0 (it has never been officially supported, but you could kind of run in on the N900 with some motivation and work). N900 users really wanting to use gPodder 3 should use it on Nemo Mobile, supporting gPodder 3 and its QML UI in Maemo 5 is just too much work, and the time working on gPodder is better spent improving the Harmattan version and making sure that the 2.x branch doesn't break.

Here's the run-down of the release status for various versions and targets:

gPodder 2.20.2 is ready for testing in Extras-Testing for Maemo 5 Fremantle.
gPodder 2.20.2 is already in Extras for Maemo 4 Diablo.
gPodder 3.3.0 has been uploaded to Nokia Store QA for MeeGo 1.2 Harmattan.
gPodder 3.3.0 has also been uploaded to the MeeGo Community OBS.

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, 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.

Sonntag, 29. April 2012

gPodder 3.1.1 for MeeGo 1.2 Harmattan

A new version of gPodder, the podcast manager, has been released, and with it (as always) come some new features for the Harmattan (N950 and N9) version. The most visible on (apart from bugfixes) is the new multi-episode selection sheet, which allows users to select multiple episodes at once to either download, playback or delete. Options for "Select all", "Select downloaded", "Select none" and "Invert selection" are provided by the longpress context menu in that list and will modify the selection accordingly.

And yes (as some people are still surprised to learn that): With gPodder, you can also subscribe to YouTube and Vimeo channels (users) and download the videos to your device for easy offline viewing and archiving. Combined with the N9 Media Pushing plug-in by Georg Jens, you can then even play back your YouTube or Vimeo videos on DLNA devices on your home network. Of course, this also works for the RSS "video podcasts" that gPodder also supports in addition to YouTube and Vimeo.

gPodder 3.1.1 "The Preachification of Convincing John" has been uploaded to the Community OBS (Apps For MeeGo) and to Ovi Publish (Nokia Store), and should be available to users in the upcoming days. As always, enjoy this new release and report any bugs or feature requests at bugs.gpodder.org :)

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

Nearly two years ago (in April 2010), I ported Brain Party to the N900 using javispedro's awesome SDL_gles library. Having nearly forgotten about it, I "ported" it to Harmattan today - It's even a bit easier with Harmattan's SDL, which includes the necessary changes. The game doesn't pause/silence when put into the background, but the basic functionalities work, including sound.


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.

Montag, 9. Januar 2012

gPodder 3.0.3 for Harmattan

A new version of gPodder - a podcast and video manager - has been released today. In addition to improvements to the existing YouTube support, this version adds support for downloading videos from Vimeo (so if you wanted to get ahold of ye olde Maemo 5 "Getting Started" video from two years ago, subscribe to metalab on Vimeo, but I'm pretty confident that you can come up with better uses of the Vimeo support ;).

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! :)

Dienstag, 13. Dezember 2011

gPodder 3.0.2 for Harmattan

A new version of gPodder (a free podcast, YouTube and Soundcloud downloader) has been released today. It has been uploaded to the Community OBS (Apps For MeeGo) and to Ovi Store, and is waiting in each QA queue for approval. Some new things to look out for:
  • Common Prefix Elimination: A very cool name for a very space-efficient feature. If all episodes in a podcast have the same prefix in their title, the prefix is stripped. This usually gives you more information about the episode on screen without wasting space with repeated information.
  • Audio Player Scrubbing: You probably know the seeking buttons in the media player. These buttons now show their meaning in a text popup when pressed and - and here comes the cool part - allow you to "scrub" through a podcast.
What scrubbing means is that you can touch-and-hold a button and then scrub on the screen up and down (or left and right - it doesn't really matter, just the distance counts) and the action of the button will be carried out multiple times. This lets you quickly navigate through long podcasts or mixes if you are searching for a certain passage.

Some bugs (like the YouTube episode sorting issue) have also been fixed, more on that in the release announcement. gPodder 3.0.2 "Agent 99" will be available in Ovi Store and Apps For Meego shortly.

Sonntag, 4. Dezember 2011

This weekend's releases: Tap Tap N950, qw.py and the IP Address Widget

Over the weekend, I've pushed out some code for your enjoyment: First up is the incomplete but maybe interesting QML source code of the Tap Tap N950 prototype. I probably won't find time to work on this, but it would be sad to let the small piece of code rot - maybe someone wants to pick up the development of it. I'll answer any questions related to the code in the thread :)

Next up is the open source release of the qw prototype "qw.py", which has been developed during the Super GameDev Weekend 2010 at the Metalab Vienna last December (the next one is at the upcoming weekend; stop by if you are in Vienna!) - nearly 1 year ago. This is not the same as qw The Game in Ovi Store, but it's an earlier version, which still contains multi-player support (4 players on one PC keyboard), and it's written in Python, so it should be easily hackable.

And last but maybe not least is the IP Address "Widget" for Harmattan. This small hack (which is inspired by the earlier Calenderr calendar icon hack) makes use of the fact that the Harmattan UX reloads the icon of an application whenever the .desktop file or the icon file itself changes. The details (and a .deb for easy installation) can be found on the website - basically it shows a way to have semi-interactive "widgets" on the app list on Harmattan. I'm sure that creative readers can come up with some cool ideas :)

Montag, 21. November 2011

Plonk (formerly known as Mong) for Harmattan

Plonk (formerly known as Mong, but renamed since) is now available in Nokia Store for the N9 and N950 as free download:


This is a multi-touch game for two persons, so go out into the big blue room and ask somebody to have a game of Plonk with you :) As you probably already know, this game has been developed at the MeeGo Conference in collaboration with Cornelius Hald and Tim Samoff - sounds have been recorded directly at the hacker lounge by Erik Stein, and Randall Arnold came up with the new name. A real collaborative project, and the source is available from Gitorious! One challenge with Harmattan was disabling Swipe, we solved that with a nifty little class called SwipeControl - it's open source if you want to use it in your game, too :)