<?xml version="1.0" encoding="utf-8" ?>

<rss version="2.0" 
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:admin="http://webns.net/mvcb/"
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
   xmlns:wfw="http://wellformedweb.org/CommentAPI/"
   xmlns:content="http://purl.org/rss/1.0/modules/content/"
   >
<channel>
    <title>Amarok Blog - ramblurr</title>
    <link>http://amarok.kde.org/blog/</link>
    <description>Amarok developers at work</description>
    <dc:language>en</dc:language>
    <generator>Serendipity 1.1-alpha7 - http://www.s9y.org/</generator>
    <pubDate>Wed, 30 Jul 2008 22:14:10 GMT</pubDate>

    <image>
        <url>http://amarok.kde.org/blog/templates/default/img/s9y_banner_small.png</url>
        <title>RSS: Amarok Blog - ramblurr - Amarok developers at work</title>
        <link>http://amarok.kde.org/blog/</link>
        <width>100</width>
        <height>21</height>
    </image>

<item>
    <title>I?m Leaving on a Jet Plane?</title>
    <link>http://amarok.kde.org/blog/archives/760-Im-Leaving-on-a-Jet-Plane.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/760-Im-Leaving-on-a-Jet-Plane.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=760</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=760</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;p&gt;The ball has been dropped by me - dropped hard - during the past several weeks. First, I was stumped for a week and a half by the glib+qt fiasco, then my development machine&amp;#8217;s hard drive shuffled off the mortal coil. Replacing it took a solid week, and when it finally arrived I installed Gentoo. Two days later, the finally install completes as I&amp;#8217;m frantically throwing my life&amp;#8217;s possessions into a car:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;clothes&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;2 laptops&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;1 Target desk (retail $50)&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;assorted books&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;1 blow-up air mattress&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;Fast forward through seven hours of me hurtling down the interstate at not-so-safe velocities, and here I am, pardoning my recent idleness as my flight to Paris boards at gate D32. Not accomplishing much over the past several weeks suddenly doesn&amp;#8217;t seem so bad: I&amp;#8217;m going to Europe! There is a week long hack-a-thon at Akademy; I&amp;#8217;ll catch up then.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://akademy.kde.org&quot;&gt;&lt;img alt=&quot;Im Going to Akademy&quot; src=&quot;http://blog.lydiapintscher.de/wp-content/igta2008.png&quot; title=&quot;Im Going to Akademy&quot; width=&quot;320&quot; height=&quot;178&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;A bientôt!&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;embed src=&quot;http://www.seeqpod.net/cache/seeqpodSlimlineEmbed.swf&quot; wmode=&quot;transparent&quot; width=&quot;300&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; flashvars=&quot;domain=http://www.seeqpod.com&amp;#038;playlistXMLPath=http://www.seeqpod.com/api/music/getPlaylist?playlist_id=f3ea4fd4e8&quot;&gt;&lt;/embed&gt;&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 30 Jul 2008 18:14:10 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/760-guid.html</guid>
    
</item>
<item>
    <title>Another GSoC Mini Report</title>
    <link>http://amarok.kde.org/blog/archives/744-Another-GSoC-Mini-Report.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/744-Another-GSoC-Mini-Report.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=744</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=744</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;p&gt;I&amp;#8217;ve been slacking on the update reports over the past two weeks, because I&amp;#8217;m holding out for the exciting post where I say &amp;#8220;MP3tunes AutoSync is working! Huzzah!&amp;#8221; Sadly, this report isn&amp;#8217;t that one.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;For the past week I&amp;#8217;ve been banging my head against the wall of glib, QtEventLoop, and QThreads. I have quite a headache to say the least, but yesterday thanks to &lt;a href=&quot;http://amarok.kde.org/blog/categories/18-freespirit&quot;&gt;my mentor&lt;/a&gt; and &lt;a href=&quot;http://www.monroe.nu/&quot;&gt;Ian&lt;/a&gt;, both Amarok developers, my head actually broke through that wall. Literally. GLIB, and Qt are kowtowing at my feet swearing oaths of fealty. They have promised to work together and let me get back to doing fun things, like code new features.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Thu, 17 Jul 2008 17:42:17 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/744-guid.html</guid>
    
</item>
<item>
    <title>GSoC Mini Report</title>
    <link>http://amarok.kde.org/blog/archives/731-GSoC-Mini-Report.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/731-GSoC-Mini-Report.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=731</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=731</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;p&gt;Some non-Summer-of-Code related business popped up over the weekend, to take care of which required a slight road-trip. As such, I haven&amp;#8217;t had much time to work on &lt;a href=&quot;http://binaryelysium.com/blog/2008/04/05/google-summer-of-code-one-intro-with-a-side-order-of-awesome/&quot;&gt;my project&lt;/a&gt;, however I&amp;#8217;m heading back home today and I plan to get the code I have chilling in my local branch pushed to the main subversion repository.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Surprisingly, bulleted lists seem to be the most concise means to list progress [/sarcasm]&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Still working on Harmony integration.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Harmony authentication is working (Thanks Lateralus from MP3tunes!).&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;The daemon is receiving notification updates.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Notification processing is what I&amp;#8217;m working on now.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;While looking at my last couple reports about harmony, I realized that the information is somewhat  dry. I think this is because harmony is a highly technical, behind the scenes feature, and, also, often it is difficult to inject excitement into mundane programming updates. The humdrum is slightly symbolic of harmony. You will enable it once and forget about it as it silently keeps your music collection synced.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Related posts: &lt;a href=&quot;http://binaryelysium.com/blog/2008/07/02/gsoc-report-week-5/&quot;&gt;GSoC Report Week 5: Harmonizing Amarok&lt;/a&gt;, &lt;a href=&quot;http://binaryelysium.com/blog/2008/06/20/one-small-step-for-amarok/&quot;&gt;One small step for Amarok?&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 08 Jul 2008 04:17:35 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/731-guid.html</guid>
    
