Recursive VNC Cubes

Recursive VNC Cubes

I’m giving a demo tomorrow remotely and wanted to see how much VNC could take. Enable VNC server, run vncviewer against yourself, and play with Compiz — or just move some windows around. The infinite mirror effect is always good for hours of entertainment, now in 3D.

Ring in the New Year with Really Rich-n-Rockin’ Radio

In the spirit of holiday presents, I hereby announce the new Internet Radio plugin for Banshee.

Banshee Internet Radio Screenshot

I started earlier this week working on a completely new version of the plugin. My primary goal with the new plugin was to offer content that would automatically refresh from a web service. This would allow us to avoid stale streams, provide new content without having to make a release, etc.

We are now serving up station playlists in XSPF format on Currently the list of stations is fairly limited, but expect this to grow very shortly and before the 0.11.4 release (which will be very soon).

To make this possible, I first implemented the XSPF spec, then started hacking on the UI for it. Once I had the UI mostly done, to the point where I could start playing streams, I started focusing on making the actual streaming experience really slick. Most of my testing in this area has been against the Helix backend, as it has very rich streaming media support, and my GStreamer install on my SLED box doesn’t support “radio” metadata (though I hear this is fixed in later releases due to the new icydemux element).

That said, if you have the Helix backend installed for Banshee, you’re in for a real treat. “Proper” Real Audio streams will send metadata on track change which includes full artist, album, track, and duration data. This means that the songs you hear in the live stream will actually appear as separate tracks in the UI, with the only difference being seeking is not supported. The position/duration slider/label behaves as expected, which is really sweet. However, if all the proper tag messages come in from the GStreamer backend, this should all “just work” if you have the latest GStreamer and listen to a rich stream.

I also implemented a new metadata service API and a Rhapsody web serivces backend for it. I’ll migrate the MusicBrainz support in Banshee to this new metadata service soon as well. This means that when you start playing a song, be it local/in-your-library, or part of a remote stream, the respective web services are queried immediately and metadata is returned. Basically, it comes down to seeing more cover art in your Banshee experience, even when playing rich radio stations.

The Recommendations plugin was also updated to work with virtual tracks in streams, so with all the updates combined,Internet Radio has some really, really awesome potential. The problem is just finding streams that send rich metadata updates. Anything that sends at least an artist and album should work with the live cover art fetcher and Recommendation plugins, and the experience can get even better if durations are sent too.

The screenshot above shows what you can experience if you play a RadioPass station from It’s rather sweet. And of course, the track notification/libnotify bubbles work for virtual tracks in streams as well :-).

You’ll need the latest updates from banshee SVN in GNOME (woo, no more CVS!) and the latest banshee-official-plugins from Banshee SVN (soon to move to GNOME SVN) to try this all out.

I’ll start working on the UI for manually adding your own radio streams soon. It’ll be in for 0.11.4. Currently only stations loaded from will show up in the UI.

The best to all in 2007!

Harmony 880 Remote on Linux

A few weeks ago I bought the Harmony 880 Remote from Logitech. The thing is amazing. I cannot run my home theater without it now.

You create an online profile and enter all your hardware from their database. Each hardware profile is fully configurable. If a hardware profile is missing a feature, the remote can “learn” from your OEM remote as it has an IR receiver. Essentially any IR device can be configured to work with the 880 remote. You can create virtual keys – 10 of which can be present in any order on the built in LCD at a time and you can page through more functions. Most features you need for home theater are actual keys on the remote and are organized very well.

Harmony 880 Remote

What’s really fantastic about it is the “Activities” feature. Here you create activity profiles. By this I mean, “Watch Cable DVR,” for example. This profile set my audio receiver to Aux 2, my TV to HDMI, turns my cable DVR to my favorite channel, etc. Audio commands are sent to the receiver, DVR commands to the cable DVR, TV commands to the TV. It’s perfect.

The power of the IR transmitter is tremendous. I can keep the remote with me at my desk, facing in the opposite direction of my audio receiver and another room away (granted, I do have a very open floorplan) and control volume levels. I can lay on my couch with the remote and not worry about pointing it anywhere. It has a motion sensor to detect when it should turn on the button and screen backlights. The thing is just nice.

The problem however, is in its update design. To configure all these settings and niceties you log in to your web-based configuration page and go to town. When you’re ready to update the device, you’re asked to download an EZHex file containing your changes in an XML+Binary blob sort of way. Here comes the trouble. You need to be using Windows or a Mac. I get away with this using my XP VMWare install under SLED, but it’s hardly optimal. Once the file is downloaded, you run it in the EZHex sync program, it contacts your remote over USB, and sends the file. Firmware updates are also delivered in the same way. The same program is also used to somehow read IR commands from the built in IR receiver when you ask the web-baesd configuration program to “learn” a command from an OEM device.

I would love to see a program under Linux that at least supports saving the EZHex dump to the remote. It’d be super-sweet if it could also do OEM IR command learning and firmware updates as well (firmware is probably in the same boat as configuration syncing).

So, I’m ready to donate a cash prize of US$75, which is about 1/2 the price of the 880 remote to the first person that can deliver on a Linux program that implements configuration syncing. Another US$15 if the program supports updating firmware on the device, and finally, another US$60 if the program allows OEM IR command learning. It needs to work with the 880 web-based configuration software of course. If all three features are implemented, I’ll essentially be reimbursing you for your 880 remote. I don’t really care about UI. A console program that does the job is fine with me. The code must be GPL, LGPL, or even better, MIT X11.

I suspect that some debugging/listening will reveal a lot, and it can be implemented fairly quickly using libusb or something. I just don’t have the time to really look into it. It would have been nice if the harmony was a mass storage device and you simply copied your configuration profile and firmware updates to it. Oh well. Maybe Logitech can be contacted and specs can be obtained. That’d be sweet.

That said, once you do get your perfect configuration for the remote, you really have no reason to boot Windows again to do anything with it. You will spend a couple of hours setting it up and tweaking though.

Oh well, I’m still a satisfied customer.

Update: The code must be original, and you of course must be the author. If a utility already exists to sync the 880, I’d appreciate the tip, but it won’t qualify for the prize. :-)

Update 2: Paul Cutler has generously offered to match my US$75 prize for step 1. That is, if step 1 is completed, the total prize is now US$150. Completion of steps 2 and 3 leave the total possible amount at US$225. Start hacking – it’s probably a day or two of work for a full 880 reimbursement!