Shaving a yak with an angle bracket

Today I wrote an XMPP console for Telepathy, in the form of a little Gabble plugin plus a really terrible Gtk+ interface that lets you send an IQ and see the result, syntax-highlighted—mostly in bright pink—by GtkSourceView. Wocky, gobject-introspection and GtkGrid.attach_next_to are all great. In the highly unlikely event that XMPP consoles are something that interest you, and that the lack of one has been dissuading you from embracing Empathy, I hope this meets with your approval.

This has mostly been a diversion from debugging some weird alias, roster and presence interactions between Gabble and Prosody, which I still haven’t tracked down. But hey, the angle brackets look nicer now!

Sojourner help wanted for MeeGo Conference SF

A few months back, Topi Santakivi updated Sojourner for the MeeGo Summit in Tampere. Andrew Flegg wonders about an update for MeeGo Conference San Francisco 2011, which I’m sadly not attending. The schedule’s available as a web page. I had a quick poke around for a version in a more machine-readable format—ideally PentaBarf XML, which Sojourner understands, but even something that could be converted to that—and couldn’t see anything obvious.

Dear reader, would you happen to know of such a machine-readable schedule, and would you like to send a merge request updating Sojourner to show it?

Empathy chat room improvements

Folks who’ve tried using Empathy for IRC will have found the experience a bit lacking. While some of this is due to Empathy itself, many of the problems are due to Idle, the Telepathy backend for IRC, being sorely in need of love and caring. Happily, Debarshi Ray has taken it under his wing. Most visibly, he’s implemented the ContactInfo interface, which allows Telepathy UIs to show WHOIS information. I threw together a few patches for Empathy to take advantage of this information:

Contact information for ‘wjt’ on Freenode, showing other channels, away message, and other IRC-specific details
Please ignore the ‘missing image’ icon!

Sadly, the “Channels” field is not very useful on most major networks, like Freenode, since—by default—you can only see the rooms that both you and the contact are in. In the past, on IRC, that window was positively anaemic, showing only the first three lines. Now it’s full of information, and could do with some advice from designer types: how can we show all the information described in his blog post without the dialog becoming even more a massive grid of words?

Rishi’s also fixed up many less obvious annoyances in Idle, like making it sending pings to keep otherwise-idle (ahem) connections alive. It’s great to have him on board!

Stepping away from IRC, I’ve recently been using XMPP chat rooms more, and noticed a subtle improvement implemented by Chandni: Empathy now shows per-user typing notifications in the user list. Now I wish this were possible on IRC too, or that more channels would move to XMPP: it’s really useful information to have, particularly in smallish rooms.

Termite Misdirection

I really hate how submitting or updating a bug on Bugzilla leaves you at post_bug.cgi or process_bug.cgi, rather than bouncing you back to a URL that actually identifies the bug in question. So, I wrote a Greasemonkey userscript named Termite Misdirection to detect this situation and fix the URL. If your browser supports the HTML5 history API, it should be mostly transparent; if not, then you’ll see the page being reloaded, and you’ll lose the “Changes submitted” etc. message.

I use this Chromium; I’m told it works in Firefox too. (Yes, I know I should submit a patch to Bugzilla itself to make this unnecessary, but that would be more work than 16 lines of Javascript and wouldn’t work with all the existing Bugzilla instances I use every day.)

eMusic in Banshee

I’ve been an eMusic customer for many years, and I’m pretty happy with it. Banshee comes with a plugin—courtesy of Eitan—to help download entire albums from eMusic without using their own downloader application. But you have to go search in your browser, and then hope the necessary MIME type handlers are set up to pass the .emx file eMusic gives you to Banshee, and also have remembered to enable the plugin.

Having enjoyed the notorious Amazon store integration, I thought I’d try my hand at something similar for eMusic. Here’s a quick demo video of downloading a couple of albums: one free, one not. Not shown in the video: playing track previews inside Banshee, and downloading invididual tracks.

I’m pleased to say that I wrote approximately no code (which is good, because I don’t really speak C♯): it’s derived from the Amazon store plugin, with most of the code removed. What remains is in a branch on fd.o; I’ve updated bgo#623828 with a link if anyone fancies reviewing this. (I am very tempted to set up a personal cheese and wine fund.)

RXMPP: an R library for XMPP based on Wocky

My friend David Lawrence Miller likes the internet, and also likes statistics. (He has many other admirable qualities, but these are the two most pertinent to this bulletin.) He spends some of his days writing programs in R, which he then runs on one of a number of servers. He wanted his R programs to send him messages over Google Talk to report their progress.

