Posts Tagged erlang
On Saturday morning I opened my web browser, built a playlist of a few songs and started to listen to them while I went about my morning computer tasks. Some of the songs in the playlist were on my laptop, while some were on the mac mini in the family room, and some were on a laptop of a friend that was on the other side of the Atlantic ocean. And if my friend in London had closed his laptop before I listened to ‘his’ song on my playlist it could have been replaced by a copy of the song that was on the computer of a friend in Seattle. I had a seamless music listening experience despite the fact that the music was scattered across a handful of computers on two continents. Such is the power of Playdar.
Playdar is a music content resolver. It is designed to solve one problem: given the name of track, find me a way to listen to it right now. You run Playdar on any computer that you own that has music and Playdar will make it easy to listen to all of that music as if it were on your local machine. The Playdar content resolver can also talk to other Playdar resolvers too, so if Playdar can’t find a track on my local network, it can ask my friend if it knows where the track is, extending my listening reach.
Playdar runs as a web service using standard web protocols for communicating with applications. When Playdar receives a request to resolve a track it runs through a list of prioritized content resolvers looking for the track. First it checks your local machine, then your local network. If it hasn’t found it there it could, if so configured, try your friends computers, or even a commercial song resolver (One could imagine for example, a music label offering up a portion of their catalog via a content resolver as a way to expose more listeners to their music). Playdar will do its best to find a copy of a song that you can listen to now. Playdar enables a number of new listening modes:
- Listen to my music anywhere – with Playdar, I don’t have to shoehorn my entire music collection onto every computer that I own just so I can listen to it no matter what computer I’m on. I can distribute my music collection over all my computers – and no matter what computer I’m on I have all my music available.
- Save money for music streamers – Music streaming services like Last.fm, Spotify and Pandora spend money for every song that is streamed. Often times, the listener will already own the song that is being streamed. Playdar-enabled music streaming services could save streaming costs by playing a local copy of a song if one is available.
- Share playlists and mixtapes – with Playdar a friend could give me a playlist (perhaps in a XSPF format) and I could listen to the playlist even if I don’t own all of the songs.
- Pool the music – At the Echo Nest, everyone has lots of music in their personal collections. When we are all in the same room it is fun to be able to sample music from each other. iTunes lets you do this but searching through 15 separate collections for music in iTunes is burdensome. With Playdar, all the music on all of the computers running Playdar on your local lan can be available for you to search and play without any of the iTunes awkwardness.
Playdar’s Marconi Moment
Playdar is the brainchild of RJ, the inventor of the audioscrobbler and one of the founders of Last.fm. RJ started coding Playdar in March of this year – but a few weeks ago he threw away the 10,000 lines of C++ code and started to rewrite it from scratch in Erlang. A few days later RJ tweeted: I should be taken aside and shot for using C++ for Playdar originally. It’s criminal how much more concise Erlang is for this. Less than 3 weeks after starting from a clean sheet of paper, the new Erlang-based Playdar had its first transatlantic track resolution and streaming. The moment occurred on Friday, October 16th. Here’s the transcript from the IRC channel (tobyp is Toby Padilla, of MusicMobs and Last.fm fame) when London-based RJ first streamed a track from Toby’s Seattle computer:
[15:40:46] <tobyp> http://www.playdar.org/demos/search.html#artist=pantera&album=&track=burnnn
[15:41:06] <RJ2> woo, transatlantic streaming
[15:41:19] <tobyp> hot!
[15:41:35] <RJ2> playdar’s marconi moment
[15:41:42] <tobyp> hahah
An incredible amount of progress has been made in the last two weeks, a testament to RJ’s skills as much as Erlang’s expressiveness. Still, Playdar is not ready for the general public. It requires a bit of work to install and get running – (yep, the erlang runtime is required), but developer Max Howell has been working on making a user-friendly package to make it easy for anyone to install. Hopefully it won’t be too long before Playdar is ready for the masses.
Even though it is new, there’s already some compelling apps that use Playdar. One is Playlick:
Playlick is a web application, developed by James Wheare that lets you build playlists. It uses Playdar for all music resolution. Type in the name of an album and Playlick / Playdar will find the music for you and let you listen to it. It’s a great way to see/hear the power of Playdar.
Adding custom content resolvers
One of the strengths of Playdar is that it is very easy to add new resolvers. If you are a music service provider you can create a Playdar content resolver that will serve up your content. I wrote a content resolver that uses the Echo Nest to resolve tracks using our index of audio that we’ve found on the web. This resolver can be used as a backstop. If you can’t find a track on your computer or your friend’s computers the Echo Nest resolver might be able to find a version out there on some music blog. Of course, the quality and availability of such free-range music is highly variable, so this resolver is a last resort.
Adding a new resolver to Playdar was extremely easy. It took perhaps 30 minutes to write – the hardest part was figuring out git – (thanks to RJ for walking me through the forks, pushes and ssh key settings). You can see the code here: echonest-resolver.py. Less than 150 lines of code, half of which is boilerplate. 150 lines and 30 minutes to add a whole new collection of music to the Playdar universe. Hopefully soon we’ll see resolvers for music streaming services like Napster, Rhapsody and Spotify.
What’s Next for Playdar?
Playdar is new – and the plumbing and wiring are still be worked on – but already it is doing something pretty magical – letting me listen to any track I want to right now. I can see how Playdar could be extended into acting as my music agent. Over time, my Playdar servers will get to know quite a bit about my music tastes. They’ll know what music I like to listen to, and when I like to listen to it. Perhaps someday, instead of asking Playdar to resolve a specific track by name, I’ll just be able to ask Playdar to give me a playlist of new music that I might like. Playdar can then use an Echo Nest, Last.fm or an AMG playlister to build a playlist of interesting, relevant new music. Playdar won’t just be a music resolver, Playdar will be my music agent helping me explore for and discover new music.