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.

Stay Classy, Debian

In Benoît Dejean’s post today about Internet Explorer sucking, he recommends dropping Windows and instead switching to Iceweasel and Debian.

I may be a little behind on the times here, but it was in his post that I first saw the Iceweasel logo. While it’s graphically hideous, I kept thinking, “That weasel is humping the earth. I feel soiled.” So I went to the Iceweasel web site, a fine marketing tool for this revolutionary browser, and nearly fell out of my chair when I read the introductory text to the project:

In the spirit of the dancing kame, if you were running Iceweasel, the weasel would be humping!

But it gets even better. Stay. Classy. Debian. The l33t terminal display is hawt too. Nice touch with the blinking cursor.

AmeriCone Dream – OR ELSE

Nation, if you love yourself, care about freedom, and support healthy cows, stop what you are doing, and go buy a truckload of Stephen Colbert’s AmeriCone Dream. AmeriCone Dream is now the only ice cream I won’t feel guilty about eating. I’m eating for freedom and you should too!

The flavor, Stephen Colbert’s AmeriCone Dream™ is a decadent melting pot of vanilla ice cream with fudge-covered waffle cone pieces and a caramel swirl. It’s the sweet taste of liberty in your mouth.

Do your part! Don’t let the terrorists win!

I Care About the Issues!

Greatest new source of tech news to date:

Unfortunately, MyTube, which is implemented entirely in Ruby on Rails, is hitting a scaling barrier at peak usage hours, which are reportedly between midnight and 2am PST. An insider at MyTube tells us confidentially that they get up to 100 users before the system slows to a crawl, causing bored users to delete random files from their servers by requesting well-formed URLs like and “It’s just so rude”, MyTube engineers were overheard saying in their Atlanta office. “Some of our users are just plain wankers.

Yay, Creationism!

I must visit this museum in the very near future.

We then venture into the recreation of the Garden of Eden, where we get to meet the Beastmaster himself. Here, a creatively covered up Adam pets the friendly animals of the garden. Oh, and there’s no need to be afraid, because all of the animals at this time were like Disney cartoon characters. They did not bite, sting, or even defecate for that matter. Even the T-Rexes were playful and gay. Adam even gave them all names! How cute!

The hilarity! Thanks, Alan, for pointing me to the best laugh of my day.

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!

I like my pasta with sweat

A few evenings ago I had a strong desire for fettuccine with my some of my awesome alfredo sauce. Nothing fancy, fairly quick, and rather delicious. I thought about it for a few minutes, finishing up some work, trying to find a good pausing place. When I finished, I was filled with much anticipatory joy for the dish. Unfortunately I nearly started breaking things when I saw that my pantry lacked, of all things… pasta. I had a few options: give up, eat something else; go to the store and buy some pasta; or… make some, of course!

I had never made pasta before. I didn’t really know how to other than “add some flour, add some eggs.” So that’s what I did. I started off with way too much flour and not enough egg. Slowly I seemed to balance everything out correctly… my dough was smooth and elastic. I was so worked up in getting the right texture, that I didn’t really think to add anything to it, which I suppose is fine. After about an hour of playing and kneading, and another 40 minutes to let it settle, I had about 5 pounds more than I needed. I broke some off – a workable chunk – and realized that I didn’t have a dough roller. That sucked, but I ended up dismantling a table with a smooth cylindrical leg, which worked fine.

After about 20 minutes of rolling, the dough was flat enough to start cutting. By hand I cut enough fettuccine-esq pieces to satisfy my appetite, and well, tossed the other 5 pounds of dough away – a good learning experience – at least now I know a good ratio. Then after about 10 minutes of boiling, I tossed it with my sauce, and – eugh. It was “okay.” The pasta was way over done and just creepy. But the sauce was good, and I was hungry, so I ate it.

But this experience left me curious. I wanted to make good pasta, and tonight I struck gold. I decided this time to try ravioli – at least it wouldn’t be as annoying to cut by hand. I also decided to play with flavor and color a little too, and strove to be less messy (use a mixing bowl, instead of the counter). What I ended up with was just amazing, and honestly probably one of the very best pasta dishes I have ever had. I guess the whole point of this post is to share my new-found-impromptu ravioli, so here it is:

The Pasta

In a large mixing bowl, mix together very well:

  • 1 1/3 cups flour
  • ~1 teaspoon salt
  • A few good shakes of fresh ground pepper and paprika
  • A small handful of finely chopped fresh spinach

In another bowl, mix:

  • 2 eggs
  • 1 tablespoon olive oil
  • About half of another egg yolk for darker color, save the white for glue later

Then pour the egg into the mixing bowl, and mix, knead, pound, sweat, roll, fold, and stir, dusting with flour as you go. I did this by hand for about 20 minutes non-stop until it was smooth and elastic. Mold a nice ball, dust with flour, and brush on some olive oil. Cover in plastic wrap, and let it sit for about 40 minutes. Move on to the filling.

The Filling

Three words: beef, spinach, cheese. Delightful. Brown some lean ground beef, season lightly. In a mixing bowl, combine one “thing” (tub, maybe a cup, cup and a half) of ricotta cheese, about two cups of mozzarella, and maybe a cup or two of fresh parmesan. Splash in some olive oil, salt, pepper, whatever and mix. Add the ground beef when it’s done, make sure it’s really broken up. Then grab two or three handfuls of fresh spinach, and coarsely chop and add to the beefcheese. Mix it all well.

The Delight

After the dough is ready, roll it out, really thin, and mark the dough in half. Cover one half with a light coating of egg wash (the saved egg white from earlier). On the other half, place generous portions of filling, spaced about 1.5-2 inches apart. Fold the egg-washed side of the dough on top of the filling side, and press into individual raviolis. Cut them out, but leave most of the excess dough on the piece — it’s delicious. Boil them for about 5-6 minutes (FRESH pasta, something I should have thought about with the fettuccine). As soon as you start boiling, begin preparing the plates. I put a light layer of mozzarella and parmesan on the plate with some fresh chopped parsley. When the ravioli is done, place them on the cheese plate, and coat with more cheese, a light coating of olive oil, cracked pepper, and some more parsley. I prepared them large enough that 2-3 pieces is filling and large enough to cover a plate.

EAT. It was amazing.

I wasn’t sure if I should make a sauce or not, but honestly, I didn’t have the timing of the meal down properly to allow for making a sauce without letting something sit when it would be better consumed hot and fresh. But the pasta itself has so much flavor, that a dusting of cheese and oil is all it needs. The filling melts in your mouth. It’s just awesome.

The recipe left me with about 12 pieces of large ravioli. I only cooked and ate three, and am going to see if they keep in the fridge for tomorrow for lunch – just need to boil them. I wish I had taken a picture.

So now I’m thinking…

Dear Lazy Web: I need a pasta machine. I like making pasta now, but spending an hour making the dough, and another thirty minutes rolling it sucks. Any suggestions?

Oh, I’m releasing Banshee 0.11.0 next Monday. MUCH more to come on that, very soon. Readers be warned :-)