Naturally, I suggested he use Wocky, everyone’s favourite GObject-flavoured XMPP library. (Do not confuse.) And lo! he’s started RXMPP, a simple R library for sending IMs. He’s developing on Mac OS X; it should work on Linux and Windows just as well, though.

(As an aside: I wonder if anyone would be interested in maintaining a Wocky framework for OS X? Currently one has to install glib via MacPorts, and then build Wocky from Git, to hack on RXMPP on OS X.)

Sojourner 0.2: coloured and communitized

Another week, another release of Sojourner; this time in glorious 32-bit colour, and featuring its first community contribution!

Screenshot of Sojourner's favourites window Screenshot of Sojourner's event details page

The eagle-eyed reader will have noticed that, in the favourite talks in the screenshot above, Andrew‘s Django talk sadly clashes with Raúl‘s Folks talk. I hadn’t noticed, until Joaquim Rocha sent patches adding a button that shows which of your favourites clash with the event you’re viewing. Now I have a dilemma on my hands… Joaquim also cleaned up some of my less-beautiful code. Thank you!

The event lists are now easier to skim-read, with subheaders for the day and coloured swatches representing the track the talk is part of. I don’t know if in practice people will actually associate the colours with tracks, but I do think than the pastel stripe at the left-hand side makes the list easier on the eye. I initially wanted to re-use the colours on the official schedule, but didn’t really want to hardcode a massive list of colours (and the schedule XML doesn’t include them), so they’re generated based on a hash of the track name. (Thanks to Sjoerd Simons for the “vary H, fix S and V” tip for generating a palette.)

The package should be available from extras-testing by the time you read this.

Sojourner: a(nother) FOSDEM schedule app for the N900

Last year, I threw together a primitive FOSDEM schedule application for the N900. A year later—just in time for FOSDEM 2011, which I am attending!—it’s back, with more polish and a catchier name: Sojourner.

A screenshot of Sojourner's main window A screenshot of Sojourner's single event view

New since last time around:

  • You can refresh the schedule from within the app;
  • It works in portrait mode;
  • It generally looks a bit better, with margins and button sizes matching other Fremantle applications more closely;
  • It has, yunno, icons and packaging.

Most of those fall firmly into the “well of course it should be like that”. I told you it was primitive the first time around. :-) There are a few more screenshots on my Sojourner page, or you can install it from Fremantle Extras. It’s currently in extras-testing; please feel free to leave feedback there or here. The wiki on Gitorious has a laundry list of suggestions for improvements, as well as a few buglets I’m aware of. Of course, if you want to get involved, I’d be delighted. It’s written in Python, using Gtk+ and Hildon. Non-code-wise, the artwork could definitely use some love (I just threw it together in a few minutes in the Gimp) and some more careful thought about the user experience might be nice.


Today, in “ridiculous specification I’ve come across in the course of entirely legitimate work” …

In case just typing a status message wasn’t good enough, XEP-0108: User Activity defines an XMPP extension for telling your contacts precisely what you’re up to in a machine-readable form … as long as it’s one of a rigidly-defined taxonomy of activities. Buying groceries is a kind of chore, whereas shopping is supposedly a form of relaxation; I think some might disagree that you’re inactive while praying.

RFC 4480: Rich Presence Extensions to the Presence Information Data Format goes a step further and allows you to specify that you’re in a location that’s too dark for video, too noisy for audio, and inappropriate for IM. Your mood can be “invincible”, but—distressingly—neither “quixotic” nor “apathetic” are permitted. I think I’ll stick to LiveJournal.

MeeGo Conference: Telepathy 1.0 roadmap

The queue for registration

Along with something like 15 other Collaborans, I’m at the MeeGo Conference 2010 in Dublin. I’ve somehow managed never to visit Ireland before, so I’m hoping to find some time to explore a bit while I’m here.

I’m giving a talk titled The Road to Telepathy 1.0 tomorrow at 9am (yerk!) in the Vavasour Suite. I’ll be sketching out a rough roadmap, or rather collection of related goals and schedules; also, there’ll be an update on ongoing feature development. Right afterwards, at 9.30, the inimitable Mikhail Zabaluev is speaking on Developing Communication Protocol Implementations in Telepathy, based on Nokia’s experience developing SIP, cellular and Skype backends for Telepathy over the past years.

Also, at the Collabora stand we’re demoing DSP-accelerated video calls on an OMAP board using GStreamer, and integration with various services in MeeGo Netbook via Telepathy. Collabora folks working on all kinds of projects will be around; see you there!