Songbird 0.3 released!

Tuesday, Oct 30. 2007  –  Category: Songbird

woohoo… we just released our 0.3 release this evening.

nothing like joining the gang late and riding on the coattails of success… ;-)

it’s been a pretty crazy and busy trip the past month since i joined. i’ve worked a ton on getting the new developer centre launched in conjunction with the 0.3 release, and i’ve written the mashTape add-on for 0.3 as well.

i’m psyched to see 0.3 get out there as it means we can get some more websites using our Webpage API. i worked on a few demos of it, and it’s really powerful. it’s been awesome just being able to go to the Insound music store and purchase music to have it download directly into my media library and be playable. it’s basically the iTunes + iTunes Store integrated experience…. except anyone can achieve that level of integration.

anyway, enough blabbering. go download 0.3 now. :-)

(and for all the p.o.o. readers: sorry, no, we still don’t have a Solaris port yet - Triskelios has done a huge amount of initial work, but hit some issues with XULRunner - and i haven’t had any time to take a look. but there are quite a few of us at the nest who would love to see it ported to OpenSolaris)

an OGB member’s dilemma

Sunday, Oct 28. 2007  –  Category: OpenSolaris

Yeah, I’ve left Sun - but I’m still on the OGB, and I still care very much about OpenSolaris…

.. which is why this whole stupid naming/branding debate going on in various threads has me bothered.

O’grady has a good succinct summary along with his opinion on the matter. So here’s my dilemma. What is an OGB member’s duty? Is it to defend the interests of the community that’s grown up around OpenSolaris… or is it to grow the community more? The charter of the OGB which sets up this “federalised democracy” seems to set the powers of the OGB to be merely the appeals board for inter-Community conflicts. Which would imply that the responsibility of growing the community falls to the Advocacy Community… thus leaving the OGB to defend the interests of the community.

This is bullshit.

(in my personal, very humble, opinion)

I do believe (now) that the OGB should be responsible for leading and growing the OpenSolaris community more; the fact that we haven’t done so is a shame - but oh well. We’ve still got time. So, let’s go ahead and assume I disagree with the charter and think the OGB should assume more powers than it’s currently explicitly granted ;-)

I’m stuck with the dilemma of basically defending the community we have, versus growing to be the community we could be. I (now, though I didn’t initially) agree with all the proponents of the Indiana-should-be-OpenSolaris argument - for the reasons O’grady outlined. I think it decreases user confusion, and simplifies the messaging… hopefully that leads to wider adoption.

So herein lies the “defending the community we have” bit. I can very much see that there are people opposed to Indiana->OpenSolaris, as well as the people who support it. I don’t think that one side has more proponents than the other, so it’s decidedly unclear to me what the community voice is.

So what I hope for is that Sun will, as Ian outlined in his proposal, make this a community decision. While I’m fully aware that Sun owns the trademark, and has every legal right under the sun (har har, I made a funny) to rebrand Indiana as OpenSolaris, I think making a unilateral decision to do so would be quite a show of poor faith.

While, as I mentioned above, I support the rebranding, and I hope it succeeds - I hope even more that Sun will take into account what the community thinks and hold a community vote to decide. And even more importantly - I would hope they would abide by such a community decision. Some people will say that Sun should go ahead, do it, and suck up the inevitable backlash/blow that will occur (or heck, may not even occur). I think that Sun has not yet built up enough goodwill in the open source community (not for lack of effort on Sun’s part though) to do it though… and I think it would send a nasty message to future members of the community.

Anyway, this is definitely one of the more interesting debates going on in the OpenSolaris community - and I’m definitely torn trying to decide what my responsibilities (once again - assuming I have them) are to be.

Mashing up the goodness

Monday, Oct 22. 2007  –  Category: Songbird

I blogged last week about creating my first webpage to mashup some information using the Songbird Webpage API… but I thought what would be really cool would be to do it as an extension so I wouldn’t even have to leave the library view.

… also I needed to learn the Add-on API - so this was a good opportunity to kill two birds with one stone.

The end result?

mashTape 0.0.1

