31 Jul 2010

feedPlanet Maemo

Your favourite router is up again, faster than ever

Mappero is back from holidays. Version 3.0+beta11 has just been released and doesn't contain any of the big features I was planning; instead, it's mostly a bugfix release, but a rather important one. Here are the main highlights:

I was hoping to make a gigantic release with some great improvements I had in mind, but the current situation of gnuite.com server (the routing data provider for Mappero and maemo-mapper), which lately is often not responding, forced me to hurry up and make a new release as quickly as possible.
Routing in this new version works by directly connecting to the Google Maps server (although the indirect way is still available, under the "gnuite" router option) and downloading the route as a KML file. This is much faster than the old way, because we have a few network hops less and we are not waiting for the gnuite server to process the route and rebuild it as a GPX file for us.

The other main feature introduced with this release is the address input dialog:

This dialog is invoked when clicking on the route icon and then choose the "Set destination..." item. It lists the locations you've been searching before and filters them as you type, in a similar fashion as the browser URL suggestion works.
I plan to improve it by adding suggestions retrieved via the network from Google Maps, but this will require some deeper changes in the code that might take some time.

That's it for now. I hope you'll enjoy this release. :-)

(currently it's in the extras-testing repository: to try it right now, download this and this)

1 Add to favourites0 Bury

31 Jul 2010 1:10pm GMT

30 Jul 2010

feedPlanet Maemo

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:

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.

4 Add to favourites0 Bury

30 Jul 2010 6:39pm GMT

Tracker this, Tracker that, everything Tracker

Busy handling

I made an article about reporting busy status in Tracker before.

But then it wasn't yet possible to queue a query while Tracker's RDF store is busy. We're making this possible following next unstable release. Yeah I know you guys hate that Tracker's RDF store can be busy. But you tell us what else to do while restoring a backup, or while replaying a journal?

While we are replaying the journal, or restoring a backup, we'll accept your result-hungry queries into our queue. Meanwhile you get progress and status indication over a DBus signal. Some documentation about this is available here.

SPARQL 1.1 Draft features: IN and NOT IN

We had a feature requests for supporting SPARQL IN and NOT IN. As usual, we're ahead of the SPARQL Draft specification. But I don't think IN and NOT IN will look much different in the end. Anyway, it was straightforward so I just implemented both.

It goes like this:

SELECT ?abc { ?abc a nie:InformationElement ;
                   nie:title ?title .
               FILTER (?title IN ('abc', 'def')) }
SELECT ?abc { ?abc a nie:InformationElement ;
                   nie:title ?title .
               FILTER (?title NOT IN ('xyz', 'def')) }

It's particularly useful to get metadata about a defined set of resources (give me the author of this, this and that file)

Direct access

This work is progressing nicely. Most of the guys on the team are working on this, and it's going to be awesome thanks to SQLite's WAL journal mode. SQLite's WAL mode is still under development and probably unstable here and there, but we're trusting the SQLite guys with this anyway.

What is left to do for direct-access is cleaning up a bit, getting the small nasty things right. You know. The basics are all in place now.

We're doing most of the library code in Vala, but clever people can easily imagine the C API valac makes from the .vala files here. That's the abstract API that client developers will use. Unless you use a higher level API like libqttracker, QSparql, Hormiga or sparql-glib.

All of which still need to be adapted to the direct-access work that we're doing. But we're in close contact with all of the developers involved in those libraries. And they're all thrilled to implement backends for the new stuff.

Plans

We plan to change the signals-on-changes or class-signals feature a bit so that the three signals are merged into one. The problem with three is that you can't reliably identify a change-transaction this way (a rename of a file, for example).

Another thing on our list is merging Zeitgeist's ontology. To the other team members at Tracker: guys, Zeitgeist has been waiting for three months now. Let's just get this done!

Oh there are a lot of plans, to be honest.

I wonder when, if ever, we go in feature freeze. Hehe. I guess we'll just have very short feature-freeze periods. Whatever, it's fun.

MeeGo in cars

Hey BMW & co, if you guys want to learn how to write music players and playlists for car entertainment on MeeGo, get in touch! This Tracker that I'm talking about is on that MeeGo OS; being the Music's metadata database is among its purposes.

I can't wait to have a better music player playlist my car.

Or maybe some integration with the in-car GPS and the car owner's appointments and meetings? With geo-tagged photos on the car owner's phone? Automatic and instant synchronization with Nokia's future phones? Sounds all very doable, even easy, to me. I'd want all that stuff. Use-cases!

Let's talk!

3 Add to favourites2 Bury

30 Jul 2010 1:45pm GMT

Send files to your contacts on your N900

You can share files on your N900 via Bluetooth, E-Mail and web services (Flickr and Facebook) thanks to libsharing-dialog. But there is no file transfers to a contact through instant messaging.

libsharing-dialog
The sharing dialog with Bluetooth, E-Mail and web services features

But look, the sharing dialog is obviously missing a fourth button named "Share via IM"!

Jonny Lamb wrote Monorail, a file transfer application for the N900. Monorail is a standalone application using the Telepathy framework but so far it does not integrate with libsharing-dialog. Libsharing-dialog is supposed to be extensible by plugins (see the Sharing Plug-in documentation). Unfortunately the API is more suitable for web services than for file transfers through instant messenging so it makes the work more difficult.

So I implemented that fourth button with some hacks to workaround the limitations of the libsharing-dialog API:

Sharing dialog with the File Transfer feature
The sharing dialog after installing Monorail 0.3

It works fine in the file manager and the image viewer. Do you know any other application with a file sharing feature?

The address book can share contact cards via SMS, Bluetooth and E-Mail but it does not use libsharing-dialog, so Monorail does not automatically add my "Share via IM" button.


Send a contact card from the address book

But since PR1.2, the address book has a new plugin API and it automatically links to your plugins installed in /usr/lib/osso-addressbook/plugins. The plugin API is designed for menu extensions and does not have helper functions for the sharing dialog. But with Marco's help, I replaced OssoABookSendContactsDialog's constructed function to add the fourth button:


Send a contact card from the address book after installing Monorail 0.3

Monorail 0.3 is available in maemo extras-devel.

7 Add to favourites1 Bury

30 Jul 2010 12:47pm GMT

no play?

What was I thinking, all work and no play? It's a game, it's fun!

And now some testing. My destination is a nearby beach :D


4 Add to favourites0 Bury

30 Jul 2010 11:34am GMT

Where are those mobile Qt apps ? (Part 3, Resolution)

After a short historical overview and a short list of growing pains, in this, third installment of the mobile Qt app story, I will focus on what boulders remain in the path of widespread adoption of Qt among app mobile developers. Most of the technical groundwork has been laid down, but to reach a final resolution, it needs to include a bit more than just a healthy base.


Decouple Qt releases from firmware releases

As seen from the infamous PR1.2 delay, a coupled-with-the-firmware release cycle is detrimental to the platform. If multiple devices are on the market, it would mean instant-fragmentation as developers would have to code for the Qt released with the last firmware. This is eating Android alive, too, as various handsets have different upgrade cycles. A separate distribution mechanism HAS to be employed. It will be tricky as with MeeGo and Symbian^4 Qt is part of the OS and many teams will be reluctant to bet firmware functionality on the backward compatibility of Qt. But that is not the only thing that can cause fragmentation if it isn't true that...

One mobile widget framework is enough


I harp about this regularly (and will continue to do so until I get good news from an official source :), the option to have separate widget frameworks for Symbian (Orbit/uiemo) and MeeGo (DirectUI/MeeGo Touch Framework) is something that is completely against what Qt is trying to accomplish by bridging the two OS-es.

All you bases are belong to us

Qt is almost a country of it's own, addressing (or having a development version that addresses) various aspects of software development, both mobile and desktop. However, there is one thing where it is sorely lacking - the wizz-bang games department. Yes, QGraphicsView and 3D enablers are cool and all, but that is not enough (even with QML and UI scripting). It would certainly be an overkill and unnecessary delay to implement a complete game engine in Qt, but there are alternatives - make a Unity3D port, or, better yet, in the spirit of open source, sponsor Ogre binding (and GLES) development for Qt, with the necessary physics libs.

Build it and they will come - Ovi and devices

Professional mobile developers can and will materialize only after the market for the Qt apps materializes. The prerequisite for this is that Qt gets a first-class treatment in the Ovi store, and the QA process is not a hit-and-miss, something that developers are guessing about. Once the Ovi store really starts accepting Qt apps en masse, the question turns into how many devices can be targeted via Qt. I can hear you say "well that's like almost all Symbian handsets in the last 2-3 years". Yeah, but...


Market share is not necessarily mindshare

Devices that can be retrofitted with Qt already exist in the (tens of) millions range. However, these devices are mostly low to midrange devices as there were no runaway Symbian successes in the high-end segment for a while now. It will be hard to convince people to target a market, no matter how objectively big if they believe/see it as a relic, which means...

You've got to be cool

The vehicles for the Qt platform need to be cool and carriers of high tech. This is the wave Android is riding in 2010. Now, the best way to do this is having iconic devices (iPhone killers if you wish), but this is not ONLY about devices, it's about how you handle your technology in general, your devs, your community, blogs and everything related to it. Qt has to be perceived cool, a must-have even by non-tech people, not just a sticker on the corner of a box and something geeks nod over on irc. It IS the differentiating factor. Take for example the happenings of last week in the Nokia N900 land. A triple-release is done - preview of the Qt Web Runtime, a new version of Qt Mobility and the super-cool fcamera project. This triplet just oozes with tech-cool demo potential, but it just isn't leveraged, hardly getting even a blog post. Instead there is a campaign and an 'exciting news' about Ovi doing a comic (I'm sure it will be good, but... ). This points to comms issues, but also lack of

Communication/Community Focus

While I don't know how many different communities and aspects of Qt should there addressed separately, I'm pretty sure we are already overloaded, even before the hordes of the new Qt developer generations emerge. There is the Qt Developer Network, then we have Forum Nokia (home of the Nokia Qt SDK), followed by a more specific MeeGo community that is vested (well, at least the handset variant) in Qt, and the same will be true for Symbian. OTOH If you want to publish/talk about Qt development on currently available devices, you should go to maemo.org. While in community waters, we should also mention Qt Centre. Quite a handful of forums, mailing lists and irc channels to follow, and I have not even talked about communities focused squarely at end-users ! Speaking of end-users, some people who even knew about those Qt/fcam releases I mentioned above were quite discontent, because there is/was no concept of...

Control and drive expectations

The 'other' platforms and ecosystem have built up and trained users to expect certain things in a certain way, and if they are not educated, they will not understand what is going on and will easily dismiss even good news when it is not is a form they expect it in. See the above - new releases of QtMobility, WRT, etc were not treated by many as real news or support by Nokia for the N900, even though they were done by official Nokia teams. The concept of the 'holy firmware release' is still strong, because people don't understand the concept of libraries and components (as that is not how most other platforms operate).


Those would be my major points, and while they might sound a bit grim (some not even related to Qt itself), I don't think they are insurmountable at all, it just takes a little effort (some already underway) and presto, the arid Qt mobile app landscape can bloom like a savanna after a rain.

12 Add to favourites0 Bury

30 Jul 2010 11:00am GMT

My thanks to the GUADEC organisers

I thought I would walk to the Collabora party from the conference. It was four miles, a pleasant walk. On the way I had to stop to write a sonnet.


If anything should happen to The Hague,
if someday they abandon Amsterdam,
philosophers will take these strange and vague
descriptions, and derive each tree and tram
by mathematical necessity:
should nations shake their fists across the seas
with words of war, it follows there must be
a middle ground, a people loving peace.
And is this scrap alone a netherland?
Not so: we spend our nights beneath the sky,
and every country's low for us, who stand
a thousand miles below the lights on high;
if only I could learn to live as such,
and count myself as kindly as the Dutch.

I passed the Palace of Justice on the way, which is very beautiful. Collabora's party was as impressive as always, with barbecues and beer. This morning I managed to pull myself out of the resulting hangover enough to give part of a talk on xzibit. (It was really Guillaume's talk, but he was kind enough to give me a timeslice.) The talk went well except that the demo failed, due to my having tried to fix something and breaking it further. There will presumably be video of it all at some point.

Many thanks to Collabora for organising the party, but still more for sending me here (and to Cambridge).

I have written a nautilus plugin to post photos online. I might tidy it up a little and package it.

The MeeGo book is fast approaching publication. It feels like levelling up.

3 Add to favourites0 Bury

30 Jul 2010 8:58am GMT

29 Jul 2010

feedPlanet Maemo

Porting ejpi: Tree Models in Qt

For me, one thing that differentiates the quality of a calculator on a mouse or touch driven device is having a calculation history and having it be interactive. In Gtk I implemented this with a TreeView and a ListStore. I had never implemented a custom model in Gtk, the included models were simple enough and flexible enough that I didn't have the need.

When I ported Gonvert to Qt, all I could find information for was custom models with QAbstractItemModel and QTreeWidget/QTreeWidgetItem. QTreeWidgetItem's seem to only be good for Text. This worked for parts of Gonvert but not for others so I went through the complicated affair of implementing a QAbstractItemModel. I never felt like I fully understood the relationships of various items which usually worries me. I also found it slow due to all of the protection I "should" have in my code which causes a lot of calling back and forth between C++ and Python.

I'm unsure how I missed it but when I started on ejpi I came across QStandardItemModel/QStandardItem. This seems to at least allow a little more flexibility. I can put icons and checkboxes in as well as text into the model. I can also attach random python objects to each item. The downside to a stock model is that you have to externally maintain any invariants but I was already managing those with my Gtk version.

I would be curious about the various performance merits to each approach but I'll have to pass on that for now. The two main things I found frustrating was finding out about these and how each API was helpful in its own way, sometimes better, sometimes worse than its fellow approaches.

Most of my API issues were due to being unfamiliar with them and having to fight with the different approaches each model system took to presenting itself to the developer. I still have one unfortunate piece of code in ejpi's calucation history which implements peek through a pop and a push.

I've not messed with setting the font on any of these (I should have for Gonvert and also for ejpi) so I'm unsure how the font experience is in Qt. Mainly I'm interested in what formatting Pango html-esque tags allowed, changing relative size and basic formatting while keeping everything else to theme defaults. A quick look through the API seems to suggest this is simple but that is yet to be determined.
I still miss GTK's generic way of handling rendering with its use of CellRenderers. You don't have to be stuck with the built-in choices for representing items in your model. It also keeps presentation information away from the model.

I did enjoy how easy QStandardItem's made user edits (sadly only seems to work on the desktop) and activating of individual items. I didn't get around to exploring drag and drop for history re-arrangement (helpful for RPN calculators) but I don't think I implemented that for the GTK version either.

My GTK version and my Qt version of my ejpi history are available for comparison.

I guess the summary would be that overall I'm a fan of QStandardItemModel and wish I had found it sooner.

3 Add to favourites0 Bury

29 Jul 2010 9:19pm GMT

Porting ejpi: Icon Theming

ejpi includes some custom icons as well as using theme icons.

The custom icons are used for a couple of buttons. I know the path to the custom icons and I load them up and everything works as expected.

The stock icons are used for deleting items in the calculator's history as well as a severity indicator and close button for the error info box.

I ported the GTK code from using theme icon names to QIcon.fromTheme. It was fun for me to find out that fromTheme was added in Qt 4.6 (I still support Maemo 4.1 with my applications and it only has Qt 4.2 I think). How did applications do this before 4.6? I don't think I've used KDE since v2 but I think its generally supported icon theming along with everything else which precludes the application building all icons in as resources.

I also had fun with fd.o icon names not being available on all platforms so I had to find alternatives for each and put in fallback code.

I guess chock this up as another thing to abstract away when running on various platforms.

I'm not saying this was hard or anything but just another lessons learned in porting to Qt.

3 Add to favourites0 Bury

29 Jul 2010 8:42pm GMT

DEFCON app

It has come to my attention that the GNOME Foundation is interested in my DEFCON app in order to better enforce the new Speaker Guidelines in current and future GUADECs. I'm happy to announce that the app is in fact for sale, so just contact xlopez at igalia.com for details.

PS: starting price is 500 EUR, it includes a tactical nuclear strike to the talk site when DEFCON 1 is hit.

2 Add to favourites5 Bury

29 Jul 2010 3:26pm GMT

Almost there

The project is nearing it's end. Social features are forming up, the UI is getting more refined forms and the amount of rows in my code is building up. At this point in my code I'm making things work rather than making the code look good. There is some refactoring ahead.

The program itself has gotten an adventure editor, where you can form your own adventures. Click on the map and a headline and you are on your way. In settings you can change your buttons colour and soon enough you can read comments and see where other participants are.

The next release will probably happen during the weekend. Before that it's work work work and no play.


10 Add to favourites0 Bury

29 Jul 2010 12:14pm GMT

Angry Birds win "Best Game in Ovi Store" poll

What's the best game in the Ovi Store? Nokia asked last week with ten games to choose from, and the result are available. But in a lovely nod to their ability to spot a top game, the write-in "others" category provided the runaway winner with 36% of the vote. The winning garland has been placed on Angry Birds, available for the N900. Which isn't that surprising given that (a) it's a runaway hit on the iPhone and (b) the N900 version sold six times as fast as the iPhone version!

8 Add to favourites1 Bury

29 Jul 2010 8:55am GMT

Touch or keyboard, is there only one way to sort this out?

You may recall last week we pointed out Nokia'a Conversations Blog post crying out the virtues of the keyboard. Keeping the karmic balance, this week sees the touchscreen side of the debate step up to take a swing at the arguments. And then there's Tomi Ahonen's take on the debate.

4 Add to favourites1 Bury

29 Jul 2010 8:21am GMT

28 Jul 2010

feedPlanet Maemo

Building Firefox 2.0 Position & Product

Firefox for Mobile
Building Firefox 2.0 Position & Product - http://mozmobileintern.wordpress.com/2010...

6 Add to favourites0 Bury

28 Jul 2010 7:54pm GMT

Akademy 2010: Wrap-up (with travelogue!)

As promised, I'm finally getting around to my final post on the Akademy 2010 experience in Tampere, Finland. For those interested, I'll cover most of the journey start to end.

My participation began with a request from Claudia Rauch to the community council for submissions from the maemo.org community. The chair at the time, Valerio, posted a plea at the discussion forum… which went unanswered. So, volunteering idiot that I am, I decided to give it a shot. My proposed talk on user engagement was accepted, and I began an open presentation development process at both maemo.org and Meego.com forums.

Design-by-committee tends to be the wrong way to achieve stellar results, but the goal here was to identify my audience and their expectations. Plus the solicitation of feedback fit the theme of the talk. There were the usual conflicting suggestions but this only served to underscore the importance of an ultimate single voice making final decisions. But more on that later.

I worked on the presentation right up until flight time. As for the flight itself, I really owe Claudia for going beyond the call of duty in helping with arrangements. Current circumstances prevented me from being able to purchase my ticket in advance and she was very patient in making it happen.

The flight over to Europe connected through Charles De Gaulle (CDG) airport in Paris, one of my favorite stops on international trips if I'm in need of a puke-inducing marathon run. Rarely do I pass through without some incident and/or delay, and this time was no exception. We were too late getting off the plane, there was only one officer checking international passports at a very long line, and the Finnair passenger check was clogged beyond belief. Suffice to say I missed my connecting flight to Helsinki Vantaa. $#@%^$!!! to put it mildly.

Amazingly, the Finnair agent was unusually rude. She insisted I needed to pay $250 extra to get on the next flight out. Excuse me, but WTF??? She sent me back across the airport to the American Airlines service desk, where my experience turned around 180 degrees. The agent there was extremely helpful, apologized profusely for the inconvenience, and promptly printed a new boarding pass for the next flight. No charge whatsoever. THAT, my friends, is delightful service. Moral: do not connect through CDG. Take ANY other option.

Unfortunately that delay screwed up other arrangements. I had prepurchased a ticket for the Helsinki-Tampere train trip over the Internet. The gentleman at the station refused to refund or honor that ticket. Oops. $34 in the trash. Moral: don't buy the train tickets over the Internet.

By this point I was feeling frantic. I was supposed to meet Valerio on the train to receive a local SIM card provided by another friend, Carol. Without it I was incommunicado. No problem though, because I knew I could find wifi somewhere in Tampere, and had VoIP setup on my N900 and E71x. Simple plan: debark the train at Tampere station, find wifi, call Carol, join group at Plevna for beer and joyful comraderie.

Not so fast.

I could find no free wifi, surprisingly, and had difficulty getting a paid service to work. Fourth time was a charm though, and 10 euros later I was finally talking to Carol. Yes! Long story shortened, she met me there, we got a ride to Plevna, and the rest fell into place. Moral: order the Plevna house dark beer.

I've already described parts of the conference here, there and elsewhere so no need to repeat. The main takeaway I got regarding my presentation was that I oversold the audience on the concept. I'm so used to marketing-driven proposals that I reflexively stuff the first two-thirds of any slide set with justifying charts and data bits. In hindsight, I should have realized the savvy KDE audience didn't need to be convinced of the basis and I could have spent more time on the meat of the topic: integrating user input/feedback into mobile device operating systems and applications. Moral: get out of marketing mode!

The KDE folks were extremely tolerant of my missteps. It was a bit disconcerting though to only have one question after the talk… until later, that is. Several people approached me during the next few days to say that the talk didn't trigger anything at first but as the subject percolated a bit they began considering possibilities… some of which (like a Bugzilla wizard on cell phones) I could have covered had I downplayed the marketing spiel. It was really cool to be walking down the street and be hailed by several people at a restaurant table, who had all experienced that delayed resonance and now wanted to tell me how much they were inspired by the talk. That was the shot I needed! Moral: don't sweat the small stuff.

I had to leave before the conference officially ended but I did get to go on the day trip. It's been way too long since I enjoyed the great outdoors and, mosquitoes and all, I had a great time. Fortunately we just missed a bear's visit.

The trip back home was largely uneventful. I took an early bus back to Helsinki airport, sailed through security there, and successfully navigated Frankfurt airport despite its incredible size. Kudos to the operators for their efficiency!

I want to thank KDE and the Akademy 2010 sponsors for making this such a wonderful event. On a more personal note, thanks to Timo, Valerio, Carol (who graciously provided a place to stay), Jens, Henri, Leinir, Miia, Toni, Knut and especially Claudia for their wonderful hospitality in Tampere. I'm sure I abused it in my state of hyperexcitement. Looking forward to doing so again sometime. MeeGo Conference 2010, anyone?


Filed under: Into Outreach, Mentioning Maemo, Mentioning MeeGo, The Write Stuff Tagged: 2010, Akademy, CDG, Finland, Frankfurt, KDE, Plevna, Tampere 7 Add to favourites1 Bury

28 Jul 2010 6:30pm GMT

GSoC: Annotations and FeedBooks.com-catalog

I've uploaded a new version (0.0.8-1) of MeBook to extras-devel. Users can now add annotations to books and search books from a book catalog (feedbooks.com). Here's some screenshots of the new features.

The annotation dialog can be opened by long pressing the book area on the spot where you want to make an annotation.

One can search feedbooks.com for books and download them to the library, the search is very basic and there's no browse functionality yet. The catalog can be accessed from the main view.

When a book is tapped a book info dialog opens.


13 Add to favourites0 Bury

28 Jul 2010 3:59pm GMT