Monday, January 11, 2010

Rhythmbox plugin for Last.fm desktop client

I've recently lost my music database to the hands of Banshee (actually, the Sqlite3 database file is still somewhat salvageable). I have longed for an application that would make my life easy in managing my music collection (which is pretty extensive) and do this day haven't found one. The recent event pushed me to the edge: I am embarking on a quest to scratch my itch on this matter.

First step
The first step consisted in getting acquainted with Rhythmbox, my new music media player. Why Rhythmbox? because it supports a Python based extension system (compared to Banshee's C# based on) and I happen to really enjoy writing software using Python.
To this effect, I have crafted a plugin that sends the current playing state (START/PAUSED/RESUMED) of Rhythmbox to Last.fm's Desktop Client.
Plugin
The project is located on Github.
Project
I intend to make several other contributions focused on media players. My goal is to be able to synchronize my music collection seamlessly between Rhythmbox, Last.fm and iTunes (with possibly also Musicbrainz). Stay tuned!

Wednesday, January 6, 2010

Google Wave Invites

I've got some Google Wave invites left... first come, first served!


Wednesday, November 25, 2009

Collaborative Sites

I recently found out about a cool software collaboration site: Stackoverflow. There one can get questions answered in a timely manner as well as earning "reputation" credits. Access is free and unlimited akin to a "wiki" site such as Wikipedia.

But what is best is there is an ecosystem of such site based on the same platform ( Stackexchange ):
... and probably much more!

Tuesday, November 17, 2009

Chrome Extension: mDNS Service Browser

As a stepping-stone towards making the browser my main portal to my applications, I have crafted a Google Chrome extension (based on an NPAPI plugin) that lists the services announced through Avahi / mDNS.
It is available here. Note that only Linux based systems are supported.



Wednesday, November 4, 2009

Notes on NPAPI based plugins

I am sharing the following diagram to (hopefully) lessen some pain from folks who intend to write NPAPI based plugins (Firefox, Chrome etc.).


STEP 1: the host browser loads the library corresponding to the MIME type expressed in the embed element tag.

STEP 2: the host browser calls the NP_Initialize function of the library and passes a reference to the public API of the browser (i.e. the NPNetscapeFuncs starting with NPN_ in the Mozilla documentation). The host browser also calls the NPP_New function in order to instantiate a "plugin instance".
STEP 3: the host browser calls the NP_GetValue function (with the variable NPPVpluginScriptableNPObject ) of the library. See step 4.
STEP 4: the plugin calls the NPN_CreateObject (through the reference provided in step 2) to instantiate a "scriptable NPObject". This object serves as proxy to the embed object declared on the source web page.
STEP 5: the web page can interact with the "scriptable object".