</item>
<item>
    <title>GSoC Report Week 5: Harmonizing Amarok</title>
    <link>http://amarok.kde.org/blog/archives/715-GSoC-Report-Week-5-Harmonizing-Amarok.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/715-GSoC-Report-Week-5-Harmonizing-Amarok.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=715</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=715</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;h4&gt;Project: &lt;a href=&quot;http://www.mp3tunes.com&quot;&gt;MP3tunes&lt;/a&gt; + &lt;a href=&quot;http://www.amarok.kde.org&quot;&gt;Amarok&lt;/a&gt; Integration&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size:8pt&quot;&gt;Total Commits: &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot; title=&quot;All my Amarok commits&quot;&gt;106&lt;/a&gt; Weekly Commits: 26&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;past&quot;&gt;Past 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;I usually aim to post these reports on Monday, but I&amp;#8217;m usually wrapping up a final commit or two on Monday night so I wait till Tuesday to post the report. Well now it&amp;#8217;s 3:30 on Wednesday morning and I&amp;#8217;m just starting. My last commit for &amp;#8220;this week&amp;#8221; was, oh, about 30 seconds ago.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;During the last 7 days I:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Patched libmp3tunes to support track fetching based off a filekey.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Used the aforementioned patch in Amarok to enable saving of MP3tunes tracks to playlists.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Made the MP3tunes Service &amp;#8220;Lazy Load&amp;#8221; upon Amarok&amp;#8217;s start-up.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Fixed misc non-mp3tunes related Amarok bugs.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Added libmp3tunes::Harmony to the source tree.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Created a harmony daemon that runs asynchronously within Amarok.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;As usual you can see a list of my most recent commits via my &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot;&gt;fisheye&lt;/a&gt; page.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;strong&gt;What the heck is this Harmony nonsense?&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Harmony, itself, is a subset of libmp3tunes that provides an api for receiving event notifications from the MP3tunes servers. Essentially, what it boils down to is harmony enables the MP3tunes servers to notify Amarok when a user&amp;#8217;s Locker has been changed. This will allow Amarok to assess the changes and perform an appropriate action (e.g., download a new track). &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Suppose Jenni buys a song from &lt;a href=&quot;http://www.eclassical.com/&quot;&gt;eClassical&lt;/a&gt; and has it loaded directly to her locker. When this happens her Amarok will receive a notification: &lt;em&gt;&amp;#8220;Hey Amarok, Jenni just had a track added to her locker.&amp;#8221;&lt;/em&gt; At which point Amarok will seamlessly download the track to Jenni&amp;#8217;s local collection.&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;upcoming&quot;&gt;Upcoming 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;Pretty cool right? Sure is, there&amp;#8217;s just one caveat: it&amp;#8217;s not working yet. Getting harmony to play nice with Amarok was a challenge that took a couple days, but as of this morning harmony is running in Amarok.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;By this time next week I plan to have harmony fully integrated with Amarok, so the above scenario can actually take place. Even though the feature freeze that was announced for Amarok 2.0 technically doesn&amp;#8217;t include me, I will still be taking some time to polish all the work I&amp;#8217;ve done since May.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Wed, 02 Jul 2008 04:21:10 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/715-guid.html</guid>
    
</item>
<item>
    <title>GSoC Report Week 4</title>
    <link>http://amarok.kde.org/blog/archives/702-GSoC-Report-Week-4.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/702-GSoC-Report-Week-4.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=702</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=702</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;h4&gt;Project: &lt;a href=&quot;http://www.mp3tunes.com&quot;&gt;MP3tunes&lt;/a&gt; + &lt;a href=&quot;http://www.amarok.kde.org&quot;&gt;Amarok&lt;/a&gt; Integration&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size:8pt&quot;&gt;Total Commits: &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot; title=&quot;All my Amarok commits&quot;&gt;84&lt;/a&gt; Weekly Commits: 36&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;past&quot;&gt;Past 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;Starting these posts with &amp;#8220;It was another busy week..&amp;#8221; is starting to get boring; I&amp;#8217;ll cook up something more exciting for next week.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;In case you missed it, in the past seven days &lt;a href=&quot;http://binaryelysium.com/blog/2008/06/20/one-small-step-for-amarok/&quot;&gt;history has been made&lt;/a&gt;. I&amp;#8217;ll let that stand in as the bulk of my weekly report, but a few worthwhile things have occurred since then that deserve a mention.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Remote Track Upload - You can now sideload tracks to your MP3tunes collection from remote sources in Amarok. What the heck is sideload and what remote sources you ask? Sideload is a feature of the MP3tunes API that allows for server-to-server transfers. This means you can give your Locker a URL to a track, and it will automatically be downloaded into your Locker. Currently Amarok sports three services with remote collections that are sideloadable to MP3tunes: Ampache, Magnatune, and Jamendo. This method of transferring is generally very fast, because the transfer bypasses your slow internet connection.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Upload Progress Bar - When you upload (or sideload) tracks to MP3tunes there is now a simple status bar to let you know how far along in the process you are. &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Non-Supported Track Filtering - This one is simple: If you try and upload a file-type that MP3tunes doesn&amp;#8217;t support, Amarok will tell you and stop that track from being transferred.&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;upcoming&quot;&gt;Upcoming 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Work on allowing MP3tunes tracks to persist after a restart.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Flesh out the synchronization system: what it&amp;#8217;s going to do, and how it&amp;#8217;s going to do it.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Design any UI widgets needed for the syncing system&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;The first one will be simple, in fact I plan to code it up after writing this report. These second and third tasks, however, signify that I&amp;#8217;m moving into the last stage of the project. According to my original proposal I am ahead by a week, so I&amp;#8217;ll be using this week as extra time to plan and get a jump-start on the synchronization framework.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 24 Jun 2008 16:23:38 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/702-guid.html</guid>
    
