Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
My GSoC 2014 Proposal

GSoC Proposal

Personal Information

Name: Shadab Zafar

Nickname: Bittoo (pronounced: bit-two)

IRC Nick: dufferZafar






Picard is currently located here. It is actually a doc page buried in the MusicBrainz site.

Picard's Plugins can be downloaded from here. It is yet another doc page containing a table of available plugins. To add a new one, the developer first has to upload the code to whatever location they prefer and then have to edit the wiki.

From the user's perspective: to use a plugin they need to go to the page, download the file and then copy it to the plugins folder.

My job would be to give Picard it's very own website which will be used for everything Picard related. The new website will also host Picard's plugins. So developers can just upload their code, add some details and get it down with. To make the plugins accessible to the user I will be adding an interface to Picard itself which allows plugin downloads without ever leaving Picard.


  1. Create a website containing:

    • A landing page where users can download and get some really basic info.
    • Other Picard related stuff like the guide to tagging, picard's documentation, it's plugin API reference.
  2. Add a Plugin download interface to Picard. This will also involve creating an API that can list, add, update, and verify the plugins.

  3. Documentation:

    • Write a better Documentation for Picard's Plugin and Scripting API
    • Create an offline documentation for Picard and it's plugins


For the website, I'll mostly be using Bootstrap and jQuery as I have quite some experience with them. The site will have a theme similar to the current one that MusicBrainz has. I will have to get down to Bootstrap internals to change the current theme. I have coded LESS before so this won't be a problem.

I created a prototype of the picard landing page which is here. One of the features it currently has and will be in the final version is that only the download link for the user's current platform will be shown. The rest will be placed on another page titled "Other Downloads".

The static pages part is really simple so I'll get this done first.

After discussions on the mailing list and feedback by other members, It's been decided that we'll use Github to host all our plugins.

The method would be something like: we create a repo - Musicbrainz/Picard-Plugins, people who want to add a plugin fork it, add their code and send pull requests. Contributors then review the code and take appropriate actions. The review will ensure that the code is free from any sorts of malwares that could possibly be harmful. The reviewer can then merge the pull request.

The changes will be pulled to our own server (probably via a CRON job), JSON entry for that plugin will be updated (or added) containing fields like 'name', 'author', 'gpg signature', 'download count' etc.

Procedures like listing, downloading of plugins will be backed by an API written in flask. I have created a prototype API which can list all the plugins. The API will store all required plugin data in a static JSON file (described above). Once the API is done I will move to the picard's download plugin interface. I have some very basic idea of Picard's codebase and will have to delve in as and when required. I did this once before when I understood how files and Qt Designer works.

I have created a mockup/prototype of the Download interface which can list plugins by reading a JSON file (which will available to Picard via the API.) Here is the feature branch.

It has a "Downlad Count" which will be useful for the end-user in order to choose better plugins. It will also help us identify features which can be added to Picard itself.

The UI has a 'filter field' which will be a regex that can be used to search through a list of plugins.

Once a user downloads a plugin, Picard will verify it with the signature and will install the plugin. Plugins will be updated automatically but I think giving a setting for this would be nice. The user will be informed if the plugin to be updated alread contains some changes (made by the user himself.)

I also plan to write exhaustive documentations on both the Plugins and Scripting APIs of Picard as I have seen many people complain about the lack of a nice doc. It will have example plugins (from the already available list or from forums) with their annotated source code.


Before mid-term evaluations:

  • Publish final specific details to the mailing list to get feedback and any other suggestions.

  • Start implementing the static pages of the picard webiste as listed above and get the design approved.

  • Finish the static site design and port any other picard related stuff from the current MB site.

  • Begin writing the API that will serve as a backbone for the in-picard interface.

After mid-term evaluations:

  • Finish the API and Deploy it to the server and test that everything works fine.

  • Get thorough with the Picard's codebase and the specifics of Qt.

  • Implement the UI in Qt Designer first, get it approved and then add event handlers.

  • First document the stuff I have done and then write documentation for the Plugin API.

About Me

I am Shadab Zafar, pursuing Bachelors in Computer Engineering from Jamia Millia Islamia, India.

I'll be 21 this August and have been programming since I was 15.

The first programming related thing I ever did was to understand and modify this HUGE batch file. After a whole lot of edits it got converted into this.

Almost all of the code I have written is available on my Github profile. Apart from my own stuff it contains not-so-great patches to some 3rd party Sublime Text plugins.

I started programming with Windows based stuff - mostly scripts written in Autohotkey. I also have a keen interest in Mathematics (especially Number Theory) and that took me to solve Project Euler problems, which I did in Lua. My interests have now shifted to Web development. The latest thing I built for the web is not on Github as the contest is still going on. You can have a look at it here. I will open source the code once the contest ends on 25/3/2014.

Another field that interests me is that of Big Data. I have a record of my internet usage of 2013.

I have a Laptop that boots into Windows 7 and Mint 16. During the summer I will also be having a Desktop computer that boots into Windows 8 and Ubuntu 13.04. I mostly work on personal projects during my free time and have no other work during most of summer. My course ends around May 21 and the next semester will start from 16th July, so I can work full time on the project during the summer.

Apart from Bollywood music; I mostly listen to rock, indie, alternative and soundtrack, Kings of Leon being my favorite band. Here are some IDs:

Tickets Involved

I looked at the Issue tracker and here are some issues that the current propsal will solve:

A list of issues not related to the current proposal but I think I can tackle:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment