Category Archives: Summer of Code

GSoC ’16 + ListenBrainz = fun :)

Hello,

I am Pinkesh Badjatiya and I have been working on ListenBrainz as part of GSoC ’16. I was largely involved in implementing the most requested features in ListenBrainz.
I began my journey with MetaBrainz not long before the Final Organization list was out. I started with MusicBrainz but moved quickly to ListenBrainz, and have been working on it since then.

About the project

The project consisted of creating a proxy scrobbling API similar to last.fm’s which could be used by existing desktop clients to submit listens to listenbrainz.org. I submitted my initial idea, that involved creating a new API along with few other optional features that were very much required (import, export, etc.).
The project made its way through the approval process, and I worked with ruaok (my mentor) & alastairp to get important things done. Yey!

Here are some of the snapshots of the my journey with ListenBrainz.

API_compat

ListenBrainz already had its own API which can be used to fetch/submit listens but all the existing clients that support scrobbling to last.fm use the ws.audioscrobbler.com’s API. To add support for these clients, I ended up creating a proxy API, api_compat (as in “compatible API”), that translates every request that is sent to “api.listenbrainz.org/2.0/” in the native format. This is an additional API which can be used along with the existing native ListenBrainz’s API.

This was largely the main goal of my project proposal. The instructions for scrobbling using Audacious are attached along with the source code.

Import lastfm-backup

The import page now allows users to import listens from the last.fm scrobbles or from the backup file which was downloaded from the older version of the last.fm website.
import_backup On successful import of listens from backup, you’ll get the following notification.import_success

Export listens

This allows users to export the listens from the listenbrainz.org website. This is useful for users who want to keep track of their listen history offline as well.
The export feature can be accessed from the drop-down menu.

export_dropdown_menuexport_page

Playing Now

With the support for API-Compat, the support for currently playing song was needed. This keeps the currently playing song on the website in sync with your favourite player.
playing_now

Import scraper uses audioscrobbler API

I also worked on updating the import scraper which now use the ws.audioscrobbler.com‘s API allowing users to import without opening their last.fm profiles. This also provides other useful track information to ListenBrainz.

Migrate to PostgreSQL

Another important change to ListenBrainz was how it stored listens. We moved from using Cassandra to PostgreSQL. Cassandra was fast and effective but getting more information other than the user’s listens (ex. generating statistics) was not possible. So we switched to Postgres + Redis. This opened more possibilities for future.

Experience

After 3.5 months, I ended up with 15 merged and 3 closed PR’s and a bunch of features for ListenBrainz that improved its look and feel.

My pull requests: https://github.com/metabrainz/listenbrainz-server/pulls?utf8=%E2%9C%93&q=is%3Apr%20author%3Apinkeshbadjatiya%20

I have worked on quite a lot of varied things in the past 4 months. A lot of them were actually not the part of the GSoC proposal but they were done largely in the same timeline or were optional targets, so I suppose they would count significantly towards GSoC.
I worked largely with alastairp, ruaok and Gentlecat. Gentlecat helped improve my coding style by providing feedback on my PR’s. I worked with alastairp and ruaok regarding the ideas/suggestions on how to address a problem and its possible solutions. It was a interesting experience working with the community and getting to know about MetaBrainz. Now that my understanding of the project and the community has increased, I look forward to making some great contributions!

Conclusion

In short, ListenBrainz went through a hell lot of changes in the past 4 months. If you were waiting for it to improve before using it, then now is the time that you should try it. I bet you’ll love its new look and you won’t be disappointed.😀

Summer of Code ’16 with Picard

Hi! I’m Rahul Raturi, GSoC participant for Picard. This was my first GSoC, and it’s been a pretty awesome experience. Following is the overview of my project.

About the project

The outline of the project is to allow searching for albums, artists and tracks from within Picard. This avoids switching back and forth between web browser and Picard for searching, say release. If Picard fails to auto tag a file usual flow to tag the file with correct metadata is to first select the file, then click on “Lookup in Browser”, then search correct release, and load it into Picard by clicking the green “Tagger” button. In some systems, the “Tagger” button wouldn’t show, which was also a nuisance. With this patch, the entities can be searched and optionally loaded into Picard using built-in search dialogs, so no application switching.

Search dialogs

Picard already provides search options (through a web browser) for three entities; namely track, artist, and album. So I’ve built search dialogs for these three.

  1. Track Search Dialog — Searches for tracks and allows optionally loading corresponding album back into Picard. track_dialog
  2. Album Search Dialog — Searches albums and optionally allows loading the selected one into Picard. Screenshot from 2016-08-15 17-08-09
  3. Artist Search Dialog —  Displays basic information about the artists. To get more information about the selected artist, there’s an option to lookup him/her in browser. Screenshot from 2016-08-20 15-55-42

Searching similar tracks/releases

This is another important part of the project. Sometimes Picard fails to auto tag a file (or a cluster), or incorrectly tag it. These dialogs may prove useful here. To get expected data, right click on the file (should be in “Unmatched Files” cluster), and select “Search for similar tracks…”. The track search dialog would pop up, and expected release can be looked up there. Same procedure is for searching clusters.