</item>
<item>
    <title>One small step for Amarok?</title>
    <link>http://amarok.kde.org/blog/archives/693-One-small-step-for-Amarok.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/693-One-small-step-for-Amarok.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=693</wfw:comment>

    <slash:comments>4</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=693</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;p&gt;I&amp;#8217;m very excited to announce that the first Amarok-&gt;Cloud transfer has taken place. Just moments ago, for the first time ever (as far as I&amp;#8217;m aware), a track was sent up into the Cloud from a desktop media player, escaping the local collection prison. This track shed the chains of limited accessibility, and is no longer doomed to obscurity, lost in an sql database in my home directory.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;This lucky track happened to be &lt;a href=&quot;http://www.last.fm/music/Brad+Sucks/_/Making+Me+Nervous&quot; title=&quot;Making Me Nervous&quot;&gt;Making Me Nervous&lt;/a&gt; by &lt;a href=&quot;http://www.magnatune.com/artists/brad_sucks&quot; title=&quot;Brad Sucks&quot;&gt;Brad Sucks&lt;/a&gt; available over at the great indie music label &lt;a href=&quot;http://www.magnatune.com&quot; title=&quot;Magnatune: Independent Music&quot;&gt;Magnatune&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;div style=&quot;width: 220; text-align: center;&quot;&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0&quot; width=&quot;220&quot; height=&quot;15&quot; &gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;sameDomain&quot;/&gt;&lt;param name=&quot;movie&quot; value=&quot;http://embed.magnatune.com/img/magnatune_player_embedded_single.swf?playlist_url=http://embed.magnatune.com/artists/albums/bradsucks-dontknow/hifi.xspf&amp;#038;autoload=true&amp;#038;autoplay=&amp;#038;playlist_title=I%20Dont%20Know%20What%20Im%20Doing%20:%20Brad%20Sucks&quot;/&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot;/&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#E6E6E6&quot;/&gt;&lt;embed src=&quot;http://embed.magnatune.com/img/magnatune_player_embedded_single.swf?playlist_url=http://embed.magnatune.com/artists/albums/bradsucks-dontknow/hifi.xspf&amp;#038;autoload=true&amp;#038;autoplay=&amp;#038;playlist_title=I%20Dont%20Know%20What%20Im%20Doing%20:%20Brad%20Sucks&quot; quality=&quot;high&quot; bgcolor=&quot;#E6E6E6&quot; name=&quot;xspf_player&quot; allowscriptaccess=&quot;sameDomain&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; align=&quot;center&quot; height=&quot;15&quot; width=&quot;220&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;FONT FACE=&quot;Verdana, Arial, utopia, sans-serif&quot; SIZE=&quot;1&quot; COLOR=&quot;#000000&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://magnatune.com/artists/albums/bradsucks-dontknow&quot;&gt;&lt;b&gt;I Dont Know What Im Doing&lt;/b&gt;&lt;/a&gt; by &lt;a href=&quot;http://magnatune.com/artists/brad_sucks&quot;&gt;&lt;b&gt;Brad Sucks&lt;/b&gt;&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;br /&gt;
&lt;p&gt;Early this morning I &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok/?cs=15470&quot;&gt;committed&lt;/a&gt; the last bit of code that allows you to upload tracks to your &lt;a href=&quot;http://www.mp3tunes.com/&quot;&gt;MP3tunes Locker&lt;/a&gt; from Amarok. Amarok is the first client, besides the official client, to allow you to do such a thing. One of the great things about this feature is it&amp;#8217;s seamless integration in the UI.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&#039;http://binaryelysium.com/images/amarokCopyToMp3tunes.png&#039;&gt;Click for the full view&lt;br /&gt;&lt;br /&gt;
&lt;img src=&quot;http://binaryelysium.com/blog/wp-content/uploads/2008/06/amarokcopytomp3tunes-300x170.png&quot; alt=&quot;Amarok 2: Copy to Mp3tunes&quot; title=&quot;Amarok 2: Copy to Mp3tunes&quot; width=&quot;300&quot; height=&quot;170&quot; class=&quot;aligncenter size-medium wp-image-28&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;After a short upload I go check the MP3tunes Web Player&lt;br /&gt;&lt;br /&gt;
&lt;a href=&#039;http://binaryelysium.com/images/mp3tunesBrad.png&#039;&gt;&lt;img src=&quot;http://binaryelysium.com/blog/wp-content/uploads/2008/06/mp3tunesbrad-300x229.png&quot; alt=&quot;Listening to Brad Sucks via MP3tunes&quot; title=&quot;Listening to Brad Sucks via MP3tunes&quot; width=&quot;300&quot; height=&quot;229&quot; class=&quot;alignnone size-medium wp-image-29&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;From this point I can listen to the track on my phone, on my squeezebox, or any other &lt;a href=&quot;http://www.mp3tunes.com/partner/cb/partnerlist&quot;&gt;MP3tunes supported devices&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Of course there are some caveats, but I aim to fix these over the next several days:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;No upload progress information.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;No error handling when you attempt to upload a filetype mp3tunes doesn&amp;#8217;t support.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;It&amp;#8217;s not possible to upload non-local content (say from magnatune or ampache)&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;Don&amp;#8217;t start thinking that things are winding down; uploading and downloading are only one small part of the show. The end goal is &lt;em&gt;fully automated bi-directional syncing&lt;/em&gt; between Amarok and MP3tunes with 100% support for the MP3tunes API.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;What exactly does this entail? &lt;/p&gt;&lt;br /&gt;
&lt;ol&gt;&lt;br /&gt;
&lt;li&gt;I foresee a &amp;#8220;keep in sync with MP3tunes&amp;#8221; checkbox for each playlist in the Amarok playlist browser, so you can add/remove tracks from your favorite playlists and thoughtlessly have access to them on any MP3tunes enabled device. &lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Imagine clicking &amp;#8220;Purchase&amp;#8221; at an online music store (like &lt;a href=&quot;http://www.eclassical.com/&quot;&gt;eclassical&lt;/a&gt;) and having the tracks instantly available in Amarok and anywhere else you have access to your locker.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Your friend beams you a track from his Android phone to your Android phone while you are out on the town, and when you get home the track is all ready in your local Amarok collection,  added to your smart playlists ready to jam.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;You subscribe to an awesome podcast using Amarok&amp;#8217;s built in podcast directory, and seconds after a new episode is released it&amp;#8217;s available on your wifi enabled portable player (or phone)  &lt;/li&gt;&lt;br /&gt;
&lt;/ol&gt;&lt;br /&gt;
&lt;p&gt;And it all started today.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Fri, 20 Jun 2008 08:07:34 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/693-guid.html</guid>
    
