{"id":652,"date":"2009-07-24T18:30:31","date_gmt":"2009-07-24T23:30:31","guid":{"rendered":"http:\/\/music.ballweb.org\/blog\/?p=652"},"modified":"2009-07-25T17:37:40","modified_gmt":"2009-07-25T22:37:40","slug":"lastfms-unwise-decision","status":"publish","type":"post","link":"http:\/\/music.ballweb.org\/blog\/archives\/652","title":{"rendered":"Last.fm&#8217;s unwise decision"},"content":{"rendered":"<h3>*** Please read Last.fm&#8217;s response below ***<\/h3>\n<p>Last.fm has changed their API; for those who are not programmers, an API (application programming interface) is a set of routines that allow a program to make requests to another program or web service. In and of itself, changing an API is not a bad thing and, in many cases, can be quite beneficial.  For instance, adding new features to an API can allow programmers more options for interracting with the product.<\/p>\n<p><!--more--><\/p>\n<p>However, the changes that Last.fm made were not backwards compatible and caused software that used the API to break. The open source music player Banshee for instance still displays recommended tracks from Last.fm, but is unable to play these tracks.  When a user attempts to listen to a recommended track, he or she is greeted with the message &quot;GStreamer resource error: NotFound&quot; on the terminal or in the error log.  In light of this error, displaying the tracks at all is rather pointless.<\/p>\n<p>I realize that I am behind the times as this change ocurred in March, but I have just tried listening to Last.fm through banshee for the first time this week.  I had initially thought that this was a problem with my installation of Banshee, or with the software in general.  I want to reiterate, the problem is not with Banshee &#8211; or any other music player that is experiencing similar issues &#8211; the problem is the fault of Last.fm.<\/p>\n<p>Modifying APIs is okay, but these modifications should always maintain backwards compatibility unless there is an extremely good reason for not doing so: weak security where security is crucial, poor scalability, bad performance.  Also, if many programs use an API, the developers of the API should allow the deprecated version to function for at least 6 months while projects have a chance to be modified to support the new methods.  These changes should also be clearly announced as soon as &#8211; or, preferably prior to &#8211; them happening.  This alteration seemed to have happened almost overnight and with very little warning given the number of surprised people in the forums.<\/p>\n<p>Last.fm claims that they were required to make these changes due to new licensing agreements with the music industry.  But, for once, I will not take the opportunity to lay blame at the industry&#8217;s feet.  Last.fm did not have to cave in and willingly commit a serious programming mistake.  Worse, they let their user base down by breaking their music players.<\/p>\n<p>Unsurprisingly, Last.fm&#8217;s music player still works according to reports.  I cannot verify this fact as I prefer to use a more full-featured music player and have never tried theirs.  Call me paranoid, but this almost sounds like an excuse to limit choice and lock users into using Last.fm&#8217;s player or web interface to play music hosted with them.  This especially seems true in light of the fact that the scrobbling portion of their API is still in tact.  Scrobbling is the method users&#8217;s software employs to send data about the songs they listen to back to Last.fm.<\/p>\n<p>Because the streaming portion of the API (the part that sends data to users) was made backwards incompatible, but the scrobbling portion (that collects data from users) was left in tact, I have seen many complaints that Last.fm is just using their customers to collect data without caring about their experiences using the service.  I do not completely agree with this, as if licensing was truly the cause for the change, they would likely only need to limit what they sent to users, not what users sent back to them.  However, that does not make this practice any more ethical.  Programmers need to be able to trust that APIs are not going to change on a whim with little or no notice.<\/p>\n<p>This decision of Last.fm&#8217;s seems to sketchy and has undermined the trust that many users and developers have placed in their service.<\/p>\n<p><b>Further reading:<\/b><\/p>\n<ul>\n<li><a href=\"http:\/\/www.last.fm\/group\/Last.fm+Web+Services\/forum\/21604\/_\/517212\">Last.fm&#8217;s Announcement<\/a><\/li>\n<li><a href=\"https:\/\/bugs.launchpad.net\/ubuntu\/+source\/banshee\/+bug\/397674\">A bug report<\/a><\/li>\n<li><a href=\"http:\/\/bugzilla.gnome.org\/show_bug.cgi?id=541227\">Another bug report<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>*** Please read Last.fm&#8217;s response below *** Last.fm has changed their API; for those who are not programmers, an API (application programming interface) is a set of routines that allow a program to make requests to another program or web service. In and of itself, changing an API is not a bad thing and, in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[22,14,17,15],"tags":[353,114,354,40,355,44],"class_list":["post-652","post","type-post","status-publish","format-standard","hentry","category-blogs-and-sites","category-online","category-rant","category-music-services","tag-api","tag-banshee","tag-gstreamer","tag-lastfm","tag-music-industry","tag-oss"],"_links":{"self":[{"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/posts\/652","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/comments?post=652"}],"version-history":[{"count":13,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/posts\/652\/revisions"}],"predecessor-version":[{"id":665,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/posts\/652\/revisions\/665"}],"wp:attachment":[{"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/media?parent=652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/categories?post=652"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/music.ballweb.org\/blog\/wp-json\/wp\/v2\/tags?post=652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}