Links to my work

Each PR is based on the previous one. A new dialog in each, plus some improvements to existing dialog. For trying the dialog, clone the artist search branch, until it gets merged into master. It has the most recent changes.

Note: To use these dialog for searching, an option in User Interface setting about built-in search needs to be enabled.

Conclusion

It was quite fun doing this project. Thanks to Michael Wiencek (mentor) for the guidance and leniency🙂. Also the Picard team for the reviews. I look forward to contribute more to Picard, now that I’ve a better understanding of the code. Also for another Summer of Code.

BookBrainz GSoC Gamification/Achievement System

Hi guys, I’m Max (AKA QuoraUK), a university student working with BookBrainz as part of Google Summer of Code. My project this summer has been to build a new gamification system, that introduces rewards for BookBrainz users and recognises their achievements. Here I will explain the system and the features I’ve implemented.

Overview

My original specification for the gamification system is here. To summarise, the idea behind gamification is to add game-like elements to the site in order to make it more engaging for users. The plan for the gamification of BookBrainz was:

  • Add badges and titles for users to earn on the BookBrainz site
  • Allow users to display badges and titles on their profile page
  • Encourage regular and high quality content

To implement this plan we have added 12 achievement tracks – once an achievement track is completed a title is unlocked. The artwork for the badges is currently “programmer art” and we are very open to other people designing replacements for them. This could be a part of this year’s Google Code-In. The achievements that will be available on launch are:

revisioncreator

Revisionist: Perform (1, 50, 250) Revision(s); Creator Creator: Create (1, 10, 100) Creator(s)

limitedpublisher

Limited Edition: Create (1, 10, 100) Edition(s); Publisher: Create (1, 10, 100) Publication(s)

pubcreatworker

Publisher Creator: Create (1, 10, 100) Publisher(s); Worker Bee: Create (1, 10, 100) Work(s)

runnerexplorer

Sprinter: Create 10 revisions in an hour; Fun Runner: Create a revision a day for a week; Marathoner: Create a revision a day for 30 days; Explorer: View (10, 100, 1000) Entities

timetrack

Time Traveller: Create an edition before it is released; Hot Off the Press: Create an edition within a week of release

All of these are unit tested and have unique badges for each tier on the track. If you would have already unlocked these achievements before the system was launched, you will earn them with your next revision/creation. Badge templates are available for developers to introduce new badges and adding achievements can be as simple as making a badge and adding a few lines of code.

Profile Page

profilednd

Profile Page, Drag and drop badge selector


The gamification system also brings some changes to the profile page. There is now a badge box which can contain your three favorite badges. Additionally, your selected title is shown next to your username. You can select your favorite badges in the new achievements menu on the profile, then drag and drop your favorites into the boxes. Titles can be selected by going to Edit Profile, and selecting them from the drop down menu.

Other Areas

2016-08-20_16-12-21

Achievement Alert


On creation of an entity or revision you will now see an alert if an achievement is unlocked. This will prompt you to go to your profile page and set the ones you want to display. Usernames in other areas of the site can be hovered over in order to see the title they have set.

Demonstration

Here is a demonstration video I’ve made for the system:

Continue reading

GSoC 2016 students and projects

Google announced the final list of Google Summer of Code 2016 students and their projects yesterday. The list of MetaBrainz’ projects can be seen at our page on the GSoC site, but just for good measure, here’s the rundown:

MusicBrainz
Jeff Weeks (weeksio) returns to finish up the SOLR search server. We’re really hoping that this will be the end of our current search server woes. He will be mentored by the German duo of Ulrich Klauer (chirlu) and Rob Kaye (ruaok).
MusicBrainz Picard
Rahul Raturi (rahulr) will be working on improving searching MusicBrainz from within Picard, mentored by MusicBrainz’ senior developer Michael Wiencek (bitmap).
BookBrainz
Max Prettyjohns (QuoraUK) is going to try and take on adding gamification to our fledgling book/literature database. He will be supervised by the BookBrainz project leads and lead developers Ben Ockmore (LordSputnik) and Sean Burke (Leftmost).
ListenBrainz
Pinkesh Badjatiya (armalcolite) has pledged to tackle adding a much requested feature for our youngest project: implementing a Last.FM compatible submission API. Robert Kaye (ruaok) will be the one guiding him along.
AcousticBrainz
Daniele Scarano (hellska) will be spending the summer writing a toolkit for creating datasets, which should help researchers using AcousticBrainz. He will be mentored by MetaBrainz software engineer Roman Tsukanov (Gentlecat).
Kartik Gupta (kartikgupta0909) has set out to create an offline client for computing AcousticBrainz dataset evaluations. Alastair Porter (alastairp), the AcousticBrainz project lead, will be their mentor.
Goran Cetusic (cetko), our final student of this year, will be exploring how AcousticBrainz data can be utilised within Google’s BigQuery storage under the guidance of Alastair Porter.

Congratulations and good luck to all our students! We’re looking forwards to following your progress over the summer and see what you end up with.🙂

For all the students that applied but did not get accepted: we appreciate your applications, and even if you did not make the cut this year, we hope that you will stick around and apply with us again next year when we know you better – and you know us better.

For now, let the community bonding… begin! 🙌

MetaBrainz & GSoC 2016

Google announced who the chosen organisations for their Google Summer of Code were earlier tonight… And MetaBrainz was amongst them for yet another year (our 10th!)!

If you’re a prospective GSoC student who is hoping to apply with MetaBrainz this year, be sure to check out our guide to getting started and our currently suggested projects – but also note that we’d love for you to come up with your own suggestion! You may also want to take a look at the application template, which contains suggestions about
some of the things you should do and know before submitting your proposal.

For those of you who are already members of our community, you’re also welcome to add ideas to the suggestions page, and please be gentle when the GSoC hopefuls come along.🙂

That’s really all for now, but expect to hear more about GSoC and our participation over the coming months!

August Community Revisit

Ohoi m’hearties, it’s time for the first monthly Community Revisit, where we’ll revisit what happened in MetaBrainzLand during the last month. Ready for the ride? Leggo!

The primary thing happening this month has likely been the changes in the MetaBrainz employee line-up following Ian’s departure in July. In the beginning of the month, Freso (wait, hey, that’s me!) was pulled on board as Community Manager (a brand new position for MetaBrainz too!), and just at the end of the month, GSoC wonder child Roman “Gentlecat” Tsukanov was hired as the new software engineer. So hi to us two!🙂

Speaking of GSoC, the Google Summer of Code, this year’s edition is also fast coming to an end, and our four students and their projects are closing up and giving their work the final touches to have them ready to go live. Don’t be surprised if you hear more about these projects soon.

One thing that did go live during August, in no small part thanks to Ben “LordSputnik” Ockmore and Leo_Verto: the new IRC chat logger! Chat logs from IRC are now available at http://chatlogs.metabrainz.org/ – the site still needs some MetaBrainzifying, but Ben has done a great job of importing (pretty much) all the old chat logs to the new system and the bot is running in all the official MetaBrainz channels. If you’re on IRC (or you just like poking at the IRC logs), be sure to say “Thank you!! <3” to LordSputnik and Leo_Verto next time you see them around!

Another person who has made a mark in the last month was Alex a.k.a. caller#6, starting up the discussion about the current situation of MusicBrainz’ Area entities. Be sure to check out that blog post and let your voice be heard, if you don’t feel like it’s being represented already. The next instalment should be out before long.

We also had two server updates (pretty much all bug fixes) and an updated Virtual Machine image was finally released for the more tech oriented people.

This about rounds off the August Community Revisit. What do you think about the format? Did I miss any important community happenings? Any other comments? This is a brand new venture, so nothing’s set in stone yet!

From Denmark with love,
Freso

Announcing the beta launch of CritiqueBrainz

I’m proud to announce that we’ve launched a beta version of our new project: CritiqueBrainz.

CritiqueBrainz is a music review site, where anyone can write a music review for an artist or a release-group (album, single, etc). Unlike Wikipedia’s neutral point of view policy, this site is about passionate reviews about music. If an album is horrible, please write a review about why it is horrible. If it is great, please write one telling us what makes it great.

All of the reviews in CritiqueBrainz will be Creative Commons licensed. The user has a choice to license their review under CC-by-nc-sa (disallowing commercial use) or CC-by-sa (allowing commercial use). To get the site started, the BBC was kind enough to send us their collection of almost 9,000 CC licensed reviews. Go and have a look — there are a lot of reviews for you to read, right now!

CritiqueBrainz is a new web site that was originally written by Maciej Czerwiński for last year’s Summer of Code. All of the goals for the project were met last year, but that didn’t leave us with a site that was ready for deployment. For this year’s Summer of Code, Roman Tsukanov picked up the project and immediately started fixing bugs, making improvements and generally rocking the project into stability and drastically improved the look and feel of the site. On the beginning day of Summer of Code, we’re ready for a beta release!

This past weekend, I attended Music Hack Day San Francisco and worked with Roman to add Spotify integration into the site. If you have a Spotify account, you can listen to the music as you read the reviews. So far, we’ve matched 250,000 release-groups in MusicBrainz to Spotify! Even if an album doesn’t have a review, you can still browse all of MusicBrainz via CritiqueBrainz and if we have a matched Spotify album, you can listen to it by clicking the play button under the cover art.

If an album you find doesn’t have a match in Spotify, we invite you to help us find a match and submit it to Spotify. Click on the “Match this!” link, which will execute a search via Spotify’s API to try and find a matching album. Due to some limitations in the Spotify API, this doesn’t work as well as we want to — we plan to pester Spotify to improve their API to make this a better experience.

We’re hoping to make CritiqueBrainz a user site that uses more cover-art and white space to make a site that is friendlier to browse the amazing pieces of information that MusicBrainz has collected. Unlike the data nerds at MusicBrainz, not everyone loves information overload; this site should hopefully make non-data nerds happy about MusicBrainz data.

If you find a bug, or have a suggestion for improving the site, please file a bug report here and Roman will have a look at it.

Thanks to everyone who had a hand in making this project a reality and thanks to Google’s Open Source programs office for making Summer of Code happen!