</item>
<item>
    <title>GSoC Report Week 3: Tanstaafl</title>
    <link>http://amarok.kde.org/blog/archives/689-GSoC-Report-Week-3-Tanstaafl.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/689-GSoC-Report-Week-3-Tanstaafl.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=689</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=689</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;h4&gt;Project: &lt;a href=&quot;http://www.mp3tunes.com&quot;&gt;MP3tunes&lt;/a&gt; + &lt;a href=&quot;http://www.amarok.kde.org&quot;&gt;Amarok&lt;/a&gt; Integration&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size:8pt&quot;&gt;Total Commits: &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot; title=&quot;All my Amarok commits&quot;&gt;51&lt;/a&gt; Weekly Commits: 12&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;past&quot;&gt;Past 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;It was another productive week in #amarok with over 150 commits! In the 12 of those that were mine I managed to do several things.&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Added elegant session handling to the MP3tunes service&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Fixed the collection search box, so you can filter your MP3tunes Locker.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Enabled Copy To Collection functionality, so you can now copy (read: download) mp3tunes tracks to some other collection!&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;Of course, implementing those items wasn&amp;#8217;t as simple as it sounds, but the features are essential and basic.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;The search box (filtering) could use some improvement as currently it only filters via the artist field, but that is a limitation of the MP3tunes API. When I say it&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;&amp;#8220;only filters via the artist field&amp;#8221;&lt;/em&gt; I mean that it only matches against artists, so searching for a particular track name will not work. To fully support the filtering feature the MP3tunes API would need to allow you to do something like get a list of artists based on a partial track name in a single request. That is just one example, and yes, I could workaround it by doing multiple queries, however that would slow the entire operation significantly. Users expect the search fields in Amarok to be snappy, not take ~5 seconds per. token they supply. It is certainly not a showstopper, and it functions well enough for now, but hopefully MP3tunes will be open to expanding their API later on down the rode. To be fair I have never come across a web API that supported that sort of complex searching. The &lt;a href=&quot;http://ampache.org&quot; title=&quot;Ampache!&quot;&gt;Ampache&lt;/a&gt; service in Amarok suffers from the same lack of functionality.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;em&gt;Interjection: Major props to my GSoC mentor, &lt;a href=&quot;http://amarok.kde.org/blog/categories/18-freespirit&quot;&gt;Nikolaj&lt;/a&gt;, for attempting to explain various parts of Amarok&amp;#8217;s innards to me, not only once, but the several times it took to get the concepts through my thick skull. Also, he&amp;#8217;s helped me track down several childish mistakes I&amp;#8217;ve made when I was at my wits end trying to locate them. I can&amp;#8217;t thank him enough. Hands down he&amp;#8217;s the best GSoC mentor. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;With the addition of &amp;#8220;Copy to Collection&amp;#8221; Amarok has taken a large step towards being fully integrated with MP3tunes. Up till this week all you could do was browse and stream your MP3tunes Locker. That is fine and dandy, but you could do that from the MP3tunes &lt;a href=&quot;http://www.binaryelysium.com/images/mp3tunesPlayer.png&quot;&gt;web player&lt;/a&gt;, their &lt;a href=&quot;http://mp3tunes/com/m&quot;&gt;mobile player&lt;/a&gt;, &lt;a href=&quot;http://www.mp3tunes.com/cb/screenshots/&quot; title=&quot;MP3tunes Screenshots&quot;&gt;your PS3&lt;/a&gt;, or any other number of their &lt;a href=&quot;http://www.mp3tunes.com/partner/cb/partnerlist&quot; title=&quot;mp3tunes devices&quot;&gt;supported devices&lt;/a&gt;. However, none of those options allow you to seamlessly download and organize your stored music into your local music collection at the click of a button.  &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;There is one shortcoming that needs to be addressed at some point before I&amp;#8217;m satisfied: there is no progress indicator of any kind when you download tracks. The only way to see if tracks are being downloaded after you press Go is to watch the destination directory for changes. Thankfully this affects all collections you can &amp;#8220;copy to/from&amp;#8221;, not just MP3tunes, so perhaps someone else will feel inclined to whip up a progress indicator. There&amp;#8217;s no such thing as a free lunch.&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;upcoming&quot;&gt;Upcoming 7 Days:&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;I have one big goal this week:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Add MP3tunes Upload features&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;p&gt;By Monday next week, you will be able to do Copy tracks from your local collection, Ampache collection, and the &lt;a href=&quot;http://www.magnatune.com&quot; title=&quot;www.magnatune.com&quot;&gt;Magnatune&lt;/a&gt; database, to your MP3tunes locker.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;img src=&#039;http://www.binaryelysium.com/images/amarokCopyToCollection.png&#039; alt=&#039;Copy to Collection&#039; class=&#039;aligncenter&#039; /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;There is quite a bit of work to be done before this can happen, but I will spare you the gritty implementation details until next week after I&amp;#8217;ve committed the code where my mouth is (?).&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Of course my weekly predictions wouldn&amp;#8217;t be complete without a task to fall back on if I happen to complete the aforementioned task in a Ballmer-Fueled rage. After upload is in place there is only one major item left: Syncing. I need to break &amp;#8220;Syncing&amp;#8221; into manageable actionables (quite a term, eh?) and then lay out some mid-level designs for the process. Later on during the week I will dedicate an entire post to this topic.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 17 Jun 2008 16:16:03 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/689-guid.html</guid>
    
</item>
<item>
    <title>GSoC Report Week 2: libmp3tunes goodness</title>
    <link>http://amarok.kde.org/blog/archives/690-GSoC-Report-Week-2-libmp3tunes-goodness.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/690-GSoC-Report-Week-2-libmp3tunes-goodness.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=690</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=690</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;h4&gt;Project: &lt;a href=&quot;http://www.mp3tunes.com&quot;&gt;MP3tunes&lt;/a&gt; + &lt;a href=&quot;http://www.amarok.kde.org&quot;&gt;Amarok&lt;/a&gt; Integration&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;span style=&quot;font-size:8pt&quot;&gt;Total Commits: &lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot; title=&quot;All my Amarok commits&quot;&gt;35&lt;/a&gt; Weekly Commits: 15&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;past&quot;&gt;Past 7 Days&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;This was a busy week. I migrated the existing MP3tunes service in Amarok 2 from making REST calls and parsing XML manually to use libmp3tunes. I created an object oriented encapsulation framework in C++ for libmp3tunes, which is written entirely in c. This means instead of mucking about crafting http queries and worrying about parsing data from XML one can manipulate the Locker in an OO fasion. Here&amp;#8217;s a little snippet of how libmp3tunes saves work.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Without libmp3tunes if you wanted to fetch a list of artists this is what it would look like:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
22&lt;br /&gt;
23&lt;br /&gt;
24&lt;br /&gt;
25&lt;br /&gt;
26&lt;br /&gt;
27&lt;br /&gt;
28&lt;br /&gt;
29&lt;br /&gt;
30&lt;br /&gt;
31&lt;br /&gt;
32&lt;br /&gt;
33&lt;br /&gt;
34&lt;br /&gt;
35&lt;br /&gt;
36&lt;br /&gt;
37&lt;br /&gt;
38&lt;br /&gt;
39&lt;br /&gt;
40&lt;br /&gt;
41&lt;br /&gt;
42&lt;br /&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp&quot;&gt;    QString urlString &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;http://ws.mp3tunes.com/api/v1/lockerData?sid=&amp;lt;SESSION_ID&amp;gt;&amp;amp;partner_token=&amp;lt;PARTNER_TOKEN&amp;gt;&amp;amp;output=xml&amp;amp;type=artist&amp;quot;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    urlString &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;http://ws.mp3tunes.com/api/v1/lockerSearch?output=xml&amp;amp;sid=&amp;lt;SESSION_ID&amp;gt;&amp;amp;partner_token=&amp;lt;PARTNER_TOKEN&amp;gt;&amp;amp;type=artist&amp;amp;s=&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;+&lt;/span&gt; m_artistFilter;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    urlString.&lt;span style=&quot;color: #00eeff;&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;&amp;lt;SESSION_ID&amp;gt;&amp;quot;&lt;/span&gt;, m_sessionId&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    urlString.&lt;span style=&quot;color: #00eeff;&quot;&gt;replace&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;&amp;lt;PARTNER_TOKEN&amp;gt;&amp;quot;&lt;/span&gt;, CENSORED&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    debug&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;url: &amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; urlString;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    m_storedTransferJob &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt;  KIO&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;storedGet&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;  KUrl&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; urlString &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;, KIO&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;NoReload&lt;/span&gt;, KIO&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;HideProgressInfo&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        connect&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; m_storedTransferJob, &lt;span style=&quot;color: #0000ff;&quot;&gt;SIGNAL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; result&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; KJob &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
            , &lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;, SLOT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistDownloadComplete&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; KJob &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    ArtistList artists;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
     &lt;span style=&quot;color: #666666;&quot;&gt;//so lets figure out what we got here:&lt;/span&gt;&lt;br /&gt;
    QDomDocument doc&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;reply&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    doc.&lt;span style=&quot;color: #00eeff;&quot;&gt;setContent&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; m_storedTransferJob&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;data&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    QDomElement root &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; doc.&lt;span style=&quot;color: #00eeff;&quot;&gt;firstChildElement&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;mp3tunes&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    root &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; root.&lt;span style=&quot;color: #00eeff;&quot;&gt;firstChildElement&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;artistList&amp;quot;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    QDomNode n &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; root.&lt;span style=&quot;color: #00eeff;&quot;&gt;firstChild&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    &lt;span style=&quot;color: #0000ff;&quot;&gt;while&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; &lt;span style=&quot;color: #000040;&quot;&gt;!&lt;/span&gt;n.&lt;span style=&quot;color: #00eeff;&quot;&gt;isNull&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
        QDomElement e &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; n.&lt;span style=&quot;color: #00eeff;&quot;&gt;toElement&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;; &lt;span style=&quot;color: #666666;&quot;&gt;// try to convert the node to an element.&lt;/span&gt;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        QDomElement element &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; n.&lt;span style=&quot;color: #00eeff;&quot;&gt;firstChildElement&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;artistName&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        ServiceArtist &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; artist &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; ServiceArtist&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; element.&lt;span style=&quot;color: #00eeff;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        element &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; n.&lt;span style=&quot;color: #00eeff;&quot;&gt;firstChildElement&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;&amp;quot;artistId&amp;quot;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        artist&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;setId&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; element.&lt;span style=&quot;color: #00eeff;&quot;&gt;text&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;.&lt;span style=&quot;color: #00eeff;&quot;&gt;toInt&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        ArtistPtr artistPtr&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artist &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        artists.&lt;span style=&quot;color: #00eeff;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistPtr &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;acquireWriteLock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;addArtist&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistPtr &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;releaseLock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        n &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; n.&lt;span style=&quot;color: #00eeff;&quot;&gt;nextSibling&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;With libmp3tunes it looks like this:&lt;/p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;line_numbers&quot;&gt;&lt;pre&gt;1&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
