Music

Statusnet-Music (plugin page: Plugin:Music) is a plugin for status.net which allows it to serve as a service similar to last.fm, but with all the benefits of open, distributed software.

Statusnet-Music is a Google Summer of Code 2010 project by Ian McEwen. The development installation of status.net for this project can be found at http://sn-devel.ianmcorvidae.net/ and a gitorious page/git repository at http://gitorious.com/statusnet-music. Ian comments occasionally on statusnet-music on his personal StatusNet installation. These comments can be found at http://status.ianmcorvidae.net/tag/statusnetmusic

Successes/Completions

 * Scrobbling works! Look at http://sn-devel.ianmcorvidae.net/ for copious examples.
 * After fixing phpBrainz to have what I had expected to be basic features, when there is an MBID everything is gotten based on that -- automatic spelling correction!
 * Data structures largely work -- some things aren't used yet (like track length) but the system can be fixed to include them without great difficulty.

Todo list
Rough idea of what I'll be doing for the next couple months, in no particular order


 * Set up data structures: track, album, artist, listen
 * listen ~= user + track + notice
 * Implement Last.fm API
 * Track/Album/Artist pages site-wide and per-user (like with tags)
 * ActivityStreams representation
 * Links in notice: personal entity pages, site-wide, or external server?
 * Write an external server? Worry about SPOF, if so.

GSOC Proposal
Disclaimer: Remember that this is a static document, made once, and made before I was entirely familiar with StatusNet. The actual project is constantly changing; see the work area above for that!

Two or three paragraphs describing your project -- what it means to accomplish and how it will benefit people and organizations using StatusNet
I propose to create a plugin for StatusNet which implements the last.fm API and displays/publishes information regarding it (using ActivityStreams, as the wiki notes, as well as the more conventional artist/album/song pages). I'd also like to make these streams easily subscribable from other sites running the same plugin (and perhaps even any StatusNet site, publishing them as normal old statuses with attachments or similar).

Since autonomy is the word here, I intend to create an interface for exporting all of the tracks you've played, for your own records and for the possibility of moving elsewhere (although I don't at this time plan to create a re-import functionality -- we'll see what happens through the summer). The current options, last.fm and libre.fm, aren't good about this.

Finally, I'd like to implement the last two "optional" items listed on the wiki: use Salmon to push listen activities to a global central server, and make that central server. I'll respect the optional marking, though, if what's been mentioned previously takes up too much of my time -- quality over quantity. If it turns out really easy and I get everything done early (or after the summer's over, alternatively), I'll start looking into recommendations.

As for benefit to people and organizations, I think the fact it was put on the wiki demonstrates a desire from users (or at least the other developers, not that they aren't users too!). As for usefulness beyond that, though, this is (amazingly enough) not something that other services really provide. Last.fm is out there, but it's far from autonomous; getting your data out is hard enough, and getting the code for the site is impossible. Libre.fm is slightly better, it being AGPL'ed, but it's not a very mature project and my experience with it hasn't been very good. Building on top of the well-constructed StatusNet base means that a lot of infrastructure is already there, so I can focus on making a really good experience for what I'm actually trying to make: A social music server.

(hopefully four paragraphs is okay!)

We don't just care about your project -- you are a person, and that matters to us! What drives you? What makes you want to make this the most awesomest social networking project ever?
I've been a long-time user of both last.fm and libre.fm, and I'm constantly frustrated by both. I want more than just "working" (which they both do) -- I want a system that I can extract data from in interesting ways and use and reuse (especially keeping my own records of my listening habits), and those projects haven't scratched my itch sufficiently. So I want to do it.

By comparison, I didn't even care about Twitter until StatusNet came along -- until it became an autonomous service, I didn't care a bit about microblogging. But now that it is, I'm an avid user (at least, an avid consumer) of status. This gives me great hope for the project as a springboard for other social networking things like music -- it's clear that StatusNet has something that the other projects I've looked at haven't gotten (hopefully haven't gotten yet).

====You don't need to write out your life story (we can read your blog if we want that), but we want to know a little about what makes you tick. Are you using or running a StatusNet site and have some itches to scratch? Do you have an awesome idea that needs a good base to integrate into to make it happen? What does making this project happen mean to you?====

I think I've answered parts of this question in other parts of this application -- I have an itch I want to scratch, and an awesome idea scratching it for which StatusNet seems like a great base for integration. I am running my own personal StatusNet site, as of recently, at http://status.ianmcorvidae.net/, although I haven't had the time to really customize it as I'd like (what with school).

I want this project to happen because I want to use it. Copiously.

====It's also good to know how you like to work; how do you prefer to chat with your fellow coders? What's the best way for your mentor to stay in touch with you? Do you feel more comfortable with a more hands-on mentor or are you happy to come grab us when you need us?====

I can't imagine any successful project that doesn't involve chatting with fellow coders -- doesn't matter how good your commit messages are, it's just not the same as a good chat via email, IRC, or phone. Or, god forbid, even in person.

The most reliable way to contact me will be by email at ianmcorvidae@ianmcorvidae.net. If I'm actually around on IRC (I tend to lurk, even when I'm not actually around), that's fairly reliable -- IRC meetings tend to be good for me. Any of my IM networks just get to me through IRC anyway, as does microblogging-conversation, so those are, I suppose at about the same level.

Deliverables
====It should be possible to break down your project into some bullet points describing particular features or milestones which can be reached individually. Consider that we may wish to roll out the system for testing when at an intermediate stage of completion, and that time estimates might vary, leaving you with more time than you expected or (more likely) a lot less -- some features can be pushed back if you end up short.====

Required deliverables

 * Last.fm API
 * Publishing song events as ActivityStreams data and on user pages
 * Artist/Album/Song pages
 * Export-what-I've-listened-to web interface
 * "Subscribability" from other plugin sites (other StatusNet sites)

If time permits (in this order)

 * Pushing to central server
 * Central server
 * Recommendations

Project schedule
====Try to break your deliverables into "milestone" points which can be reached in sequence. Block out your estimated schedule of when you'll reach each functional milestone. Don't forget that real time may change -- leave enough wiggle room for your required features to be completed!====


 * 1) Set up database tables No more than a couple days -- maybe a week if I find some tricky design issue
 * 2) Implement Last.fm API Perhaps a couple weeks -- I suspect there will be a lot I can borrow from the libre.fm codebase here
 * 3) Publish data as ActivityStreams data and on user-specific pages Once again, a couple weeks, between designing and implementation User-specific pages can use plenty more work, but largely done
 * 4) Publish data on artist/album/song pages Just a week or so, as most of what's needed here will probably be existing in the previous bullet point See above note; applies here as well
 * 5) Make a convenient web interface for dumping out what songs a given user has listened to Hopefully about a week, but perhaps more. A link to a csv-generating page: done
 * 6) Make the whole thing subscribable This should be very fast, because all previous decisions will have been made with this in mind. A few days to a week. They're all notices, so they can be subscribed that way – more complicated subscription is lacking.
 * 7) (maybe) Use Salmon to push data to some arbitrary place A couple weeks would be my guess here as well.
 * 8) (maybe) Implement the server running at that arbitrary place A couple weeks, perhaps as many as three or four if there are hairy problems.
 * 9) (maybe) start work on a recommendations system/spell checking (a la last.fm)/musicbrainz integration/other such things Away into the future! I don't expect I'll get here unless the previous points happen a lot faster than I think; this is just a catch-all for "what I'll do if I finish early."