GSoC application review - reimplementing personal metadata importers
Konrad Zemek
konrad.zemek at gmail.com
Sat Apr 20 14:57:20 UTC 2013
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.zemek at 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
More information about the Amarok-devel
mailing list