4&lt;br /&gt;
5&lt;br /&gt;
6&lt;br /&gt;
7&lt;br /&gt;
8&lt;br /&gt;
9&lt;br /&gt;
10&lt;br /&gt;
11&lt;br /&gt;
12&lt;br /&gt;
13&lt;br /&gt;
14&lt;br /&gt;
15&lt;br /&gt;
16&lt;br /&gt;
17&lt;br /&gt;
18&lt;br /&gt;
19&lt;br /&gt;
20&lt;br /&gt;
21&lt;br /&gt;
&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre class=&quot;cpp&quot;&gt;    Mp3tunesArtistFetcher &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; artistFetcher &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; Mp3tunesArtistFetcher&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; m_locker &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
    connect&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistFetcher, &lt;span style=&quot;color: #0000ff;&quot;&gt;SIGNAL&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistsFetched&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; QList&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;Mp3tunesLockerArtist&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;, &lt;span style=&quot;color: #0000dd;&quot;&gt;this&lt;/span&gt;, SLOT&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistDownloadComplete&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; QList&lt;span style=&quot;color: #000080;&quot;&gt;&amp;lt;&lt;/span&gt;Mp3tunesLockerArtist&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    ThreadWeaver&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;Weaver&lt;/span&gt;&lt;span style=&quot;color: #008080;&quot;&gt;::&lt;/span&gt;&lt;span style=&quot;color: #00eeff;&quot;&gt;instance&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;enqueue&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistFetcher &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    ArtistList artists;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    foreach&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;Mp3tunesLockerArtist artist, artistList&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#123;&lt;/span&gt;&lt;br /&gt;
        ServiceArtist &lt;span style=&quot;color: #000040;&quot;&gt;*&lt;/span&gt; serviceArtist &lt;span style=&quot;color: #000080;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0000dd;&quot;&gt;new&lt;/span&gt; ServiceArtist&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artist.&lt;span style=&quot;color: #00eeff;&quot;&gt;artistName&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        serviceArtist&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;setId&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artist.&lt;span style=&quot;color: #00eeff;&quot;&gt;artistId&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt; &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        ArtistPtr artistPtr&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; serviceArtist &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        artists.&lt;span style=&quot;color: #00eeff;&quot;&gt;push_back&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistPtr &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;acquireWriteLock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;addArtist&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt; artistPtr &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
        m_collection&lt;span style=&quot;color: #000040;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #000080;&quot;&gt;&amp;gt;&lt;/span&gt;releaseLock&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#40;&lt;/span&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&amp;#41;&lt;/span&gt;;&lt;br /&gt;
&amp;#160;&lt;br /&gt;
    &lt;span style=&quot;color: #008000;&quot;&gt;&amp;#125;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;p&gt;Both of those code samples produce this:&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;img src=&#039;http://binaryelysium.com/images/amarokMp3tunesCollectionBrowser.png&#039; alt=&#039;MP3tunes Collection Browser&#039; class=&#039;aligncenter&#039; /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Notice that instead of looping through XML and ripping out data, I was able to call getter methods to retrieve the same data. Of course the XML parsing has only been moved to libmp3tunes, but by hiding the MP3tunes API implementation from Amarok it creates more maintainable code.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;If none of that made much sense, no worries, the important bit to grasp is that libmp3tunes does these important things:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;Encapsulates the MP3tunes API so it is separate from the rest of Amarok.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Provides an Object Oriented interface to the mp3tunes API. Creating a new session is as easy as  Mp3TunesLocker locker = new Mp3tunesLocker();&lt;br /&gt;
