Hi fellow developers,

I want to participate in Google Summer of Code; I don't have much time
in the coming week, and didn't have much in the past few weeks, so I
can't prepare many applications. But I at least want to make sure that
the one I send is of proper quality, therefore I humbly request that
you review my application below, and let me know where it's lacking,
where it has too much, and where it's unclear. Thanks!

There are a few things that I could add, but I didn't think they're
relevant enough. For example I have experience with Boost, and
submitted a bug report recently with a proposed fix, which was
promptly integrated into upstream. On the one hand that's experience
with developing and open source, on the other hand Amarok has nothing
to do with Boost. Should I add that? (I know that one bug report isn't
too impressive, but I'm just starting in the open source community.
I'm hoping that GSoC will get me far in that regard.)

Following is my application:

Name: Konrad Zemek
Email Address: konrad.ze...@gmail.com
Freenode IRC Nick: kzemek
IM Service and Username: Skype, handle: konrad-kun
Location: Kraków, Poland. GMT+2 during the Summer.

Proposal Title:
        Reimplement Amarok 1.4/iTunes import on top of Statistics
        Synchronization, and new Amarok 2.x     and Rhythmbox as synchronization
        targets.

Motivation for Proposal / Goal:
        Currently, Amarok has the ability to sync personal track metadata
        with Amarok 1.4 and iTunes databases. Although this code still
        fulfills its purpose, the StatSyncing framework has since been added
        to the codebase, and serves as a perfect base for a rewrite of
        importers. Perhaps the most significant advantage implementation
        on top of StatSyncing offers over the current one, is the ability
        to resynchronize information and to work with collections other
        than local.
        Still, synchronization with Amarok 1.4 and iTunes covers only
        a small portion of users that may be willing to use Amarok 2.x,
        but because of the consequences of losing their personal metadata,
        are tied to their current music player. To alleviate this, I intend
        to add Rhythmbox as a new target for synchronization. Rhythmbox
        it the default GNOME's music player, and since Ubuntu 12.04, the
        music player shipped by default in Ubuntu. I feel that this is an
        important target for metadata synchronization, easing not only the
        transition between music players, but between whole desktop
        environments - GNOME and KDE.
        To complete the set, synchronization with Amarok 2.x will be added,
        so that user can synchronize his personal track metadata between
        separate Amarok databases.

Implementation Details:
        This project breaks up in a few parts with well-defined deliverables
        (details about timeline are in Tentative Timeline section).
        
        * Importer tests
                There are either no tests for importing in the current trunk,
                or they are in a wrong place. Regardless, since a big part of
                this project consists of refactoring, I will have to prepare
                a quality suite of tests to make sure that I introduce no
                regressions.
                
                - Review current importer tests (if any)
                - Implement whole test suite using QTest and gmock best
                practices
                - The main test cases would involve using a dummy input,
                invoking importer and verifying collection.
                - For best test results, at least the collection class may
                be mocked
        
        * Reimplementing importers
                - Reimplement importers to use StatSyncing
                - Data-reading modules, after needed changes, would become track
                providers
                - Current services using StatSyncing framework will be used
                as a reference (primarily last.fm service)
                - Clean-up the code responsible for data-reading
                - At each step where the code is functional (at least between
                reimplementing FastForwardImporter and ITunesImporter),
                supplement the tests so that new capabilities are accounted for
                (e.g. make sure that foreign playcounts are not simply stacked
                on locally saved playcounts with each synchronization)
                - The importer code may prove to be repeatable (in the extreme
                case the only thing differing these importers will be their
                respective parsers); this code will be deduplicated. If it fits
                DatabaseImporter (a parent class for importers) responsibilities
                then the code should land in DatabaseImporter implementation,
                otherwise I will introduce new helper classes.
        
        * Implement Rhythmbox and Amarok 2.x importers
                Rhythmbox stores its personal metadata in an XML file, which
                should be easy to read through QXml SAX parser. When in doubt
                about the format, I will consult Rhythmbox source code.
                
                - Rhythmbox parser shall be robust, that is it shouldn't depend
                on the order of information (this is obvious, but important)
                - At this point both Amarok 1.4 and iTunes importers are
                rewritten, so their implementations will be used as a reference
                for Amarok 2.x and Rhythmbox importers.
                - The subgoal is to make sure that adding additional import
                targets is straightforward and easy, and if possible doesn't
                introduce code duplication.
                - As with reimplementing importers, every piece of working code
                should be tested to ensure that it is performing correctly,
                and so that regressions don't occur in the future.
        
Tentative Timeline:
        June 17 - 23:
                Investigating tests and drafting up test cases
        June 24 - 30:
                Investigating tests and drafting up test cases (exam week)
        July 01 - 07:
                Preparing the test suite
        July 08 - 14:
                Implementing the test cases
        July 15 - 21:
                Reimplementing FastForward importer
        July 22 - 28:
                Reimplementing FastForward importer / iTunes importer
        July 29 - August 04:
                Reimplementing iTunes importer
        August 05 - 11:
                Implementing test cases for new functionality
        August 12 - 18:
                In-depth research of Rhythmbox metadata format
        August 19 - 25:
                Implementing Rhythmbox importer
        August 26 - September 01:
                Implementing Rhythmbox importer / Amarok 2.x importer
        September 02 - 08:
                Implementing Amarok 2.x importer
        September 09 - 15:
                Implementing test cases for new importers
        September 16 - 22:
                fix bugs, QA
        September 23 - 29:
                fix bugs, QA

Obligations from late May to early August:
        I have school until the very early July, with exams starting the
        last week of June. I will be putting my work on hold for the whole
        period of Google Summer of Code, but up until early June I may still
        be required to commit at least a few hours a week to my current job.
        So from early June to late September I have no commitments except
        for school, and from early July to late September no commitments
        at all.

About me:
        I'm a student at AGH University of Technology, Kraków, Poland.
        I study Computer Science, and I'm currently in my second year.
        At the moment I'm employed as a part time C++ programmer at
        X-Formation [1], Poland, where my work ranges from conducting
        interviews with potential employees, through refactoring and
        bugfixing to implementing new features for our product.
        
        I'm a big fan of open source, and KDE in general. I've used Amarok
        a lot and not only read the source, but contributed to it [2].
        I am also familiar with Qt framework and have used it to prototype
        several small applications. I'm an early adopter, and my fiddling
        with Qt 5 beta has led me to uncover an important bug [3].
        
        I'm very skilled in C++. Other than that I program mainly in Scala,
        and Java when required (and my university requires that a lot).
        I'm experienced with test driven development, continuous
        integration, code reviews and other agile techniques.
        
        If my application is accepted, I am going to commit my full time to
        complete the project, including putting my job on hold for the
        duration of GSoC. I expect to be working 40 hours a week. I am
        comfortable with working independently under a supervisor living
        on the other side of the globe. Although I have not have worked
        in this style before, I foresee no problems with this and can even
        change my working hours if needed. I think that code reviews
        and email contact are the best way of tracking progress in this
        case. I am fluent in English, so communication should be a problem.
        Of course I would work as well with a local mentor, with whom
        I could discuss issues over a coffee.
        
        During the bonding period I expect to complete some more tasks for
        Amarok, possibly continuing what I started with [2] (in review
        comments I mentioned streamlining track sorting and making it
        consistent across the source code).

Junior job link:
        [2]

References:
[1] http://www.x-formation.com/
[2] https://git.reviewboard.kde.org/r/110070/
[3] https://bugreports.qt-project.org/browse/QTBUG-26832
_______________________________________________
Amarok-devel mailing list
Amarok-devel@kde.org
https://mail.kde.org/mailman/listinfo/amarok-devel

Reply via email to