<div dir="ltr"><p style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:rgb(246,246,246);color:rgb(0,0,0)"><font face="Arial"><span style="line-height:19px;white-space:pre-wrap">Hello,</span></font></p>

<p style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:rgb(246,246,246);color:rgb(0,0,0)"><font face="Arial"><span style="line-height:19px;white-space:pre-wrap">With less than one hour left for Student Application deadline, I am posting my final proposal for Google Summer of Code.</span></font></p>

<p style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:rgb(246,246,246);color:rgb(0,0,0)"><font face="Arial"><span style="line-height:19px;white-space:pre-wrap">Below is a plain text copy of my project proposal as submitted on Google melange.</span></font></p>

<p style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:rgb(246,246,246);color:rgb(0,0,0)"><font face="Arial"><span style="line-height:19px;white-space:pre-wrap">Thank-you,</span></font></p>

<p style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:rgb(246,246,246);color:rgb(0,0,0)"><font face="Arial"><span style="line-height:19px;white-space:pre-wrap">Vedant</span></font></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap"><br></span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Name: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">Vedant Agarwala</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Email Address: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap"><a href="mailto:vedant.kota@gmail.com">vedant.kota@gmail.com</a></span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Freenode IRC Nick: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">vedant</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">IM Service and Username: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">xmpp-google: <a href="mailto:vedant.kota@gmail.com">vedant.kota@gmail.com</a></span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Location (City, Country and/or Time Zone): </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">Kolkata, India GMT+5.30</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.5;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Proposal Title: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;text-decoration:underline;white-space:pre-wrap">Improving and modularizing tag guessing</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Motivation for Proposal and Goal: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(34,34,34);white-space:pre-wrap">Currently, Amarok “guesses” tags of music files through the MusicBrainz web service using either existing tags or MusicIP (PUID) audio fingerprints. This method, however, is somewhat outdated. MusicBrainz is phasing out MusicIP in favour of AcoustID and other methods of guessing tags have emerged. Hence, getting tags for tracks with missing/incorrect track name doesn't work as it should.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:small;vertical-align:baseline;background-color:transparent;color:rgb(34,34,34);font-family:Arial"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:17px;white-space:pre-wrap">Say a user imports tracks from a CD. The CD didn't support/have track names so all the songs he imported were named "Track 1", "Track 2", etc. He at least needs the correct track names. He tries to get tags from MusicBrainz but, as expected, he doesn't get the correct tags. It is not uncommon for people to have tracks with missing or incorrect or useless (like in this case) track names. My project aims to add more tag getters like MusicBrainz AcustID tag getter and Last.fm tag getter, so that such situations are minimized, if not removed entirely.</span></span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(34,34,34);white-space:pre-wrap">Also, getting tags from MusicBrainz is hard coded into the Amarok source code and not modularized; this makes it hard to add new Tag Getters (like, for example, Last.fm). Moreover, MusicBrainz code is not very well documented. It's time consuming for a programmer trying to add features even just to MusicBrainz since they will have to read and understand the code. As of now, this is useful only to update existing tags. Tags for songs with no/incorrect tags are not fetched properly.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(34,34,34);font-family:Arial;white-space:pre-wrap">The aim of this project is to create an abstract base class for tag guessing that can be suitably inherited by other classes that aim to guess tags.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

 </p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Implementation Details:</span></p><ul style="margin:0pt 0px 0pt 1.1em;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:rgb(246,246,246);list-style-position:initial;line-height:19.5px;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<li dir="ltr" style="margin:0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:transparent;list-style-position:outside;font-family:Arial;color:rgb(34,34,34)"><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-style:italic;white-space:pre-wrap">Creating a generic framework for tag getters</span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-style:italic;white-space:pre-wrap">: </span>I will replace t<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap">he existing musicbrainz directory by a taggetter directory. It will contain Controller and Provider classes (similar to StatSyncing) under the namespace TagGetter. The settings UI and related classes will also be present in this directory. I will change the musicbrainzTagger() in the TagDialog class to tagGetterController(). Once this is called, the TagGetter::Controller (a singleton class) will be invoked and process of tag guessing will begin. The Controller will have a list (a QList of ProviderPointers) of available Providers and it will create objects of each of them. Each of those objects will implementing the abstract base class Provider. As required, the Controller will be calling the methods (and connecting signals to slots) of the Provider on the main thread and via polymorphism appropriate methods of each Provider will be called.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:small;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625">Each TagGetter::Provider will have its own directory under the TagGetter directory. They will contain classes and one that will implement the Provider class. Providers will be memory manged among different classes (like the classes handling GUI will require information from the provider) via the QExplicitlySharedDataPointer or KSharedPointer. Each provider will be running in parallel. As the different Providers do their work, results and progress of the work will available to the Controller via the signals connected to the slots of the Controller. Establishing a connection to the web service server, converting the music into data sendable over the internet, fetching results and the error handling will all be part of each Provider’s work. Separate threads won’t be required because the network operations will be handled by Qt (QNetworkRequest and QNetworkReply) and they are the most time consuming. If something else takes time to run (like decoding the audio and creating the fingerprint) then the provider will have to manage this on another thread (probably by using the ThreadWeaver::Job). As part of the contract of each provider, each of its methods must return quickly. This is important </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:13px">because</span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> the Controller will guarantee calling these methods on the main thread.</span></span></span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:small;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625">The Controller will provide the Providers with the TrackPtr and hence with track data (name, album, artist, length, file location etc.). I will write a TagGetterMeta class. Member variables of this class will include a trackPtr (to store the track pointer of the track whose metadata is being fetched) and metadata variables (name, artist, album, etc.). After data has been fetched, Providers will fill the metadata to the TagGetterMetra objects according to the trackPtr and return this object via a signal to TagGetter::Controller. Providers should not store this data but they should keep the data that authenticates the provider (probably an API key that is received on authentication) as long as the objects of themselves exist since many lists of tracks can sent to be the Provider in quick succession. Each Provider can store a small amount of data in the data using the KGlobal::config(). A provider should add itself to the "plugins" section in Amarok Settings so that it can be enabled/disabled by the user. If badly required also provide some </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:17px">additional</span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> user </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:17px">changeable</span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> settings, since its best to keep working of plugins as </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:17px">abstracted</span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> from the user as possible.</span></span></span></span></span></p>

</li><li dir="ltr" style="margin:0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:transparent;list-style-position:outside;font-family:Arial;color:rgb(34,34,34)"><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-style:italic;white-space:pre-wrap">Adapt MusicBrainz tag getter to implement the abstract Provider class: </span>I will rewrite<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap"> MusicBrainz code according to the above framework. All the existing classes will shifted to the new musicbrainz subdirectory inside the taggetter directory. The MusicBrainzFinder will become MusicIpProvider, implementing the abstract Provider class. Other code will also be re-written. Currently, libofa is used to create the MusicIP (PUID) that is sent to MusicBrainz. MusicBrainz is phasing out PUIDs in favour of AcustIDs.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap">Hence, another Provider will be made (in the same directory). A MusicBrainzProvider will use </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap"><a href="http://acoustid.org/chromaprint" title="Chromaprint" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139)">Chromaprint</a> to compute AcustIDs rather than the MusicIP generated by libofa. </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;white-space:pre-wrap">Chromaprint will be used to generate the AcoustID. Chromaprint uses the standard C library<a href="https://bitbucket.org/acoustid/chromaprint/src/master/src/chromaprint.h" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139)">[*]</a> so code can easily be used withing existing classes. I will make Chromaprint a part of the optional tag guessing package (alongwith libofa) and update the cmakelists, making Chromaprint as a requirement for MusicBrainz tag guessing. Hence, the MusicBrainzProvider will be available only if Chromaprint has been installed. Chromaprint will be part of the optional package. A HAS_CHROMAPRINT macro will keep track of this and the C code will only be defined if the marco has a value. The provider will be “available” only if the macro is defined.</span></p>

</li><li dir="ltr" style="margin:0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:transparent;list-style-position:outside;font-family:Arial;color:rgb(34,34,34)"><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-style:italic;white-space:pre-wrap">Creating Last.fm tag getter: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(46,52,54);white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:small;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625">Create the Last.fm tag getter. First, I will add the tag based service and then, if schedule permits, I can add the fingerprint based service. Hence, two LastFm Providers will be created. Implementation will be very easy thanks to </span></span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(51,102,255)"><a href="https://github.com/lastfm/liblastfm" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(46,52,54);line-height:1.4625"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(51,102,255)">liblastfm</span></a></span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:small;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625">- A Qt C++ library for the Last.fm webservices. It is already used in Amarok. Both the Providers will share the authentication data and reply so that network requests aren’t needlessly duplicated. They will be in the same directory but will have two available providers. The network replies by Last.fm and </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:17px">parsing will be handled by liblastfm itself. </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;line-height:1.4625">Now the similarities end. The network requests and replies will have to handled differently by the different providers, since one will be tag based and the other fingerprint based.</span></span></span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(46,52,54);white-space:pre-wrap">For the LastfmTagProvider, the track/artist name has to be sent to the Last.fm webservice API. The webservice will then return the other track metadata. For the LastFmFingerprintProvider we will first have to generate a “fingerprint” of the track using the </span><a href="https://github.com/lastfm/Fingerprinter" title="Last Fm Fingerprinter" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">Last Fm Fingerprinter</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(46,52,54);white-space:pre-wrap">. This audio fingerprint will then be sent to the Last fm web service via a call to the </span><a href="http://www.last.fm/api/show/track.getFingerprintMetadata" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">track.getFingerprintMetadata</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(46,52,54);white-space:pre-wrap">. Then the web service will return the track metadata along with a “confidence rating” to specify how accurately the track has been identified.</span></p>

</li></ul><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Tentative Timeline:</span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">June-</span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-style:italic;white-space:pre-wrap"><--- GSoC commences---></span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 3: Make the directories and write the abstract classes (with documentation).</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 4: Polish, make cmakelists for, write make tests and compile the written abstract classes.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">July-</span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 1: Re-write the MusicBrainz tag getter according to the framework with better documentation</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 2: Add the features (like using AcoustID) to this MusicBrainz tag getter</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 3: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Compile and run the new MusicBrainz. Fix issues and repeat</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 4: Complete the MusicBrainz tag getter for mid term submission.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-style:italic;white-space:pre-wrap"><--- Mid term ---></span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">August-</span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 1: Write the Last.fm tag getter (as many features as possible)</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 2: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Compile and run the new Last.fm. Fix issues and repeat</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 3: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Finish writing and test the Last.fm tag getter</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 4: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Write make tests to make sure that new tag getters follow the set framework</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">September-</span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 1: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Improve documentation. Fix bugs that have been discovered over the weeks</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 2: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Buffer Period</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-style:italic;white-space:pre-wrap"><--- suggested “pens down” ---></span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 3: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Fix Bugs, streamline and optimize the code.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-style:italic;white-space:pre-wrap"><--- firm “pens down” ---></span></p><p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 4: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Do some code cleaning and fix bugs so that my project can be pushed into the master branch.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">October-</span></p><p dir="ltr" style="margin:0pt 0px 10pt;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">week 1: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;line-height:19px;white-space:pre-wrap">Improve documentation. Fix bugs.</span></p>

<p dir="ltr" style="margin:0pt 0px 10pt;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">Other Obligations: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent"><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625">I have no other obligations. I can easily spend about 50 hours a week: around 8 hrs a day in slots of 2 to 3 hrs. Summer vacations will be going on till mid July. Even after college starts, I will be following the same schedule for GSoC coding. It is easily possible </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent">because</span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> very few classes are held in the beginning of the semester and even if they do clash with my coding time-period, the college teachers excuse GSoC students' </span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent">absence</span><span style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;line-height:1.4625"> from class. Since I will have no other coursework obligations, I can continue to code 50 hours a week (with a similar schedule) even up till September.</span></span></span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">  </span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">About Me: </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">I am currently in my second undergraduate year in National Institute of Technology, Durgapur, India, studying Computer Science and Engineering. I have experience coding experience with C/C++, Java (including Android and making GUI using Java swing) and web services. I have submitted 3 patches (Junior Jobs, one each for Rekonq</span><a href="https://git.reviewboard.kde.org/r/107662/" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">[1]</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap"> and Amarok</span><a href="https://git.reviewboard.kde.org/r/109283/" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">[2]</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap"> as well as a improved formatting patch for Amarok</span><a href="https://git.reviewboard.kde.org/r/109295/" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">[3]</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">) and 2 more are under review (both Junior Jobs for Amarok</span><a href="https://git.reviewboard.kde.org/r/110101/" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">[4]</span></a><a href="https://git.reviewboard.kde.org/r/110082/" style="margin:0px;padding:0px;border:0px;outline:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,83,139);text-decoration:none"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;color:rgb(17,85,204);text-decoration:underline;white-space:pre-wrap">[5]</span></a><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">).</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">I love coding for open source. I have been hacking with Amarok recently. Earlier I used to take weeks to fix bugs but now I am able to submit a new request with in 2-4 days after taking up a bug. I have become familiar with the source code of Amarok and it's coding style. Most of my work has been for Amarok mainly because it is a wonderful music player.</span></p>

<p dir="ltr" style="margin:0pt 0px;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">I’m sure working with a mentor who is virtually present won’t be a problem. I have interacted (mainly with Matej a.k.a. Strohel on IRC) over IRC, the amarok mailing list, reviewboard and also the KDE bug tracking system. During the work period code can easily be shared via my personal scratch git repositories.</span></p>

<p dir="ltr" style="margin:0pt 0px 10pt;padding:0px;border:0px;outline:0px;font-size:12px;vertical-align:baseline;background-color:rgb(246,246,246);line-height:1.4625;color:rgb(0,0,0);font-family:Arial,'Helvetica Neue',Helvetica,sans-serif">

<span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;font-weight:bold;white-space:pre-wrap">After GSoC </span><span style="margin:0px;padding:0px;border:0px;outline:0px;font-size:13px;vertical-align:baseline;background-color:transparent;font-family:Arial;white-space:pre-wrap">I plan to become an active developer for Amarok and also for other projects of KDE.</span></p>

</div>