&lt;li&gt;Ensures Amarok is officially supported by mp3tunes as long as they support libmp3tunes.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;upcoming&quot;&gt;Upcoming 7 Days:&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;There are a few libmp3tunes shortcomings. One is the lack of a means to detect when a session has expired. Each MP3tunes API request requires a valid session (except of course the initial session-establishing request), and each session times out eventually. When using MP3tunes in Amarok it will be important to elegantly handle session timeouts, for the user does not care about sessions or timeouts. When the user clicks play on an artist they expect it to play, while currently, if the session has timed out Amarok doesn&amp;#8217;t do anything. This week I will patch libmp3tunes to support detection of timed out sessions. &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Another goal for this week is to fix the search box, so it actually searches.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;img src=&#039;http://www.binaryelysium.com/images/amarokMp3tunesSearch.png&#039; alt=&#039;MP3tunes Collection Search&#039; class=&#039;aligncenter&#039; /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Also, if you right click on an artist in the MP3tunes collection browser you get a &amp;#8220;Copy to Collection&amp;#8221; option. At the moment it doesn&amp;#8217;t do anything. After this week is over, hopefully, selecting the &amp;#8220;Copy to Collection&amp;#8221; option will let you do just that.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;img src=&#039;http://www.binaryelysium.com/images/amarokCopyToCollection.png&#039; alt=&#039;Copy to Collection&#039; class=&#039;aligncenter&#039; /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;&lt;a name=&quot;roadblocks&quot;&gt;Foreseeable Roadblocks:&lt;/a&gt;&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;a href=&quot;http://binaryelysium.com/blog/2008/06/02/gsoc-report-week-1/#roadblocks&quot;&gt;Last week&amp;#8217;s&lt;/a&gt; roadblock still stands. In the next few weeks I&amp;#8217;ll be getting closer to the time when I will need to implement that syncing part of libmp3tunes into Amarok. The licensing issue won&amp;#8217;t stop me from developing it on my own workstation of course, but it will have to be resolved before I can commit that part of library or code that implements it.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Tue, 10 Jun 2008 12:31:32 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/690-guid.html</guid>
    
</item>
<item>
    <title>GSoC Report - Week 1</title>
    <link>http://amarok.kde.org/blog/archives/691-GSoC-Report-Week-1.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/691-GSoC-Report-Week-1.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=691</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=691</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;h4&gt;Project: &lt;a href=&quot;http://www.mp3tunes.com&quot;&gt;MP3tunes&lt;/a&gt; + &lt;a href=&quot;http://www.amarok.kde.org&quot;&gt;Amarok&lt;/a&gt; Integration&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;em style=&quot;font-size: 8pt&quot;&gt;Prescriptum: These weekly reports will likely contain a bit of technical information that only other Amarok developers will understand. I do not like that idea, as I want these reports to be grokable by all, but since I haven&amp;#8217;t yet decided on a format to present the info in a manner I like this will have to do for this first week. &lt;/em&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Past 7 Days:&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;I started coding for &lt;a href=&quot;http://code.google.com/soc/2008/&quot; title=&quot;GSoC&quot;&gt;GSoC&lt;/a&gt; last Tuesday (May 27th) beginning with a simplification of the ServiceCollection hierarchy by combining ServiceDynamicCollection and ServiceCollection into one class. I also started creating the ServiceCollectionLocation&amp;#8217;s. It is not implemented anywhere yet, and won&amp;#8217;t need to be for awhile, but I started it as at the time I was waiting on mp3tunes to deliver their c sdk. &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Leeo kindly created mp3tunes icons, which I committed on Saturday.&lt;br /&gt;&lt;br /&gt;
&lt;img src=&quot;http://www.binaryelysium.com/images/emblem-mp3tunes-amarok16.png&quot; alt=&quot;mp3tunes icon&quot; /&gt; and &lt;img src=&quot;http://www.binaryelysium.com/images/mp3tunes-amarok-48.png&quot; alt=&quot;Mp3tune icon&quot; /&gt;&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;During the week I kept nudging the mp3tunes developers to send me the c sdk, and Saturday the nudging paid off as I received a pre-release version of libmp3tunes. Even though it is a pre-release it is complete enough to match the current mp3tunes feature set in Amarok2. On Sunday I added libmp3tunes to the src tree, including the dependency detection. libmp3tunes is dependent on curl and libxml2, and if someone does not have them mp3tunes will be excluded from the build thanks to cmake. &lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Finally, today, I committed a ~750 line c++ wrapper for libmp3tunes to compartmentalize the unsightly c code.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;You can see all my commits here:&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://kollide.net:8060/changelog/~author=link/Amarok&quot;&gt;http://kollide.net:8060/changelog/~author=link/Amarok&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Upcoming 7 Days:&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;There are still a few functions left TODO in the c++ wrapper for libmp3tunes, so I&amp;#8217;ll complete those this week. Then I plan to start migrating the existing service to use the library functions. I expect this will take all week, so my goal for the next report is to have the migration complete and a working Mp3tunes service utilizing the library. If my time estimation ends up being too long, and I finish the migration early, I&amp;#8217;ll work on the Mp3tunesCollectionLocation functionality so you can copy tracks from Mp3tunes to the local collection in a manner similar to the Magantune service.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;&lt;a name=&quot;roadblocks&quot;&gt;&lt;br /&gt;&lt;br /&gt;
&lt;h4&gt;Forseeable Roadblocks:&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
The syncing part of libmp3tunes is not licensed and not complete. However, the MP3tunes developers have been particularly responsive the past several weeks, so I am optimistic they will pull through.&lt;/p&gt;&lt;br /&gt;
&lt;h4&gt;Reflections:&lt;/h4&gt;&lt;br /&gt;
&lt;p&gt;I am amazed at how much I learned this week. To keep this brief here is a list of some things I&amp;#8217;ve learned:&lt;/p&gt;&lt;br /&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;How to do basic cmake things like define optional deps and exclude portions of an app if they aren&amp;#8217;t met.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Before this week I had never even seen object oriented c before.&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;Also I learned how to combine c and c++ code in the same program (extern!).&lt;/li&gt;&lt;br /&gt;
&lt;li&gt;KDE4 is a beast and breaking it is bad news.&lt;/li&gt;&lt;br /&gt;
&lt;/ul&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Mon, 02 Jun 2008 15:44:15 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/691-guid.html</guid>
    