This extension adds a tabbed panel to the main library view allowing you to see Last.fm tags for the currently playing track (and to open new browser windows for a given tag), a Flickr photo stream cycling through Flickr photos of the artist (doesn’t work so well if you like the Cranberries though), a Last.fm events feed for the artist (see upcoming concerts/events, etc.), and a lyrics textbox from metrolyrics.com.

In other words - it takes various data sources thanks to open standards and APIs, and lets you combine them together to create a useful data aggregation based on key user data: namely your media library.

Anyway, it was a really useful exercise to learn the add-ons API, as well as XUL. Given this was my first exercise in both (I’d more or less had no XUL experience beyond a cruddy Firefox toolbar I wrote ages ago for OpenGrok) - I think this is a great testament to how powerful XUL & Songbird’s extension and add-on capabilities are.

To put it bluntly: you can do a TON of stuff.

Many thanks to Matt for putting together the Songbird Developer Tools Add-on, which made this incredibly easier. Having the ability to disable the XUL cache and refresh the UI were huge - and the XUL periodic table was brilliant. If you are even thinking about writing add-ons… you need to install the Developer Tools Add-on. It will make your life incredibly easier, especially if you’re a XUL-retard like me.

Behind the scenes with the Songbird book club

Friday, Oct 19. 2007  –  Category: Songbird

Get SongbirdAs I mentioned yesterday, I built my first Songbird extension, albeit a slightly contrived and not tremendously amazing one. However, it serves as a good example for the development process I suppose. Especially because this one also involved me having to dive into the Songbird source a little bit to find the exact routines I wanted. Even more especially because I’ve had no prior experience, so this really is the complete naive and ignorant Songbird/Firefox extension developer scenario.

If you pull apart (e.g. unzip) the bookclub.xpi extension, you’ll see in the chrome.manifest I only overlay one XUL item, the menubar:

overlay chrome://songbird/content/xul/menuOverlay.xul chrome://songbird-bookclub/
content/overlayMenu.xul

If that’s not a big enough clue that this is a pretty simple extension UI wise, then I dunno what is. ;-) So let’s go take a look at chrome/content/overlayMenu.xul

You’ll see the minor UI part involves doing the <menuitem>> for seeding the music blog bookmarks. The bulk of the interesting part of this extension lies in the Javascript, so let’s go take a look at seedMusicBlogBookmarks()

So up until this point, I’d managed to completely scavenge bits from the Getting Started with Add-ons guide. Now I needed to actually do something unique and original.

Damn

So I sat back a bit and thought - okay, I need to get to the bookmarks. How do I manipulate the bookmarks? Well, the bookmarks belong to the service pane (the service pane being the left hand side panel). So, knowing the OO nature of things…. I figure I probably need to figure out how to get a service pane object and then get the bookmarks object. This is where I got stymied a bit, and decided it was as good a time as any to start looking at the source.

… so this is where I actually cheated a bit and used my own personal OpenGrok instance to browse the source. But for now, let’s take a look at the currently official Songbird source browser which is Trac based. I used my keen sense of reasoning and my logic which only fails me occasionally to dive into the components/ subdirectory.

Here I saw the servicepane subdirectory. I dropped into the src/ subdirectory and saw the source for the bookmarks service in sbBookmarksService.js

I read the source for importBookmarks() which pointed me at addBookmark() and addBookmarkAt().

Yay, there was much rejoicing.

So I did what every other lousy programmer does, and searched the source base for “addBookmark” which pointed me over to the bookmarks unit tests in test_bookmarks.js. That conveniently told me how to get access to the bookmark service, so that’s how I got the SPS, SPS.init(), and BMS stuff setup.

From here, I needed to figure out how to add a bookmark. Fortunately, from our prior diving into the bookmarks service code, we saw addBookmark, addFolder, and addBookmarkAt. Brilliant, we’re all set! So from there it was a simple matter to make the XMLHttpRequest() to grab the Birdhouse Media Web Directory URL, and parse it to grab the MP3 blogs section, call addFolder() to create my “Music Blogs” folder, and then loop through addBookmarkAt() for each blog in the directory to add it to the folder created. That should be pretty straight-forward from the rest of the code in overlayMenu.xul.

So at that point, the extension is done. So I built it, and loaded it in only to see errors about addBookmarkAt() not being defined.

WTF?

More searching for addBookmark() & addBookmarkAt() brought me to the public interface list for the bookmarks service, where I saw only addBookmark() and addFolder() were being exported. Damn, I needed access to addBookmarkAt(). So I did the simple fix and had addBookmarkAt() expose itself publicly, and wham…. everything was working beautifully.

So there, that’s my walk through for my thought process from start to finish for making a Songbird extension create bookmarks in a folder.

only slightly stoned

Friday, Oct 19. 2007  –  Category: OpenSolaris, Photos

sara pointed me at the photos joerg took from the OpenSolaris developer summit last weekend.

more explicitly, she pointed me at the above picture. love how everyone is looking straight at the camera smiling happily while i goofily am looking off to the side…

lovely.

i should make a hackergotchi out of that.

Building a better bird

Friday, Oct 19. 2007  –  Category: Songbird

Yay, I had my first putback^Wcommit to the Songbird source yesterday. Okay, granted, it was pretty trivial - but it gave me the opportunity to continue the tradition of fun commit messages.

The more important thing I suppose is that exposing addBookmarkAt() let me build a Songbird extension to address 5144. Seems like people miss Songbird coming with a seeded list of MP3 blogs. We’ve moved this out of the player and into the Media Web Directory in the Birdhouse page that’s part of Songbird.

Turns out people don’t want to look for stuff. They just want it there for them. Go figure.

Anyway, I put together the Birdhouse Bookclub extension, more as an exercise to familiarise myself with some of the extensions APIs. It’s a pretty cheesy add-on, in that all it does is create a menu option in the “Tools” menu to seed a “Music Blogs” bookmark folder with bookmarks from the Birdhouse, but hey… it’s something I guess.

The whole is greater than the sum of its parts.

Wednesday, Oct 17. 2007  –  Category: Songbird

Don’t you love it when you add one cool thing to another cool thing to get something even better?

I do.

Root beer is good. Ice cream is good. Root beer floats are fantastic. Daphne was good. Velma was good. Add them together and you had the Scooby Doo gang (well the only members worth watching anyway).

So Songbird is good. Nay, Songbird is great (okay so I’m a little biased). Last.fm is good.

Songbird + Last.fm is yabba-dabba-doorific.

Here’s a really simple example I threw together to familiarise myself with the Webpage API. (Of course it only works from inside the Songbird client, so make sure you load it from there) It’s perhaps not the greatest, but it is pretty straight-forward, so hopefully it’s of use to others. Basically it adds listeners to the Songbird events that monitor when the tracks change. It then makes AJAX queries to Last.fm to load album cover information (including cover art), tag information for the current track, and a list of similar artists - all using Songbird’s wicked powerful Webpage API and Last.fm’s handy dandy XML web services APIs. On the right hand side, it does some somewhat unrelated tag-clouding of your own media library. Yeah - it’s not related to Last.fm, but I wanted to try it. So sue me. :)

So this is just a mere example of the kind of goodness that comes from two open APIs adding up to a whole that’s greater than the sum of its parts.

well that sucked

Wednesday, Oct 17. 2007  –  Category: Football

when is England going to learn??? when you’re up 1-0, don’t camp in your own half. especially at a visiting stadium. keep the pressure on damnit!!!!

Monday, Oct 15. 2007  –  Category: Linkage

Paul Krugman wrote a great piece on Gore Derangement Syndrome today.

What is it about Al Gore that drives right-wingers insane? The worst thing about him, from the conservative point of view, is that he keeps being right.

and quoting one of Krugman’s quotes:

And at National Review Online, Iain Murray suggested that the prize should have been shared with “that well-known peace campaigner Osama bin Laden, who implicitly endorsed Gore’s stance.” You see, bin Laden once said something about climate change — therefore, anyone who talks about climate change is a friend of the terrorists.

I’m sure Gore clubs baby seals secretly.

If Asimov produced electronica….

Friday, Oct 12. 2007  –  Category: Music

… it would probably look something like Hexstatic’s “When Robots Go Bad”

I’ve been listening to this all morning and it’s thumpingly cool. Makes me want to bang on things.


Recent posts