<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hawk Talk &#187; jefferai</title>
	<atom:link href="http://jefferai.org/author/jefferai/feed/" rel="self" type="application/rss+xml" />
	<link>http://jefferai.org</link>
	<description>Tomahawk, KDE, and other stuff</description>
	<lastBuildDate>Thu, 02 Dec 2010 13:16:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Git Repo (Resuming) Tarballs</title>
		<link>http://jefferai.org/2010/12/git-repo-resuming-tarballs/</link>
		<comments>http://jefferai.org/2010/12/git-repo-resuming-tarballs/#comments</comments>
		<pubDate>Thu, 02 Dec 2010 13:16:22 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1219</guid>
		<description><![CDATA[At various points the sysadmins have gotten a request to have repository tarballs made available. The idea is that some repositories can be very large; I believe test runs of the KOffice conversion produced a repository that is 350MB in size. Once you get this down to your system, updating with new refs is relatively [...]]]></description>
			<content:encoded><![CDATA[<p>At various points the sysadmins have gotten a request to have repository tarballs made available. The idea is that some repositories can be very large; I believe test runs of the KOffice conversion produced a repository that is 350MB in size. Once you get this down to your system, updating with new refs is relatively fast, but what about that first part? What if you&#8217;re on a slow dial-up link somewhere (as some of our contributors are) and/or only have access to the Internet sporadically?</p>
<p>A solution to this is to provide repository tarballs to users which contain a snapshot of the repository. Once downloaded and expanded, you have a viable git clone; run a pull and you&#8217;re done (it&#8217;s pre-configured to fetch new refs from anongit.kde.org). Actually, run the init script and then a pull; to keep the tarball size as small as possible, it doesn&#8217;t include a checked-out working tree, only the .git directory and a tiny script that will a) delete itself and b) check out the working tree.</p>
<p>Now, the idea is to be able to start downloading at one time and to finish it later. The key here is that HTTP file transfers are resumable, so if you start downloading the tarball you can pick up where you left off. However, there was a question &#8212; how to be able to show a consistent link on Projects without a priori knowledge of tarball characteristics (since we can&#8217;t know any from within Redmine). In Redmine, all we could really do, without massive hackery, is display a statically-named tarball &#8212; in this case, it always ends in &#8220;-latest.tar.gz&#8221;. You can see this at <a href="https://projects.kde.org/projects/playground/network/aki/repository">https://projects.kde.org/projects/playground/network/aki/repository</a> or any other project&#8217;s repository tab &#8212; note the &#8220;Tarball&#8221; checkout method.</p>
<p>This means however that the client needs some way of knowing whether it&#8217;s the same tarball or has been regenerated since. An easy way to do this is to use the If-Unmodified-Since header; however, the web server in use currently doesn&#8217;t support this (I checked and the author didn&#8217;t believe it was widely used; I pointed him to cURL/libcurl). The other problem with this approach is that it&#8217;s not very visible to the user.</p>
<p>So, I first changed the script such that the tarballs being generated weren&#8217;t actually named *-latest.tar.gz, but instead that they had more descriptive names and had a -latest.tar.gz version symlinked to the actual tarball. I then wrote a simple web service that the web server proxies to whenever it finds a &#8220;-latest.tar.gz&#8221; file being requested. This service resolves the symlink and redirects the client, so the user sees immediately what the name of the actual file is. For instance, right now a tarball of the aki repository via <a href="http://anongit1.kde.org/aki/aki-latest.tar.gz">http://anongit1.kde.org/aki/aki-latest.tar.gz</a> forwards to <a href="http://anongit1.kde.org/aki/aki_20101202050239_sha1-5f866b3a42872f8fd54adcf30bcb8a3a79d02542.tar.gz">http://anongit1.kde.org/aki/aki_20101202050239_sha1-5f866b3a42872f8fd54adcf30bcb8a3a79d02542.tar.gz</a></p>
<p>Note the components of that filename: the name, the date/time stamp (to the second), &#8220;sha1&#8243; indicating that that&#8217;s the algorithm to check the hash against, and the hash of the file for easy verification of the completed download. This should make it both easy for the client and the user to verify that it&#8217;s the same file, in addition to making it easy for the user to verify the integrity of the full file since they can check the sha1sum against the filename itself.</p>
<p>I think this provides a pretty nice solution to the problem. <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/12/git-repo-resuming-tarballs/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>KDE Git: Three servers, better commit URLs</title>
		<link>http://jefferai.org/2010/11/kde-git-three-servers-better-commit-urls/</link>
		<comments>http://jefferai.org/2010/11/kde-git-three-servers-better-commit-urls/#comments</comments>
		<pubDate>Tue, 30 Nov 2010 02:40:46 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1213</guid>
		<description><![CDATA[Two quick updates on Git stuff: First, we now have three anongit servers in rotation. We could probably make do with 0.25 of a single anongit server at the current load, but that will change quickly once kdelibs and co switch over from SVN, so it&#8217;s good to be ready. Second, the generated commit URLs [...]]]></description>
			<content:encoded><![CDATA[<p>Two quick updates on Git stuff:</p>
<p>First, we now have three anongit servers in rotation. We could probably make do with 0.25 of a single anongit server at the current load, but that will change quickly once kdelibs and co switch over from SVN, so it&#8217;s good to be ready.</p>
<p>Second, the generated commit URLs will always be given with the full commit hash, but the commit resolver now supports using partial hashes in case you want to shorten it yourself. For instance, you could manually change the commit URL <a href="http://commits.kde.org/amarok/cf17de39f9021064a713db965487be6e3d75a186">http://commits.kde.org/amarok/cf17de39f9021064a713db965487be6e3d75a186</a> to <a href="http://commits.kde.org/amarok/cf17de39">http://commits.kde.org/amarok/cf17de39</a> to give out a shorter URL.</p>
<p>That&#8217;s all; if you were in the States I hope you had a good Thanksgiving. <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/11/kde-git-three-servers-better-commit-urls/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Multifaceted Git Update Post</title>
		<link>http://jefferai.org/2010/11/multifaceted-git-update-post/</link>
		<comments>http://jefferai.org/2010/11/multifaceted-git-update-post/#comments</comments>
		<pubDate>Sat, 06 Nov 2010 19:23:31 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1207</guid>
		<description><![CDATA[I haven&#8217;t blogged about updates to the Git infrastructure for a while and it&#8217;s *long* overdue, so here goes. There&#8217;s a lot and I don&#8217;t have much time so I&#8217;ll keep things brief. Credit for these items go to the sysadmin team as a whole plus Sitaram (the Gitolite author)&#8230; anongit servers We now have [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t blogged about updates to the Git infrastructure for a while and it&#8217;s <strong>*long*</strong> overdue, so here goes. There&#8217;s a lot and I don&#8217;t have much time so I&#8217;ll keep things brief. Credit for these items go to the sysadmin team as a whole plus Sitaram (the Gitolite author)&#8230;</p>
<h3>anongit servers</h3>
<p>We now have two anongit servers (the second one will be coming online on Monday or so &#8212; it&#8217;s 95% done). It is very likely that git:// and http:// protocols will be restricted to the anongit servers for better load balancing, so if you have been using git://git.kde.org/&#8230; as your clone URLs, please switch those to git://anongit.kde.org/&#8230; URLs. Wait, did I just say http?</p>
<h3>http protocol support</h3>
<p>The anongit servers support pulling/cloning via http. This is using the newer Smart HTTP support in which the Git protocol is run over HTTP via a special server. All pushing must be done via SSH (port 22 or 443) on git.kde.org.</p>
<h3>trash/destroy</h3>
<p>There are now two systems of deleting your personal clones/scratch repositories.</p>
<ul>
<li>unlock/destroy: You can destroy a personal repository, at which point it is gone forever; however, for safety you are now required to run the &#8220;unlock&#8221; command on the repository first.</li>
<li>trash: You can trash a personal repository. When you do this, it will be saved for 28 days in case you change your mind. You can use the &#8220;list-trash&#8221; command in order to see the repositories you have in the trash.</li>
</ul>
<p>More details can be found in the <a href="http://community.kde.org/Sysadmin/GitKdeOrgManual">Git(.kde.org) Manual</a>.</p>
<h3>who-pushed</h3>
<p>There is now a &#8220;who-pushed&#8221; command that, given a SHA1 and a repository, can tell you what user pushed that SHA1 to the repository. This is essential for auditing, since commit authorship information can be faked. Now, if a problem arises, we at least can know who introduced that malevolent commit into the public repository.</p>
<h3>Repository nicknames</h3>
<p>Remember <a href="http://jefferai.org/2010/10/git-commit-semi-short-urls/">my last post</a> about short Commit URLs? One thing I wanted &#8212; and was much requested &#8212; was a way to have a more friendly repository identifier. Now they exist. If a friendly identifier exists for a repository, it will automatically be used in the commit URL that is generated. If you want a friendly URL, let the sysadmins know. (We need to figure out a way to make nice names for repo names longer than 8 characters &#8212; or just remove that artificial restriction.)</p>
<h3>Clones path change</h3>
<p>When we first started out, clones would live somewhere like clones/amarok.git/mitchell/myamarok. Why the &#8220;.git&#8221;in the middle  (we were asked a lot)? Because the path was meant to match the actual name of the repository as it exists on the server.</p>
<p>The reason for *that* is that Git uses a &#8220;.git&#8221; suffix on repositories that are bare, to make it clear that it&#8217;s a Git directory. However (as we found out from Sitaram), this is not supposed to be user-facing, which is why if you use a Git URL with &#8220;.git&#8221; at the end of it, it&#8217;s dropped in the folder that actually is created on the client. So either the path has to lie about the original path on the server, or the client/user has to be made aware of it when it doesn&#8217;t really need to be.</p>
<p>What we ended up doing is removing that &#8220;.git&#8221; from the middle of the repo name (so now it&#8217;d be clones/amarok/mitchell/myamarok) and also took pains to ensure that when clone URLs are shown to the user, they are shown without a trailing &#8220;.git&#8221;.</p>
<p>At the same time, Sitaram made changes in Gitolite to better handle (in the various commands and in the built-in functionalities) cases where the user uses does or does not use the &#8220;.git&#8221; suffix so that it works correctly in each case.</p>
<h3>Updated permissions on master repositories</h3>
<p>Master repositories now allow users to create new branches; however, deletion requires the chosen repository manager(s) to intervene.</p>
<h3>Updated permission granularities on personal repositories</h3>
<p>Personal (clones/scratch) repositories now have a greater level of permission control settable by the user. (The git.kde.org user manual is not yet updated with this information.)</p>
<p>These are now the permission levels that the user can set, from least to most:</p>
<ul>
<li>All: everyone has read and basic write permissions on each repository</li>
<li>Writers: writers can write new branches to the repository</li>
<li>Managers: managers can also delete branches from the repository</li>
<li>Dangers: people designated as dangers (to the repository!) can also rewind/force push to the repository</li>
<li>Creator: the creator always has full rights</li>
</ul>
<h3>projects.kde.org tree view</h3>
<p>If you check out the projects page on projects.kde.org (<a href="https://projects.kde.org/projects">here</a>) you&#8217;ll see that it now supports a tree view matching the structure of the KDE repositories. The URLs also match this structure.</p>
<h3>projects.kde.org last activity indicator</h3>
<p>On the same page (<a href="https://projects.kde.org/projects">here</a>) you&#8217;ll see that information about the last commit for that project is now shown next to each project.</p>
<p>&#8230;aaaaaaaaand we&#8217;re done.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/11/multifaceted-git-update-post/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Git Commit Semi-Short-URLs</title>
		<link>http://jefferai.org/2010/10/git-commit-semi-short-urls/</link>
		<comments>http://jefferai.org/2010/10/git-commit-semi-short-urls/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 18:26:33 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1188</guid>
		<description><![CDATA[As you may or may not know, the KDE git infrastructure currently has two assets for viewing repository data &#8212; Redmine and gitweb. Redmine powers Projects at http://projects.kde.org and is intended (pending theming and greater population of data) to be the real &#8220;home&#8221; of all of KDE&#8217;s projects, putting project information, news, repository browsing and [...]]]></description>
			<content:encoded><![CDATA[<p>As you may or may not know, the KDE git infrastructure currently has two assets for viewing repository data &#8212; Redmine and gitweb.</p>
<p>Redmine powers Projects at http://projects.kde.org and is intended (pending theming and greater population of data) to be the real &#8220;home&#8221; of all of KDE&#8217;s projects, putting project information, news, repository browsing and more in a pleasant UI. Each project with a git repository will have a project on Redmine as well as on ReviewBoard.</p>
<p>However, Redmine doesn&#8217;t have *all* of the git repositories available. This is because in the short term at least there won&#8217;t be projects created for user clones of repositories. In addition, the &#8220;scratch&#8221; area, where KDE developers can maintain their own repositories for anything they wish (that&#8217;s KDE-related of course) will never be put in Redmine.</p>
<p>(The reason for this is that if a developer just wants to play around with some code, or perhaps wants a location to store their (versioned) emacs/vi config files or some such thing, there&#8217;s no reason that needs to be an &#8220;official project&#8221; with an entry in Redmine and ReviewBoard. Similarly, if a developer is writing new code but feels that the code is far too raw to actually have others having eyes on it, we believe it should be up to them when they decide to have it put into a project on Redmine and ReviewBoard.)</p>
<p>So, let&#8217;s say you&#8217;ve just pushed some code. Where would you go to see it on the Web &#8212; Redmine or gitweb? I took a first cut at solving this problem by, based on the location of the repository you pushed to, spitting out a Redmine- or gitweb-based URL in the output sent back to your git client. Unfortunately, these were quite long. For example:</p>
<p><code>http://projects.kde.org/projects/repo-management/repository/revisions/dcd43aacaa806a7a32779a0215b7ab8ed7b05dc8</code></p>
<p>This isn&#8217;t so nice. Especially if your terminal is only 80 characters wide.</p>
<p>So, I came up with a solution &#8212; commits.kde.org. It&#8217;s a simple Sinatra/Thin-based web application that parses a URL generated by the gitolite hook and forwards you to the correct place. If the repository is on Redmine, it forwards you there; otherwise it forwards you to gitweb.</p>
<p>These aren&#8217;t tiny URLs in the style of bit.ly, but they&#8217;re deterministic and not based on a database backend. In fact, you can construct these on your own and they&#8217;ll still resolve. The form is</p>
<p><code>http://commits.kde.org/&lt;repoid&gt;/&lt;commitid&gt;</code></p>
<p>The repoid can be found by looking in the URL that is spit out when you push your code. It stays fixed for each repository (and if it does change, aliases can be added to keep old URLs alive).</p>
<p>In this format, the above URL goes down to</p>
<p><code>http://commits.kde.org/99c5fdd6/dcd43aacaa806a7a32779a0215b7ab8ed7b05dc8</code></p>
<p>By doing this, the URL size drops from 110 characters-ish (depending on the name of the project, whether it&#8217;s on gitweb or Redmine, and so on) to a fixed 72; enough to make it fit on a single line in most terminals (with the &#8220;remote: &#8221; prepended to the git output it&#8217;s 80 characters total), and to make it relatively tweet-/dent-able if you don&#8217;t need to include much other information in the post.</p>
<p>Update: I should mention that you can shorten those URLs further, but how much depends on when you start getting a collision. If gitweb encounters an ambiguous commit ID, it will 404, without giving information as to why it returned a 404. Redmine, however, will simply return one or the other of the commits &#8212; so you may get the wrong commit shown without even realizing it. Worse, this could also mean that URLs that were shorter (very short) but once worked may not work later if a collision comes up later. So you can use as many or few of the hash characters as you want, but I&#8217;d stick with at least 8 or so for safety. *Also*, right now the webapp only matches full hash values in Redmine&#8217;s database, so if you shorten it you will always get a gitweb URL.</p>
<p>For anyone interested, the current webapp code is GPLv2+ and can be found <a href="http://projects.kde.org/projects/repo-management/repository/revisions/master/entry/bin/handle_commit_mappings.rb">right here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/10/git-commit-semi-short-urls/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>For Shame, &#8220;The Linux Critic&#8221;</title>
		<link>http://jefferai.org/2010/07/for-shame-the-linux-critic/</link>
		<comments>http://jefferai.org/2010/07/for-shame-the-linux-critic/#comments</comments>
		<pubDate>Sat, 10 Jul 2010 18:07:31 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1176</guid>
		<description><![CDATA[(Update at the bottom.) Some people can&#8217;t be helped. Today I saw a post by The Linux Critic. In the post the author, Trent, says &#8220;I’m really not a fan of the new Amarok&#8220;, which naturally got me curious as to why. After all, if you don&#8217;t know what problems people have with your software, [...]]]></description>
			<content:encoded><![CDATA[<p>(Update at the bottom.)</p>
<p>Some people can&#8217;t be helped.</p>
<p>Today I saw a post by The Linux Critic. In the post the author, Trent, says &#8220;I’m really not a fan of the new <a href="http://amarok.kde.org/" target="_blank">Amarok</a>&#8220;, which naturally got me curious as to why. After all, if you don&#8217;t know what problems people have with your software, it can be hard to improve it.</p>
<p>I had never interacted with Trent or any other member of The Linux Critic before, nor had I ever visited their site. I was there with the best of intentions.</p>
<p>I&#8217;m going to let the discussion we had speak for itself. I&#8217;ve reproduced it below, because Trent started removing my comments and modifying his own. You can see the original blog post <a href="http://linuxcritic.wordpress.com/2010/07/09/clementine-0-4-amarok-1-4-reborn/">here</a> &#8212; it&#8217;s not even really relevant to most of the ensuing discussion &#8212; however I strongly recommend, in case further modification has been made to the discussion on that page, that you read the reproduction of the discussion below which is accurate as of the time of writing this post. At the beginning Trent was fairly hostile; by the end he was outright nasty.</p>
<p>Me:</p>
<blockquote><p>What about  Amarok 2.3 are you not a fan of?</p></blockquote>
<p>Trent:</p>
<blockquote><p>The fact  that now it’s just another iTunes clone.</p></blockquote>
<p>Me:</p>
<blockquote><p>Um. Right.</p>
<p>I guess I will just assume you’re mixing Amarok up with Banshee or  Rhythmbox. No other explanation for it.</p></blockquote>
<p>Trent:</p>
<blockquote><p>*sigh*</p>
<p>The purpose of this discussion wasn’t to discuss the problems with  newer versions of Amarok.  It was to discuss the new music player, <strong>Clementine</strong><br />
<em><br />
</em></p>
<blockquote><p><em>I guess I will just assume you’re mixing Amarok  up with Banshee or Rhythmbox. No other explanation for it.</em></p></blockquote>
<p>No.  I’ve tried Amarok 2.</p>
<p>I don’t like the layout.</p>
<p>I don’t like the entire UI.</p>
<p>I don’t like that the playlist is too small and in the wrong place.</p>
<p>I don’t like the volume control.</p>
<p>I don’t like that it requires KDE4 to run.</p>
<p>I don’t like the enormous waste of space that is the center panel.</p>
<p>I don’t like the ugly look of the buttons.</p>
<p>I don’t like that I can’t figure out how to do a lot of the things I  do in Amarok 1.4.</p>
<p>If it were more like Amarok 1, I’d probably be fine with it.</p></blockquote>
<p>Me:</p>
<blockquote><p>Sure, I  understand the purpose was to discuss Clementine, but when you said you  weren’t a fan of the new Amarok, I was interested in knowing why.</p>
<p>The reasons you give are at least mostly valid — aesthetic  differences, which are personal for everyone — as opposed to calling it  an iTunes clone, which would be very hard to justify. (I say mostly  because it doesn’t require you running KDE4 to run. And if you take  issue with it depending on KDE libraries, then it seems odd that this  would not be an issue for you with Amarok 1.4, which also depended on  KDE libraries.)</p></blockquote>
<p>Trent:</p>
<blockquote><p>Amarok 1.4  depended on KDE<strong>3</strong> libraries.  I’m not opposed to KDE3.</p></blockquote>
<p>Me:</p>
<blockquote><p>I don’t  know why you’re opposed to KDE4. But it doesn’t really matter; they’re  just libraries. I don’t run GNOME, but I don’t get upset when something  depends on GTK+. If it’s a useful application, then it’s a useful  application.</p></blockquote>
<p>I then attempted to be helpful, by letting him know that many of his complaints could be addressed if he wished to give Amarok another try:</p>
<p>Me:</p>
<blockquote><p>FWIW —  again, not to go into too much detail, since as you said this post is  about Clementine — you can adjust Amarok 2′s entire layout, as well as  its playlist layout, however you want.</p>
<p>If you go to the View menu you can unselect the Context View if you  don’t want it. You can also unselect Lock Layout and relayout the entire  thing — have parts of it top-to-bottom, change the order…you can even  drag the components on each other to turn them into tabs, so that your  entire view could be the playlist, except for when you want to switch to  the Media Sources pane to add music to it.</p>
<p>If you go to the Playlist menu, you can select one of four  pre-defined playlist layouts, or customize it to your own layout,  including a single line per track with whatever data shown that you  want.</p>
<p>Also under View, you may want to check out the Slim toolbar — it has a  different volume slider.</p>
<p>This is all based on Amarok 2.3.1; not sure which version(s) you’ve  tried.</p></blockquote>
<p>Trent:</p>
<blockquote><p>Amarok 2.2  was the last one I tried.  One could change a lot of that there too, but  after about an hour of futzing around with it I just found myself  getting too frustrated with it.</p>
<p>I shouldn’t have to go to those lengths just to get around the goofy  design philosophy that went into Amarok 2 (much like the rest of KDE4  for that matter).</p>
<p>It’s like they took a look at Amarok 1.4 and said “Ok, let’s see… how  can we break everything about this?”.</p>
<p>Ugh.</p>
<p>Clementine isn’t even close to finished yet, and it’s already more  usable out of the box than Amarok 2.</p>
<p>Unless they made some rather massive, sweeping usability changes from  2.2 to 2.3.1, which I doubt.</p></blockquote>
<p>Me:</p>
<blockquote><p>I don’t remember all the changes between 2.2 and 2.3, but there are  plenty. The Amarok team has always been very responsive to user  feedback, and that has driven much of our development in the Amarok 2  series just as it did with Amarok 1.</p>
<p>Regardless of you considering the design philosophy of Amarok 2 to be  goofy, the entire point of Amarok was always to provide contextual  information to your music — Rediscover Your Music. Amarok 2′s goal was  to take that further, by allowing for a context space that didn’t have  to compete with your collection browsing, so you can still e.g. see  lyrics to the song that’s playing while you browse your collection for  the next track.</p>
<p>These days Amarok 2 is pretty much feature-complete w.r.t. 1.4  features, and has huge numbers of features never in Amarok 1. It’s  always interesting to me how if you look at Amarok 1.1 vs. 1.4 you see  *huge* differences, and people tried out each release and gave feedback  which made things even better. With Amarok 2 some people seem to think  that it’s static, and never changing, and never improving — so they,  say, try Amarok 2.1, don’t like how it works or miss some feature that  hadn’t been ported yet, and don’t bother trying 2.3, regardless of the  fact that in the same series of point releases in the Amarok 1 days they  would have seen massive changes. So instead of providing useful  feedback and helping Amarok grow and improve, which it still continues  to do quite rapidly, they simply turn venemous about it, often  complaining about things that have long been fixed or capabilities that  have long since been added.</p>
<p>Fortunately, not everyone is like that, and we still have a great  user base that provides feedback that we try to address. For instance,  the ability to change layouts and make the playlist hugely customizable  was the direct result of feedback from Amarok 2 users that wanted to be  able to make it behave similarly to Amarok 1.4, which it can do to a  very large extent.</p></blockquote>
<p>Trent:</p>
<blockquote>
<blockquote><p><em>So instead of providing useful feedback and  helping Amarok grow and improve, which it still continues to do quite  rapidly, they simply turn venemous about it, often complaining about  things that have long been fixed or capabilities that have long since  been added.</em></p></blockquote>
<p>I’ve seen the KDE forums and I’ve seen enough of the attacks on users  who try to provide feedback.  It was enough to tell me that if a person  isn’t gushing with love over it, a person is therefore just “resistant  to change” or “doesn’t get it”.</p>
<p>Most of the things I label as bugs or design flaws are pointed out  time and time again as <em>intentional</em> in KDE4 and related  applications.</p>
<p>The philosophy itself I find repugnant.  That’s why I left KDE  completely after trying KDE 4.0, 4.1, 4.2, and 4.3.</p>
<p>While I’m sure Amarok 2.3.1 might be different and maybe even  flexible enough to emulate Amarok 1.4, I’ve found that every time I’ve  tried anything KDE related in the last 2 years I get frustrated, angry,  and venomous.</p>
<p>So no, I haven’t been forthcoming with feedback.  I never even know  where to begin.  There are so many things wrong with the directions KDE4  and Amarok devs have gone, I find myself overwhelmed any time I try to  enumerate them.</p>
<p>And again, this discussion is about <strong>Clementine</strong>, not Amarok  2.3.1.  Amarok 2.3.1 might be awesome, that’s great.  For people that  don’t mind the layout, and the difficult UI, and all the other stuff I  simply can’t stand, that’s fine by me.  They can use it.</p>
<p>But as Jules said in <em>Pulp Fiction</em>, “Sewer rat might taste like  pumpkin pie, but I wouldn’t know, because I wouldn’t eat the filthy  m**********r.”<br />
<em><br />
</em></p>
<blockquote><p><em>Fortunately, not everyone is like that, and we  still have a great user base that provides feedback that we try to  address.</em></p></blockquote>
<p>Ah.  Gotcha.  “We”.  Meaning that you’re one of the Amarok developers  that ruined my favorite music player.</p>
<p>Well, that explains why you’re trolling my blog post.</p></blockquote>
<p>Me:</p>
<blockquote><p>Yes.  Trolling. Asking for details as to a comment you made in your blog post,  and then trying to provide helpful information based on your feedback.  Right.</p>
<p>I guess I shouldn’t be surprised. From your comment, you clearly are  determined to put down KDE4 and anything related to it, and attempts to  be helpful are unwanted.</p></blockquote>
<p>This is the point where Trent starts modifying history. This was his original reply:</p>
<blockquote><p>Considering  that I don’t use KDE4, I’m not sure that “attempts to be helpful” are  even relevant.</p></blockquote>
<p>To which I replied:</p>
<blockquote><p>You listed complaints about Amarok 2; I explained how they could be addressed. That&#8217;s attempting to be helpful, and relevant to the discussion.</p></blockquote>
<p>At this point Trent <em><strong>deleted</strong></em> my comment above, and went through two revisions of his previous comment. The first one is below:</p>
<blockquote><p>Considering  that I don’t use KDE4, I’m not sure that “attempts to be helpful” are  even relevant.</p>
<p>As an FYI to any other KDE developers or fans that might be reading:   If you have something useful to contribute to any discussion on The  Linux Critic, your comments are welcome.</p>
<p>If all you are going to do is pick fights about why EVERYBODY can’t  love every little thing KDE4 and its apps, your comments are not.</p>
<p>This has happened again and again, and I’m not going to tolerate it  any further.</p></blockquote>
<p>And here is his second revision, which is still the latest at the time of publishing this post:</p>
<blockquote><p>Considering that I don’t use KDE4, I’m not sure that “attempts to be helpful” are even relevant.</p>
<p>As an FYI to any other KDE developers or fans that might be reading: If you have something useful to contribute to any discussion on The Linux Critic, your comments are welcome.</p>
<p>If all you are going to do is pick fights about why EVERYBODY can’t love every little thing about KDE4 and its apps, your comments are not.</p>
<p>This has happened again and again, and I’m not going to tolerate it any further. Play nice, or play somewhere else.</p>
<p>Thanks.</p></blockquote>
<p>So there you have it. Not much else to say. I&#8217;d never heard of The Linux Critic before, and now I know why.</p>
<p><span style="color: #993300;">Update:</span> Trent replied with more accusations of trolling (does he even know what that word means, considering he&#8217;s the one trolling on KDE4?), of purposefully trying to derail a discussion about Clementine (what discussion?), of some sort of KDE4 lovefest, and all sorts of other manners of odd accusations against a person he&#8217;d never met before today and the discussion above. This guy is off his rocker. Here&#8217;s the comment:</p>
<blockquote><p>And I see <a rel="nofollow" href="http://jefferai.org/2010/07/for-shame-the-linux-critic/" target="_blank">my KDE troll has gone off to sulk</a>.</p>
<p>Just as a heads-up, trying to derail a discussion about the  Clementine music player and turning it into all about KDE4 is not  “trying to be helpful”, and it is not “relevant”.  It’s rude, insulting,  and I consider it to be trolling.</p>
<p>While I don’t typically behave like a topic nazi here with respect to  keeping every single comment on-topic, when it comes to KDE4 trolls, I  have very little patience, because those comments always end up going  the same places, and it’s never constructive, always just fight-picking.</p>
<p>In this case, I’ll freely admit at least some culpability, because I  responded to the initial question about Amarok, despite my better  judgement.</p>
<p>Here’s a hint: not everybody loves KDE4.  Not everybody wants to use  it.  Some of us prefer not to use KDE4, and some of us (gasp!) even  prefer the KDE3 versions of those apps!</p>
<p>Baffling, I know.  But it’s true.  That’s why I made this post  yesterday about <strong>Clementine</strong>.  There are lots of other people out  there that used to love Amarok 1, and <em>don’t want Amarok 2</em>.</p>
<p>For those people, seeing a new, stable, usable fork of Amarok 1.4 is a  really great and exciting thing, and I thought that others should know  about it.  It’s very positive news when for a lot of us, the past few  years have been spent trying in vain to find a replacement for that now  dead application.</p>
<p>And in my experience, when KDE4 trolls come around, trying to change  the discussion into an argument about <em>why????????</em>, it’s not  relevant, not helpful, and is anything but useful to the topic at hand.</p>
<p>The reason I’m commenting like this is because I want to clarify  that.  I’m drawing a line on this subject because I’m tired of this.</p>
<p>To Jeff: those of us who have left the KDE world <em>don’t <strong>want</strong> your help</em>.  You can keep it.  Don’t call us.  We’ll call you.  So  scurry off to your KDE4 lovefest and leave the rest of us be to solve  the problems you created for us.  You’ve done more than enough.</p></blockquote>
<p>What a swell guy.</p>
<p><span style="color: #993300;">Update 2:</span> Here&#8217;s Trent&#8217;s response to one person who attempted to go onto his blog and tell it like it is (thanks Marand!). One editorial note: Trent claims &#8220;you also didn&#8217;t see some of the other garbage of his I deleted.&#8221; Every tiny bit of my interaction with him is in the original post above. <strong>Not one word has been omitted.</strong> It&#8217;s possible he has since deleted some more of my comments from his blog in order to rewrite history, as I have shown above, but what you see above in the original post is all of the &#8220;garbage&#8221;.</p>
<p>Marand:</p>
<blockquote><p>Maybe I’m missing something, but I don’t see how he was trolling. I see a developer trying to communicate with a former user to get useful feedback and being treated with hostility for it.</p>
<p>If you don’t like something, that’s fine. If you can’t explain why you don’t like it, that’s also fine. However, it isn’t his fault you can’t offer a well-reasoned explanation of why you dislike the application, so I think you crossed a line lashing out at him over your inability to express your opinions constructively.</p>
<p>It looks like the discussion fell apart when constructive advice was offered to solve your various complaints. Lacking better arguments, you lashed out. You should have just left it at “I don’t like it because it’s different, and I have an irrational hatred of the number 4″, it would have been more mature.</p>
<p>Here, let me give you a better example to use when saying you dislike Amarok 2. This is a problem that has plagued the app for me in all versions since the change. Frequently (several times a day), I have to restart Amarok 2 because the dynamic playlist breaks and stops updating. Haven’t been able to figure out why, but it seems to be related to the collection scanning. It’s frustrated me enough that I’ve considered changing players, though I like Amarok enough (even 2!) to still use it despite this problem.</p>
<p>For the record, I’m not a developer of KDE, Amarok, or anything else. I use KDE4 and I actually like it, but I don’t care what anyone else uses or likes. My only motivation for this post is I think that, if you like or dislike something, you should either be able to provide clear explanation of why, or you should admit you cannot.</p></blockquote>
<p>Trent:</p>
<blockquote><p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>Maybe I’m missing something, but I don’t see how he was trolling.</em></p></blockquote>
<p><em> </em></p>
<p>He was, as happens frequently, someone who tried (successfully, I might add) to derail a topic to talk about something else after being repeatedly warned that it was off-topic. While that can pretty easily fit the definition of someone needing their comments moderated, he was doing it in an <a rel="nofollow" href="http://en.wikipedia.org/wiki/Troll_%28Internet%29" target="_blank">inflammatory, extraneous</a> manner. You also didn’t see some of the other garbage of his I deleted.</p>
<p>My biggest mistake was in responding to him to begin with, given that his very first comment was off-topic (and I know from experience where those usually end up leading).<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>If you don’t like something, that’s fine. If you can’t explain why you don’t like it, that’s also fine. However, it isn’t his fault you can’t offer a well-reasoned explanation of why you dislike the application, so I think you crossed a line lashing out at him over your inability to express your opinions constructively.</em></p></blockquote>
<p><em> </em><br />
I’m perfectly capable of explaining why I don’t like Amarok 2. If you bothered reading before you posted, you’d notice that I gave him several valid reasons why I don’t use Amarok 2, despite the fact that this article was about something else, specifically a program that Amarok 1.4 users may not be aware of that I’ve found to be a very positive direction in music player development for a change.</p>
<p>And considering that The Linux Critic is my blog — not his, and not yours –, and it’s my prerogative to determine content here, including content of discussions about posts, and considering that his discussion was off-topic and inflammatory, I was in no way “out of line” in lashing out at him. As I’m sure you know, Jeff has his own blog where he went to whine, and note that I didn’t go over there and change the subject to something that he found inappropriate, or spout idiocy at his opinions. He can have his opinions, he can say what he wants.</p>
<p>And he can express them somewhere else. They were inappropriate here. As I mentioned, I made a mistake in responding to him to begin with.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>It looks like the discussion fell apart when constructive advice was offered to solve your various complaints.</em></p></blockquote>
<p><em> </em><br />
The discussion “fell apart” when he tried to change the subject from <strong>Clementine 0.4</strong> to Amarok 2 and KDE4. After repeated warnings he continued to do it, so I deleted his further attempts at doing so and I blacklisted his IP. I have made it very clear here in the past that I will not tolerate spammers and trolls, and I felt that I was pretty reasonable in the amount of leeway I gave him. Most of the time I just delete those types of comments outright, because they inevitably lead to (surprise!) more off-topic discussion like we’re having <em>right now</em>. <img src="http://www.guildhaven.org/images/smilies/rolleyes.gif" alt="" /><br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>Lacking better arguments, you lashed out.</em></p></blockquote>
<p><em> </em><br />
Ah. So, since I went out of my way to present arguments that were in response to off-topic, inflammatory trolling, and you happen to disagree with my opinion, they’re “lacking better arguments”. Gotcha.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>You should have just left it at “I don’t like it because it’s different, and I have an irrational hatred of the number 4″, it would have been more mature.</em></p></blockquote>
<p><em> </em><br />
And you were wondering why I don’t like KDE4 trolls commenting on my blog posts? Again, you apparently missed the several valid reasons I gave why I dislike Amarok 2. And you apparently missed the part where I mentioned that I’ve used KDE 4.0, 4.1, 4.2, and 4.3, and have dismissed it as a valid replacement for KDE 3.5.10.</p>
<p>If I didn’t like things because they are “different”, I’d still be using <strong>Windows 2000</strong>.</p>
<p>And on the subject of maturity, derailing a topic to insult people because you disagree with their opinions, that wins a prize too, sport. Keep it up.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>Here, let me give you a better example to use when saying you dislike Amarok 2. This is a problem that has plagued the app for me in all versions since the change. Frequently (several times a day), I have to restart Amarok 2 because the dynamic playlist breaks and stops updating. Haven’t been able to figure out why, but it seems to be related to the collection scanning. It’s frustrated me enough that I’ve considered changing players, though I like Amarok enough (even 2!) to still use it despite this problem.</em></p></blockquote>
<p><em> </em><br />
And the next time I write an article here about the problems with Amarok 2 and how they could be improved, that will be a valid and relevant thing to discuss. But considering that this particular one is about <strong>Clementine</strong>, that would be a bit out of place here, as I told Jeff several times before I banned him.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>I use KDE4 and I actually like it, but I don’t care what anyone else uses or likes.</em></p></blockquote>
<p><em> </em><br />
No, like other KDE4 fanboys I’ve encountered, you obviously can’t stand it when someone doesn’t get all starry-eyed at the desktop environment you love so much, and just have to shoot your mouth off any time someone expresses an opinion to the contrary, whether it’s appropriate for you to do so or not.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>My only motivation for this post is I think that, if you like or dislike something, you should either be able to provide clear explanation of why, or you should admit you cannot.</em></p></blockquote>
<p><em> </em><br />
And I did, above, in response to Jeff. Even though it was against my better judgement, and in violation of my own policy against feeding the trolls here as it was off-topic and inflammatory.</p>
<p>What I probably should have done was delete his posts and ban him right off the bat. Had I known he was just an Amarok developer coming here to pick a fight, that’s what I would have done.</p>
<p>The biggest problem is, I tend to give people far too much leeway here sometimes, and look what it gets me.</p></blockquote>
<p>Yes, look what it gets him.</p>
<p><span style="color: #993300;">Update 3:</span> Another brilliant post from Trent in the comments of his blog. The real highlight is his characterization of my interaction with him, in which I apparently expressed, using lots of punctuation marks and emphasis, my disbelief that he didn&#8217;t like every tiny thing about, apparently, anything. He says &#8220;here&#8217;s how these almost always go&#8221; and finishes by saying &#8220;Every. Single. Time.&#8221; Which shows that his arguments aren&#8217;t even internally consistent.</p>
<p>Trent:</p>
<blockquote><p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>I actually like KDE4 <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /> but I’m certainly not going to push it on someone who’s not interested.</em></p></blockquote>
<p><em> </em><br />
There’s nothing wrong with liking KDE4. It’s not for me, that’s all. <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /><br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>I’ve tried engaging with the developers at the Amarok forums, they are not interested in any critiques or comments on the UI. Politeness gets you ignored or patronised, frustration gets you deleted. Unless you’re part of the echo chamber don’t bother.</em></p></blockquote>
<p><em> </em><br />
*nods*</p>
<p>I found that most of the issues I had with KDE4 and Amarok, when I looked around where one would submit such feedback, were things that were there by design, and would never be “fixed”, because they weren’t broken. <a rel="nofollow" href="http://lwn.net/Articles/346533/" target="_blank">Things like this</a> convinced me it was best to just move on entirely. Despite what any of them said, they weren’t really interested in feedback that didn’t reinforce what they were doing.</p>
<p>They even come here and try to offer “help”. <img src="http://www.guildhaven.org/images/smilies/rolleyes.gif" alt="" /></p>
<p>If they truly <em>wanted</em> to help, they’d have done what the little team working on Clementine has done. Port Amarok 1.4 to Qt4 to take advantage of some of Qt4′s features, and make it worthy of the name, rather than… whatever it is they’ve done with it.</p>
<p>That would have helped. Trolling blog posts about replacement applications doesn’t help at all. It just makes me mad. <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /><br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>I actually don’t mind they have their vision and are somewhat single minded about it – that’s their prerogative as the developers, its this pretence that they are open to feedback that is quite irritating and the tendency to evangelise.</em></p></blockquote>
<p><em> </em><br />
Yeah, that’s exactly what spins me up so much. Here’s how these almost always go.</p>
<p>1) Wait, you don’t LIKE *whatever*???? Inconceivable! Why?<br />
2) Well what don’t you like about it?<br />
3) Oh. Well, I think you don’t like it because you<em>don’t understand it</em>.<br />
4) Oh. In that case then, you don’t like it because<em>you’re resistant to change</em>.<br />
5) Well, I’m going to assume you’re stupid then, since you don’t like it. Here’s how to use it.<br />
6) Why are you getting mad at me? I’M ONLY TRYING TO HELP.<br />
<img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /></p>
<p>Every. Single. Time.<br />
<em><br />
</em></p>
<p><em> </em></p>
<p><em> </em></p>
<blockquote><p><em>Meh – Amarok is dead (for me anyway). Long live Clementine. And RhythmBox. And Banshee. And Bangarang … you get the idea <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /></em></p></blockquote>
<p><em> </em><br />
Yeah. Amarok died with 1.4 for me. I’ve moved on, particularly now that it looks like a replacement (in Clementine) is in the works. It might take a while for it to catch up, but I’m pretty hopeful that those of us still using Amarok 1.4 can move on from it soon enough.</p>
<p>Thanks for the comment. <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /></p></blockquote>
<p><span style="color: #993300;">Update 4:</span> Valorie Zimmerman wrote a nice reply on Trent&#8217;s blog encouraging him to work with others, instead of simply spewing bile. Trent&#8217;s idea of responding to such a nice comment is to entirely miss her well-articulated point, insult me some more (to be expected), continue to insist that my comments were inflammatory and &#8220;intended to start an argument&#8221;, and then command her to &#8220;move on&#8221;:</p>
<p>Valorie:</p>
<blockquote><p>You’ve completely misconstrued Jefferai’s response to you. Why the  hatefullness?</p>
<p>Really, everyone here agrees on two things: we love music, and we  love free and open software. So why not use the player you like, and  contribute to that if you can. F/OSS works when people work on the  projects they love.</p>
<p>F/OSS is just dragged down by hating on people and projects. Please  stop doing that. I love Amarok, but point people to Clementine (or other  players) if they want help finding alternatives. No project can meet  all needs, or keep everyone happy. Enjoy diversity!</p></blockquote>
<p>Trent:</p>
<blockquote>
<blockquote><p><em>I love Amarok, but point people to Clementine (or  other players) if they want help finding alternatives. No project can  meet all needs, or keep everyone happy. Enjoy diversity!</em></p></blockquote>
<p>That was precisely the entire point of this article.  To point people to  Clementine, and to provide some reasons “why”.  I think I did a  reasonable job of that, unless you read a different article than I did.   <img src="http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /></p>
<p>My responses to Jeff were responses to off-topic, inflammatory  comments intended to start an argument.  I’ve already admitted that I  should not have responded to him.  It was my fault, I’ll freely admit  that.  Move on.</p></blockquote>
<p><img src="file:///home/jeff/Desktop/Clementine%200.4:%20Amarok%201.4%20reborn%21%20%C2%AB%20The%20Linux%20Critic_files/rolleyes.gif" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/07/for-shame-the-linux-critic/feed/</wfw:commentRss>
		<slash:comments>126</slash:comments>
		</item>
		<item>
		<title>Prosody, the first password-hashing XMPP server</title>
		<link>http://jefferai.org/2010/06/prosody-the-first-password-hashing-xmpp-server/</link>
		<comments>http://jefferai.org/2010/06/prosody-the-first-password-hashing-xmpp-server/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 23:02:10 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Prosody]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1169</guid>
		<description><![CDATA[(At least, AFAIK!) Recently, I have been contributing to another project outside of KDE: the Prosody XMPP server. Prosody is fairly new (the project began in 2008) and is written in Lua. I&#8217;ve been using it for a long time now, and it&#8217;s a really nice, rock-solid server. The code is also pretty hackable, being [...]]]></description>
			<content:encoded><![CDATA[<p>(At least, AFAIK!)</p>
<p>Recently, I have been contributing to another project outside of KDE: the <a href="http://prosody.im">Prosody</a> XMPP server. Prosody is fairly new (the project began in 2008) and is written in Lua. I&#8217;ve been using it for a long time now, and it&#8217;s a really nice, rock-solid server. The code is also pretty hackable, being both modular and fairly clean.</p>
<p>My impetus for working on it was that at work we have been using the OpenFire XMPP server. It&#8217;s a big Java beast and is all but unmaintained at this point. Since I&#8217;ve had good experiences with Prosody and it already supported most of the functionality I needed, I decided to see how it handled a migration at work.</p>
<p>One thing it *didn&#8217;t* support was pluggable authentication. The basics for this were in existence, but the code was not yet right. After some pestering, Matthew Wild and Waqas Hussain, the two main Prosody developers, fleshed out the API necessary, and I began to work on separating out the built-in authentication code into a plugin that could be swapped out for other providers.</p>
<p>Once this was working, my next step was to attack something that has been bugging me on various XMPP servers to this point: plaintext password storage. To the best of my knowledge, every other XMPP server stores your credentials in plaintext or via easily reversible encryption with the key stored with your user account &#8212; in essence, simple obfuscation. The reason is because of the XMPP standards&#8217; mandate that SASL PLAIN and DIGEST-MD5 be supported authentication methods. While SASL PLAIN transfers the password in cleartext (over the encrypted tunnel between client and server), thus lending itself well to comparison against a hash, DIGEST-MD5 does not. It consists of multiple possible authentication schemes based on the abilities of the client/server, and with different tranferred credentials depending on which scheme. It would require at least four saved tokens for every user, to be used depending on the mechanism the client and server negotiated, and updating these when passwords changed was not necessarily trivial.</p>
<p>So, I decided to make a tradeoff &#8212; you can store a plaintext password on the server and have DIGEST-MD5 available, or you can be limited to PLAIN and have a plaintext password go through the encrypted tunnel between client and server but have it hashed in the server&#8217;s storage. Personally, since I trust the server I&#8217;m connecting to, I&#8217;d rather have the latter. ejabberd makes a claim <a href="http://www.ejabberd.im/plaintext-passwords-db">here</a> that it&#8217;s more secure to have passwords sent in hashed form over the network and stored in plaintext on the server, but I think this claim is not well-reasoned. Like in many cases, security in this instance is relative. If you&#8217;re using SSL/TLS communications, which is by far the norm between XMPP clients and servers these days (in fact, in most clients you must explicitly enable plaintext authentication over unencrypted streams), the passwords are already encrypted when sent over the network &#8212; so unless you fear a MITM attack, you&#8217;re not going to be vulnerable to snooping. But you *will* be vulnerable to someone hacking onto your server and simply reading your plaintext passwords from a file, and that&#8217;s bad. I think that ejabberd&#8217;s claim is out-of-date now that encrypted communications between XMPP clients and servers are the norm, and you&#8217;ll be better off in most cases with having the one place the password is permanently stored be in a hashed form. (As you&#8217;ll soon see, you&#8217;re about to be able to have your cake and eat it too, anyways.)</p>
<p>The next step was deciding which hash algorithm to use. There&#8217;s something called <a href="http://tools.ietf.org/html/draft-ietf-sasl-scram-11">SCRAM</a>, which stands for Salted Challenge Response, and is an upcoming SASL authentication paradigm. It uses an open standard hash function called PBKDF2, which basically works like this: take the password, salt it with a large random series of bits, and then run it through the SHA-1 function. 4096 times. Rainbow table *that*. If you like, you can swap out which hash function you use, so you could use SHA-256 or some other function, and you can do it more than 4096 times if you like, too.</p>
<p>By limiting what information is passed between server and client, using secure hashes like PBKDF2, and never transmitting the password in cleartext to the server, SCRAM provides a SASL mechanism that is both highly secure and more standardized than DIGEST-MD5.</p>
<p>Now, back to the hashed password backend. Support for SCRAM is beginning to appear in some XMPP clients, and support was mostly coded into Prosody as well, so I asked the guy who wrote it, the excellent Tobias Markmann, to expose some bits of the SCRAM capabilities such that I could use the PBKDF2 functionality to store password hashes, as well as allowing arbitrary salts and iteration counts to be defined. He did this, and I coded up the backend, and suddenly Prosody became the first XMPP server, to my knowledge, that can securely store your password server-side.</p>
<p>The backend provides seamless upgrades from the plaintext backend; it will simply take the password that currently exists for the user, generate a random salt, and create the hashed credentials, removing the plaintext password.</p>
<p>Tobias is currently taking it a step further: he&#8217;s modifying the backend to store bits of information required by the SCRAM algorithm instead of the direct password hash. What this means is that if you end up using a client that only supports PLAIN authentication, those bits can be generated by your password on the fly and used to verify against. However, if your client supports SCRAM authentication, the backend will now be able to serve up the bits necessary for SCRAM-SASL. So you&#8217;ll have secure server storage *and* a secure exchange from client to server (in addition to the normal SSL/TLS tunnel). Tobias is, I believe, working as a SoC student on Psi &#8212; so I&#8217;m sure it&#8217;ll be working between Psi and Prosody pretty soon, if he doesn&#8217;t have it done already.</p>
<p>The hashed password backend isn&#8217;t currently the default, but if you&#8217;re running Prosody you can enable it by adding <code>auth_internal_hashed</code> to your modules and defining (in your host) the line</p>
<p><code>authentication = "internal_hashed";</code></p>
<p>Once it&#8217;s tested more thoroughly, and especially when SCRAM support is finished and working in more clients, expect it to become the default backend.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/06/prosody-the-first-password-hashing-xmpp-server/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Amarok Mobile &#8211; The Beginning</title>
		<link>http://jefferai.org/2010/05/amarok-mobile-the-beginning/</link>
		<comments>http://jefferai.org/2010/05/amarok-mobile-the-beginning/#comments</comments>
		<pubDate>Fri, 28 May 2010 01:12:42 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1162</guid>
		<description><![CDATA[This post is actually rather after the fact. I&#8217;ve been super busy, and my blogging tends to fall way, way behind when that happens. But I wanted to tell people about plans for Amarok Mobile, where things stand now, and what needs to be done. (And how you could help!) First off, I need to [...]]]></description>
			<content:encoded><![CDATA[<p>This post is actually rather after the fact. I&#8217;ve been super busy, and my blogging tends to fall way, way behind when that happens. But I wanted to tell people about plans for Amarok Mobile, where things stand now, and what needs to be done. (And how you could help!)</p>
<p>First off, I need to give a big shout-out to Nokia. A while back, they donated ten n900 devices to KDE developers who submitted proposals describing what they would work on. I was one of the lucky winners, and this provided both the motivation and means to start working on an Amarok Mobile.</p>
<p>I actually was not initially supposed to use this for Amarok Mobile development &#8212; I had sumitted a proposal to bring functionality similar to the beloved* Popup Dropper into a library for Maemo programs. Problem: having never used Maemo before, I didn&#8217;t realize it had longpress functionality (my previous phone was an iPhone).</p>
<p>So, not wanting to reinvent the wheel needlessely, I instead decided to start working on exactly what everyone had assumed/thought/wanted me to be working on when they heard I was one of the n900 recipients: Amarok Mobile.</p>
<p>Below is a record of some of the work that has been done, and that remains to be done.</p>
<p><strong>Core work</strong></p>
<p>In large part due to its very rapid pace of development, Amarok&#8217;s code base has had a habit of growing haphazardly, and one of the results has been a lot of incestuous code&#8230;things coupled when they really shouldn&#8217;t be, code being referenced and implemented all over the place, and so on.</p>
<p>As a result, one of the first things I did was to work on separating out code that provide core functionality &#8212; things like podcasts, playlists, our metadata system, collections, and more &#8212; and boil them down to the basics. The rule for the core library is: no GUI code, and nothing inside core may reference any files outside of core. The point is that core should comprise the essence of Amarok, and much of what&#8217;s left are the possibly platform-specific implementations. In addition, I standardized namespaces for the parts of core, standardized include headers (which makes it much easier to handle file moves later, since they are fully-pathed from the top level source directory), and had absolutely countless compilation cycles. It was an absolute fsckload of work.</p>
<p>However, I think it paid off. We now have, inside src/, a core/ directory and a core-impl/ directory. If we studiously keep core/ separated, it will provide an excellent base on which alternative GUIs and implementations of those core classes can be built. In addition, more things will be moved there, or at least the paradigm will continue being followed; for instance, our great contributor Erik Hovland has been making progress on separating out the GUI layer from our Services framework so that we can have the great services like Ampache and Magnatune and Last.fm and so on be relatively easily activated on other platforms.</p>
<p><strong>SQL</strong></p>
<p>Amarok 2 currently uses MySQL exclusively, allowing you to either use a MySQL server or libmysqld for an embedded database. This has pros and cons, but the really relevant pro is the huge speed gains we get over SQLite. (Before people comment about how we must be doing something wrong: we&#8217;re not the only project that has seen serious speed problems with SQLite &#8212; I know that Quassel has had similar issues; and if you&#8217;re convinced that it&#8217;s our schema or some other such thing, you&#8217;re welcome to help us improve it. Many others have made this claim, and none of them have ever taken our invitation to actually help us improve things.)</p>
<p>So the obvious question comes up: what about Amarok Mobile? I&#8217;m not sure how realistic it is to expect that we can get libmysqld running efficiently on the n900, especially given its memory limitations. At the same time, SQLite is readily available. But, we want to avoid writing tons of custom code.</p>
<p>As it turns out Quassel has a really great storage abstraction using QtSql, and they use both SQLite and PostgreSQL. So, if we copied their really nice approach, we could maybe support SQLite with Amarok Mobile while reducing developer effort to a minimum (since none of us are SQL experts).</p>
<p>One of the big problems we&#8217;ve had with QtSql before is that the QMYSQL plugin can support libmysqld (except that it can&#8217;t; more on that in a second), but in one of the most boneheaded software design choices I&#8217;ve ever seen in my life, MySQL determines whether you&#8217;re connecting to a server or an embedded server based on which library your program *links* to. This is not a runtime option. Wut.</p>
<p>So &#8212; the obvious option is to bring to Qt what we do in Amarok &#8212; instead of having a QMYSQL driver that has to link to one of the other, have a QMYSQL driver linking to the server libraries and a QMYSQLE driver linking to the embedded libraries, and let application developers choose one or both. I began working on this, and have been successful in building both drivers, and have high hopes I can get it included into Qt 4.8 (there&#8217;s necessarily a lot of code duplication, so I&#8217;ll have to see what they say about that&#8230;I may be able to abstract some of it into shared functions, but anywhere that mysql in any case was used, I had to replace with mysqle).</p>
<p>Now, I said that it can&#8217;t actually support libmysqld. The reason is that you pass in options for the embedded server upon library init &#8212; but QtSql *always* initializes the library with null options. Which means, among other things, that it will use /var/lib/mysql (or whatever your compiled-in default is) for its database directory, which normally means that if you&#8217;re not the root user, you can&#8217;t actually do anything because it can&#8217;t create its files. Whoops.</p>
<p>I can&#8217;t break ABI or API, so I&#8217;ve been wondering what to do about this &#8212; some of the Qt guys suggested I create a new SQL framework with these drivers in it, but I don&#8217;t think that&#8217;s a great option. Instead, I plan on creating a new connection option (see the table <a href="http://doc.trolltech.com/4.6/qsqldatabase.html#setConnectOptions">here</a>). Normally these are basically mapped to MySQL options and used like this:</p>
<p><code>db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1");</code></p>
<p>This connection option will not be mapped directly to a MySQL option, but will instead take a delimited list of options, something like this:</p>
<p><code>db.setConnectOptions("CLIENT_SSL=1;CLIENT_IGNORE_SPACE=1;MYSQLD_INIT_OPTIONS=myoption1=myvalue1;;myoption2=myvalue2;;myoption3=myvalue3");</code></p>
<p>This would let you pass arbitrary options, and this list would be split and each of the options would be passed into library initialization. It&#8217;s API/ABI compatible and relatively straightforward, so it&#8217;s the best thing I can think of right now.</p>
<p><strong>Future work</strong></p>
<p>The next steps are to finish the QtSql modifications and get those submitted upstream. Maemo right now has Qt 4.6, but *eventually* will have 4.8&#8230;so when 4.8 is coming around, if my QtSql changes are in there, Amarok can try migrating to QtSql; to finish services GUI separation and separation of other parts of Amarok (like AmarokURLs), and to begin writing a GUI, ideally using the Qt Kinetic declarative UI library &#8212; when you&#8217;re starting from scratch, you might as well do it right. Fortunately some of these tasks will be much easier now that Qt is fully supported/included in the proper locations with the n900 PR 1.2 firmware release.</p>
<p>My time has become incredibly limited in the past month, so if you have time and are interested in helping, join us!</p>
<p>* Okay, I know one person that really, really hates it. And a lot of people that never really realized it was there. But a lot like it!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/05/amarok-mobile-the-beginning/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rescanning Single Folders</title>
		<link>http://jefferai.org/2010/01/rescanning-single-folders/</link>
		<comments>http://jefferai.org/2010/01/rescanning-single-folders/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 06:37:40 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1149</guid>
		<description><![CDATA[Quite often &#8212; or at least, &#8220;often enough&#8221; &#8212; we get people that want to rescan a particular folder in Amarok. This is usually the result of them changing tags and wanting Amarok to pick it up. (Remember, for efficiency reasons Amarok watches the modified times of the collection directories, not the collection files, so [...]]]></description>
			<content:encoded><![CDATA[<p>Quite often &#8212; or at least, &#8220;often enough&#8221; &#8212; we get people that want to rescan a particular folder in Amarok. This is usually the result of them changing tags and wanting Amarok to pick it up. (Remember, for efficiency reasons Amarok watches the modified times of the collection directories, not the collection files, so adding or deleting (or renaming) files will trigger an incremental scan but modifying a file&#8217;s contents won&#8217;t.)</p>
<p>Previously, our advice was &#8220;touch the folder&#8221; or in the worst case &#8220;just do a full rescan.&#8221; Now there&#8217;s slightly better advice we can give. If you right-click on a folder in the collection setup dialog, and if the folder was already in your collection (i.e. you didn&#8217;t just check it a moment ago), it will give you the option to rescan that folder.</p>
<p>The text above that field has also been modified slightly to indicate that this is possible. Check it out:</p>
<div id="attachment_1157" class="wp-caption alignnone" style="width: 541px"><a href="http://jefferai.org/wp-content/uploads/2010/01/rescan_snapshot.png"><img class="size-full wp-image-1157 " title="rescan_snapshot" src="http://jefferai.org/wp-content/uploads/2010/01/rescan_snapshot.png" alt="Rescanning a Single Folder" width="531" height="356" /></a><p class="wp-caption-text">Rescanning a Single Folder</p></div>
<p>This is in current git master and will be in the 2.2.3 release!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2010/01/rescanning-single-folders/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Collection Scanner&#8217;s Ultimate Speed Bump</title>
		<link>http://jefferai.org/2009/11/the-collection-scanners-ultimate-speed-bump-and-cases/</link>
		<comments>http://jefferai.org/2009/11/the-collection-scanners-ultimate-speed-bump-and-cases/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 18:19:19 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1137</guid>
		<description><![CDATA[A couple of weeks ago I spent a long period of time looking at ways to increase scanning speed. Yes, again. I had written previously (here and here) on changes I&#8217;d made to increase the speed of scanning collections, and I&#8217;d made a lot of other changes that I didn&#8217;t write about. These certainly helped [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I spent a long period of time looking at ways to increase scanning speed. Yes, again. I had written previously (<a href="http://jefferai.org/2009/10/14/speed-never-gets-old-at-least-in-software">here</a> and <a href="http://jefferai.org/2009/07/17/db-changes-call-for-benchmarkers">here</a>) on changes I&#8217;d made to increase the speed of scanning collections, and I&#8217;d made a lot of other changes that I didn&#8217;t write about. These certainly helped in many situations, and made significant differences for particular users, but overall we still had a large speed boondoggle: the number of queries issued per track to the database.</p>
<p>This number was at least three. At the very minimum, assuming the artist, album, genre, composer, and year had been cached, you had a lookup for the uniqueid, a lookup to check for whether the track was part of a compilation, and an insert. This number could be significantly higher in some situations; but these database queries were a large part of the reason that a scan might run, finish disk I/O, and then spend quite a long time eating up CPU time before it was done.</p>
<p>I looked at increasing the number of values I was pulling in using UNION queries, which was currently up to five values (depending on whether they were already cached). I also looked at prepared statements, which it turns out were not likely to give us a large speed bump and are an absolute and utter pain in the ass when using the C API as we are. (We use the C API for historical reasons; also, the official C++ API is not easily available in many distributions, and there are many unofficial contenders.)</p>
<p>Finally, I looked at ripping the guts out of the scan result processor and doing what  several of us devs had decided would probably be the best way to improve speed, but was at the same time the most challenging: replacing the SQL statements with local memory storage, populating these at the beginning of a scan and re-populating the database at the end. It wasn&#8217;t easy. I selected data structures very carefully for speed, looking at how often each query would be run and the time complexities of insertion and lookup into various types of structures.  In addition, because of a few complex queries using joins, the behavior we needed could only be emulated by using very complex data structures (one of them is a QHash&lt;QPair&lt;int, QString&gt;, QStringList*&gt;; another is a QHash&lt;QString, QLinkedList&lt;QStringList*&gt; *&gt;). I also wanted to minimize memory usage&#8230;I did some rough back-of-the-hand calculations which indicated that using my design, for the vast, vast majority of collections, memory usage during the scan was likely to go up by only a couple of megabytes at the very most, which would be reclaimed at the end.</p>
<p>In addition, I implemented logic to drastically decrease the total queries needed for insertion. Since I&#8217;m constructing the final queries from the data structures, I could easily do insertion of multiple values at once. So now the database is queried at the start to see the maximum query size it will accept; then values for insertion are appended to the query up until this value is hit, at which point the query is run and a new query begun. By default I think this is one megabyte for most installations, which means that instead of possibly thousands upon thousands of insertion queries (depending on the size of your collection), you&#8217;d have to have an absolutely extraordinarily large collection to have more than 25 or so queries for the entire scan. Since there is not only round-trip delay sending data to and receiving responses from the database but also the database must parse each query each time it&#8217;s run (the purpose of prepared statements is to reduce this), then this makes a drastic difference. To put it another way, the number of queries per track has gone from a minimum of three to an asymptotic value of zero.</p>
<p>Overall, the work seems to have paid off rather nicely. Benchmark reports that I got back indicated anywhere from 30% to 300% gains in the total time for a scan, depending on size of collection and your particular I/O throughput/CPU/etc.</p>
<p>I call this the Ultimate Speed Bump in the title because there is far less that can be done from this point on to increase speed, at least as far as I can currently tell &#8212; this was the Big Mama, the elephant in the room. But hopefully it will increase scan processing enough that further increases won&#8217;t really be so much of a necessity anymore.</p>
<p>One other data point: the database is now case-sensitive, which is something we&#8217;ve intended to do for a long time but is now being done. It&#8217;s been a very long-standing feature request that we&#8217;ve finally implemented (we wanted it too), and thankfully it wasn&#8217;t much work to do this and change the appropriate points in the rest of the code.</p>
<p>(By the by, this will all be in 2.2.1 &#8212; enjoy!)</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/11/the-collection-scanners-ultimate-speed-bump-and-cases/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Award-winning professor Philip Bourne to speak at Camp KDE</title>
		<link>http://jefferai.org/2009/10/award-winning-professor-philip-bourne-to-speak-at-camp-kde/</link>
		<comments>http://jefferai.org/2009/10/award-winning-professor-philip-bourne-to-speak-at-camp-kde/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 20:04:47 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Camp KDE]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1134</guid>
		<description><![CDATA[Philip Bourne, the 2009 Benjamin Franklin Award-winning computational biologist, will be speaking at Camp KDE 2010. Professor Bourne is well-known in his field for contributions to open-source bioinformatics software and is a leading advocate of open access to data. Quoting from the UCSD News Center: Bourne is co-founder of SciVee, the Web 2.0 resource dedicated [...]]]></description>
			<content:encoded><![CDATA[<p>Philip Bourne, the 2009 <a href="http://www.bioinformatics.org">Benjamin Franklin Award</a>-winning computational biologist, will be speaking at <a href="http://camp.kde.org">Camp KDE 2010</a>.</p>
<p>Professor Bourne is well-known in his field for contributions to open-source bioinformatics software and is a leading advocate of open access to data. Quoting from the <a href="http://ucsdnews.ucsd.edu/newsrel/supercomputer/04-09PhilipBourne.asp">UCSD News Center</a>:</p>
<blockquote><p>Bourne is co-founder of SciVee, the Web 2.0 resource dedicated to the dissemination of scientific research and science-specific research networking. Launched in late 2007 as a collaboration between the National Science Foundation and the San Diego Supercomputer Center (SDSC) at UC San Diego, SciVee has been used by hundreds of thousands of students and professional scientists as a means of learning and sharing their research through online science videos that supplement peer-reviewed journal articles, stimulate discussion, and promote collaboration. SciVee earlier this month announced a number of significant upgrades to its site, along with the addition of 32 new science categories.</p></blockquote>
<p>Open data access and open source share similar goals, and Professor Bourne&#8217;s discussion of his experiences with open data access should prove informative and interesting to all.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/10/award-winning-professor-philip-bourne-to-speak-at-camp-kde/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Speed never gets old. At least, in software.</title>
		<link>http://jefferai.org/2009/10/speed-never-gets-old-at-least-in-software/</link>
		<comments>http://jefferai.org/2009/10/speed-never-gets-old-at-least-in-software/#comments</comments>
		<pubDate>Thu, 15 Oct 2009 03:17:07 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1129</guid>
		<description><![CDATA[As my regular readers &#8212; such as that may be, considering how rarely I post &#8212; may know, I&#8217;ve been doing all sorts of things to speed up scanning your files into Amarok&#8217;s local collection. I have some really nice news on that front: a few goodies that will be very useful to you, especially [...]]]></description>
			<content:encoded><![CDATA[<p>As my regular readers &#8212; such as that may be, considering how rarely I post &#8212; may know, I&#8217;ve been doing all sorts of things to speed up scanning your files into Amarok&#8217;s local collection. I have some really nice news on that front: a few goodies that will be very useful to you, especially if you have very flat collections. These improvements are in the forthcoming 2.2.1.</p>
<p>First up, and the lesser of the two: If a directory is encountered multiple times during scan, the scanner will now only scan them once. There are a few corner cases where this could happen (for instance, if you have a top-level directory specified as well as one of its subdirectories, and the subdirectory&#8217;s name changes, changing both its and its parent&#8217;s mtime). Not too useful for most cases, but was implemented while working on&#8230;</p>
<p>Second, and the biggie: When doing an incremental recursive scan, Amarok will now no longer scan subdirectories whose mtimes have not changed. This is big news if you have a large, flat collection (which I dislike myself but some really enjoy&#8230;to each their own). For instance, in a setup like 3,000 files in your main folder, plus a few thousand files each in a few subfolders for a total of 10,000 tracks, if you added a single file to the top-level folder and had incremental recursive scanning turned on (the default), you&#8217;d cause a rescan of your entire music collection &#8212; all 10,000 tracks or so. Now, if you add a single file to the top-level folder, you&#8217;ll only cause a rescan of 3,000 tracks&#8230;which is still a lot, but even more of a reason to use a hierarchy.</p>
<p>This should help scanning time even for those with hierarchies, as adding a new album to an artist won&#8217;t cause the artist&#8217;s other album folders to be rescanned, or adding a new artist to a genre won&#8217;t cause all the artists and albums in that genre to rescan.</p>
<p>It&#8217;s really the proper way to do things, but it required some changes to the data sent between Amarok proper and the collection scanner, so had to be done carefully (as far as I am currently aware I didnt&#8217; cause any regressions). Regardless, I&#8217;m glad to have it in there and working, and hopefully you will be too.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/10/speed-never-gets-old-at-least-in-software/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Say goodbye to history</title>
		<link>http://jefferai.org/2009/09/say-goodbye-to-history/</link>
		<comments>http://jefferai.org/2009/09/say-goodbye-to-history/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 00:11:58 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1125</guid>
		<description><![CDATA[And by that, I mean say goodbye to an historical (read: old) bug. I&#8217;d heard these whispers recently about &#8220;whenever I add or remove an album from the collection and do an incremental update, my collection gets messed up.&#8221; Okay &#8212; we&#8217;ve heard these whispers for a long time, but there were so many other [...]]]></description>
			<content:encoded><![CDATA[<p>And by that, I mean say goodbye to an historical (read: old) bug.</p>
<p>I&#8217;d heard these whispers recently about &#8220;whenever I add or remove an album from the collection and do an incremental update, my collection gets messed up.&#8221; Okay &#8212; we&#8217;ve heard these whispers for a long time, but there were so many other things that had to be fixed first that it wasn&#8217;t clear whether this was a symptom of a different problem or a problem of its own&#8230;and it could always be fixed with a full rescan.</p>
<p>However, with the collection being much more solid these days and with this being the only super-visible bug left that I knew of, I decided to tackle this. It turns out that, once the rest of the collection was behaving, this wasn&#8217;t that hard to find&#8230;it just took a lot of debug tracing, because it wasn&#8217;t obvious. Since the cause was the wrong field being used in a DB query to remove some tracks during an incremental scan, with anything other than a very tiny test collection it could quickly start to make no logical sense what was happening.</p>
<p>The reason I say the bug is historical is that the code causing it has been there since May 2008. While admitting that provides some fodder for naysayers and haters to harp on Amarok for such visible and longstanding bugs, I prefer to take the other approach: it means that all the various issues users have found since the total rewrite that was 2.0 *are* being found and *are* being solved. Some of them just take some time; it&#8217;s a *lot* of code. But the proof is <a title="Amarok ChangeLog as of 2.2.0" href="http://gitorious.org/amarok/amarok/blobs/bb7f1f85cb68559a548b147f2a34fb1a7a97d0cd/ChangeLog" target="_blank">in the 2.2 ChangeLog</a>.</p>
<p>I managed to sneak in the fix a day before 2.2 was tagged, so when Amarok 2.2 comes out scanning (both full and incremental) should be really quite solid. In fact, since this has been fixed in git, I&#8217;ve yet to hear of any more problems, just lots of happy users. It&#8217;s just another way that the (very close!) 2.2 is going to *rock*.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/09/say-goodbye-to-history/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>AFT and MusicBrainz track identifiers, redux</title>
		<link>http://jefferai.org/2009/09/aft-and-musicbrainz-track-identifiers-redux/</link>
		<comments>http://jefferai.org/2009/09/aft-and-musicbrainz-track-identifiers-redux/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 13:08:50 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1119</guid>
		<description><![CDATA[A bit ago I blogged about how Amarok File Tracking can now use MusicBrainz identifiers to do its stuff. Then, a little while later, I started getting bug reports of peoples&#8217; music disappearing from their collection, and requested some of the reporters send me some files. One of the users did so, and I found [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jefferai.org/2009/08/07/aft-and-musicbrainz-track-identifiers-1065">A bit ago</a> I blogged about how <a title="Amarok File Tracking" href="http://amarok.kde.org/wiki/AFT">Amarok File Tracking</a> can now use MusicBrainz identifiers to do its stuff.</p>
<p>Then, a little while later, I started getting bug reports of peoples&#8217; music disappearing from their collection, and requested some of the reporters send me some files. One of the users did so, and I found something curious in his tags (if I had a penny for every time I&#8217;ve personally seen users have something odd or strange in their tags, I&#8217;d have&#8230;well, a few dollars at least). Several of his files had full MusicBrainz tags &#8212; with absolutely no data populating them, meaning that the MusicBrainz identifier (and all other MB data) for all of those files was ending up the same (blank) and Amarok was thinking them the same file.</p>
<p>It was a quick fix (use generated non-embedded AFT IDs when the MB tags are empty) but just adds to the evidence that you can never, ever trust users&#8217; tags. Also, that users that use your Git-based version or betas really rock for finding this stuff before release&#8230;so in case I don&#8217;t say this enough: thanks users!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/09/aft-and-musicbrainz-track-identifiers-redux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Camp KDE 2010 Announced!</title>
		<link>http://jefferai.org/2009/08/camp-kde-2010-announced/</link>
		<comments>http://jefferai.org/2009/08/camp-kde-2010-announced/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:18:06 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Camp KDE]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1066</guid>
		<description><![CDATA[I&#8217;m pleased as punch/as a fat cat/etc. to point you to The Dot (specifically here) to see the official announcement and some details. More details will be forthcoming soon (and especially as we get the web site in order). Start clearing your schedule and working on your presentations!]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m pleased as punch/as a fat cat/etc. to point you to <a href="http://dot.kde.org">The Dot</a> (specifically <a href="http://dot.kde.org/content/announcing-camp-kde-2010">here</a>) to see the official announcement and some details. More details will be forthcoming soon (and especially as we get the web site in order). Start clearing your schedule and working on your presentations!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/08/camp-kde-2010-announced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AFT and MusicBrainz track identifiers</title>
		<link>http://jefferai.org/2009/08/aft-and-musicbrainz-track-identifiers/</link>
		<comments>http://jefferai.org/2009/08/aft-and-musicbrainz-track-identifiers/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 12:15:31 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1065</guid>
		<description><![CDATA[A heads-up: Amarok File Tracking can now use MusicBrainz track identifiers for its embedded IDs. This means people that have used Picard to tag their files but not amarok_afttagger can still get some embedded AFT goodness! It also enables an interesting &#34;mode&#34; because it essentially enables song tracking vs. actual file tracking (which you may [...]]]></description>
			<content:encoded><![CDATA[<p>A heads-up: Amarok File Tracking can now use MusicBrainz track identifiers for its embedded IDs. This means people that have used Picard to tag their files but not amarok_afttagger can still get some embedded AFT goodness! It also enables an interesting &quot;mode&quot; because it essentially enables song tracking vs. actual file tracking (which you may or may not want, depending on your particular needs).</p>
<p>Full details <a href="/wiki/Amarok_File_Tracking#Using_MusicBrainz_identifiers">are here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/08/aft-and-musicbrainz-track-identifiers/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Presenting the KDE network on Facebook</title>
		<link>http://jefferai.org/2009/07/presenting-the-kde-network-on-facebook/</link>
		<comments>http://jefferai.org/2009/07/presenting-the-kde-network-on-facebook/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 00:45:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1064</guid>
		<description><![CDATA[Many KDE developers are on Facebook. A while back I wondered if it would be possible to have an official KDE developers&#8217; network on Facebook &#8212; after all, there are networks for schools, jobs, cities, and more (and for many developers, KDE is literally or figuratively a job&#8230;) As it turned out, there was a [...]]]></description>
			<content:encoded><![CDATA[<p>Many KDE developers are on Facebook. A while back I wondered if it would be possible to have an official KDE developers&#8217; network on Facebook &#8212; after all, there are networks for schools, jobs, cities, and more (and for many developers, KDE is literally or figuratively a job&#8230;)</p>
<p>As it turned out, there was a &quot;Kde&quot; network &#8212; but something was odd. To join a work network you have to have an email address affiliated with the network. KDE owns kde.com and kde.org &#8212; so who was this? The only other &quot;KDE&quot; I could find that seemed like it would be legit was the Kentucky Department of Education, and I rather doubted it was them, because they would likely have used all-uppercase KDE as well. So I started an inquiry with Facebook, trying to figure out if either it was someone squatting on our name (and trademark) or whether it was some legit organization &#8212; in which case, would they mind donating the network to us?</p>
<p>After several months of back-and-forth with the people at Facebook, who were very nice (if a bit slow <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ), I&#8217;m happy to say that we&#8217;ve regained the KDE network (properly capitalized) as our own. I still don&#8217;t know the whole story as to who was there before, and never will due to their privacy policies, but I&#8217;ll say this:</p>
<ul>
<li>If you were in the &quot;Kde&quot; network before and Facebook asked if you would mind donating it to us, and you did, thanks so much!</li>
<li>If someone was simply squatting in the &quot;Kde&quot; network before, then thanks, Facebook, for kicking them out!</li>
</ul>
<p>To join the network, go to Settings -&gt; Networks, and enter KDE and your kde.org email address in the appropriate fields.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/07/presenting-the-kde-network-on-facebook/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>DB changes &#8212; call for benchmarkers!</title>
		<link>http://jefferai.org/2009/07/db-changes-call-for-benchmarkers/</link>
		<comments>http://jefferai.org/2009/07/db-changes-call-for-benchmarkers/#comments</comments>
		<pubDate>Sat, 18 Jul 2009 03:06:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1058</guid>
		<description><![CDATA[I&#8217;ve done some work in trunk over the past week that may have a huge impact on many of you Amarokers. Read on, and if you can do some benchmarks for me, fantastic. First, the schema/table changes. We&#8217;ve seen some issues where people have, for whatever reason, ended up with InnoDB tables instead of MyISAM [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve done some work in trunk over the past week that may have a huge impact on many of you Amarokers. Read on, and if you can do some benchmarks for me, fantastic.</p>
<p> First, the schema/table changes.</p>
<ol>
<li>We&#8217;ve seen some issues where people have, for whatever reason, ended up with InnoDB tables instead of MyISAM tables. This is probably the result of their DB being created long ago before we were explicitly telling the mysqle startup to skip InnoDB. This mainly causes a problem because some columns cannot be as wide as we&#8217;d like them to be when using InnoDB. So, the first thing being done is that an ALTER TABLE is being forced on every table to explicitly convert to MyISAM. In addition, ENGINE parameters are now used during table creation to be more explicit in the future.</li>
<li>Some of you might have seen complaints in the debug output about indexes not being able to be created due to a max key length, which by default in MySQL is 1000 (compile-time option). So, some columns have had their widths adjusted so that all indexes are now successfully created.</li>
</ol>
<p>Now, the other changes:</p>
<p>As we added more features, scanning got slow. Like, really slow. You&#8217;d spend more time running SQL queries than actually scanning your files. So I&#8217;ve been aiming to change that. </p>
<p>Over the past week I&#8217;ve committed changes that remove, per track, anywhere from 1 to 6 SQL queries. The exact amount is highly dependent on your file set, but there is a minimum of one less SQL query per track. If you&#8217;ve done a lot of file moves and AFT kicks in, it&#8217;ll be an even more massive speedup. I&#8217;m going to try to do some further tuning, but already results are looking positive.</p>
<p>Nikolaj has reported that his scan time went from 68 seconds to 18 seconds &#8212; more than 3x faster. Mikko didn&#8217;t notice a speedup, but he said that whereas scanning used to peg his CPU at 100%, it no longer does so. What I want to know is: how does this affect *you*?</p>
<p>If you want to help, do the following:</p>
<ol>
<li> Backup your DB. If you&#8217;re using external MySQL do a mysqldump, if you&#8217;re using internal MySQLe backup the mysqle folder in the Amarok data directory.</li>
<li>Update to a revision from a week ago&#8230;say, 995000.</li>
<li>Wipe your DB.</li>
<li>Start Amarok &#8212; it will do a full scan because of the empty DB. Time it as it does the scan.</li>
<li>Repeat steps 3 &amp; 4, so that you can see what the time is like after caching.</li>
<li>Update to current trunk (at least 998470).</li>
<li>Repeat step 3.</li>
<li>Repeat steps 4 and 5.</li>
</ol>
<p>Then leave a reply here with your values. If you watch your CPU during each of the scans, report that here too. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/07/db-changes-call-for-benchmarkers/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>More Info on Gitorious.org</title>
		<link>http://jefferai.org/2009/07/more-info-on-gitorious-org/</link>
		<comments>http://jefferai.org/2009/07/more-info-on-gitorious-org/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 11:30:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1062</guid>
		<description><![CDATA[Today at the Akademy General Meeting, it was mentioned that Gitorious.org is being seriously looked at as a hosting solution for our Git repositories (as opposed to running an instance of Gitorious ourselves). Since I have been a major part of pushing in that direction, I feel that it would be prudent to make sure [...]]]></description>
			<content:encoded><![CDATA[<p>Today at the Akademy General Meeting, it was mentioned that Gitorious.org is being seriously looked at as a hosting solution for our Git repositories (as opposed to running an instance of Gitorious ourselves). Since I have been a major part of pushing in that direction, I feel that it would be prudent to make sure that those interested are aware of the relevant discussion and the current status.&nbsp; So, for those interested, read on.</p>
<p>Please note that this is *not* a post about why KDE is migrating to Git, why this is a good idea/bad idea/neutral idea, etc. This is purely discussing the <em>hosting</em> aspect of Git.</p>
<p>First, I would encourage you to read <a href="http://mail.kde.org/pipermail/kde-scm-interest/2009-July/000505.html" title="Gitorious.org Proposal">this kde-scm-interest mail</a>, which I sent to the list on July 2nd. It goes into a good amount of depth as to why Gitorious.org could be beneficial for us, and the rest of this post will assume that you have read that email and the others in the thread, as it will simply update the information therein.</p>
<p>On Monday a large group of interested people, including KDE sysadmins and the guys from Shortcut AS, went to lunch to discuss the technical issues. The output from that discussion is as follows:</p>
<ul>
<li>The vast majority of those present feel that Gitorious.org would be the best choice, with the following being the main reasons:</li>
<ul>
<li>Shorcut could provide a SLA (Service Level Agreement) guaranteeing a minimum level of service, such as uptime and available bandwidth, providing professional hosting services and easing burden on our system administrators.</li>
<li>As David Faure noted, user account creation is becoming a large burden on our system administrators, which is not something that we would have to administer if using Gitorious.org.</li>
</ul>
<li>It should be noted that the above was not a unanimous opinion.</li>
<li>KDE does have infrastructure and bandwidth; it could keep one read-only Subversion server available for historical reasons, and convert the rest to serve as backups or possibly load-balancers. Or to put it in a more general fashion, KDE can reduce hosting costs (which will likely be covered by sponsors) by working with Shortcut. It is not a question that this could be done, but rather what the right method would be for doing so.</li>
<li>The Gitorious developers have a feature branch where they have already fixed one or both of the current showstopping bugs relating to rights within the shared Git repository. They have said that this should be merged into mainline within a week (not sure if they meant a week from then, or from the end of GCDS).</li>
<li>The hosting could be set up in such a way that it can be accessed via <a href="http://git.kde.org">git.kde.org</a>.</li>
<li>Post-commit-hook functionality will be available; the Shortcut guys are currently working with us to determine how we can migrate or emulate pre-commit-hook functionality.</li>
</ul>
<p>We have two projects that are chomping at the bit to get onto Git ASAP: Amarok and TagLib. Amarok will be converted first and will serve as the initial guinea pigs to iron out any issues. Barring any major issues being found, TagLib will be converted in short order.</p>
<p>I hope this gives everyone a better idea of KDE&#8217;s Git-hosting plans. If you haven&#8217;t checked out Gitorious.org, I encourage you to do so; it&#8217;s made huge leaps and bounds in the past six months and has become quite a great tool.</p>
<p>Please direct any questions or feedback to the kde-scm-interest mailing list at: kde-scm-interest at kay dee eee dot ooo arr gee, not to the comments section on this blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/07/more-info-on-gitorious-org/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>AFT fixed on the Playlist</title>
		<link>http://jefferai.org/2009/07/aft-fixed-on-the-playlist/</link>
		<comments>http://jefferai.org/2009/07/aft-fixed-on-the-playlist/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 11:29:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1063</guid>
		<description><![CDATA[Yes, another one of my semi-habitual posts about AFT.&#160; Just a short one though. In revision 992942, I finally fixed a bug that has kept AFT working for the playlist in certain situations (although it had previously been working for both saved user playlists and statistics). This means that if you have a track in [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, another one of my semi-habitual posts about <a title="Amarok File Tracking" href="/wiki/Amarok_File_Tracking">AFT</a>.&nbsp; Just a short one though.</p>
<p>In <a href="http://websvn.kde.org/?view=rev&amp;revision=992942">revision 992942</a>, I finally fixed a bug that has kept AFT working for the playlist in certain situations (although it had previously been working for both saved user playlists and statistics). This means that if you have a track in the playlist, move it to another location, and it is then scanned in that new location (remember, kids, it uses <em>folder mtime</em> to determine whether to scan a folder, so when in doubt do a &quot;touch .&quot;), the track in the playlist should remain valid and play the song in the new location. As the playlist use case was one of the initial reasons for the development of AFT back in Amarok 1.4, you can imagine I&#8217;m happy that it&#8217;s finally (seeming to be) working again in all scenarios, instead of failing in certain situations.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/07/aft-fixed-on-the-playlist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL Server Support &#8212; Promised and Delivered</title>
		<link>http://jefferai.org/2009/06/mysql-server-support-promised-and-delivered/</link>
		<comments>http://jefferai.org/2009/06/mysql-server-support-promised-and-delivered/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 13:54:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1060</guid>
		<description><![CDATA[We told you it was coming. Sure, that was a while back, so you probably thought we forgot about it.&#160; Or maybe you thought we were simply playing politics, tossing empty promises to our users. Well&#8230;you were wrong. It may be a bit later than planned &#8212; we wanted to have it in time for [...]]]></description>
			<content:encoded><![CDATA[<p>
We <a href="/blog/archives/812-MySQL-in-Amarok-2-The-Reality.html">told you it was coming</a>. Sure, that was a while back, so you probably thought we forgot about it.&nbsp; Or maybe you thought we were simply playing politics, tossing empty promises to our users.</p>
<p>Well&#8230;you were wrong. <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>It may be a bit later than planned &#8212; we wanted to have it in time for 2.1, but it didn&#8217;t happen &#8212; but as of <a href="http://websvn.kde.org/?view=rev&amp;revision=984572">revision 984572</a>, there is now support for storing an Amarok database on a MySQL server instead of the embedded MySQL database.&nbsp; There&#8217;s no configuration dialog in the GUI yet, but it&#8217;s pretty simple to set up, as explained below.&nbsp; All you have to do is add a few things into your amarokrc file and make a valid user on the MySQL server instance of your choice &#8212; you don&#8217;t even need to create the database yourself.&nbsp; (In fact, you shouldn&#8217;t &#8212; you should let Amarok create the database so we can <a href="/blog/archives/1068-UTF-8-and-Your-Music.html">ensure that the character set and collation are set right</a>.)</p>
<p>Here&#8217;s how to do it.</p>
<ol>
<li>Update to at least r984572 (of course, updating to the latest revision is probably your best bet).</li>
<li>Wipe your build dir clean and rebuild.&nbsp; Not necessarily necessary, but as 47 files were changed in that commit, it&#8217;s not a bad idea.</li>
<li>After install, run kbuildsycoca4 &#8211;noincremental, just in case.&nbsp; <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>On your MySQL server, run a command like: &quot;GRANT ALL ON amarokdb.* TO &#8216;amarokuser&#8217;@'localhost&#8217; IDENTIFIED BY &#8216;mypassword&#8217;; FLUSH PRIVILEGES;&quot;&nbsp; Be sure to substitute for &quot;amarokdb&quot;, &quot;amarokuser&quot;, &quot;localhost&quot;, and &quot;mypassword&quot; as appropriate.</li>
<li>Open up your amarokrc file, usually in ~/.kde4/share/config/amarokrc.&nbsp; Add a [MySQL] section:<br />[MySQL]<br />UseServer=true<br />Database=amarokdb<br />Host=localhost<br />Password=mypassword<br />User=amarokuser</li>
<li>Close the file and start Amarok.&nbsp; It should create the database and start a scan of your files.&nbsp; If you want to switch back to the embedded collection, simply set &quot;UseServer&quot; to false.</li>
</ol>
<p>Pretty easy!&nbsp; Be sure to let me know if you have problems &#8212; file a bug and assign it to &quot;mitchell&quot; at a domain of &quot;kde&quot; plus a dot plus &quot;org&quot;.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/06/mysql-server-support-promised-and-delivered/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>UTF-8 and Your Music</title>
		<link>http://jefferai.org/2009/06/utf-8-and-your-music/</link>
		<comments>http://jefferai.org/2009/06/utf-8-and-your-music/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 13:32:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1061</guid>
		<description><![CDATA[A heads-up on something new in Amarok SVN (and coming in 2.2 for those of you not living on the bleeding edge): We&#8217;ve had various bug reports over the years relating to character sets and collation, causing issues with matching searches for music or mis-sorted items.&#160; Well, hopefully no longer. When you update to 2.2 [...]]]></description>
			<content:encoded><![CDATA[<p>A heads-up on something new in Amarok SVN (and coming in 2.2 for those of you not living on the bleeding edge):</p>
<p> We&#8217;ve had various bug reports over the years relating to character sets and collation, causing issues with matching searches for music or mis-sorted items.&nbsp; Well, hopefully no longer.</p>
<p>When you update to 2.2 (recent SVN users, see the note at the end of this post), your Amarok database and tables will be converted to use the &#8216;utf8&#8242; character set and &#8216;utf8_unicode_ci&#8217; collation as default for any table or column created from this point on.&nbsp; Every single text/varchar field will also be converted through a two-step process to use &#8216;utf8&#8242; as the character set (the data inside was always UTF-8, but there was a possible mismatch between what the data was and what the database thought it was, if your mysql wasn&#8217;t built to use &#8216;utf8&#8242; by default).&nbsp; In addition, the character set used when talking to the embedded server (the protocol in the socket) will be &#8216;utf8&#8242;.</p>
<p>Fixing this mismatch between what the server might have been using for character set/collation and the data we&#8217;re putting in there should hopefully ensure that sorting and tags work very well for our users with some files wth non-Latin1 tags (probably just about everybody these days). </p>
<p>&nbsp;</p>
<p>* Recent SVN users: if your build date is earlier than this post I&#8217;d recommend wiping your mysqle directory (not just a full rescan), as the initial commit of the updating code contained a bug that could possibly cause trouble down the line with user playlists&#8230;but you bleeding edge users should be expecting database wipes every now and then&nbsp; <img src='http://jefferai.org/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' />  </p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/06/utf-8-and-your-music/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>AFT Embedded Tagging: now on FLAC, Ogg/Vorbis, Ogg/FLAC, and Ogg/Speex!</title>
		<link>http://jefferai.org/2009/06/aft-embedded-tagging-now-on-flac-oggvorbis-oggflac-and-oggspeex/</link>
		<comments>http://jefferai.org/2009/06/aft-embedded-tagging-now-on-flac-oggvorbis-oggflac-and-oggspeex/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 02:57:58 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1059</guid>
		<description><![CDATA[I&#8217;ve blogged about Amarok File Tracking before and there&#8217;s a lot of information about it on the wiki.&#160; For those that haven&#8217;t heard about the goodness of embedded file tracking, check out those links.&#160; There are a couple pieces of good news, and one piece of bad news. The good news: in current SVN (and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve <a href="archives/771-Amarok-File-Tracking.html">blogged about Amarok File Tracking before</a> and there&#8217;s a lot of information about it <a href="/wiki/AFT">on the wiki</a>.&nbsp; For those that haven&#8217;t heard about the goodness of embedded file tracking, check out those links.&nbsp; There are a couple pieces of good news, and one piece of bad news.</p>
<p>The good news: in current SVN (and thus 2.2) the amarok_afttagger executable will also now handle FLAC and various Ogg-contained formats. Another piece of good news &#8211; the amarok_afttagger executable is now contained in the amarok-utilities package, and thus can be run on headless machines without X!&nbsp; And lastly &#8212; AFT now works with user playlists, so you can move your files around (keep in mind the caveats if you&#8217;re not using embedded AFT tags) and your playlists will always stay current, in addition to statistics and The Playlist.</p>
<p>The bad news? Something is currently a bit broken somewhere deep inside with Observers which means that The Playlist will only update with the correct new URL once (the metadata observers seem to die after that).&nbsp; This doesn&#8217;t seem to be AFT specific but rather seems like a bug that AFT is exposing.&nbsp; Closing Amarok and reopening it will cause the proper new URLs to be in the playlist.&nbsp; I&#8217;m working on trying to fix that.</p>
<p>(Important note: it writes into the FLAC Xiph comment.&nbsp; This is the only metadata type actually required by the FLAC spec, and thus is the proper place to put it, but a lot of FLAC files incorrectly only have ID3v2 tags, so depending on the tagger you&#8217;re using you may only see one or the other.)</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/06/aft-embedded-tagging-now-on-flac-oggvorbis-oggflac-and-oggspeex/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Amarok Power User Feature: Batch-mode collection scanning (Redux)</title>
		<link>http://jefferai.org/2009/05/amarok-power-user-feature-batch-mode-collection-scanning-redux/</link>
		<comments>http://jefferai.org/2009/05/amarok-power-user-feature-batch-mode-collection-scanning-redux/#comments</comments>
		<pubDate>Tue, 19 May 2009 23:48:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1057</guid>
		<description><![CDATA[A long time ago I promised to post an update when I got incremental batch scanning working.  Well, as it turns out, that happened a long time ago too, but I never got around to writing the Wiki page for it.  I&#8217;ve corrected that flaw. Anyone interested in scanning their collection locally instead of across [...]]]></description>
			<content:encoded><![CDATA[<p>A long time ago <a href="http://amarok.kde.org/blog/archives/894-Amarok-Power-User-Feature-Batch-mode-collection-scanning.html">I promised to post an update</a> when I got incremental batch scanning working.  Well, as it turns out, that happened a long time ago too, but I never got around to writing the Wiki page for it.  I&#8217;ve corrected that flaw.</p>
<p>Anyone interested in scanning their collection locally instead of across a network connection, or keeping their collection up-to-date when Amarok is closed, should definitely give it a read!</p>
<p><a title="Batch Mode scanning" href="http://amarok.kde.org/wiki/Batch_Mode">http://amarok.kde.org/wiki/Batch_Mode</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/05/amarok-power-user-feature-batch-mode-collection-scanning-redux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Free Developer Sprint for North American GSoC students!</title>
		<link>http://jefferai.org/2009/04/free-developer-sprint-for-north-american-gsoc-students/</link>
		<comments>http://jefferai.org/2009/04/free-developer-sprint-for-north-american-gsoc-students/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 17:34:46 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1056</guid>
		<description><![CDATA[For anyone that hasn&#8217;t seen the Dot story, check it out.]]></description>
			<content:encoded><![CDATA[<p>For anyone that hasn&#8217;t seen the Dot story, <a href="http://dot.kde.org/2009/04/19/free-developer-sprint-north-american-kde-gsoc-2009-students">check it out</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/04/free-developer-sprint-for-north-american-gsoc-students/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GSoC 2009: Last chance for student applications</title>
		<link>http://jefferai.org/2009/04/gsoc-2009-last-chance-for-student-applications/</link>
		<comments>http://jefferai.org/2009/04/gsoc-2009-last-chance-for-student-applications/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 02:58:38 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1055</guid>
		<description><![CDATA[A friendly reminder: you have just under 24 hours to get your applications updated (if you are a student&#8230;you&#8217;ve already submitted it, right?) or to get students to update their applications (if you are a mentor).  Applications that arrive before the deadline will not be penalized (and applications that arrive afterwards won&#8217;t be accepted at [...]]]></description>
			<content:encoded><![CDATA[<p>A friendly reminder: you have just under 24 hours to get your applications updated (if you are a student&#8230;you&#8217;ve already submitted it, right?) or to get students to update their applications (if you are a mentor).  Applications that arrive before the deadline will not be penalized (and applications that arrive afterwards won&#8217;t be accepted at all) so it&#8217;s not too late to get your SoC on&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/04/gsoc-2009-last-chance-for-student-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Important: Submit your GSoC application *NOW*</title>
		<link>http://jefferai.org/2009/03/important-submit-your-gsoc-application-now/</link>
		<comments>http://jefferai.org/2009/03/important-submit-your-gsoc-application-now/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 00:40:35 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1053</guid>
		<description><![CDATA[Google has just asked all students to ensure that their application is submitted *now*, even if they are not done.  You will still have until 19:00 UTC April 3rd to modify them, but Google is having trouble gauging participation because so many students (in all organizations) are discussing applications with mentors and refining them outside [...]]]></description>
			<content:encoded><![CDATA[<p>Google has just asked all students to ensure that their application is submitted *now*, even if they are not done.  You will still have until 19:00 UTC April 3rd to modify them, but Google is having trouble gauging participation because so many students (in all organizations) are discussing applications with mentors and refining them outside of the official site.  So if you are a student, or mentoring students, please ensure that your applications are submitted ASAP.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/important-submit-your-gsoc-application-now/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GSoC 2009: Student Application Deadline Reminder</title>
		<link>http://jefferai.org/2009/03/gsoc-2009-student-application-deadline-reminder/</link>
		<comments>http://jefferai.org/2009/03/gsoc-2009-student-application-deadline-reminder/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 22:26:11 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1052</guid>
		<description><![CDATA[Remember: the student application deadline is April 3rd at 19:00 UTC.  If you are a student, you should be checking for comments and revising your application while you still have the chance.  If you are a mentor, you should be checking the applications and commenting on them as appropriate.]]></description>
			<content:encoded><![CDATA[<p>Remember: the student application deadline is April 3rd at 19:00 UTC.  If you are a student, you should be checking for comments and revising your application while you still have the chance.  If you are a mentor, you should be checking the applications and commenting on them as appropriate.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/gsoc-2009-student-application-deadline-reminder/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reminder: Student Application period for GSoC2009 open&#8230;</title>
		<link>http://jefferai.org/2009/03/reminder-student-application-period-for-gsoc2009-open/</link>
		<comments>http://jefferai.org/2009/03/reminder-student-application-period-for-gsoc2009-open/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 23:15:59 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1054</guid>
		<description><![CDATA[&#8230;NOW!  Students have until April 3rd to get their applications finalized and turned in.  Good luck!]]></description>
			<content:encoded><![CDATA[<p>&#8230;NOW!  Students have until April 3rd to get their applications finalized and turned in.  Good luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/reminder-student-application-period-for-gsoc2009-open/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>GSoC 2009: We&#8217;re in!</title>
		<link>http://jefferai.org/2009/03/gsoc-2009-were-in/</link>
		<comments>http://jefferai.org/2009/03/gsoc-2009-were-in/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 23:47:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1051</guid>
		<description><![CDATA[We&#8217;ve been accepted to participate in GSoC 2009.  Hooray! This means we have a lot of great work ahead of us.  The first order of business is that everyone that wants to be a mentor needs to sign up at http://socghop.appspot.com.  You&#8217;ll need a Google account (which does not have to be a Gmail account).  [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve been <a href="http://socghop.appspot.com/program/accepted_orgs/google/gsoc2009">accepted</a> to participate in GSoC 2009.  Hooray!</p>
<p>This means we have a lot of great work ahead of us.  The first order of business is that everyone that wants to be a mentor needs to sign up at <a href="http://socghop.appspot.com">http://socghop.appspot.com</a>.  You&#8217;ll need a Google account (which does not have to be a Gmail account).  Click the link that says &quot;Apply to become a Mentor&quot; and proceed as instructed.  You should also ensure that you&#8217;re on the kde-soc-mentor mailing list.</p>
<p>Students: now that we&#8217;re accepted, get to it with contacting mentors!  The application period opens March 23rd and closes April 3rd, so it&#8217;s not a huge amount of time to get all the details of your proposals worked out.  Be sure to check the ideas page at <a href="http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2009/Ideas">http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2009/Ideas</a>, or contact the appropriate mentor if you have a different idea for a project that you&#8217;d like to work on.</p>
<p>I&#8217;ll be sure to keep everyone informed of events as they occur and deadlines as they arrive.  Here&#8217;s to a successful summer!</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/gsoc-2009-were-in/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GSoC 2009: Application Submitted</title>
		<link>http://jefferai.org/2009/03/gsoc-2009-application-submitted/</link>
		<comments>http://jefferai.org/2009/03/gsoc-2009-application-submitted/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 21:49:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1050</guid>
		<description><![CDATA[Today the application for KDE to participate in GSoC 2009 was submitted.  They check out our ideas page when they&#8217;re evaluating applications, so be sure to get your ideas up there!  We&#8217;ll hear back by March 18th.  Some other upcoming dates: March 18-23: Students discuss applications with mentoring organizations (you can and should do this [...]]]></description>
			<content:encoded><![CDATA[<p>Today the application for KDE to participate in GSoC 2009 was submitted.  They check out our ideas page when they&#8217;re evaluating applications, so be sure to <a href="http://techbase.kde.org/index.php?title=Projects/Summer_of_Code/2009/Ideas">get your ideas up there</a>!  We&#8217;ll hear back by March 18th.  Some other upcoming dates:
<ul>
<li>March 18-23: Students discuss applications with mentoring organizations (you can and should do this earlier, of course)</li>
<li>March 23: Student application period opens</li>
<li>April 3: Student application period closes</li>
</ul>
<p>Of course, this hinges on us being accepted&#8230;but past years have shown that we have a good shot.
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/gsoc-2009-application-submitted/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Licensing to Kill</title>
		<link>http://jefferai.org/2009/03/licensing-to-kill/</link>
		<comments>http://jefferai.org/2009/03/licensing-to-kill/#comments</comments>
		<pubDate>Wed, 04 Mar 2009 06:43:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1049</guid>
		<description><![CDATA[Could FLEXlm be one of the world&#8217;s worst-designed programs? They&#8217;ve just rechristened it FLEXnet Publisher, and I can only think it&#8217;s to try to get away from existing FLEXlm stigmas.  It&#8217;s so bad that according to a VMware engineer I spoke to on the phone a few months ago, in the next release of ESX [...]]]></description>
			<content:encoded><![CDATA[<p>Could FLEXlm be one of the world&#8217;s worst-designed programs?</p>
<p>They&#8217;ve just rechristened it FLEXnet Publisher, and I can only think it&#8217;s to try to get away from existing FLEXlm stigmas.  It&#8217;s so bad that according to a VMware engineer I spoke to on the phone a few months ago, in the next release of ESX (whatever the new name is going to be) they&#8217;re ditching it to go back to their own serial-number based scheme, entirely because of a large amount of hugely negative customer feedback.  This is only one major release after they switched <i>to</i> it.</p>
<p>Let me describe the structure of it (if I were to go into the user interface issues, this would become far too long a post, so maybe another time).  There&#8217;s a management daemon, called <i>lmgrd</i>, and vendor daemons.  These vendor daemons are (often along with the management daemon) provided to you, often without an installer and simply as a bunch of files.  There&#8217;s also quite often a node-locking generator (based on things like hostname, MAC address, and all manner of things easily faked in a VM) provided to you by the vendors, which as far as I can tell is different for every vendor.  This is possibly so that they can build in their own criteria, but more likely because the FLEXlm people are lazy and can&#8217;t be bothered to provide a comprehensive set of criteria on their own.</p>
<p>Now, why is there a vendor daemon and a management daemon?  Good question, and I don&#8217;t know the authoritative answer, but from using it I can make an educated guess or two: either to allow vendors to validate some part of the licenses in their own manner, or to simply confuse and annoy the hell out of you.  See, the different vendor daemons are built against some version of the FLEXlm software, and they may, or may not, have been built against the <i>same</i> version.  This may, or may not, cause problems, including crashes.  It may explain why every time the license server reboots (thanks, generally, to automatic Windows updates), <i>lmgrd</i> fails to start up successfully.</p>
<p>Now, you can run multiple instances of <i>lmgrd</i> &#8212; if you can figure out how to get it installed so that it starts up on bootup, since there isn&#8217;t much in the way of help in the official help PDF, and only one of the three vendors whose licenses I deal with actually provided an installer (thanks, VMware, I&#8217;ll be using your installer long after you&#8217;ve switched off of FLEXlm).  This lets you have each license under a different copy of <i>lmgrd</i>, perhaps so that you can attempt matching versions, but mainly so that if one of the <i>lmgrd</i> instances crashes, it will only take down that license.  (Actually, it&#8217;s because in this configuration you need to run them on multiple machines, so if one machine goes down, most of your licenses stay up.  But I know what they <i>really</i> meant.)</p>
<p>Alternately, you can combine licenses into a single file, a process that the manual warns is time-consuming and error-prone.</p>
<p>Finally, you can simply have all your licenses be handled by a single <i>lmgrd</i> instance.  Now, this isn&#8217;t really a bad idea, except for port numbers.</p>
<p>See, each vendor daemon needs to run on its own TCP port number.  You can specify the port number in the license file, except when you can&#8217;t because some vendor hardcoded it into their software.  If you don&#8217;t specify a port number in the license file, the vendor daemon will be given a port number starting at 27000 on up, giving you an address like <span class="mh-email">270<a href='http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=ky0LHJpOjS9voY4vQ77gOfCAleOPlYCT1Tq7eLYOq2w=' onclick="window.open('http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=ky0LHJpOjS9voY4vQ77gOfCAleOPlYCT1Tq7eLYOq2w=', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">...</a>@mylicenses.thissucks.com</span>.  Now, because everyone likes autoconfiguration, if in your program you leave out the port number (giving you something like @mylicenses.thissucks.com), then it will automatically search ports 27000 through 27009 for a matching vendor daemon.  Unfortunately, I haven&#8217;t seen a single vendor product that doesn&#8217;t puke on such an address, claiming it is invalid because of faulty validation, even when the FLEXlm manual in front of me says it&#8217;s perfectly legal.</p>
<p>If you don&#8217;t then modify your license files to specify ports (which you have to remember to do every time you get a new license file), then you better be aware of when the license server reboots, because the ports are given out in the order that the services come up.  So if you&#8217;re in my situation, where the first of the vendor daemons always crashes the first time it tries to load on bootup, then the other two will have their normal ports decreased by 1.</p>
<p>I haven&#8217;t even gotten to things like functions to reread license files that don&#8217;t actually reread them, a UI that doesn&#8217;t tell you if a server is running or stopped until you hit the buttons to try to run it or stop it, a status window that displays a large amount of license data in a tiny, non-resizable window, and more.  The product feels like it was developed in 1988 (it was) and is a study in market leader stagnation.  I would be very surprised if they have a single developer left and haven&#8217;t fired everyone to just sit there and watch the money roll in.</p>
<p>If license servers are necessary for some product you&#8217;re creating, there are other license servers out there that simply run on a well-known port and don&#8217;t require any of this idiocy.  Unfortunately, in my experience I&#8217;ve seen more companies switch <i>to</i> FLEXlm than <i>away</i> from it. I hope this isn&#8217;t an industry-wide trend.</p>
<p>Where&#8217;s the KDE angle?  There isn&#8217;t one specifically, other than this: if someone in the KDE community thinks this is a good design, or can see themselves designing such a scheme, please just leave.  Now.  (Don&#8217;t worry, I&#8217;m sure this doesn&#8217;t apply to any of you. <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/03/licensing-to-kill/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Amarok Power User Feature: Batch-mode collection scanning</title>
		<link>http://jefferai.org/2009/02/amarok-power-user-feature-batch-mode-collection-scanning/</link>
		<comments>http://jefferai.org/2009/02/amarok-power-user-feature-batch-mode-collection-scanning/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 23:58:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1048</guid>
		<description><![CDATA[A long-requested feature has been a way to decouple Amarok&#8217;s collection scanning from its GUI.  There are various use-cases for this.  For one, it can actually help us with debugging, by allowing us to control the inputs into the scan parser.  For another, many people have all of their music stored on a single machine, [...]]]></description>
			<content:encoded><![CDATA[<p>A long-requested feature has been a way to decouple Amarok&#8217;s collection scanning from its GUI.  There are various use-cases for this.  For one, it can actually help us with debugging, by allowing us to control the inputs into the scan parser.  For another, many people have all of their music stored on a single machine, and would like to do the scanning locally where it&#8217;s fast instead of on their e.g. laptop running Amarok, where it&#8217;s over wireless and slow.</p>
<p>Yesterday and today (as of r933010) I put half of the solution into trunk.  I say half, because full collection rescans are now supported in batch modes, but I am still working on the methodology for incremental scans (I have a few ideas, but have to sort out which is the most reasonable/doable/makes the most sense). Below, I&#8217;ll explain how to do it.  Keep in mind that this is designed to be (lightly) scripted, not done by hand&#8230;so it can be done by hand (which I did during testing) but it has some safeguards in place so that if you script it, and forget about it, Amarok still works normally.  However, there are actually some interesting things you can do now if you script the scanner&#8230;</p>
<p>One important thing to note: the scanner requires various bits of Amarok code, mainly centering around the extra taglib plugins we support.  So you&#8217;re unlikely to have it work on a machine that doesn&#8217;t have A2 installed, and certainly won&#8217;t be able to compile it without the rest of the Amarok source, although you may be able to get it to work in a binary-only fashion with just kdelibs and taglib&#8230;YMMV.</p>
<p>So, here&#8217;s the flow:</p>
<ol>
<li>Run amarokcollectionscanner with the -b or &#8211;batch option.  Although this doesn&#8217;t directly modify the output, it sets some internal flags (some for safety, some to enable other options).  The output goes to stdout; save this output as amarokcollectionscanner_batchfullscan.xml (yes, it must be that specific filename).  You&#8217;ll probably want to use the -r flag too&#8230;check &#8211;help for more options.</li>
<li>Cool feature: if your scan is of files that have a different mount point on the local machine than the machine that will be using the output, add the &#8211;rpath option and give it the mountpoint of the directory on the consuming machine.  For instance, if on the local machine your music is at /opt/music, and this directory (music) is mounted as /mnt/music on the remote machine, run amarokcollectionscanner from /opt and use &#8211;batch &#8211;rpath /mnt/music.</li>
<li>Cool feature: You can scan multiple directories and simply append the output to the end of the file from step #1.  Yes, directly append, including the xml version/encoding header.  Amarok&#8217;s scan manager will detect and handle this.  You can even scan directories that are not defined as collection directories in Amarok (these entries will work fine, but the next time you do a full rescan from within Amarok without using the saved output, they will be gone).</li>
<li>Place the amarokcollectionscanner_batchfullscan.xml file in your Amarok data dir.  Usually, this is ~/.kde4/share/apps/amarok.</li>
<li>Trigger a full rescan from inside Amarok (in Settings-&gt;Collection).  It should be super-fast.  <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   Note that this step deletes the amarokcollectionscanner_batchfullscan.xml file.  This is on purpose, so if you want to keep re-using it, you&#8217;ll have to keep copying it over.</li>
</ol>
<p>As you can see, it&#8217;s designed for scripting, but it&#8217;s not terribly complicated even to do by hand.  I&#8217;ll post more as I get incremental scanning working, and will at some point put a Wiki page up that has all of these instructions in a less transient form.
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/02/amarok-power-user-feature-batch-mode-collection-scanning/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Camp KDE videos: Come and get &#8216;em</title>
		<link>http://jefferai.org/2009/02/camp-kde-videos-come-and-get-em/</link>
		<comments>http://jefferai.org/2009/02/camp-kde-videos-come-and-get-em/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 18:41:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Camp KDE]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1047</guid>
		<description><![CDATA[After a month&#8217;s delay, they&#8217;re done. In the interim (after the delays mentioned in my last post on this topic), my poor, underpowered desktop machine has endured transcode after transcode (from the original source material) and my Internet connection upload after upload as I tried to figure out just why Blip.tv wouldn&#8217;t work with X [...]]]></description>
			<content:encoded><![CDATA[<p>After a month&#8217;s delay, they&#8217;re done.</p>
<p>In the interim (after the delays mentioned in my <a href="http://amarok.kde.org/blog/archives/883-Where-are-those-Camp-KDE-videos-anyways.html">last post on this topic</a>), my poor, underpowered desktop machine has endured transcode after transcode (from the original source material) and my Internet connection upload after upload as I tried to figure out just why Blip.tv wouldn&#8217;t work with X or Y.  (In fact, I can quantify these: X is Vorbis/Theora, which produced awful audio and very desynchronized audio/video upon their conversion to .flv; Y is a lot of things related to the original anamorphic encoding of the videos, which Blip.tv can&#8217;t handle, and finding the right combination of settings and flags and adjustements to make the aspect ratios come out so that everyone didn&#8217;t look like Gumby®.)</p>
<p>This was followed by a few days of uploading; Blip seems to max out uploading speeds somewhere between 100kbit and 200kbit, so uploading almost 6GB of data, one chunk at a time, took a bit.</p>
<p>The end result is thirteen videos, each Xvid-encoded (at least it&#8217;s OSS, although patent-encumbered&#8230;see Vorbis/Theora problems above) with a Matroska container.  You can get to them through <a href="http://jefferai.blip.tv">my show</a> or to individual videos directly (these might not be in strict as-presented order):</p>
<ul>
<li><a href="http://blip.tv/file/1802401">Welcome!</a></li>
<li><a href="http://blip.tv/file/1804591"></a><a href="http://blip.tv/file/1804591">Diversity in KDE</a></li>
<li><a href="http://blip.tv/file/1804917"></a><a href="http://blip.tv/file/1804917">Akonadi</a></li>
<li><a href="http://blip.tv/file/1811629">KDE and Business Software</a></li>
<li><a href="http://blip.tv/file/1811116">KDE4 and MS Windows</a></li>
<li><a href="http://blip.tv/file/1808204">libplasma in Applications</a></li>
<li><a href="http://blip.tv/file/1809664">Accelerating Graphics</a><a href="http://blip.tv/file/1808204"></a></li>
<li><a href="http://blip.tv/file/1812565">CMake / CTest / CPack</a></li>
<li><a href="http://blip.tv/file/1806678">Taming the Leopard</a></li>
<li><a href="http://blip.tv/file/1806158">Bringing the Free Desktop to the Mobile World</a></li>
<li><a href="http://blip.tv/file/1807978">KDE &amp; Distros</a></li>
<li><a href="http://blip.tv/file/1807148">KDE-Games, KDE-Edu, and Avogadro</a></li>
<li><a href="http://blip.tv/file/1810314">A Case for Open-Source Coders in the Enterprise</a></li>
</ul>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/02/camp-kde-videos-come-and-get-em/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>#kde-soc</title>
		<link>http://jefferai.org/2009/02/kde-soc/</link>
		<comments>http://jefferai.org/2009/02/kde-soc/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 01:21:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[GSoC]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1046</guid>
		<description><![CDATA[Just a note to make people aware that #kde-soc exists. There&#8217;s basically no activity in there right now, which is rather expected, but as SoC-related activities pick up steam so will the channel.]]></description>
			<content:encoded><![CDATA[<p>Just a note to make people aware that #kde-soc exists.  There&#8217;s basically no activity in there right now, which is rather expected, but as SoC-related activities pick up steam so will the channel.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/02/kde-soc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Qt 4.5 RC1 packages for Intrepid, built with -graphicssystem raster</title>
		<link>http://jefferai.org/2009/02/qt-4-5-rc1-packages-for-intrepid-built-with-graphicssystem-raster/</link>
		<comments>http://jefferai.org/2009/02/qt-4-5-rc1-packages-for-intrepid-built-with-graphicssystem-raster/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 16:32:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1045</guid>
		<description><![CDATA[Update: These packages are for testing only!  Things that rely on the default native backend WILL break.  If you want a build of Qt 4.5 RC1 for Intrepid without -graphicssystem raster, try pollycoke&#8217;s PPA. The title says it all.  They&#8217;re available from my PPA.  Enjoy!]]></description>
			<content:encoded><![CDATA[<p>Update: These packages are for testing only!  Things that rely on the default native backend WILL break.  If you want a build of Qt 4.5 RC1 for Intrepid without -graphicssystem raster, try <a href="https://launchpad.net/~pollycoke/+archive/ppa">pollycoke&#8217;s PPA.</a></p>
</p>
<p>The title says it all.  They&#8217;re available <a href="https://launchpad.net/~jefferai/+archive/ppa" title="jefferai's PPA">from my PPA</a>.  Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/02/qt-4-5-rc1-packages-for-intrepid-built-with-graphicssystem-raster/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Where *are* those Camp KDE videos anyways?</title>
		<link>http://jefferai.org/2009/02/where-are-those-camp-kde-videos-anyways/</link>
		<comments>http://jefferai.org/2009/02/where-are-those-camp-kde-videos-anyways/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 22:15:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Camp KDE]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1044</guid>
		<description><![CDATA[Hello there.  I have good news and bad news regarding the Camp KDE videos. The Bad News I&#8217;ve run into a series of setbacks regarding getting them prepared for posting.  The first was that the Monday I got back from Jamaica, I had the following schedule at work: 9:15 AM: Check email 9:16 AM: &#34;My [...]]]></description>
			<content:encoded><![CDATA[<p>Hello there.  I have good news and bad news regarding the Camp KDE videos.</p>
<p><b>The Bad News</b></p>
<p>I&#8217;ve run into a series of setbacks regarding getting them prepared for posting.  The first was that the Monday I got back from Jamaica, I had the following schedule at work:</p>
<ul>
<li>9:15 AM: Check email</li>
<li>9:16 AM: &quot;My details have been confirmed for my upcoming trip?  What trip?&quot;</li>
<li>2:00 PM: At the airport awaiting departure, thinking that I *knew* I should have checked work email sometime over the weekend&#8230;</li>
</ul>
<p>Regardless, I <b>did</b> manage to have some of the files with me, and did actually get a few of the videos done during that week that I was away.  I then got held back a bit waiting for the videos on Wade&#8217;s camera to arrive &#8212; they were 16GB or so in total, and so he had to fetch them off the tapes, encode them, and get them uploaded to me.  After that, I started to put Wade&#8217;s videos together with slides, only to find out that the videos would not properly work inside kdenlive.  Or so I thought.  After a period of long transcodings that I performed during my free time over the last few days, I find out this morning that the issue with the videos was a massive dose of PEBKAC.
<p />
<p>There&#8217;s only one other piece of bad news, which is that due to a bug in (ffmpeg? libmlt?) kdenlive&#8217;s Ogg/Theora export is borked.  So, I&#8217;ve ended up coding in XviD, which while using a patented algorithm is at least otherwise free software.  I&#8217;ve thought about transcoding everything to Ogg/Theora afterwards, and I may end up doing so before posting them up, if the quality is okay.  And before you ask &#8212; it didn&#8217;t seem right to post them up without having Wade&#8217;s keynote up there to kick things off, which is why I&#8217;ve not posted some of the ones that are already done up before now.</p>
<p><b>The Good News</b></p>
<p>The good news is that 11/13 of the videos are done, and I forsee no obstacles in getting the rest of them to behave.  So I am hopeful that I can start getting them up to Blip.tv within a couple days.  Thanks for bearing with me.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/02/where-are-those-camp-kde-videos-anyways/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Oh god: I had to use VBA</title>
		<link>http://jefferai.org/2009/01/oh-god-i-had-to-use-vba/</link>
		<comments>http://jefferai.org/2009/01/oh-god-i-had-to-use-vba/#comments</comments>
		<pubDate>Wed, 21 Jan 2009 10:40:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Camp KDE]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1043</guid>
		<description><![CDATA[I&#8217;m working on putting together the Camp KDE 2009 videos using the excellent Kdenlive, a non-linear video editor whose name is, well, an acronym for KDE Non LInear Video Editor. More on Kdenlive in a later blog post from me and/or Wade, but trust me &#8212; with the latest versions it&#8217;s much more stable, and [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on putting together the Camp KDE 2009 videos using the excellent <a target="_blank" href="http://www.kdenlive.org">Kdenlive</a>, a non-linear video editor whose name is, well, an acronym for KDE Non LInear Video Editor.  More on Kdenlive in a later blog post from me and/or Wade, but trust me &#8212; with the latest versions it&#8217;s much more stable, and it&#8217;s getting very good.</p>
<p>Anyways, one of the reasons I&#8217;m using it is to splice the slides into the videos, because they&#8217;re just not readable inside the videos for the most part.  So I needed a way to turn each slide into some sort of an image.</p>
<p>It turns out that OO.o doesn&#8217;t have this capability natively, but some users on the OO.o Forum came up with a script at the bottom of <a href="http://www.oooforum.org/forum/viewtopic.phtml?t=7796" target="_blank">this page</a> to export each slide into PDF.  I modified it to do the following:
<ul>
<li>Export to JPG instead of PDF (PNG export didn&#8217;t work)</li>
<li>Add extra 0s to numbers such that you always have three digits</li>
</ul>
<p>The code is pasted below.  One really fun (not) thing I found out: VBA (or just OO.o&#8217;s implementation of it) doesn&#8217;t really do type checking.  As a result, if <i>r</i> is a string instead of an integer (which I had forgotten), the following code will always execute as True:</p>
<p><font face="courier new,courier,monospace">If r &lt; 10 Then</font></p>
<p>Anyways, here is the code, in case it helps anyone at some point:</p>
<p><font face="courier new,courier,monospace"></font>
<p />
<p><font face="courier new,courier,monospace">REM  *****  BASIC  *****</p>
<p>Function MakePropertyValue( Optional cName As String, Optional uValue ) As com.sun.star.beans.PropertyValue<br />   oPropertyValue = createUnoStruct( &quot;com.sun.star.beans.PropertyValue&quot; )<br />   If Not IsMissing( cName ) Then<br />      oPropertyValue.Name = cName<br />   EndIf<br />   If Not IsMissing( uValue ) Then<br />      oPropertyValue.Value = uValue<br />   EndIf<br />   MakePropertyValue() = oPropertyValue<br />End Function</p>
<p>Sub SplitPDFs<br />  dim oDoc as object<br />  oDoc = ThisComponent<br />  dim url as string<br />  url = oDoc.getURL()<br />  baseURL = Left( url, Len( url ) &#8211; 4 )<br />  nNumPages = oDoc.getDrawPages().getCount()<br />  For nPageToSave = 1 To nNumPages<br />    dim r as string<br />    r = Str(nPageToSave)+&quot;-&quot;+Str(nPageToSave)<br />    If CInt(r) &lt; 10 Then<br />        oDoc.storeToUrl( baseURL+&quot;00&quot;+nPageToSave+&quot;.jpg&quot; ), Array( &#95;<br />         MakePropertyValue( &quot;FilterName&quot;, &quot;impress_jpg_Export&quot; ), &#95;<br />         MakePropertyValue( &quot;Overwrite&quot;, &quot;True&quot;),  &#95;<br />         MakePropertyValue( &quot;FilterData&quot;, Array( &#95;<br />            MakePropertyValue( &quot;PageRange&quot;, r ))))<br />    Else<br />        oDoc.storeToUrl( baseURL+&quot;0&quot;+nPageToSave+&quot;.jpg&quot; ), Array( &#95;<br />         MakePropertyValue( &quot;FilterName&quot;, &quot;impress_jpg_Export&quot; ), &#95;<br />         MakePropertyValue( &quot;Overwrite&quot;, &quot;True&quot;),  &#95;<br />         MakePropertyValue( &quot;FilterData&quot;, Array( &#95;<br />            MakePropertyValue( &quot;PageRange&quot;, r ))))</p>
<p>    End If<br />  Next<br />End Sub</font></p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2009/01/oh-god-i-had-to-use-vba/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Avast, We Be Getting Slandered, Yar</title>
		<link>http://jefferai.org/2008/12/avast-we-be-getting-slandered-yar/</link>
		<comments>http://jefferai.org/2008/12/avast-we-be-getting-slandered-yar/#comments</comments>
		<pubDate>Tue, 02 Dec 2008 22:20:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1042</guid>
		<description><![CDATA[Poisonous people. They exist everywhere, sucking the light and good out of things and repurposing them for all sorts of nasty activities. Like the rest of KDE, and the rest of the software world (both free and non-free) in general, the Amarok team has taken its fair share of abuse over the years. Normally I [...]]]></description>
			<content:encoded><![CDATA[<p>Poisonous people.  They exist everywhere, sucking the light and good out of things and repurposing them for all sorts of nasty activities.  Like the rest of KDE, and the rest of the software world (both free and non-free) in general, the Amarok team has taken its fair share of abuse over the years.  Normally I ignore it.  However, today I got my KDE 4.0 Release Event talk twisted around in malicious ways and the blame placed right at my own feet.  So I&#8217;m rising to the bait.</p>
<p>The latest perpetrator of bile and venom is one Antal István Miklós.  This <strike>blathering idiot</strike> Web Developer called me out personally on his Great Blog (<a href="http://djdarkmanx.blogspot.com/2008/12/amarok-developers-dont-see-point-in.html">yes, that&#8217;s really what it&#8217;s called, if you want to see his post</a>), and turned my well-received talk at the KDE 4.0 Release Event into complaint-a-thon.</p>
<p>I&#8217;m not going to pick apart all of the technical wrongheadedness he portrays with MySQL/e, Akonadi, and the capabilities therein &#8212; Nikolaj posted a nice response to the blog, and the guy would be very well served to *fully* read <a href="http://amarok.kde.org/blog/archives/812-MySQL-in-Amarok-2-The-Reality.html">my posting about mysqle</a> (as well as many of the comments).  Much of the blog can also easily be decoded as baseless, factless trolling (&quot;amarok1.x is the slowest KDE3 program, if not it&#8217;s surely in the top 3 slowest KDE3 programs&quot;), and the-developers-don&#8217;t-agree-with-me-so-they&#8217;re-wrong syndrome.  But I *am* going to defend my statements at the Release Event.</p>
<p>Let me explain, up front, the format of my Release Event talk.  I presented a short introduction to Amarok, for those that did not know it.  I then stated some drawbacks we found with the KDE3 platform.  With these drawbacks, plus a desire to go cross-platform like many other media players (VNC, Banshee, iTunes, etc.), we had considered the possibility of switching to a Qt-only architecture.  But then, KDE4 comes along, with elegant solutions to our problems &#8212; Phonon, Solid, Plasma, targeting multiple platforms, and more.  Boom &#8212; the thoughts of Qt-only go out of our heads, and we commit ourselves fully to KDE4.</p>
<p>Far from a long series of complaints, it&#8217;s a success story, showing how the benefits the KDE4 platform offer to us solved our problems, and how they could solve <b>yours</b> too.  Apparently, however, it simply shows &#8212; from Antal&#8217;s blog post title, and probably because he hasn&#8217;t bothered to watch past five minutes in &#8212; how we just don&#8217;t get KDE4.</p>
<p>This may not be apparent to everyone, but Amarok was an early poster child for adoption of many of the Pillars of KDE.  We are the only application, to date, that has embedded Plasma inside of our application (with our developers doing a large amount of work to make that possible). (Update: we are technically the first, outside of the plasma workspace, but there are others playing with that now.)  Device detection completely relies on Solid (which is one reason Mac and Windows ports have no device support right now).  And we have completely standardized on Phonon for our media engine.  We&#8217;ve also had Oxygen team members working on our icons and our interface.</p>
<p>It&#8217;s hard to imagine ways for us to more fully integrate with KDE4 than what we are doing.  We&#8217;ve gone for KDE4 whole-hog, and it&#8217;s ludicrous to suggest otherwise.  Picking out random Pillars that we don&#8217;t fully integrate with (yet) does not mean that we are not KDE4-oriented.  After all, right now we don&#8217;t have a use for Marble (who knows? that could change) &#8212; but does that mean we don&#8217;t get KDE4?</p>
<blockquote><p>it just reminds me of one of the KDE4.0 release event, where a KDE dev complained that how KDE3 sucked, because they couldn&#8217;t port Amarok to Windows, and KHTML had bad performance</p></blockquote>
<p>It&#8217;d be nice for Antal to realize that there is a difference between complaining, and listing drawbacks of a platform.  (This doesn&#8217;t really fit into how trolls work, of course.)  Yes, I said that two of KDE3&#8242;s drawbacks were that it made it impossible to port Amarok to Windows (<b>and Mac</b>) and that KHTML rendering was found to be slow.  No, I did not say that KDE3 sucked.</p>
<p>But there&#8217;s nothing new here.  It&#8217;s not like Amarok was alone in wanting to port to other platforms.  The Release Event had showcases of KDE4 applications running on both Windows and Mac.  But Antal has this fixation that Windows and Mac are suddenly all we care about, taking an out-of-context &quot;consider the majority&quot; statement someone (he doesn&#8217;t say who) made on IRC about some topic (he doesn&#8217;t say what, only that it&#8217;s vaguely somehow about performance):</p>
<blockquote><p>Using mysqle mostly benefits non-KDE4 desktops, because as I said earlier KDE4 will probably have a mysql server anyway, but isn&#8217;t improving the KDE4 user experiance top release priority anymore? Is amarok on Windows on Mac more important than getting the best out of amarok on KDE4?</p>
<p>[then, later]</p>
<p>What did the people in the IRC channel had to say about this?</p>
<p>&#8230;&#8230;.</p>
<p>My favorite quote from here is: &quot;consider the majority&quot;</p>
<p>It&#8217;s like saying: &quot;consider the majority, which are Windows and Mac users, and screw the KDE4 users&quot;</p></blockquote>
<p>I think Antal fails to realize that KDE is not just a desktop.  Windows and Mac users that might be using Amarok are going to be using *lots* of KDE technologies in the process.  Regardless of his mistake, there is certainly no evidence that Amarok cares more about Windows and Mac users, or thinks them the majority of our users.  Speaking as a developer, I can tell you that the exact opposite is true.</p>
<p>Antal also clearly doesn&#8217;t realize that Akonadi is not a requirement of KDE to run (even if it&#8217;s installed), and therefore the best Amarok could do would be to integrate with Akonadi, but not to depend or rely upon it.  Maybe he kind of gets it when he says, my emphasis, &quot;KDE4 will <i>probably</i> have a mysql server anyway&quot; &#8212; we can&#8217;t rely on probably, or maybe.  We need to use what works, always.</p>
<p>He even contradicts himself:</p>
<blockquote><p>He begins with complaining, how slow was rendering amarok&#8217;s context with KHTML, so it looks like performance matters in amarok, not that anyone forced them to use KHTML for rendering context&#8230;</p></blockquote>
<p>Make up your mind, Antal.  You&#8217;re right that no one forced us to use KHTML for rendering context, although WebKit wasn&#8217;t available back then, and hooking into Mozilla was a non-starter.  But you want us to be integrating with other KDE technologies&#8230;right?</p>
<p>One last point:</p>
<blockquote><p>Jeff Mitchell the developer who spoke at the event that I was referring to, referenced KDE as a family, but where is the love now? The lack of communication between Amarok and the rest of KDE4(Akonandi) doens&#8217;t seem to back up Amarok as being a family member.</p></blockquote>
<p>It is not surprising, given how little he understands of Amarok, KDE, and the integration thereof, that he thinks both that there is a lack of communication between Amarok and the rest of KDE4, and that he implies that Akonadi <b>is</b> the entire rest of KDE4.</p>
<p>I&#8217;ve covered a small fraction of the untruths and inaccuracies in his post, but it&#8217;s enough &#8212; I&#8217;ve made my points.  I love KDE, I have not publicly disparaged it, we Amarok developers are fully committed to the platform, and we are not putting the Windows and Mac ports at a higher priority than the *nix base.</p>
<p>Any comments will be read, but I may decide not to post them.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/12/avast-we-be-getting-slandered-yar/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
		<item>
		<title>MySQL in Amarok 2 &#8211; The Reality</title>
		<link>http://jefferai.org/2008/10/mysql-in-amarok-2-the-reality/</link>
		<comments>http://jefferai.org/2008/10/mysql-in-amarok-2-the-reality/#comments</comments>
		<pubDate>Sat, 11 Oct 2008 08:01:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1041</guid>
		<description><![CDATA[There has been a lot of chatter lately regarding Amarok&#8217;s switch to MySQL as its only SQL backend. A decent amount is FUD &#8212; either by people simply pushing back against change, or by people that simply don&#8217;t understand the decision. Some of it (particularly Adriaan&#8217;s blog post) has been insightful and interesting, but miss [...]]]></description>
			<content:encoded><![CDATA[<p>There has been <a href="http://dot.kde.org/1223401559/" target="_blank">a lot</a> of <a href="http://people.fruitsalad.org/adridg/bobulate/index.php?/archives/657-MySQL-in-KDE.html" target="_blank">chatter</a> lately regarding Amarok&#8217;s switch to MySQL as its only SQL backend.  A decent amount is FUD &#8212; either by people simply pushing back against change, or by people that simply don&#8217;t understand the decision.  Some of it (particularly Adriaan&#8217;s blog post) has been insightful and interesting, but miss the mark in terms of why this change was made. This post attempts to explain why this decision was made, what it really means for you the end-user, and why you should have a cup of tea and relax.</p>
<p />
<p>I want to point out first that I said that MySQL is going to be Amarok&#8217;s only <i>SQL backend</i>.  A2&#8242;s collection system is very powerful.  Just take a look at how varied music sources from Shoutcast, Jamendo, Magnatune, Ampache, MP3Tunes, as well as local sources like iPods and your local file system, are treated as equals in A2.  A collection is a collection, and is limited only by what capabilities it advertises it can support (and of course, it can supply its own custom capabilities).  It&#8217;s not currently enabled, I don&#8217;t think, but there&#8217;s a Nepomuk-based collection option too.  So take heart &#8212; this change only affects Amarok&#8217;s internal SQL collection, and not other sources (although those sources can store information in the SQL database if they wish to cache information).</p>
<p />
<p>Since I mentioned Nepomuk, it&#8217;s time to discuss another common question/demand/complaint: <i>KDE has this nice Strigi-Nepomuk thing going on&#8230;why aren&#8217;t we using it for scanning music and storing information?</i> There are a couple main reasons.  The first is that Strigi and Nepomuk are optional, not required.  (Update: Strigi is required, but Soprano isn&#8217;t, so Nepomuk as a whole is still optional.)  We can&#8217;t rely on the user installing them, and even if they are installed, we can&#8217;t rely on the user to configure them properly (remember that we&#8217;re going cross-platform, making it even less likely).  The second reason is speed: Amarok&#8217;s custom collection scanner is extremely fast and pulls out specific pieces of information with TagLib.  Strigi is, by comparison, very slow (it calculates hashes of all files, which means it needs to read the entire file) and pulls out less information. (Update: According to the Strigi developer, and despite what is said on <a target="_blank" href="http://www.kde-apps.org/content/show.php?content=40889">kde-apps.org</a>, <a target="_blank" href="http://en.wikipedia.org/wiki/Strigi">Wikipedia</a>, and even the author&#8217;s <a target="_blank" href="http://strigi.sourceforge.net/?q=features">own home page</a>, it does not calculate hashes by default. So it&#8217;s possible that Strigi, if properly configured, could be as fast as Amarok&#8217;s internal scanner, although whether it would pull out all necessary information, I don&#8217;t know.  If it&#8217;s configured to calculate SHA1 hashes of all files, then it will indeed be far slower.)  On a local hard drive, it may not be a big issue, but it sure is a huge issue when you throw networked storage into the picture, which is a very common scenario.  I&#8217;ve also heard, though don&#8217;t remember specifics, that querying and such through Nepomuk is rather slow, compared to a normal SQL database.  Regardless, though, remember that when the Nepomuk-based collection is finished, tracks sourced through a Nepomuk-based collection will have their metadata changes saved back to Nepomuk.  So, it&#8217;s not that the SQL collection is in place of Nepomuk &#8212; they are entirely independent. (Update: I forgot to mention that a Nepomuk collection already exists.  It was developed by a GSoCer over the summer.  I&#8217;m not sure what its status is as far as making the 2.0 release, but we Amarokers both like Strigi/Nepomuk and are excited about the idea of opening up the app and having all your music available right then and there with no pre-configuration.  But there is a place for the SQL collection too.  As I said: they are complimentary technologies.)</p>
<p />
<p>With those topics out of the way, on to the meat.</p>
<p />
<p>First, it is important to understand an important pair of facts.  Number one: we are not database guys.  Sure, we can store data in them, and more or less come up with a working schema, but none of us are gurus/wizards/jedis/etc.  This leads in to number two: maintaining three databases was driving us <i><b>crazy</b></i>. Every time a minor schema change was needed, it had to be coded up for all three types of databases.  Modifying a schema could be trivial for one database type, and super difficult (or impossible) for another.  People would report bugs that we couldn&#8217;t reproduce, only to find out that it was because we didn&#8217;t quite understand how one database or another behaved (or in some cases, none of the active devs were using that type).  And so on.  So from the beginning of A2 development (and in our fantasies during A1 development) we knew we wanted just one database.</p>
<p />
<p>(We did actually look at abstraction layers like QtSQL and others.  I&#8217;m not going to comment on them much, as I didn&#8217;t do the evaluation, but in general they were found to not be flexible enough to handle all of our needs without doing some custom SQL coding (especially in the cases of things like schema changes), which kind of defeats the point.  If you want to know more/want to insist that they are, try asking eean, as I think he did the evaluations.)</p>
<p />
<p />
<p>Now we had to choose the type.  At first, SQLite seemed like a good choice.  Using transactions, it&#8217;s decently fast.  It&#8217;s pretty stable (those that complain about odd MySQL bugs should talk to markey, as he, being the SQLite maintainer in 1.4, can attest that SQLite&#8217;s had its fair share).  However, there were a few problems that in the end knocked it out of the running.  The first problem is performance.  Although for people with small collections it performs fairly well, people with large collections that switched to the MySQL or PostgreSQL backends in A1 would report enormous speed gains when operations performing complex or many queries were performed, such as adding many entries to the playlist, scanning files, or filtering/searching in the collection.  Since we want to accommodate users with large collections just as well as those with smaller collections, and since digital music collections <a href="http://www.eff.org/wp/riaa-v-people-years-later" target="_blank">aren&#8217;t getting smaller</a>, the speed increase for our users with large collections was quite important.  Many of our developers, after the switch to mysqle (as we call it, though that&#8217;s not the official name), have noticed huge speed increases in their day-to-day use of A2, so that speed increase is carrying through to the embedded server as well as the normal server. That was the first knock against SQLite.</p>
<p />
<p>The other blow for SQLite came for a totally different reason.  Many users (myself included) have multiple computers sharing a single Amarok database.  Assuming all the computers have access to the music at the same mount point (and a few other things are configured right), this allows you to scan once, play everywhere, update the same ratings no matter where you play it, and more.  Even if your aren&#8217;t sharing the database among multiple computers, many users want their database stored on a particular server for speed, security, or backup reasons.  If you think either of these isn&#8217;t a common use-case, you&#8217;d be quite wrong.  MySQL and PostrgreSQL were quite happy with this workload.  It&#8217;s a total no-go for SQLite, simply because it&#8217;s designed for a different purpose.  So SQLite had two big knocks against it. K.O.</p>
<p />
<p>However, just as we can&#8217;t rely on the user to set up Strigi/Nepomuk correctly, we can&#8217;t rely on them to get their tables set up in MySQL or PostgreSQL.  So we needed the database to be embeddable, so that it could just work for the user without any setup necessary on their part.  MySQL, with libmysqld, had the seeds of this in the 4.1 series, it works decently in 5.0, and it&#8217;s becoming fully supported (AFAIK) in 5.1.  PostgreSQL, on the other hand, does not have any such thing.  (They have an <a href="http://www.postgresql.org/docs/8.3/static/ecpg-concept.html" target="_blank">interesting and cool concept of their own</a> of embedded SQL though.  Update: apparently that is part of the SQL standard.  Still pretty cool.  Still totally different from what we mean when we are talking about an embedded server.)</p>
<p />
<p>So this leaves us with &#8212; as you guessed &#8212; MySQL.  It may not be any particular person&#8217;s favorite database (although it is for plenty), and I don&#8217;t know how much overhead it *really* has in embedded form, but it fit the bill.  It&#8217;s both embeddable and can run standalone on the local or a separate machine (yes, this is not supported yet in A2, but it will be).  It is fast and robust for large collections.  It is well understood by the development team.   And most of all, it is a single-backend solution that fills all of our needs.</p>
<p />
<p>If you&#8217;re still unhappy about our decision, I&#8217;m sorry.  We try to please most and can&#8217;t please everyone.  But we&#8217;re the ones that develop and support this thing, and so we made a decision based both upon our needs as developers and the real-world use-cases from the collective feedback of thousands of users that have contacted us over the last few years.  Please remember that even if most of the comments on the Dot, or to this post, (i.e. much of the sudden visible feedback) are from people that are unhappy with our decision, it is a decision that will actually suit the vast, vast majority of our users better than the other options we currently have.</p>
<p />
<p>We&#8217;re a project that is known for being good to our users &#8212; we listen to them, we try to implement features they want, try to be responsive with support.  It&#8217;s one of the things that got us where we are today.  So please, dear readers &#8212; put some faith in us.  This has not been an easy decision &#8212; we&#8217;ve discussed, we&#8217;ve argued, we&#8217;ve thrown things, we&#8217;ve made up, we&#8217;ve had an after-the-make-up orgy or two &#8212; but in the end it&#8217;s what we collectively felt was the right way to go, and we feel that, in the long run, it will make Amarok even mores awesomer.  Hopefully you&#8217;ll feel that way too.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/10/mysql-in-amarok-2-the-reality/feed/</wfw:commentRss>
		<slash:comments>86</slash:comments>
		</item>
		<item>
		<title>Amarok File Tracking</title>
		<link>http://jefferai.org/2008/08/amarok-file-tracking/</link>
		<comments>http://jefferai.org/2008/08/amarok-file-tracking/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 18:16:00 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1038</guid>
		<description><![CDATA[I don&#8217;t blog often, but when I do it tends to be meaty.  I won&#8217;t disappoint.  I&#8217;ll be covering Amarok, Amarok history, and a possible future part of kdelibs. &#34;We can rebuild him. We have the technology. Better than before. Better, stronger, faster.&#34; A little-known feature in Amarok 1, starting at about 1.4.3, was what [...]]]></description>
			<content:encoded><![CDATA[<p>I don&#8217;t blog often, but when I do it tends to be meaty.  I won&#8217;t disappoint.  I&#8217;ll be covering Amarok, Amarok history, and a possible future part of kdelibs.</p>
<p>&quot;We can rebuild him. We have the technology. Better than before. Better, stronger, faster.&quot;</p>
<p>A little-known feature in Amarok 1, starting at about 1.4.3, was what was known as Amarok File Tracking, or AFT.  For every single file in your collection, on scan, a unique identifier (UID) was generated from some of the file&#8217;s attributes.  If you moved your tracks around your folders, as the incremental scan kicked in, the UID would allow for the file to be identified, and integration throughout Amarok would mean that your statistics, your cached lyrics, and the current playlist would all be updated with the new path.  No longer did you have to worry that moving around your files would mean losing years of statistics.  Or losing your files.</p>
<p>But I&#8217;m getting ahead of myself.</p>
<p>See, AFT wasn&#8217;t born AFT.  AFT could not track both a file metadata change and a file location change at once, because the UID was being based on file properties such as file length, plus a portion of the file itself hashed together. So you could still lose track of your files.  This was a limitation that was known in advance.</p>
<p>It was also a limitation that didn&#8217;t originally exist.  As I said, AFT wasn&#8217;t born AFT.  It was born as Advanced Tag Features, or ATF.  ATF was the same idea, but a little different &#8212; it would store the generated UID directly in the file&#8217;s metadata.  This allowed for superb file tracking capabilities, because unlike generating a UID from a part of a file, if that part of the file changed, you&#8217;d still have your UID.  In fact, the only way you *couldn&#8217;t* track your file was if you either removed the file&#8217;s tag entirely (or some other program removed the UID when it shouldn&#8217;t), or if you removed the corresponding information from Amarok&#8217;s database. (There are some downsides to this scheme: only certain file types are supported, for instance, determined by the kind of tag they use and the tag&#8217;s ability to store this kind of information.)</p>
<p>So why the change?  Well, ATF had a problem, which was related to the structure of Amarok itself, and Amarok&#8217;s historical penchant for crashing (which got much better as the 1.4 series progressed).  The outcome is possibly worthy of an entry in The Daily WTF.  In gory detail, here&#8217;s the problem.</p>
<p>   1. Amarok would start a collection scan.  The collection scanner was the entity responsible for adding the UIDs to the file metadata.  Important note: the collection scan was a separate process.<br />   2. Amarok would crash, leaving the collection scan running, although not communicating with anything.  This scanner could be very slow if it was adding the UIDs, depending on whether padding had to be added to the file&#8217;s tag.  If this was the case, the entire file would have to be rewritten.<br />   3. Amarok would be restarted by the user.  Another collection scan process would start.  Becuase UIDs would already exist for the early files, it would very quickly catch up to the first collection scan process.<br />   4. You now had two collection scan processes generating and writing UIDs at the same time to the same file.  If you were lucky, this would mess up your tag.  If you were unlucky, this toasted your entire file.<br />   5. Repeat step 4 for the rest of the scan.</p>
<p>ATF was never released in this state, but it did get turned on in SVN.  And a few unlucky users had far too many files end up corrupted, depending on how crashy things became for them.  After we finally realized what the issue was, a user came forward on the mailing list (still trying to find the exact mail or user) proposing a solution that I believe they&#8217;d seen in a class.  Essentially, the solution relies on modifications to temporary, uniquely named files instead of the original file, using MD5 checksums to find out of the original file has changed while writing the new file, then using filesystem atomicity guarantees to move the new file back over the old one.  This became the MetaBundleSaver, and it worked quite well, but it was also extremely slow compared to a normal scan.  And most importantly, no one was quite trusting of the whole ATF scheme any more.</p>
<p>So, ATF was renamed to AFT and with it came a new algorithm that wouldn&#8217;t touch anyone&#8217;s files, but couldn&#8217;t track as well.</p>
<p>A couple weeks ago, I added AFT to Amarok 2&#8242;s SqlCollection.  Enjoy, everyone &#8212; statistics, lyrics, and the playlist are already supported, with support for stored playlists coming eventually.  But there&#8217;s more.</p>
<p>Fast forward to today (okay, two days ago).  I&#8217;m taking a shower &#8212; Wade does insist that there&#8217;s something about showers and KDE coders &#8212; and I had a thought, which was essentially: there&#8217;s absolutely no reason why Amarok 2 can&#8217;t use a UID inside a file, if one exists, for superior tracking, and if not, generate a read-only type for normal tracking.</p>
<p>So I created a utility that is built and installed with Amarok 2.  It&#8217;s called amarok_afttagger, and it will write UIDs into your files, using a class ported from MetaBundleSaver and called SafeFileSaver to ensure that files are not overwritten/interleaved, even if you run the process twice or three times at once.  It optionally supports recursion if you want to pass in directories, and it can also remove UIDs from your files if you like.  Right now it supports MP3s only, but Vorbis and FLAC support will be coming soon.</p>
<p>I&#8217;ve tested it extensively.  I&#8217;ve added UIDs to files, removed them from files, regenerated the ones in files, over and over, and still everything is cherry.  And Amarok 2, when it finds these files, can do some awesomely robust file tracking.</p>
<p>I encourage people to give it a run on their MP3s and check it out &#8212; if you&#8217;re worried by all the Dark Ages info up above and don&#8217;t have faith in the implemented solution, back up your files first, or operate on a copy of them, until you&#8217;re satisfied it won&#8217;t harm your files.  And if you still don&#8217;t want to do it, you can enjoy the less awesome but still awesome power of the non-embedded UID file tracking.</p>
<p>Now, I promised this would talk about a possible KDE library.  I&#8217;ll eventually be submitting the SafeFileSaver class for hopeful inclusion into kdelibs, so that any application that is worried about data integrity and needs to write to a user&#8217;s files can take advantage of it.  It&#8217;s very simple to use &#8212; you simply give it a file path, and then operate on the file path that&#8217;s returned to you when you call prepareToSave(), instead of the original one.  When you&#8217;re all done, you call doSave() and it will perform the necessary functions.  That&#8217;s it.</p>
<p>Hope this has been enjoyable, and enjoy AFT in Amarok 2.  Play with it and be amazed.  Use amarok_afttagger on your files and be even more amazed.  More information is available here: <a title="Amarok File Tracking" href="http://amarok.kde.org/wiki/AFT">http://amarok.kde.org/wiki/AFT</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/08/amarok-file-tracking/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Wanted: Portable Media Devices</title>
		<link>http://jefferai.org/2008/07/wanted-portable-media-devices/</link>
		<comments>http://jefferai.org/2008/07/wanted-portable-media-devices/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 07:59:01 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1037</guid>
		<description><![CDATA[(I&#8217;m proxy-posting this for my SoC student, who already posted it on the Amarok blog, so that it gets wider distribution on Planet KDE.  Apologies to anyone seeing this twice.) So iPod support should be pretty well set by this next weekend, and the next thing on my list is support for MTP devices. So, [...]]]></description>
			<content:encoded><![CDATA[<p>(I&#8217;m proxy-posting this for my SoC student, who already posted it on the Amarok blog, so that it gets wider distribution on Planet KDE.  Apologies to anyone seeing this twice.)</p>
<p>
<p><span class="serendipity_entryIcon"></span>So iPod support should be pretty well set by this next weekend, and the next thing on my list is support for MTP devices.</p>
<div class="serendipity_entry_body">So, what&#8217;s an MTP device? MTP = Media Transfer Protocol, a protocol Microsoft came up with for media devices. Examples of devices that use it? Pretty much every Creative Zen, iRiver, Samsung and Sandisk media device you can think of, which is why the support for these devices is so important.</p>
<p>But I&#8217;m at an impasse, since I don&#8217;t actually <u>have</u> any of these devices. The lack of devices is actually a pretty common issue for the Amarok project, which is where we come to you =). If you have access to a media device which you can donate for development, please let the Amarok team know at: <span class="mh-email">amar<a href='http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=kgQ2mmxpGDwwHkkAt9w8r_9Ube4qZF-6HH8MQuS2NYW10DUjmDQaSpGmBhfdsxSf' onclick="window.open('http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=kgQ2mmxpGDwwHkkAt9w8r_9Ube4qZF-6HH8MQuS2NYW10DUjmDQaSpGmBhfdsxSf', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">...</a>@emailgoeshere.com</span>.  A list of devices that the project is looking for is available <a href="http://amarok.kde.org/wiki/Wanted_Devices">here</a>. This will ensure that the people with these devices are happy people when Amarok 2 rolls around. Of particular urgency to the 2.0 release is the need for an MTP device (see list of MTP devices: <a href="http://libmtp.sourceforge.net/index.php?page=compatibility">here</a>)  Any of those devices will be a great help.</p>
<p>And, once I have one of those devices in hand and support starts rolling out, I ask anyone who has an MTP device to check out a copy of Amarok 2 from your friendly neighborhood svn server to help me test things out and make support be <u>good</u> (see: <a href="../wiki/2.0_Development_HowTo">here</a>)</p>
<p>Lastly, thanks in advance to all of you!
            </p></div>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/07/wanted-portable-media-devices/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Popup Dropper &#8212; now with 400% more droppinness!</title>
		<link>http://jefferai.org/2008/06/popup-dropper-now-with-400-more-droppinness/</link>
		<comments>http://jefferai.org/2008/06/popup-dropper-now-with-400-more-droppinness/#comments</comments>
		<pubDate>Thu, 26 Jun 2008 18:39:03 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1036</guid>
		<description><![CDATA[First off &#8212; the PUD now lives in the KDE Subversion repository! It&#8217;s at svn://anonsvn.kde.org/home/kde/trunk/playground/libs/popupdropper &#8212; it builds with CMake and acts as a standalone library. Included in there is a testapp that you can build with qmake that I use for my testing and that you can use to check it out, which I [...]]]></description>
			<content:encoded><![CDATA[<p>First off &#8212; the PUD now lives in the KDE Subversion repository!  It&#8217;s at svn://anonsvn.kde.org/home/kde/trunk/playground/libs/popupdropper &#8212; it builds with CMake and acts as a standalone library.  Included in there is a testapp that you can build with qmake that I use for my testing and that you can use to check it out, which I encourage.  Amarok now uses the PUD pulled in as a svn:external, which means Amarok is now very easily synced with updates I make to the PUD.</p>
<p>Now, on to the subject line &#8212; the PUD now contains an average of 400% more droppiness.  That&#8217;s because you can now drop on the text of an item instead of just the icon, which means a far larger drop target (and apparently this is how people expected it to behave in the first place).</p>
<p>Next on the agenda is to have text change color on hover so you&#8217;re sure of what you&#8217;re dropping onto.  Complete with a nice looking fade, of course&#8230;</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/06/popup-dropper-now-with-400-more-droppinness/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introducing the Popup Dropper</title>
		<link>http://jefferai.org/2008/06/introducing-the-popup-dropper/</link>
		<comments>http://jefferai.org/2008/06/introducing-the-popup-dropper/#comments</comments>
		<pubDate>Wed, 18 Jun 2008 23:15:20 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1035</guid>
		<description><![CDATA[About a year ago we had an issue in Amarok 2 development because we wanted to be able to move portable device track access into collections (this is happening with Alejandro&#8217;s GSoC project), but we couldn&#8217;t figure out a good paradigm for accessing the various device specific functions. There were some other concerns too, about [...]]]></description>
			<content:encoded><![CDATA[<p>About a year ago we had an issue in Amarok 2 development because we wanted to be able to move portable device track access into collections (this is happening with Alejandro&#8217;s GSoC project), but we couldn&#8217;t figure out a good paradigm for accessing the various device specific functions.  There were some other concerns too, about the right-click menus getting too overloaded, making it hard to find common functions.  Finally, when people wanted to drag music to the playlist, they now had to cross the entire window, whereas before it was a quick drag and drop&#8230;a lot less mouse movement, and possibly the difference between picking the mouse up and not.</p>
<p>So I had a brainstorm.  We have this ginormous context view area in the middle of A2.  What if we could put it to good use, and allow it to act as a surrogate menu?  For many people, dragging the mouse a bit to drop items on a big target is much easier than navigating small right-click menus, where it&#8217;s easy to overshoot your destination and accidentally close submenus.  Thus the PUD &#8212; the PopUp Dropper &#8212; was born.  My first sketch of it is here:</p>
<p align="baseline" />
<p><img src="http://amarok.kde.org/blog/uploads/collmenus2_small.png" /></p>
<p />
<p>(<a href="http://amarok.kde.org/blog/uploads/collmenus1_small.png">Here&#8217;s</a> the preceding page that talks about collection groups.  If you like that idea, be sure to let us know at <span class="mh-email">ama<a href='http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=J5Js5paIVAKqT8yi1THHgQ==' onclick="window.open('http://www.google.com/recaptcha/mailhide/d?k=01cjXb-e8bJs3KFNZr7r9aag==&amp;c=J5Js5paIVAKqT8yi1THHgQ==', '', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width=500,height=300'); return false;" title="Reveal this e-mail address">...</a>@kde.org</span>.)</p>
<p>The PUD actually lived for a long time in the Amarok source tree, but there were problems.  One was that it tied in too tightly to the existing Amarok context view code &#8212; something that, as that code was refactored over and over again, was painfully obvious would not work.  The other was that the actual popping up and drawing was painfully slow.  It seems drawing a QGraphicsView on top of another one wasn&#8217;t making Qt happy.  Fortunately, as of Qt 4.4, <a href="http://labs.trolltech.com/blogs/2007/08/09/qt-invaded-by-aliens-the-end-of-all-flicker">this problem has been solved</a>.</p>
<p>The final nail in the coffin (related to the first one actually) is that some of the people that saw the work wanted to see it available for all of KDE to use.  This approach wasn&#8217;t going to work.</p>
<p>When Qt 4.4 hit qt-copy, I started to play around with things again.  Soon enough I was addicted to making it work.  I took the Drag &#8216;n Drop Robot example and started modifying it to use the PUD library I was making.  The goals: make it Qt-only, make it very customizable so it could work in any situation, and make it actually able to replace a right-click menu.</p>
<p>I&#8217;m happy to say that those goals have been met.  Here&#8217;s a list of current features:</p>
<ul>
<li>Runs on top of any QWidget (theoretically, though not fully tested).</li>
<li>Two ways of creating submenus: either call addOverlay(), which essentially gives you a &quot;clean slate&quot; that you start afresh, and that runs on top of the current menu when show() is called, or you create a second PUD and pass it into addSubmenu() on the first, which is quite similar to the way a QMenu would be constructed.</li>
<li>Can pop or fade in/out with configurable fade timing on a per-submenu basis.</li>
<li>Background color and transparency, as well as text, is configurable on a per-submenu basis.</li>
<li>When the mouse leaves the PUD area, it disappears (or the top layer disappears, and keeping it outside makes subsequent layers disappear)&#8230;configurable.</li>
<li>The PUD items contain a PUD action, allowing for both drops (which calls triggered()) and hovers (which calls hovered())&#8230;each one individually configurable, of course.</li>
<li>The items are represented by a SVG element you pass in, along with a renderer (or the default is to use the PUD&#8217;s renderer).</li>
<li>The items arrange themselves automatically (submenu offset is configurable).</li>
<li>Many more things.  All of them configurable (sense a trend?).</li>
</ul>
<p>I really wanted to make a video available, but I could get neither xvidcap, nor vnc2swf, nor captury working at all.  recordmydesktop worked, but interfered with the drops, so it wouldn&#8217;t work as intended.  Instead, I&#8217;m making an &quot;alpha&quot; version of the PUD available for people to see (I had been using a local git repository, which is included in the tarball).  Don&#8217;t worry&#8230;despite me calling it alpha, it&#8217;s quite stable (in fact, as you&#8217;ll see, it&#8217;s already used in Amarok). No dependencies are needed, just qmake the dragdroprobot.pro file, make, and run the dragdroprobot file.  Caveats: it&#8217;s not commented (see coloritem.cpp for usage examples), I know of a few bugs, it&#8217;s not finished (I have several more things to add to it), there is at least one crash that I can&#8217;t reproduce reliably and have not found, there are some things I need to test but have so far been unable to (such as more than one submenu layer), and note the copyrights and distribution requirements on the files &#8212; it&#8217;s a modified example from Qt. Preferably run in a Qt 4.4 environment (i.e. in a KDE trunk login) to get all the benefits of Alien, or else it might be rather slow depending on your system.  But with that all said, <a href="http://kollide.net/~jefferai/pd25.tar.gz">let me know how you like it</a>.</p>
<p align="baseline">Finally, it&#8217;s been updated in the Amarok source tree.  Now that I got the submenu support working, Nikolaj has gotten it integrated.  In recent builds of Amarok you can simply start dragging an item from your collection and see it in motion.  Some screenshots follow.  The first is showing the normal menu, the second shows the submenu that pops up when you hover over the Organize Files item (you can see the previous menu behind it, through the transparency).</p>
<p><img src="http://amarok.kde.org/blog/uploads/Amarok20220screen20-2020080616.png" /></p>
<p />
<p><img src="http://amarok.kde.org/blog/uploads/Amarok20220screen20-2020080616-2.png" /></p>
<p />
<p>So what&#8217;s next?  Hopefully, this will eventually make it in some way shape or form into kdelibs, assuming the API stays stable (it was written in the kdelibs style, with a d pointer and private classes), making it easy for KDE apps to take advantage of it without being an external dependency.  And as it gets completed I&#8217;ll be making it available separately for any Qt app out there that wants to use it (not sure what license it will be under&#8230;either GPL or BSD).  For now, if you want to see the latest versions, keep your eye on the Amarok source code in the src/popupdropper directory (it has a few modifications to my &quot;master&quot; source simply to make it build in the Amarok source tree&#8230;specifically, adding moc file includes since it&#8217;s not using qmake, and exporting PopupDropperAction).</p>
<p>Comments appreciated!</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/06/introducing-the-popup-dropper/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>Amarok SoC: Media Devices + Awesome iPod support</title>
		<link>http://jefferai.org/2008/04/amarok-soc-media-devices-awesome-ipod-support/</link>
		<comments>http://jefferai.org/2008/04/amarok-soc-media-devices-awesome-ipod-support/#comments</comments>
		<pubDate>Mon, 28 Apr 2008 14:52:54 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1034</guid>
		<description><![CDATA[Introducing Alejandro Wainzinger (xevix on IRC), who is going to be working on media device support in Amarok for SoC 2008: My name is Alejandro Wainzinger, and I&#8217;m going for a Computer Science B.S. at the University of California Santa Cruz, USA. This summer, I&#8217;ll be bringing back media device support to Amarok for Apple [...]]]></description>
			<content:encoded><![CDATA[<p>Introducing Alejandro Wainzinger (xevix on IRC), who is going to be working on media device support in Amarok for SoC 2008:</p>
<p><em><br />
My name is Alejandro Wainzinger, and I&#8217;m going for a Computer Science B.S. at the University of California Santa Cruz, USA.  This summer, I&#8217;ll be bringing back media device support to Amarok for Apple iPods, MTP and generic devices, and making them fly.  I chose this project because I own an iPod, and got frustrated with the speed of loading an iPod with a large database, sync&#8217;ing of songs/playlists and album art, unlogged crashes after trying to put a 10,000 song queue onto the iPod, and slightly unreliable iPod model detection.  That said, I loved having iPod capability in Amarok, and I couldn&#8217;t see Amarok 2 without media device support.<br />
</em></p>
<p>Alejandro is going to work on getting normal functionality for all three types of devices, and then really taking the iPod plugin to town.</p>
<p>Rumor has it he&#8217;s then going to attempt making collections out of the devices&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2008/04/amarok-soc-media-devices-awesome-ipod-support/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Go Solid Go!</title>
		<link>http://jefferai.org/2007/10/go-solid-go/</link>
		<comments>http://jefferai.org/2007/10/go-solid-go/#comments</comments>
		<pubDate>Fri, 12 Oct 2007 01:15:09 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1032</guid>
		<description><![CDATA[I&#8217;ve been rather silent on the topic of progress in media devices. Part of this is that much of the work has happened behind the scenes. Just yesterday I spent hours editing device definitions in libmtp and libnjb so that they&#8217;d be able to propagate the correct vendor and product info through hal, because hal&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been rather silent on the topic of progress in media devices.  Part of this is that much of the work has happened behind the scenes.  Just yesterday I spent hours editing device definitions in libmtp and libnjb so that they&#8217;d be able to propagate the correct vendor and product info through hal, because hal&#8217;s handling of it leaves something to be desired.  For instance, on my Creative Zen MicroPhoto, it correctly detected the vendor and product.  Except that the part of the device detected as a portable media player was the USB interface for the device, for which the vendor was blank and the product name was &quot;USB Interface.&quot;</p>
<p>Another reason for the long delay was a partially failed experiment that aimed to provide support for many different media devices via a centralized kioslave.  It&#8217;s not that this couldn&#8217;t still happen, at some point, but it becomes extremely difficult to map protocols that have no notion of filesystems into a filesystem, and have filesystem clients behave properly.  There was another foray into a different system that also ended badly &#8212; mainly because there was no way I&#8217;d get it finished within a year, much less within a few months.</p>
<p>In the end it was decided that Amarok&#8217;s device plugin system is really pretty decent, providing relatively bug-free and easy device management for almost every device on the market&#8230;and if it ain&#8217;t broke, don&#8217;t fix it.  Of course, it&#8217;s using tons of deprecated classes and methods, but as Trolltech says (my emphasis), &quot;we recommend against using these classes in <b>new</b> code.&quot;  Good point.  So let&#8217;s get stuff working, and then we can try to design a new, better system in parallel &#8212; but at least something will work in the meantime.</p>
<p align="baseline">So with that decision made, I worked on integrating with Solid.  I&#8217;m happy to report that today, I plugged in my Creative Zen MicroPhoto, and it was instantly detected and the correct plugin selected.  All I had to do was hit Connect.  Screenshots:</p>
<p><img src="http://amarok.kde.org/blog/uploads/devicesstartedworking1.png" /></p>
<p align="baseline">The first screenshot shows what the media browser looks like with nothing plugged in.  At that point, I plugged in my Creative Zen MicroPhoto, and you can see that it was detected and added to the device selector drop-down box:</p>
<p><img src="http://amarok.kde.org/blog/uploads/devicestartedworking2.png" /></p>
<p align="baseline">After this, I hit the Connect button (it&#8217;s the one on the top left) and artists were displayed.  I hit the custom button just so you could see some of the details available:</p>
<p><img src="http://amarok.kde.org/blog/uploads/devicesstartedworking3.png" /></p>
<p>So it&#8217;s coming along.  I expect this device detection to work on pretty much any kind of music player (except generic/vfat/UMS&#8230;more on that on a later post, when I have time to work on it), <b>provided that</b>:</p>
<ol>
<li>hal is installed and working.</li>
<li>You are using a recent version of libmtp/libnjb for those devices.  I&#8217;ve also worked with libkarma and libifp but have been unable to actually check them out to see how they&#8217;re working since I don&#8217;t have those devices.  We&#8217;re probably going to start a &quot;send us your old media devices&quot; thing going, so that I can work on all of them.  libgpod was more hesitant about working with me, but there&#8217;s a problem there anyways, as apparently you can&#8217;t detect from the USB interface the iPod exposes what kind of iPod it actually is, without connecting to it.  Feel free to blame Apple on this one, as it&#8217;s probably on purpose in an attempt to keep you on iTunes.  So there&#8217;s a generic definition already in hal which should be (hopefully, pending testing, send me your old iPods) good enough to at least have it show up as an iPod.  Once you click the connect button the library should be able to provide more info.</li>
<li>Your distribution&#8217;s package of the device access libraries <b>installs the hal fdi files provided by the libraries</b>.  For some unfathomable reason many (most?) don&#8217;t &#8212; even my beloved Gentoo.  So start bugging your package maintainers early, because if you don&#8217;t have these installed, you&#8217;re not going to get autodetecting goodness.  Some of these may end up in the main HAL distribution (I have repo access so can add them in) but for many it doesn&#8217;t make sense as they&#8217;re constantly being updated or changed, and it would require changing in two places instead of one.  (Also, some libraries generate these automatically, instead of having a fixed file).</li>
</ol>
<p>So that&#8217;s it for now.  The next step is to get manual adding of devices working again.  And after that, dealing with generic devices in a smart way (the way will be Banshee-compatible too&#8230;thanks to Aaron Bockover for the excellent idea!)  In the meantime, watch out for the Amarok Device Donation Program.  <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2007/10/go-solid-go/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>The *real* first KHTML browser on Windows</title>
		<link>http://jefferai.org/2007/06/the-real-first-khtml-browser-on-windows/</link>
		<comments>http://jefferai.org/2007/06/the-real-first-khtml-browser-on-windows/#comments</comments>
		<pubDate>Tue, 26 Jun 2007 01:35:03 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1029</guid>
		<description><![CDATA[There&#8217;s been a lot of hubbub lately about Safari being released on Windows, which is based on WebKit, which is based on KHTML, and how it&#8217;ll beat Konqueror as the first KHTML-based browser on Windows. Then you hear this other camp firing back about Swift, whose homepage proudly declares &#34;The First KHTML Browser for Windows.&#34; [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been a lot of hubbub lately about Safari being released on Windows, which is based on WebKit, which is based on KHTML, and how it&#8217;ll beat Konqueror as the first KHTML-based browser on Windows.</p>
<p>Then you hear this other camp firing back about Swift, whose homepage proudly declares &quot;The First KHTML Browser for Windows.&quot;</p>
<p>However, I&#8217;m here to set the record straight.  To the best of my knowledge the first KHTML-based browser on Windows is ThunderHawk, which appears to have been using KHTML under-the-hood since at least <a href="http://www.pocketnow.com/index.php?a=portal_detail&#038;t=reviews&#038;id=502">2004</a> and probably at least <a href="http://www.pcmag.com/article2/0,1759,5939,00.asp">2002</a>.</p>
<p>Yes, it&#8217;s a WinCE/Windows Mobile browser.  But it&#8217;s still Windows.</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2007/06/the-real-first-khtml-browser-on-windows/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Device Handling and HAL</title>
		<link>http://jefferai.org/2007/05/device-handling-and-hal/</link>
		<comments>http://jefferai.org/2007/05/device-handling-and-hal/#comments</comments>
		<pubDate>Sat, 05 May 2007 19:01:35 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1026</guid>
		<description><![CDATA[My blog&#8217;s been rather inactive for a while. Most of this has been because of being busy, and because of not doing hugely exciting things when I have had Amarok hacking time (mainly some bugfixes in stable branch). But now something&#8217;s come along that warrants an entry. Amarok&#8217;s device handling is pretty adequate. Granted it [...]]]></description>
			<content:encoded><![CDATA[<p>My blog&#8217;s been rather inactive for a while.  Most of this has been because of being busy, and because of not doing hugely exciting things when I have had Amarok hacking time (mainly some bugfixes in stable branch).  But now something&#8217;s come along that warrants an entry.</p>
<p>Amarok&#8217;s device handling is pretty adequate.  Granted it could be better, but we support nearly every device on the market through some plugin or another.  But there&#8217;s one recurring problem: except in a few cases, Amarok doesn&#8217;t know what device you have plugged in, and how to handle it.  You have to tell this to Amarok.  This means you, and we, have to deal with the manual creation of devices.  Well, that&#8217;s going to change.</p>
<p>Enter HAL, and its KDE4 paramour Solid.  By now, you probably know what these do.  HAL, Hardware Abstraction Layer, gathers information about your hardware.  Solid reads it (and some other information) and outputs a KDE interface to it.  Now by itself, this isn&#8217;t enough, because HAL has a namespace called portable_audio_player, but, with a few exceptions, it doesn&#8217;t actually say what type of device you&#8217;re using &#8212; simply &quot;storage&quot; for a USB Mass Storage interface, or &quot;user&quot; meaning that a userspace library needs to handle it.</p>
<p>However, for the last few weeks I&#8217;ve been working with HAL developers and the developers of libgpod, libifp, libkarma, libnjb, and libmtp.  The goal has been to come up with a way that device access protocols can be auto-detected.  If you know what access protocol a device uses, you can load the appropriate plugin automatically.  Well, this has been done, and as a result the HAL portable_audio_player namespace spec is being modified to allow libraries to insert information they know about devices into HAL &#8212; while at the same time keeping libraries from clobbering each other.  Interested parties can find a draft version <a href="http://jefferai.com/stuff/hal-spec.html#device-properties-portable_audio_player" target="_blank">here</a>, with the final verison going into HAL as soon as the slugs at freedesktop.org set up my account.</p>
<p>After this, I will be adding proper entries in libmtp and libnjb (easy, since I have commit access for both), making entries for libifp and libgpod, and working with the libkarma developers for their entries.  After all this is done (probably in the next couple weeks), Amarok 2.0 and other HAL-aware clients should be able to determine and load the correct plugin for just about any device on the market, automatically.  Okay&#8230;after a lot more hacking on 2.0&#8230;but you get the picture.  <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I&#8217;m hoping that when this is done we can remove manual device addition/deletion.  It&#8217;s a complex part of the code that can be difficult to maintain, and shouldn&#8217;t be necessary any longer &#8212; if you have a library that can handle the device that Amarok can use, Amarok should already know about the device from HAL.  Even generic USB Mass Storage players should be fine, because they should be detected by HAL and exported through Solid as storage volumes.  The only thing I can see this affecting negatively is <a href="http://websvn.kde.org/?view=rev&#038;revision=657622">the generic device plugin that just got fixed to support arbitrary KIO paths</a> but I&#8217;ve been thinking about pulling that into the Collection some way anyways, now that the Collection can handle many sources, as this would let it handle *lots* of sources <img src='http://jefferai.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2007/05/device-handling-and-hal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amarok on Mac</title>
		<link>http://jefferai.org/2007/02/amarok-on-mac/</link>
		<comments>http://jefferai.org/2007/02/amarok-on-mac/#comments</comments>
		<pubDate>Sun, 11 Feb 2007 00:35:14 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1025</guid>
		<description><![CDATA[Been a while since I posted, but I thought I&#8217;d give you guys a glimpse of a (very ugly) Amarok running on a Mac. I used the excellent packages from Ranger Rick to get KDE4 libs up and running (you can do it from svn but many of the tools required are most easily gotten [...]]]></description>
			<content:encoded><![CDATA[<p>Been a while since I posted, but I thought I&#8217;d give you guys a glimpse of a (very ugly) Amarok running on a Mac.  I used  the <a title="Packages from Ranger Rick" target="_blank" href="http://ranger.users.finkproject.org/kde/index.php/Home">excellent packages from Ranger Rick</a> to get KDE4 libs up and running (you can do it from svn but many of the tools required are most easily gotten from Fink, which can cause conflicts if you have kde3 stuff from it).
<p align="center">I can&#8217;t get database support working yet, but it does build and run.  Check it out:</p>
<p><img src="http://amarok.kde.org/blog/uploads/amarok_on_mac.png" /></p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2007/02/amarok-on-mac/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Bang, bam, boom</title>
		<link>http://jefferai.org/2006/05/bang-bam-boom/</link>
		<comments>http://jefferai.org/2006/05/bang-bam-boom/#comments</comments>
		<pubDate>Fri, 05 May 2006 22:52:49 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1024</guid>
		<description><![CDATA[I&#8217;ve been knocking down my to-do list like there&#8217;s no tomorrow. I posted recently about the VFAT device rewrite; it is now complete and early testing results seem to be positive (it&#8217;s been renamed to &#34;Generic Audio Player&#34; by the way). In addition, ATF backend support should now be fairly complete. I&#8217;ve been debugging it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been knocking down my to-do list like there&#8217;s no tomorrow.  I posted recently about the VFAT device rewrite; it is now complete and early testing results seem to be positive (it&#8217;s been renamed to &quot;Generic Audio Player&quot; by the way).  In addition, <a href="../amarokwiki/index.php/ATF_Hooks">ATF</a><span style="text-decoration: underline;"></span> backend support should now be fairly complete.  I&#8217;ve been debugging it for a while and everything seems to work well now.  It catches file copies, moves, and renames, and lets you assign new IDs to files through a DCOP call.  It doesn&#8217;t slow down scanning much either (I&#8217;ve been scanning 2082 files in about 30 seconds or so).  I have yet to test it on Oggs, but I would imagine that it&#8217;d be fairly simple to get that working too.<br />
</p>
<p>The next hurdle is actually making amaroK components use ATF.  I don&#8217;t think that will happen in time for 1.4 final, but in the point releases thereafter hopefully you&#8217;ll start to see some components take advantage of the features that ATF provides, to help it really live up to its name.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/05/bang-bam-boom/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>More on the VFAT rewrite</title>
		<link>http://jefferai.org/2006/05/more-on-the-vfat-rewrite/</link>
		<comments>http://jefferai.org/2006/05/more-on-the-vfat-rewrite/#comments</comments>
		<pubDate>Thu, 04 May 2006 00:30:18 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1023</guid>
		<description><![CDATA[The VFAT rewrite continues apace (it may get renamed for 1.4 final).  Many functions have now been implemented, and far from scaring me, I now feel quite comfortable with the code I&#8217;ve written.  Just goes to show how taking a fresh perspective can really make a difference.  It should be working much better than the [...]]]></description>
			<content:encoded><![CDATA[<p>The VFAT rewrite continues apace (it may get renamed for 1.4 final).  Many functions have now been implemented, and far from scaring me, I now feel quite comfortable with the code I&#8217;ve written.  Just goes to show how taking a fresh perspective can really make a difference.  It should be working much better than the previous incarnation of the plugin once it&#8217;s done, and hopefully folks using 1.4 final will be happy with it.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/05/more-on-the-vfat-rewrite/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Karma!</title>
		<link>http://jefferai.org/2006/05/karma/</link>
		<comments>http://jefferai.org/2006/05/karma/#comments</comments>
		<pubDate>Mon, 01 May 2006 21:58:10 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1022</guid>
		<description><![CDATA[While updating my box at work today to kernel 2.6.16, I noticed that it now has support for Rio Karma partitions.  This rocks, as the Karma is a very capable player that can play FLAC (and I think Ogg Vorbis) in addition to MP3, but previous had no Linux support.  I&#8217;ll have to find a [...]]]></description>
			<content:encoded><![CDATA[<p>While updating my box at work today to kernel 2.6.16, I noticed that it now has support for Rio Karma partitions.  This rocks, as the Karma is a very capable player that can play FLAC (and I think Ogg Vorbis) in addition to MP3, but previous had no Linux support.  I&#8217;ll have to find a time to grab my girlfriend&#8217;s Karma and give it a go&#8230;if she lets me&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/05/karma/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>VFAT Rewrite</title>
		<link>http://jefferai.org/2006/05/vfat-rewrite/</link>
		<comments>http://jefferai.org/2006/05/vfat-rewrite/#comments</comments>
		<pubDate>Mon, 01 May 2006 06:42:21 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1021</guid>
		<description><![CDATA[    ATF stuff has taken a backseat for a bit while I rewrite the VFAT device plugin. Originally I had ported the code over from the ifp media device plugin&#8230;the problem is that to deal with the differences between the two kinds of devices the code quickly became full of hacks. Changing one thing meant [...]]]></description>
			<content:encoded><![CDATA[<p style="direction: ltr;">    ATF stuff has taken a backseat for a bit while I rewrite the VFAT device plugin.  Originally I had ported the code over from the ifp media device plugin&#8230;the problem is that to deal with the differences between the two kinds of devices the code quickly became full of hacks.  Changing one thing meant five other things broke&#8230;a bad situation.  I&#8217;ve known for a while I would need to redo it, but I was procrastinating because I hated working on it so much, but now that we have a planned release date for 1.4 final, well, I figured it was time to get it over with.</p>
<p style="direction: ltr;">    The good news is that this time, I&#8217;m not hating it as much.  This is mainly because I&#8217;ve started with a much more hierarchial design that makes tasks that were complex and error-prone in the old device code much more simple and reliable.  The end result should be a device plugin that is much more stable and doesn&#8217;t have as many weird quirks &#8212; with any continuing quirks fixed quickly, of course!</p>
<p style="direction: ltr;">        Today I got done with enough code to display the filesystem and allow for expanding directories.  This may not sound like much, but it&#8217;s actually a good sign, as these functions seem to work well and stably, and these basic functions being completed means that all the under-the-hood code is working (which was the majority of the rewrite), so the rest of the functions will be easy to implement.  And the best news of all is that unlike the old code, I&#8217;m very confident in this new code!</p>
<p />
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/05/vfat-rewrite/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Rip your CDs with KIO and amaroK</title>
		<link>http://jefferai.org/2006/04/rip-your-cds-with-kio-and-amarok/</link>
		<comments>http://jefferai.org/2006/04/rip-your-cds-with-kio-and-amarok/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 07:49:21 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1019</guid>
		<description><![CDATA[    Yesterday I commited some code to the Collection Browser that allows it to accept URLs with the audiocd:/ protocol.  If your machine supports this (the audiocd:/ kioslave is probably in the kdemultimedia package), you can rip by doing the following; Open KControl.  Go to Sound and Multimedia-&#62;Audio CDs.  Configure your ripping preferences. Open Konqueror. [...]]]></description>
			<content:encoded><![CDATA[<p>    Yesterday I commited some code to the Collection Browser that allows it to accept URLs with the audiocd:/ protocol.  If your machine supports this (the audiocd:/ kioslave is probably in the kdemultimedia package), you can rip by doing the following;</p>
<ol>
<li>Open KControl.  Go to Sound and Multimedia-&gt;Audio CDs.  Configure your ripping preferences.</li>
<li>Open Konqueror. Go to audiocd:/</li>
<li>Go into whatever folder you want your tracks encoded as, i.e. Ogg Vorbis will contain Vorbis &quot;files&quot; that you can select.</li>
<li>Drag these tracks to amaroK&#8217;s Collection Browser.</li>
</ol>
<p>amaroK will perform a KIO copy, which will result in a seamless rip of the track and import of the track into your collection.  Easy as pie, and using KDE&#8217;s built-in capabilities to boot!</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/04/rip-your-cds-with-kio-and-amarok/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Updated ATF Info</title>
		<link>http://jefferai.org/2006/04/updated-atf-info/</link>
		<comments>http://jefferai.org/2006/04/updated-atf-info/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 04:45:20 +0000</pubDate>
		<dc:creator>jefferai</dc:creator>
				<category><![CDATA[Amarok]]></category>
		<category><![CDATA[KDE]]></category>

		<guid isPermaLink="false">http://jefferai.org/?p=1020</guid>
		<description><![CDATA[ATF, or Advanced Tag Features, will hopefully enable a whole range of really cool features in amaroK. I&#8217;ve updated the Wiki with new information that reflects the changes that have gone on. Fortunately none have been in the API, just under-the-hood changes. Regardless, as it&#8217;s still so new and untested, I doubt anyone&#8217;s turned it [...]]]></description>
			<content:encoded><![CDATA[<p>ATF, or <a href="http://amarok.kde.org/amarokwiki/index.php/ATF_Hooks" title="ATF Hooks">Advanced Tag Features</a>, will hopefully enable a whole range of really cool features in amaroK.  I&#8217;ve updated the Wiki with new information that reflects the changes that have gone on.  Fortunately none have been in the API, just under-the-hood changes.  Regardless, as it&#8217;s still so new and untested, I doubt anyone&#8217;s turned it on except for me anyways.  Heh.</p>
]]></content:encoded>
			<wfw:commentRss>http://jefferai.org/2006/04/updated-atf-info/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