</item>
<item>
    <title>Google Summer of Code: One Intro With a Side Order of Awesome</title>
    <link>http://amarok.kde.org/blog/archives/692-Google-Summer-of-Code-One-Intro-With-a-Side-Order-of-Awesome.html</link>
            <category>ramblurr</category>
    
    <comments>http://amarok.kde.org/blog/archives/692-Google-Summer-of-Code-One-Intro-With-a-Side-Order-of-Awesome.html#comments</comments>
    <wfw:comment>http://amarok.kde.org/blog/wfwcomment.php?cid=692</wfw:comment>

    <slash:comments>0</slash:comments>
    <wfw:commentRss>http://amarok.kde.org/blog/rss.php?version=2.0&amp;type=comments&amp;cid=692</wfw:commentRss>
    

    <author>nospam@example.com (Casey Link)</author>
    <content:encoded>
    &lt;p&gt;Huzzah! Google &lt;A href=&quot;http://google-opensource.blogspot.com/2008/04/announcing-accepted-student-proposals.html&quot; title=&quot;GSoC announcement&quot; &gt;announced the list&lt;/a&gt; of 1125 fortunate students that will be developing for &lt;a href=&quot;http://code.google.com/soc/2008/&quot; title=&quot;GSoC&quot;&gt;Google&amp;#8217;s Summer of Code&lt;/a&gt; program. I?m a member of this group, which means I will be writing code for &lt;a href=&quot;http://www.amarok.kde.org&quot; title=&quot;Amarok! The best music player ever&quot;&gt;an open source project&lt;/a&gt; and getting paid for it!&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;I was asked by my community mentor to write an introduction that was posted at &lt;a href=&quot;http://amarok.kde.org/blog/archives/629-GSoC-One-Intro-with-a-side-order-of-awesome-Full-MP3Tunes-support.html&quot; title=&quot;Amarok blog&quot;&gt;various&lt;/a&gt; &lt;a href=&quot;http://planetkde.org/&quot; title=&quot;Planet KDE&quot;&gt;places&lt;/a&gt;, and I will re post it below.&lt;/p&gt;&lt;br /&gt;
&lt;blockquote&gt;&lt;p&gt;Hey everyone! My name is Casey Link and I am an undergraduate Computer Science and Philosophy major at Virginia Tech in Blacksburg, VA. As a part of Google Summer of Code I will be tightly integrating the &lt;a href=&quot;http://www.mp3tunes.com&quot; title=&quot;MP3tunes: Your Music Everywhere&quot;&gt;MP3Tunes&lt;/a&gt; service with &lt;a href=&quot;http://www.amarok.kde.org&quot; title=&quot;Amarok! The best music player ever&quot;&gt;Amarok 2&lt;/a&gt; as well as implementing a generic synchronization framework between Collections. In Amarok 2, collections have been abstracted, allowing Amarok to treat a local SQL collection the same as an online Web Service based collection. Why is this awesome? With the addition of the service architecture (thanks to Nikolaj) it is now&lt;br /&gt;&lt;br /&gt;
possible to plug in remote, local, and soon portable collections without&lt;br /&gt;&lt;br /&gt;
having to differentiate between their interfaces.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Not convinced yet? Here is a real example of just how cool this is.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Enter &lt;a href=&quot;http://www.mp3tunes.com&quot; title=&quot;MP3tunes: Your Music Everywhere&quot;&gt;MP3Tunes&lt;/a&gt;. MP3Tunes provides an &amp;#8220;online music space&amp;#8221; for its users to store their entire music collection so they can listen to their music anywhere. Using their API and client libraries, applications can be developed for just about any device, so you can literally listen to your music anywhere! This summer I will implement full MP3Tunes functionality into Amarok so you can seamlessly synchronize your local music collection with your MP3Tunes Locker. Not only will you be able to upload your local music collection, but if you add music to your MP3Tunes Locker via other methods - such as buying music from an online store - the new tracks will be added to your collection. This is just the beginning. Technology is seeing a trend towards ubiquitous connectivity and information storage in &amp;#8216;the Cloud&amp;#8217;. It won&amp;#8217;t be long before &amp;#8220;local&amp;#8221; and &amp;#8220;remote&amp;#8221; are terms of the past as you are able to seamlessly access your information everywhere.&lt;/p&gt;&lt;br /&gt;
&lt;p&gt;Amarok and MP3Tunes will be on the forefront of this technological shift. I hope you&amp;#8217;ll be there with us.&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;
&lt;p&gt;In case anyone is interested I&amp;#8217;ve posted my original &lt;a href=&quot;http://www.binaryelysium.com/code/GSoc_Amarok_MP3Tunes_CaseyLink.pdf&quot; title=&quot;Proposal&quot;&gt;project proposal&lt;/a&gt; that was a part of my GSoC application.&lt;/p&gt;&lt;br /&gt;
 
    </content:encoded>

    <pubDate>Sat, 05 Apr 2008 22:00:53 -0400</pubDate>
    <guid isPermaLink="false">http://amarok.kde.org/blog/archives/692-guid.html</guid>
    
</item>

</channel>
</rss>