<?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>insomnia bytes &#187; music.player</title>
	<atom:link href="http://bytes.inso.cc/wp/tag/musicplayer/feed/" rel="self" type="application/rss+xml" />
	<link>http://bytes.inso.cc/wp</link>
	<description>Imagination is a nightbird's dream</description>
	<lastBuildDate>Sat, 07 Nov 2009 17:13:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>“Music Player” session at the GSoC Mentor Summit 2009</title>
		<link>http://bytes.inso.cc/wp/2009/11/07/%e2%80%9cmusic-player%e2%80%9d-session-at-the-gsoc-mentor-summit-2009/</link>
		<comments>http://bytes.inso.cc/wp/2009/11/07/%e2%80%9cmusic-player%e2%80%9d-session-at-the-gsoc-mentor-summit-2009/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 16:20:20 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gsoc]]></category>
		<category><![CDATA[mentorsummit]]></category>
		<category><![CDATA[mentorsummit2009]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=926</guid>
		<description><![CDATA[Thanks to Google&#8217;s everlasting generosity, mentors from all Open Source projects that participated to the Google Summer of Code 2009 have flocked en masse to Mountain View to meet up and talk about code and drink beer. More in pictures in my Bay Area Flickr set, if you&#8217;re curious.
Sessions were organised spontaneously around various topics, [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks to Google&#8217;s everlasting generosity, mentors from all Open Source projects that participated to the Google Summer of Code 2009 have flocked <em>en masse</em> to Mountain View to meet up and talk about code and drink beer. More in pictures in my <a href="http://www.flickr.com/photos/theefer/sets/72157622735996398/">Bay Area Flickr set</a>, if you&#8217;re curious.</p>
<p>Sessions were organised spontaneously around various topics, and one of which, proposed by Amarok2&#8217;s Lydia/nightrose, was “Problems Audio Players face today”. Which resulted in 15-20 people from various projects (incl. Amarok2, Rockbox, Maemo, XMMS2 &#038; others) talking about solving problems encountered by all music player developers (e.g. lyrics and cover art fetching), as well as features on our beloved users&#8217; wishlists (portable player support, tags, musicbrainz, etc).</p>
<p>And if you weren&#8217;t there, don&#8217;t despair, for I just (finally) posted <a href="http://gsoc-wiki.osuosl.org/index.php/Sunday_Sessions_2009/Problems_Audio_Players_Face_Today">minutes for this session on the GSoC wiki</a>. Some interesting ideas in there, so go and have a look, and get to work!</p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/11/07/%e2%80%9cmusic-player%e2%80%9d-session-at-the-gsoc-mentor-summit-2009/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Embrace the community (Ep. I: The Fandom Menace)</title>
		<link>http://bytes.inso.cc/wp/2009/05/24/embrace-the-community-ep-i-the-fandom-menace/</link>
		<comments>http://bytes.inso.cc/wp/2009/05/24/embrace-the-community-ep-i-the-fandom-menace/#comments</comments>
		<pubDate>Sun, 24 May 2009 00:31:36 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=905</guid>
		<description><![CDATA[Or why and how the new XMMS2 GUI client should be extensible (and what I mean by extensible anyway).
Quizz: What do Winamp, Foobar2000, Emacs, Eclipse and Firefox have in common?
(Vim users, we love you too, but shut up for now please.)
They are very popular and they highly promote extensibility.
Now, we all know that correlation != [...]]]></description>
			<content:encoded><![CDATA[<p>Or why and how the new XMMS2 GUI client should be <strong>extensible</strong> (and what I mean by extensible anyway).</p>
<p>Quizz: <em>What do Winamp, Foobar2000, Emacs, Eclipse and Firefox have in common?</em></p>
<p><small>(Vim users, we love you too, but shut up for now please.)</small></p>
<p>They are very popular and they highly promote extensibility.</p>
<p>Now, we all know that <a href="http://xkcd.com/552/">correlation != causation</a>.  What is certain, however, is that all those projects boast many fan(boy)s, some of whom even get quite religious about it.</p>
<p>This enthusiasm reflects itself in the emergence of strong communities: people who share content, tips, modules, extensions, themes, configurations, scripts, etc.  And those people usually aren&#8217;t even core developers of the software, sometimes not developers at all; just users or hobbyists who like the project.</p>
<p>Paradoxically, most of what they share is aimed at personalizing the software, i.e. making it the user&#8217;s own, fitting the user&#8217;s wishes and needs.  This creates a feeling of ownership and satisfaction, because the user can bend it the way she likes and master it like a pro.</p>
<p>In essence, the idea here is <strong><span class="pullquote">give power to people to shape the software the way they want, and they will <em>extend</em> it in creative ways and get together to share these extensions</span></strong>.  And I think that encouraging this creative freedom is one of the many factors which contribute to popularity.</p>
<p>Obviously, each of the projects mentioned above have their own way of allowing user extensions.</p>
<ul>
<li><strong>Classic Winamp 2.*</strong> had (lots of) theme and some plugins (mostly effects, visualization), but remained otherwise quite static in terms of interaction or features.</li>
<li><strong>foobar2000</strong> goes much further with theming and interface customization, allowing varied usage and user experience.</li>
<li><strong>Eclipse</strong> focuses mainly on extension modules (to interact with the VCS, manage project workflow, etc) and a jungle of configuration options.</li>
<li><strong>Firefox</strong> boasts rich installable extensions which add powerful new features, two levels of configurability (standard Preferences and advanced about:config), and recently themes (<a href="http://www.getpersonas.com/">Personas</a>).</li>
<li><strong>emacs</strong> allows essentially everything through scripting: altering and extending looks, interaction, features, as long as you have a high enough Elisp-fu (or enough curiosity to install other people&#8217;s modes).</li>
</ul>
<p>More to the point, extensions can be mapped along three mostly orthogonal axes:</p>
<ul>
<li>Themeable appearance (look)</li>
<li>Configurable interaction (feel)</li>
<li>Scriptable features (personal usage)</li>
</ul>
<p>Let&#8217;s take each of them and see what it means for our beloved imaginary music player.</p>
<h3>Themeable appearance</h3>
<p>Not an easy one, especially when one wants to rely on advanced features and widgets from a toolkit, which doesn&#8217;t necessarily allow for heavy reskinning.</p>
<p>There are more and more ways to draw fancy stuff in a window (vectorial canvas, HTML view, etc) but those often come at the price of limited interactivity with the rest of the interface (drag and drop, event handling, interoperability with the MVC architecture).</p>
<p>Using Qt StyleSheets (possibly with the help of QtScript) to style native widgets might be a better option, though I haven&#8217;t yet investigated in depth how much can be achieved with them.</p>
<p>Anyone with a better clue is welcome to step up.</p>
<p>While the whole layout of the player could benefit from imaginative and beautiful theming, one of the oft talked about use of styling was for the rendering of the playlist (usually out of jealousy for gorgeous foobar2000 screenshots), with <strong><span class="pullquote">album grouping, sexy styling of information instead of boring columns, etc</span></strong>.</p>
<p>Viewing and browsing the medialib could definitely benefit from a rich, themeable design, which would ideally (and optionally?) <strong>smoothen navigation with animations</strong> (see a <a href="http://numbers.xmms.se/~theefer/demo-slide.html">hastily put together demo</a> I made with jQuery, a while ago).</p>
<div class="full-figure"><a href="http://www.flickr.com/photos/besttechie/2619697356/" title="My foobar2000 - 6-28-08"><img src="http://farm4.static.flickr.com/3033/2619697356_5f599c901b.jpg" class="illustration" alt="My foobar2000 - 6-28-08" /></a>
<p class="caption"><a href="http://www.flickr.com/photos/besttechie/2619697356/">My foobar2000 &#8211; 6-28-08</a>, by <a href="http://www.flickr.com/photos/besttechie/" title="BestTechie">BestTechie</a></p>
</div>
<h3>Customizable interaction</h3>
<p>Power-users get easily nervous about GUIs, as they fear that their personal preferences might not be respected:</p>
<blockquote><p>Will there be a STOP button, or only PAUSE?</p></blockquote>
<p>The best way to approach such religious questions is to set a default <em>reasonable with regards to the rest of the default settings</em> (i.e. coherent with the &#8220;default experience&#8221;), and let the user change it if she wants to.</p>
<p>Note that I put as much emphasis here on configurability as on picking a sensible default.  In parallel, fine-grained options should be hidden away from the main configuration panel to keep it usable — a standard configuration pane similar to Mozilla&#8217;s <code>about:config</code> can do the trick.</p>
<blockquote><p>Will it require me to reach for the mouse?</p></blockquote>
<p>I believe that <strong>a complete GUI player should be usable either exclusively with the mouse, exclusively with the keyboard, or with a combination of both</strong>.</p>
<p>The keyboard access is often assimilated to <em>keyboard shortcuts</em>, and indeed advanced users often rely on shortcuts to work quickly with an interface.  They should even be able to define their own shortcuts bound to arbitrary actions (jump to the playing song, enqueue the album for the track I&#8217;m viewing, etc).</p>
<p>However, <span class="pullquote"><!-- command-lines have been making a comeback into GUIs lately --> another underused keyboard-based interface has been making a comeback into GUIs lately</span>.  You might have heard of it, it&#8217;s called the <em>command-line</em>.</p>
<p>Apart from the venerable emacs and vim, command-lines have been creeping more or less discretely into various Mozilla projects.  <a href="https://bespin.mozilla.com/">Bespin</a>, the web-based text editor has attempted at allowing users to run smart commands directly in the editor.  And of course, the Firefox 3 Awesome Bar is just a step away from a command-line; a step taken by the <a href="https://wiki.mozilla.org/Taskfox">TaskFox</a> (see <a href="http://azarask.in/aza/TaskFox/">demo</a>), which brings Ubiquity into the browser address bar.</p>
<p>I had experimented with the idea of a CLI-based GUI (sounds strange doesn&#8217;t it?) with my unfinished <a href="http://git.xmms.se/?p=lindale.git;a=summary">lindalë</a> prototype, and I think it could bring a lot of interesting power to our new graphical player.</p>
<p>More on this idea in a future post.</p>
<h3>Scriptable features</h3>
<p>As usual, <span class="pullquote"><!-- the level of scriptability is a trade-off decision, somewhere between the horror of Excel inline formulas and the universal meta-ness of emacs --> the level of scriptability is a trade-off decision, somewhere between the horror of Excel inline formulas (a sad ad-hoc hack most of the time) and the universal meta-ness of emacs (which allows the editor to rewrite itself when you&#8217;re not looking)</span>.  The latter is naturally attractive to us geeks, but it&#8217;s probably excessive in terms of work required.</p>
<p>On the other hand, if we pursue our <a href="http://bytes.inso.cc/wp/2009/03/21/gentlemen-start-your-toolkits-ep-v-the-flamewar-strikes-back/">idea of using a high-level<br />
language for the GUI</a> (possibly QtScript, which is <a href="http://www.qtsoftware.com/developer/qt-roadmap#javascript-unification">being worked on</a>), it should be relatively easier to import self-contained extensions into the player.</p>
<p>In terms of design, it would be preferable to <strong>think of such &#8220;extensions&#8221; as features of the player, rather than external add-ons</strong> bolted onto it.  The player itself would therefore be nothing more than a platform hosting extensions/features, and even the default interface would be implemented as extensions, indistinguishable from third-party ones.</p>
<p>This would for instance allow anyone to tweak the widget that displays search results, or replace it with something completely different.  Even better, entirely new features could be imported, e.g. a rich interface exposing a bookmarking system (managing a generic bookmarking service client under the scene), or new widgets to explore one&#8217;s music library.</p>
<hr />
<p>Possibilities are endless, and our time to work on them isn&#8217;t.</p>
<p>I have been discussing some of those ideas with <em>greafine</em>, our student working on this project for this year&#8217;s Summer of Code, and we&#8217;ll work together to determine what is feasible technically and temporally.  In any case, I hope this post hints at various ways we shall explore to achieve high <strong>extensibility</strong>!</p>
<div class="full-figure"><a href="http://www.flickr.com/photos/91525158@N00/158068056/" title="starwars_rock"><img src="http://farm1.static.flickr.com/38/158068056_b1762592fb.jpg" class="illustration" alt="starwars_rock" /></a>
<p class="caption"><a href="http://creativecommons.org/licenses/by-nc/2.0/" title="Attribution-NonCommercial License"><img src="http://bytes.inso.cc/wp/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" class="icon cc-logo" /></a> <a href="http://www.flickr.com/photos/91525158@N00/158068056/">starwars_rock</a>, by <a href="http://www.flickr.com/people/Clint M Chilcott/" title="Clint M Chilcott">Clint M Chilcott</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/05/24/embrace-the-community-ep-i-the-fandom-menace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Going beyond tracks and local data (Ep. VII: Return of the GUI)</title>
		<link>http://bytes.inso.cc/wp/2009/03/29/going-beyond-tracks-and-local-data-ep-vii-return-of-the-gui/</link>
		<comments>http://bytes.inso.cc/wp/2009/03/29/going-beyond-tracks-and-local-data-ep-vii-return-of-the-gui/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 23:35:37 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=881</guid>
		<description><![CDATA[Now that we have defined what/whose problem we&#8217;re trying to solve, and debated about the implementation details, it would be worth asking why a graphical XMMS2 client would be a good fit.
After all, we have a brand new korving CLI (nycli), isn&#8217;t that enough?  In a sense it is, but it fills a different [...]]]></description>
			<content:encoded><![CDATA[<p>Now that we have defined <a href="http://bytes.inso.cc/wp/2009/03/18/we-need-a-dream-ep-iv-a-new-hope/">what/whose problem we&#8217;re trying to solve</a>, and debated about the <a href="http://bytes.inso.cc/wp/2009/03/21/gentlemen-start-your-toolkits-ep-v-the-flamewar-strikes-back/">implementation details</a>, it would be worth asking why a graphical XMMS2 client would be a good fit.</p>
<p>After all, we have a <a href="http://wiki.xmms2.xmms.se/wiki/New_korving_CLI">brand new korving CLI (nycli)</a>, isn&#8217;t that enough?  In a sense it is, but it fills a different niche.  GUI applications are good at things that CLI applications aren&#8217;t, and vice-versa.  So the goal is to exploit the specific advantages of graphical music players.</p>
<p>For instance, even the most hardcore fans of the command-line will admit that the following tasks are easier with a graphical player:</p>
<ul>
<li>Edit a playlist, using mouse selection and drag-and-drop.</li>
<li>Browse albums by cover.</li>
<li>Organize music manually into playlists or using dynamic collections.</li>
</ul>
<p>But these are just simple examples that are now expected of any standard graphical music player.</p>
<p>Can&#8217;t we get something more <strong>exciting</strong>?</p>
<p>As Obama taught us, &#8220;yes, we can!&#8221;</p>
<p>Three main aspects usually poorly supported and under-exploited in music players are powerful tools to:</p>
<ul>
<li>Browse</li>
<li>Organize</li>
<li>Explore/discover</li>
</ul>
<h3>Browsing</h3>
<p>Graphical applications provide a rich visual experience that can be exploited to <strong>navigate large amounts of information</strong>, in particular using the spatial aspect and our ability to recognize images quickly.</p>
<p>Typically, users have become familiar with widgets like <a href="http://en.wikipedia.org/wiki/Cover_Flow">iTunes Cover Flow</a>, which exploit the visual clue of album covers to quickly flick through releases.  Several XMMS2 developers have expressed their interest in a more &#8220;album-centric&#8221; client, which essentially means supporting album entities in the interface, as opposed to just tracks.</p>
<p>An extra step would be to also promote the artists, and possibly other properties (e.g. genre, year, label), as premium entities.  So rather than &#8220;album-centric&#8221;, the client would be &#8220;entity-centric&#8221; (in the sense that most existing music players are track-centric).  <span class="pullquote">Each entity could have its own fullscreen pane (or &#8220;page&#8221;), with corresponding information (more below) and links to browse the related entities.</span>  This would lead to a web-like navigation, where for instance each artist would get a page with the list of his releases (plus a photo, bio, etc), and clicking on a release would bring the page for that release, with the list of tracks.</p>
<p>However, browsing doesn&#8217;t have to follow a rigid path: we&#8217;re used to browsing inside categories (e.g. releases) alphabetically, and to jump between categories using the explicit hierarchy from the data (e.g. from an artist to its releases to their tracks), but that&#8217;s just one of many possibilities.</p>
<p>The user may want to browse a subset of her media library, for instance filtering by a range of release years and genre (e.g. &#8220;70&#8217;s rock&#8221;), or a custom collection she assembled herself.  She may want to follow connections from an artist page to pages of &#8220;related artists&#8221;, to use tags to jump from a track to a list of albums, to find all the music she added the same week as a given release.</p>
<p>It&#8217;s time to think beyond the simple local data and harvest The Cloud to enrich the user experience; services like <a href="http://www.last.fm/">Last.Fm</a> already provide an API to retrieve Similar Artists, social Tags, etc.  And with our Collections API, it&#8217;s just a whole lot of power waiting to be unleashed!</p>
<h3>Organizing</h3>
<p>While <em>browsing</em> is the passive process of visiting what&#8217;s there, <strong>organizing</strong> is the active process of applying your own order on the content.</p>
<p><em>Playlists</em> are the most common organizational tool, usually directly tied to playback, and the usual editing features should naturally be supported (insert, enqueue, move, remove).  Special playlist behavior (queue, party shuffle, random, etc) should also be configurable easily.  (Note: fancy playlist formatting is outside the scope of this post.)</p>
<p>The second main organizational tool is <em>collections</em>.  A collection is akin to a &#8220;themed-bucket&#8221;, i.e. a set of music that the user has put together in order to reuse it later.  But rather than focusing on the underlying nature of a collection (a graph of operators), the interface should emphasize the organic process of someone creating a custom group of music.  <span class="pullquote">Any search, or essentially any &#8220;view&#8221; of music, should be recordable as a collection</span>; and it should always be possible to refine or further filter a collection, as well as add custom content to it.  It should be as easy as typing a search or dropping content in a folder, rather than as complex as setting up a network of mail filters.</p>
<p>Finally, <em>tags</em> should be at the user&#8217;s disposal for applying a minimal <em>description</em> to content.  There is a subtle difference between tags and collections (and how they play together), and I don&#8217;t have much in mind regarding tags so far, but I think they will definitely be a powerful addition.</p>
<h3>Exploring/Discovering</h3>
<p>In the browsing section above, different new ways to navigate one&#8217;s music have been evoked.  The next logical step after that, however, is to help the user <strong>discover new music</strong> he doesn&#8217;t yet know about, by giving pointers to music and information outside of his media library.</p>
<p>Many online services offer to make you discover new music, but this feature remains unusual in desktop music players, except <a href="http://spotify.com/">Spotify</a> (with a tab of related artists) and recent versions of <a href="http://banshee-project.org/">Banshee</a> (with custom recommendations, perhaps based off Last.Fm?).</p>
<p>Those illustrate two interesting directions.</p>
<p>First, providing pointers from a certain point in the user&#8217;s media library to complementary information and new music.  For instance, on an artist pane, show the list of all its releases, including those missing from the user&#8217;s music files, show related artists, both present in the user&#8217;s media library or not, show the artist&#8217;s news feed, etc.  Or show reviews for albums, or lyrics for individual tracks.  Basically, gather information from external sources about the user&#8217;s music, and invite him to discover new music as well.</p>
<p>The second direction is more general: given the user&#8217;s music profile and playback history, suggest new artists or genres he might be interested in exploring.  For instance, using all the artists present in the media library, infer what will be the user&#8217;s <a href="http://yournextfavband.com/">next favorite band</a>.  Or suggest popular releases, based on the kind of music recently played.  Here, suggestions are made spontaneously, based on the behavior of the user.</p>
<p>The goal of these two features is to get the user excited about not just his current music files, but the whole portion of the music world they span.  They should <span class="pullquote">invite the user to be curious about his or new music</span>.</p>
<p>One place to put these suggestions on would be the music player&#8217;s &#8220;home screen&#8221;.  Without entering into too much details yet, the player could provide the user with ideas on what he might want to listen, based on what he played recently, his collections, tags, etc.  Rather than a long table of &#8220;all the tracks&#8221;, the entry screen could be a richer, custom view of different ways he could start playing his music.</p>
<p>Obviously, this post hinted at a lot of potentially complex features, which would take a lot of time and effort to all put together perfectly.  The main point, however, was to point at various ways of making the experience of this music player a little special.  In particular, most existing players are still nothing more than a fancy dressing over music tracks (i.e. files).</p>
<p>But to make a really rich and complete experience, I believe that one must embrace music as a culture; promoting entities (e.g. artists, genre, releases, etc) to key navigation points and tying it to all the information available on the web would be a good start in that direction.</p>
<div class="full-figure"><a href="http://www.flickr.com/photos/7702002@N08/891283152/" title="Darth Cee-Lo"><img src="http://farm2.static.flickr.com/1147/891283152_0939251efb.jpg" class="illustration" alt="Darth Cee-Lo" /></a>
<p class="caption"><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License"><img src="http://bytes.inso.cc/wp/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" class="icon cc-logo" /></a> <a href="http://www.flickr.com/photos/7702002@N08/891283152/">Darth Cee-Lo</a>, by <a href="http://www.flickr.com/people/Ethan Hein/" title="Ethan Hein">Ethan Hein</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/03/29/going-beyond-tracks-and-local-data-ep-vii-return-of-the-gui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gentlemen, start your toolkits (Ep. V: The Flamewar Strikes Back)</title>
		<link>http://bytes.inso.cc/wp/2009/03/21/gentlemen-start-your-toolkits-ep-v-the-flamewar-strikes-back/</link>
		<comments>http://bytes.inso.cc/wp/2009/03/21/gentlemen-start-your-toolkits-ep-v-the-flamewar-strikes-back/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 01:29:31 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=877</guid>
		<description><![CDATA[Note: tru just blogged about this subject, so I&#8217;m adapting my original draft and replying to tru&#8217;s post.
All graphical application projects face the dreaded perspective of endless flamewars about technical choices, and XMMS2 clients haven&#8217;t been spared:
What language to write the client in?  What toolkit to use?  What platform to support?  Where [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: tru <a href="http://deadsilversky.blogspot.com/2009/03/official-xmms2-client-should-be-written.html">just blogged about this subject</a>, so I&#8217;m adapting my original draft and replying to tru&#8217;s post.</em></p>
<p>All graphical application projects face the dreaded perspective of endless flamewars about technical choices, and XMMS2 clients haven&#8217;t been spared:</p>
<blockquote><p>What language to write the client in?  What toolkit to use?  What platform to support?  <span class="sarcasm">Where to put the opening curly brace?</span></p></blockquote>
<p>In fact, this freedom of choice seems to always have been one of the major obstacles to the creation of an official GUI client.</p>
<p>At FOSDEM &#8216;09, perhaps helped by the virtues of IRL discussions (and all the great food &amp; beer), we had a debate about the pros and cons of all possible combinations and came up with a reasonable proposition that should hopefully suit most interested developers in the XMMS2 community.</p>
<p>Because we don&#8217;t want to require users to install unusual graphical toolkit libraries (good morning <a href="http://www.enlightenment.org/">Rasterman</a>), GTK+ and Qt are the only two obvious choices, with GTK+ having the slight advantage of being more widely installed in the GNU/Linux world.  However, nobody really contests the claim that Qt is a superior API in terms of design.</p>
<p>One important argument brought into the discussion was platform support.  In line with the <a href="http://wiki.xmms2.xmms.se/wiki/XMMS2_Vision">XMMS2 Vision</a>, we want to respect the users&#8217; freedom to choose their OS by making the official GUI client run on a wide selection of systems, at least GNU/Linux, MacOS X and Windows. In the current state, GTK+ integration in MacOS X simply isn&#8217;t good enough, and given the new Qt licensing as fully Free Software, the Qt toolkit is the most appropriate choice.</p>
<p>The other touchy subject is obviously the programming language.  Most people agreed that using high-level interpreted languages would make for a more dynamic and simple development process.  The most popular contestants for the code throne are Python and Ruby, with Python more widely used and installed on GNU/Linux.</p>
<p>Either choice would require bundling the runtime with the client on proprietary platforms.  A <a href="http://arstechnica.com/open-source/guides/2009/03/how-to-deploying-pyqt-applications-on-windows-and-mac-os-x.ars">recent article on Ars Technica</a> analyzed the deployment of PyQt apps on Windows and OS X, and while it seems reasonably good on Windows, the OS X support was quite lacking according to the author.</p>
<p>An alternative solution suggested by DraX was to develop the client QtScript, which is the ECMAScript (think JavaScript) implementation embedded in the newer Qt.  It remains uncertain, however, how much can be done purely in QtScript and where are the limits, both in terms of performance and design limitations.  tru hinted at it, but I think it&#8217;d still be worth investigating and experimenting before we draw final conclusions.</p>
<p>If QtScript was too limited, we&#8217;d have to rely on more C++ code (which is somewhat annoying for rapid development) or switch to Python (which isn&#8217;t particularly my language of preference, as some may know).  In case of a draw, it might also simply be up to the people who start working on the project, including a potential <a href="http://wiki.xmms2.xmms.se/wiki/Summer_of_Code_2009/Proposed_projects">Google Summer of Code student with XMMS2</a>!</p>
<p>As tru suggested, it&#8217;d probably be best to use the native C++/Qt XMMS2 bindings, and stabilizing them could be part of the preparatory work for this project (and a good motivation).</p>
<p>In short, the current idea is to write the new XMMS2 client using Qt and C++/QtScript or possibly PyQt, and to have it available at least on the main desktop platforms (GNU/Linux, MacOS X, Windows). Discussions still open, but avoid feeding the trolls please.</p>
<div class="full-figure"><a href="http://www.flickr.com/photos/7667534@N04/2932711624/" title="Darth Vader on the violin"><img src="http://farm4.static.flickr.com/3179/2932711624_464f17810d.jpg" class="illustration" alt="Darth Vader on the violin" /></a>
<p class="caption"><a href="http://creativecommons.org/licenses/by-nc/2.0/" title="Attribution-NonCommercial License"><img src="http://bytes.inso.cc/wp/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" class="icon cc-logo" /></a> <a href="http://www.flickr.com/photos/7667534@N04/2932711624/">Darth Vader on the violin</a>, by <a href="http://www.flickr.com/people/Houston Marsh/" title="Houston Marsh">Houston Marsh</a></p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/03/21/gentlemen-start-your-toolkits-ep-v-the-flamewar-strikes-back/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>We need a dream (Ep. IV: A New Hope)</title>
		<link>http://bytes.inso.cc/wp/2009/03/18/we-need-a-dream-ep-iv-a-new-hope/</link>
		<comments>http://bytes.inso.cc/wp/2009/03/18/we-need-a-dream-ep-iv-a-new-hope/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 00:49:22 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=871</guid>
		<description><![CDATA[As I said earlier, what&#8217;s lacking to make an awesome XMMS2 GUI client is a common vision.
We need a dream!
I have a dream that one day this community will rise up and live out the true meaning of its creed: &#8220;when the music is end xmms power of the pc.&#8221;
I have a dream that one [...]]]></description>
			<content:encoded><![CDATA[<p>As I <a href="http://bytes.inso.cc/wp/2009/02/13/xmms2-gui-clients-all-sort-of-suck/">said earlier</a>, what&#8217;s lacking to make an awesome XMMS2 GUI client is a common <strong>vision</strong>.</p>
<p><strong>We need a dream!</strong></p>
<blockquote><p>I have a dream that one day this community will rise up and live out the true meaning of its creed: &#8220;when the music is end xmms power of the pc.&#8221;</p>
<p>I have a dream that one day on #xmms2, the sons of former GTK+ developers and the sons of former Qt developers will be able to work together on the code of a GUI client.</p>
<p>I have a dream that one day even the state of Microsoft, a state sweltering with the heat of instability, sweltering with the heat of dull interfaces, will be transformed into an oasis of freedom and music.</p>
<p>I have a dream that XMMS2 clients will one day live in a community where they will not be judged by their GUI toolkit but by the content of their user experience.</p>
<p>I have a dream today!</p></blockquote>
<p>(Kudos to Martin Luther King for the <a href="http://www.americanrhetoric.com/speeches/mlkihaveadream.htm">original draft</a>.)</p>
<p>In the end, all we want is an awesome music player.</p>
<p>But do we all share the same definition of what an awesome music player is?  Probably not.  In fact, I don&#8217;t think most of us even <em>knows</em> what an awesome music player is; if there were one, we wouldn&#8217;t have to build one, right?</p>
<p>So the goal here is to gather qualities that we expect of such a project, and refine them into a common vision.  I won&#8217;t start dropping design mockups or fancy feature ideas until we have established what we all want, conceptually.</p>
<p>What I expect of this GUI client, and the vision for the project, is that it should be:</p>
<ul>
<li>Exciting</li>
<li>Original</li>
<li>Expandable</li>
<li>Clearly focused</li>
</ul>
<p>Nobody wants to work on boring project — at least nobody in the FOSS community.  Elsewhere, people do code for money and dream of larger cars and larger breasts, but in the XMMS2 community, all we dream of are <strong>exciting</strong> coding projects.  It should be exciting enough to make developers drop their own projects to work on it, and to make users fret about it.  It should be exciting enough to compensate compromises by the quality of the end result.</p>
<p>One way to make it exciting is to make sure it is <strong>original</strong>.  It&#8217;s way more thriving to build something new and unique than to try to replicate something everyone has seen before.  Harder, yes, but more exciting!  For the users, it will also help it stand apart from the variety of existing music players, either as a grand fiasco, or as a sexy newcomer.</p>
<p>Because people love to experiment and to make things their own, it should be <strong>expandable</strong>: rather than a static monolith, it should let developers and users play with it and customize it and adapt it to their needs.  There will always be limits of course, but to remain true to the XMMS2 spirit, we should favor a modular design and bundle freedom inside.</p>
<p>Finally, it is primordial to establish a <strong>clear focus</strong> on what problem this client is meant to solve.  The worst usability often comes from a blurry focus, or the wish to solve too many (or all) different problems.</p>
<p>I will come back to the first three qualities in future posts, and elaborate on the clear focus in the rest of this post.</p>
<p>Before anything else, we need to define what we want the <strong>target audience</strong> to be: newbies? your mum? the average random user? hardcore music fans? &#8220;everyone&#8221;?</p>
<p>It&#8217;s a tough call, but clearly, by trying to content everyone, we couldn&#8217;t provide the best solution for each group of users.  But if we look at the XMMS2 demographics and, more importantly, the (brand new) <a href="http://wiki.xmms2.xmms.se/wiki/XMMS2_Vision">Vision</a>, it&#8217;s easy to see that we already target a particular niche of music listeners: <strong>demanding audiophiles, passionate fans who care about music</strong>.  Which is very different from &#8220;everyone&#8221; or an average user.</p>
<p>Concretely, they might tend to have larger music libraries and more complete releases than scattered tracks.  They might be more keen on browsing and organizing their music (using tags, folders, or their own semantics), on fine-tuning their audio setup (soundcard, equalizer, gapless playback), on joining music networks (e.g. Last.Fm) and discovering new music.  They are the people who spend multiple nights getting complicated plugins and fancy themes working in <a href="http://www.foobar2000.org/">foobar2000</a>, to provide a full experience for their music; not the people who gaze in wonder at the atrocious WMP fullscreen visualization.</p>
<p>We can expect slightly more patience and curiosity from them but in return, we must provide them with powerful tools, with a great user experience and ways to make it their own.</p>
<p>Now, it doesn&#8217;t mean that the player should be unusable by anybody outside that niche.  Simply, it should focus on filling it as best as possible, before anything else.</p>
<p>Therefore, my suggestion is to <strong>make this XMMS2 GUI client a great music player for people who care about and love music, and make it a rich experience for playing, browsing, searching, organizing, discovering and enjoying music</strong>.</p>
<p>It is an ambitious goal, but I believe it is one that is exciting, original and expandable!</p>
<div class="full-figure"><a href="http://www.flickr.com/photos/23049857@N04/3105492898/" title="Pearl"><img src="http://farm4.static.flickr.com/3193/3105492898_496d465ccb.jpg" class="illustration" alt="Pearl" /></a>
<p class="caption"><a href="http://creativecommons.org/licenses/by-nc-sa/2.0/" title="Attribution-NonCommercial-ShareAlike License"><img src="http://bytes.inso.cc/wp/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" class="icon cc-logo" /></a> <a href="http://www.flickr.com/photos/23049857@N04/3105492898/">Pearl</a>, by <a href="http://www.flickr.com/people/Camila.../" title="Camila...">Camila&#8230;</a></p>
</div>
<p><em>Addendum: FLACvest just posted <a href="http://amot.wordpress.com/2009/03/16/re-xmms2-visibility-a-post-id-left-at-the-island-of-eleusis-blog/">a<br />
very flattering post about XMMS2</a> and mentions similar attributes<br />
that would benefit XMMS2: Totally Fresh and Unique, Beautiful,<br />
Cross-Platform, some &#8220;magic&#8221; ingredient!</em></p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/03/18/we-need-a-dream-ep-iv-a-new-hope/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>XMMS2 GUI clients all sort of suck</title>
		<link>http://bytes.inso.cc/wp/2009/02/13/xmms2-gui-clients-all-sort-of-suck/</link>
		<comments>http://bytes.inso.cc/wp/2009/02/13/xmms2-gui-clients-all-sort-of-suck/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 00:36:32 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://bytes.inso.cc/wp/?p=857</guid>
		<description><![CDATA[Ask anyone on the street why they are not using XMMS2 right now and they will tell you the same thing:
But, like, all your GUI clients suck lol!
You needn&#8217;t have punched the poor guy in the face, because I also believe it is quite true.
We have quite a few clients (you will have to check [...]]]></description>
			<content:encoded><![CDATA[<p>Ask anyone on the street why they are not using XMMS2 right now and they will tell you the same thing:</p>
<blockquote><p>But, like, all your GUI clients suck lol!</p></blockquote>
<p>You needn&#8217;t have punched the poor guy in the face, because I also believe it is quite true.</p>
<p>We have <a href="http://wiki.xmms2.xmms.se/wiki/Clients">quite a few clients</a> (you will have to check out the <a href="http://wiki.xmms2.xmms.se/wiki/Clientlist">matrix</a> by yourself), but none that can really be called polished, mature or attractive enough to motivate people to switch.  No disrespect to the authors (I&#8217;m even one of them), some cool stuff has been done, but graphical clients aren&#8217;t really &#8220;ready for the desktop&#8221; yet. Which is really a pity, given the <strong>awesome framework we have in place to create a great music player</strong>.</p>
<p>I believe that the reason for this isn&#8217;t that we don&#8217;t have competent developers, but rather that all of these projects are one- or two-men effort and not really thrived by the community.  Because of the freedom you have to write your own client, well, people do: they follow their personal vision of what they want their music player to be like and start coding.  Unfortunately, this isn&#8217;t the most effective strategy.</p>
<p>Perhaps thanks to the physicality of our meeting at FOSDEM, or to all the Belgium beer, we acknowledged that and decided that, now that the new official command-line interface (AKA <a href="http://wiki.xmms2.xmms.se/wiki/New_korving_CLI">nycli</a>) has been merged and is being worked on by various people (thanks greafine, AnthonyG, nesciens!), it was time to get serious about a graphical client.</p>
<p>The best way to get people to work together on a new project is to establish a <strong>clear and common vision of what we&#8217;re aiming at</strong>, what are the <strong>ideas that structure the project</strong>, and <strong>get people excited about it</strong>! The vision should be compatible with the <a href="http://wiki.xmms2.xmms.se/wiki/XMMS2_Vision">XMMS2 vision</a> we&#8217;re currently discussing (thanks to Debian&#8217;s Bdale Garbee for the inspiration).</p>
<p>I want to make it clear that even if members of the XMMS2 community start working together on a common client, it is in no way incompatible with other people writing their own client if they so wish.  Simply, we hope to gather people working on similar clients and focus the effort to build something really, really cool!</p>
<p>So I&#8217;m going to start posting things on this blog to propose directions for a vision to follow, and <strong>everyone is welcome to comment, reply, blog and debate the ideas</strong> so we solidify the basis we will start from.  There will be a lot of things to discuss, from technical choices to interface challenges, so let&#8217;s get started!</p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2009/02/13/xmms2-gui-clients-all-sort-of-suck/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>XMMS2 client spotlight: Konfetka</title>
		<link>http://bytes.inso.cc/wp/2007/09/27/xmms2-client-spotlight-konfetka/</link>
		<comments>http://bytes.inso.cc/wp/2007/09/27/xmms2-client-spotlight-konfetka/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 06:13:58 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[konfetka]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://inso.cc/wp/2007/09/27/xmms2-client-spotlight-konfekta/</guid>
		<description><![CDATA[New XMMS2 clients appear almost weekly, but their visibility has so far been limited to the IRC channel, the Wiki and, occasionally, the mailing-list. I thought it would be more exciting for the community to hear about the life (and death) of clients on the Planet, and thus I offer from now on to publish [...]]]></description>
			<content:encoded><![CDATA[<p>New XMMS2 clients appear almost weekly, but their visibility has so far been limited to the IRC channel, the Wiki and, occasionally, the mailing-list. I thought it would be more exciting for the community to hear about the life (and death) of clients on the <a href="http://planet.xmms.se/">Planet</a>, and thus I offer from now on to publish announcements here for all to see!</p>
<p>Just send me a blurb and selected screenshots, and you&#8217;ll get instant fame.</p>
<p>The first client to be announced is <a href="http://code.google.com/p/konfetka/">Konfetka</a>, a Qt GUI interface recently released by afrol and BatteryCell. Try it out, it&#8217;s quite original and feature-complete!</p>
<hr />
<blockquote><p>Ding dong. New client?<br />
Yesness.But&#8230; but&#8230; what is it?</p>
<p><strong><a href="http://code.google.com/p/konfetka/">Konfetka</a></strong> — It&#8217;s the abandoned kid of <a href="http://amarok.kde.org/">Amarok</a> and <a href="http://www.xmms.org/">XMMS1</a> who spent too much time around <a href="http://yakuake.uv.ro/">Yakuake</a> when growing up and now is powered by <a href="http://xmms2.sf.net/">XMMS2</a> and <a href="http://en.wikipedia.org/wiki/Kryptonite">kryptonite</a>, if those aren&#8217;t the same thing.</p>
<p>Or, in practical terms:<br />
We got this little thing that we&#8217;ll be binding to <a href="http://www.kde.org/">KDE 4</a> when that comes out. However, even right now, it has wiki, album art, lyrics and playlist/medialib interfaces. The idea was to have a player that would appear and hide like <a href="http://yakuake.uv.ro/">Yakuake</a>, rolling down from the top of the screen and hiding back up. Code&#8217;s messy, bugs are plentiful, but hey, its our first release and it is usable; so give it a try.</p>
<p>Here are some screenshots of version 0 alpha 1 (click to enlarge):</p>
<p><a title="Konfekta: playlist and medialib" href="http://inso.cc/wp/wp-content/uploads/2007/09/konfetka-1-big.png"><img class="illu1" src="http://inso.cc/wp/wp-content/uploads/2007/09/konfekta-1.png" alt="Konfekta: playlist and medialib" /></a></p>
<p><a title="Konfekta: contextual information" href="http://inso.cc/wp/wp-content/uploads/2007/09/konfetka-2-big.png"><img class="illu1" src="http://inso.cc/wp/wp-content/uploads/2007/09/konfekta-2.png" alt="Konfekta: contextual information" /></a></p>
<p>We think it&#8217;s rather cool.</p>
<p>Konfetka. Come visit us at <a href="http://code.google.com/p/konfetka/">http://code.google.com/p/konfetka/</a>.</p>
<p>~Konfetka devs. A. Frolenkov, Joey Lynch.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2007/09/27/xmms2-client-spotlight-konfetka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MP3Tunes contest: XMMS2 support?</title>
		<link>http://bytes.inso.cc/wp/2007/09/21/mp3tunes-contest-xmms2-support/</link>
		<comments>http://bytes.inso.cc/wp/2007/09/21/mp3tunes-contest-xmms2-support/#comments</comments>
		<pubDate>Fri, 21 Sep 2007 05:27:58 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[mp3tunes]]></category>
		<category><![CDATA[music.player]]></category>

		<guid isPermaLink="false">http://inso.cc/wp/2007/09/21/mp3tunes-contest-xmms2-support/</guid>
		<description><![CDATA[MP3Tunes may or may not be an Evil (as in Axis of ~) service, but it just announced a developer contest to encourage people to implement its API and create new interfaces (on the desktop, mobile phone, TV, toilet seat, whatever).
The contest page on the official website isn&#8217;t quite as verbose as one would have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.mp3tunes.com/">MP3Tunes</a> may or may not be an Evil (as in <em>Axis of ~</em>) service, but it just announced a developer contest to encourage people to implement its API and create new interfaces (on the desktop, mobile phone, TV, toilet seat, whatever).</p>
<p>The <a href="http://www.mp3tunes.com/cb/contest">contest page on the official website</a> isn&#8217;t quite as verbose as one would have hoped, though, and the link to the rules points to a missing webpage. Some more intel is however available in a <a href="http://www.michaelrobertson.com/archive.php?minute_id=244">blog post on Michael Robertson&#8217;s blog</a>. Yes, Michael MP3.Com/Linspire Robertson, who is also Michael MP3Tunes Robertson, obviously.</p>
<p>The deal: you have until November 5th, 2007, to submit an interface to MP3Tunes in one of the ten predefined categories (Desktop Player, Game Console, WebUI, PDA, etc). The winner in each category will receive a cosy $1000. I haven&#8217;t determined whether it&#8217;s a public vote, a closed jury, or some other semi-random algorithm involving <a href="http://www.neilgaiman.com/journal/uploaded_images/IMG_0434-747430.JPG">car-driving girafes</a>.</p>
<p>I haven&#8217;t yet checked what the <a href="http://www.mp3tunes.com/api/">API</a> offers, either, but I sure wonder whether we could hack something together with <a href="http://xmms2.sf.net/">XMMS2</a>. If it could be hooked into the daemon, and apart from the obvious ever satisfying benefit of being neat and fun, it might allow using any of our interfaces (AKA <a href="http://wiki.xmms2.xmms.se/index.php/XMMS2_Clients">clients</a>) to play music from MP3Tunes.</p>
<p>From what I see, MP3Tunes isn&#8217;t much more than an online storage for music files, that you either upload or retrieve from wherever on the web. (Let&#8217;s leave the obvious legal issues to Michael&#8217;s lawyers, shall we?) This means that you have a whole medialib on their server, apparently indexed and searchable and, naturally, playable. If I&#8217;m not mistaken, the &#8220;streaming&#8221; seems to be nothing more than retrieving the music file (original or transcoded to mp3) over HTTP, which XMMS2 already supports.</p>
<p>In the current scheme, our medialib assumes to contain all the media and their metadata, so unless this is extended to support distributed media libraries (hello, Summer of Code 2008?), it means we would have to sync the remote MP3Tunes medialib to the local XMMS2 medialib. Sounds a bit tedious and expensive and ugly, so suggestions are welcome with better solutions!</p>
<p>These are the few implementation considerations I can think of off the top of my head, but overall it doesn&#8217;t sound so complicated, unless we want the support to be very smart (async, allow upload/download media, etc).</p>
<p>Of course, the whole contest looks like a call for devs to code cool interfaces to a money-making online service (mostly) for free, more than anything else, but let&#8217;s just consider the idea for a minute and whether it could justify spending some energy on writing one or several polished clients (which I think most of us agree we need).</p>
<p>And transparently sharing music through a (currently) free, password protected, remote service can&#8217;t be such a useless idea, can it?</p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2007/09/21/mp3tunes-contest-xmms2-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Almost all those problems could be solved with tabs&#8230;</title>
		<link>http://bytes.inso.cc/wp/2007/08/17/almost-all-those-problems-could-be-solved-with-tabs/</link>
		<comments>http://bytes.inso.cc/wp/2007/08/17/almost-all-those-problems-could-be-solved-with-tabs/#comments</comments>
		<pubDate>Fri, 17 Aug 2007 07:41:02 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[amarok]]></category>
		<category><![CDATA[hci]]></category>
		<category><![CDATA[music.player]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://inso.cc/wp/2007/08/17/almost-all-those-problems-could-be-solved-with-tabs/</guid>
		<description><![CDATA[This remarkable HCI insight comes from a comment on Amarok&#8217;s blog, where people have been very busy trashing the latest Amarok2 UI mockup which happens to be, let&#8217;s be honest because it&#8217;s only a mockup anyway, quite horrible.
Wasted place all over the place, too small text placed within too large widgets, inconsistent style, a festival [...]]]></description>
			<content:encoded><![CDATA[<p>This remarkable <acronym title="Human-Computer Interaction">HCI</acronym> insight comes from <a href="http://amarok.kde.org/blog/archives/468-to-all-the-self-described-critics.html#c3491">a comment on Amarok&#8217;s blog</a>, where people have been very busy trashing <a href="http://amarok.kde.org/blog/archives/467-Amarok-Plasmification.html">the latest Amarok2 UI mockup</a> which happens to be, let&#8217;s be honest because it&#8217;s only a mockup anyway, quite horrible.</p>
<p>Wasted place all over the place, too small text placed within too large widgets, inconsistent style, a festival of duplicated information in the playlist view on the right, the ever-dreaded tabs on the left (yes, tabs are usually evil).</p>
<p>Seriously.</p>
<p>Someone has to wake up and fix this but hey, guess what, it&#8217;s just a mockup, so they might!</p>
<p>What is more interesting, however, is the shift of focus in the way users are supposed to interact with the player. The developers make it clear that they want to make the &#8220;context browser&#8221; central, and reduce the importance of the playlist. I&#8217;ve been advocating something similar since the early days of <a href="http://wiki.xmms2.xmms.se/index.php/Collections_Design">Collections</a> (already in my initial <a href="http://inso.cc/wp/2005/07/11/better-music-player-manifesto/">manifesto</a>), but I find it bold of them to push this change in an already widely popular program.</p>
<p>Users <em>will</em> be shocked and disturbed, so it better be polished enough to prove how superior this approach is. In particular, the interaction between the context view and the playlist needs careful attention, and the edition of playlists should be facilitated.</p>
<p>In the current mockup, I find it worrying that they don&#8217;t seem to find it useful to give easy access to multiple saved playlists. Right now, you need to go from the playlist to the other side of the screen, and hunt for the (two?) playlist tabs (which seems to require cocking one&#8217;s head sideways by 90° unless you&#8217;re Mad-eye Moody). I certainly hope they will optimize the interaction flow as much as the interface.</p>
<p>Whether the idea and its implementation are good isn&#8217;t even as relevant as the observation that you cannot satisfy all users with a single program. User interaction and preferences is a multi-dimensional space, and you can never span it in every dimension.</p>
<p>An interface is a compromise. Usability defines how large the compromise is, and how much the application satisfies the goals it aims for, in the user&#8217;s experience.</p>
<p>I believe that this is one of the qualities of <a href="http://xmms2.sf.net/">XMMS2</a>, which solves the technical problems for the end-developers and lets them focus on providing a wide variety of complementary interfaces, all backed by the same daemon. Of course, this modularity is a performance tradeoff, and the daemon isn&#8217;t optimized for every possible use. Still, it calls for new experiments and ideas. And with the approaching end of the Summer of Code, new possibilities (<a href="http://wiki.xmms2.xmms.se/index.php/Summer_of_Code_2007/Generated_IPC">GenIPC</a>, <a href="http://wiki.xmms2.xmms.se/index.php/Summer_of_Code_2007/Service_Clients">service clients</a>, <a href="http://wiki.xmms2.xmms.se/index.php/Summer_of_Code_2007/Visualization">visualization</a>, <a href="http://wiki.xmms2.xmms.se/index.php/Summer_of_Code_2007/Testing_Framework">test framework</a>) are at the door!</p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2007/08/17/almost-all-those-problems-could-be-solved-with-tabs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collections in the XMMS2 music player</title>
		<link>http://bytes.inso.cc/wp/2007/06/28/collections-in-the-xmms2-music-player/</link>
		<comments>http://bytes.inso.cc/wp/2007/06/28/collections-in-the-xmms2-music-player/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 14:47:37 +0000</pubDate>
		<dc:creator>theefer</dc:creator>
				<category><![CDATA[xmms2]]></category>
		<category><![CDATA[collections]]></category>
		<category><![CDATA[information]]></category>
		<category><![CDATA[lwn]]></category>
		<category><![CDATA[music.player]]></category>
		<category><![CDATA[organization]]></category>

		<guid isPermaLink="false">http://inso.cc/wp/2007/06/28/collections-in-the-xmms2-music-player/</guid>
		<description><![CDATA[This is a repost from the article published in LWN and mentioned earlier on this blog. Thanks to LWN for publishing it in the first place, and to all the people who proofread and commented on it! I hope this will serve as a more up-to-date introduction to Collections in XMMS2 (I should probably post [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is a repost from the article <a href="http://lwn.net/Articles/237952/">published in LWN</a> and <a href="http://inso.cc/wp/2007/06/19/drjekyll-collections-and-other-korvar/">mentioned earlier</a> on this blog. Thanks to <a href="http://lwn.net/">LWN</a> for publishing it in the first place, and to all the people who proofread and <a href="http://lwn.net/Articles/237952/#Comments">commented</a> on it! I hope this will serve as a more up-to-date introduction to Collections in XMMS2 (I should probably post it on the <a href="http://wiki.xmms2.xmms.se/">wiki)</a>. Discussion is welcome, naturally.</em></p>
<p>The number of music players on Linux has been steadily increasing lately, but while these projects have been getting more and more polished, we have yet to see revolutionary improvements in terms of user experience. Indeed, the trend has privileged borrowing as many features as possible from other projects, rather than questioning the reasons behind their design.</p>
<p>This article describes XMMS2&#8217;s attempt to address long-standing limitations of music players, through its new support for <em>Collections</em>. First, I will summarize the rationale behind this feature, then present its concept and implementation. A conclusion about the current state and future directions of Collections will close the article.</p>
<h3>Design rationale</h3>
<p>I have been concerned with the state of music players for a long time. Two years ago, I wrote a <a href="http://inso.cc/wp/2005/07/11/better-music-player-manifesto/">Manifesto for a Better Music Player</a>.  Although my ideas have evolved since then, the general conclusions of that article still hold.</p>
<p>One important argument I made is that the design of a music player should focus on the users&#8217; needs, rather than on a list of well-known features.  All the traditional features (playlist, media library, cover browsing, etc) and hacks (play queue, random mode, etc) stem from the needs users have for:</p>
<ul>
<li>playing music non-linearly</li>
<li>searching for specific media</li>
<li>browsing their media library</li>
<li>organizing their music</li>
</ul>
<p><strong>Non-linear playback</strong> was first introduced in a crude form as the &#8220;random mode&#8221;, directly inspired from legacy CD players. <a href="http://www.apple.com/itunes/">iTunes</a> later popularized its &#8220;<a href="http://www.apple.com/ilife/tutorials/itunes/it4-6.html">Party Shuffle</a>&#8221; mode, which solved the unpredictability of playback by maintaining a queue of randomly selected songs. What we are still waiting for, though, is a smarter mode that would also take into account beat, artist similarity, or other semantic information.</p>
<p>All music players based on a media library provide a <strong>search</strong> feature. Unfortunately, its power is often hindered by annoyingly complex forms used to choose the fields to query. Few developers seem to have noticed the success of Google&#8217;s search interface: minimalistic, but enriched by rating heuristics and a rich syntax for advanced users.</p>
<p>The other axis required by our ever-growing music libraries is <strong>browsing</strong>. Media library browsing is always present in some form, although mostly simplistic and uninspired. When they are not cloning iTunes genre/artist/album filters or cover art browsing, most music players simply present the users with the list of all their media in a plain multi-column layout. Easy to implement, but hard on the eyes for the users. Interestingly, <a href="http://www.foobar2000.org/">Foobar2000</a> (freeware) is the only popular player to allow a <a href="http://www.hydrogenaudio.org/forums/index.php?showtopic=49783">rich customization of the layout</a>, which greatly improves readability.</p>
<p>The lack of features that help users <strong>organize</strong> their media library contributes to the difficulty of addressing the two previous issues. In the physical world, users can arrange their CDs spatially in their own personal way (by artist, date of release, mood, etc), set a couple of albums aside for playing at a party, or highlight their latest acquisitions on a shelf. This lets them build a cognitive map of the location of items. On computer-based music players, however, they are barely provided with the possibility to create playlists, possibly dynamic, but seldom integrated well enough to be used powerfully. Even bare files have richer organizational possibilities, using directories!</p>
<p>The reason behind these limitations is not that they are inherently unsolvable. The truth is that a lot of effort is required to implement new approaches in any of these fields. Experimentation, either conceptual or in terms of interface, is expensive.</p>
<h3>The Collections concept</h3>
<p>The goal of Collections is to address this problem by creating a common abstraction layer. Search, browsing and organization all share one property: they act on subsets of the media library. Computers are especially good at handling sets, but music players haven&#8217;t really exploited that fact yet.</p>
<p>A collection is defined as a subset of the media library.</p>
<p>This set of media (songs) can be dynamic, for instance &#8220;All media by Kraftwerk released prior to 1980&#8243; or &#8220;All media added to the media library last week, except those by Justin Timberlake&#8221;. A static set, for instance hand-picked media selected for parties, is just a special case of dynamic sets.</p>
<p>Note that a collection is not merely what some players call a &#8220;Smart Playlist&#8221; (or &#8220;Dynamic Playlist&#8221;). A &#8220;Smart Playlist&#8221; is only used to play an arbitrary list of media, while a collection is a generic representation of a set of media. For instance, this includes the results of a search, a filtered view of the media library, the list of tracks from a given album, etc.</p>
<p>Because a collection is an abstract representation, it can be used ubiquitously throughout all the features of the music player: browsing, searching in the media library or the playlist, enqueuing, jumping, etc. A collection can also be saved on the server, thus allowing the users to organize their music and reuse their selection in homogeneous and flexible ways.</p>
<h3>Collections for the XMMS2 player</h3>
<p>The XMMS2 project turned out to be the perfect ground to implement collections.  Unlike its popular predecessor <a href="http://www.xmms.org/">XMMS</a>, XMMS2 hasn&#8217;t gathered much attention yet.  However, it features all that you would expect from a recent music player: a media library, support for many audio formats and multiple platforms (Linux, *BSD, OS X, Windows, etc), bindings for many languages (C, C++, Ruby, Python, Perl, Java), and a friendly community open to innovation.</p>
<p>In addition, the player was designed according to a client-server architecture, so that the server is responsible for all the boring work (audio decoding, media library management, tag extraction, etc), while any flavor of user interface can be implemented as a client connected to the server, possibly across the network.</p>
<p>Collections have been implemented in XMMS2 as a <a href="http://code.google.com/soc/2006/xmms2/appinfo.html?csaid=FE080F82D114A39C">student project</a> during the Google Summer of Code 2006, and finally merged into the stable tree on May 20, as part of the <a href="http://wiki.xmms2.xmms.se/index.php/Release:DrJekyll">DrJekyll release</a>.</p>
<p>Support for collections was implemented on the server, as a layer above the media library and playlists (more about that in the implementation details), and exposed to the clients through a collections API. This API allows clients to save collections on the server, query the media library, enqueue the content of a collection, etc. Thus, although the user interface depends on the client, the server and the clients all share the same abstract representation.</p>
<p>Clients are also freed from the need to generate complex SQL queries themselves; instead, they can easily build a (DBMS-agnostic) collection and the tedious query is performed by the server. In addition, a parser is provided to generate a collection from a string with an enriched search syntax.</p>
<p>Collections make it essentially trivial to browse and search the media library. Moreover, advanced features are either natively available or very easy to implement: iTunes-like Party Shuffle, recursive filtering (e.g. search inside the playlist), display Top 10 or never played songs, changing the equalizer settings if the playing song is in a particular collection (e.g. &#8220;Jazz Vinyl rips&#8221;), etc.</p>
<h3>Implementation</h3>
<p>Strictly speaking, collections are implemented as a <em>directed acyclic graph</em> (DAG), each node of which is a collection operator. In fact, because the structure is recursive, each node of the graph corresponds to a collection. This model was chosen to emphasize the aggregated nature of users&#8217; music collections.</p>
<p>Collection operators come in four different flavors:</p>
<ul>
<li>set operators</li>
<li>filter operators</li>
<li>list operators</li>
<li>reference operator</li>
</ul>
<p>The <strong>set operators</strong> take an arbitrary number of operands and returns the collection obtained by applying the corresponding set operation to them. For instance, &#8220;any music by The Beatles <em>or</em> any music by The Rolling Stones&#8221;. Available set operators: union, intersection, complement.</p>
<p>The <strong>filter operators</strong> enforce conditions on properties of the media; the resulting collection only contains the media that match the filtering attributes. For instance, &#8220;all the songs <em>with &#8217;stairway&#8217; in their title</em>&#8220;.  Available filter operators: equals, match (partial matching of strings using wildcards), larger/smaller (for numbers), has (checks whether a property is present).</p>
<p>The <strong>list operators</strong> are a bit special. The basic list operator (called &#8220;idlist&#8221;) does not accept any operands; instead, it simply generates the collection corresponding to the custom list of media it contains. Because list operators store static, ordered lists of media, they are used as playlists in XMMS2! Available list operators: list, queue (pop songs once they have been played), Party Shuffle (takes an operand, used to randomly feed the list with new entries).</p>
<p>The <strong>reference operator</strong> is simply used to refer to the content of a saved collection or playlist. For instance, &#8220;all the songs released in 2007 <em>in the Foo playlist</em>&#8220;. A reference operator is also used to refer to the whole media library (all media).</p>
<p>Now, let&#8217;s illustrate all this with a sample collection structure:</p>
<p><a title="Sample collection diagram" href="http://inso.cc/wp/wp-content/uploads/2007/06/collection-diagram-usecase-3.png"><img class="illu1" src="http://inso.cc/wp/wp-content/uploads/2007/06/collection-diagram-usecase-3.png" alt="Sample collection diagram" /></a></p>
<p>The nodes represent collection operators, while edges simply connect operands to operators.</p>
<p>Here, &#8220;All Media&#8221; is a reference to the whole media library, and we use a Match operator to only keep media for which the artist has a name starting by &#8220;A&#8221; (1). We then take the union (3) of this and the content of the &#8220;Rock 90&#8217;s&#8221; saved collection (2). The result is passed as an operand to a Party Shuffle operator (4), which we save under the name &#8220;Interesting&#8221; (5).</p>
<p>When the user plays the &#8220;Interesting&#8221; playlist, songs are popped from the list as soon as they are finished, and new songs matching the operand collection (3) are automatically enqueued, so that the list always contains at least 20 items. This is specified by the &#8220;size&#8221; attribute of the Party Shuffle. Of course, the user can also edit the playlist and add tracks to it manually.</p>
<p>This is only one example of collections among many. As you can see, the modular structure of collections allows virtually unlimited possibilities. As such, they have been tightly integrated both on the server and in the client API.</p>
<p>On the server, a dedicated module is responsible for handling collection features. When a collection is queried, it serializes the structure into an SQL query, runs it in the media library and returns the matching media, either as a list of media ids or hashes containing the requested media properties. When a collection is saved on the server, it is added to the collection DAG and kept in memory while the server is running. On shutdown, the whole DAG is serialized into the database. Note that playlists are nothing but collections, albeit restricted to list operators and saved into a dedicated namespace.</p>
<p>In the client API, collections introduced many important changes. First, executing raw SQL queries has been deprecated; all queries are now to be performed using collections. Collection data structures can be built either using a set of dedicated functions, or by calling the collection parser on a string given by the user. Finally, many XMMS2 methods have been extended to support collections (e.g. to enqueue media) and new methods allow clients to query, save and retrieve collections from the server.</p>
<p>If you want to learn more about the concept of collections, please have a look at the <a href="http://wiki.xmms2.xmms.se/index.php/Collections_Concept">collections concept page</a> on the XMMS2 wiki. For more details about the implementation, check the <a href="http://wiki.xmms2.xmms.se/index.php/Collections_Design">collections design page</a> and the <a href="http://doxygen.xmms2.xmms.se/clientlib/stable/xmmsclient/group__Collections.html">API documentation</a>.</p>
<h3>Adoption and future directions</h3>
<p>Several <a href="http://wiki.xmms2.xmms.se/index.php/Clients">XMMS2 clients</a> have started offering features based on collections, including <a href="http://nooms.de/projects/abraca/">Abraca</a> (GTK2 client) and <a href="http://www.site.uottawa.ca/~schow031/gntxmms2/">gntxmms2</a> (console client). Other clients have ported search and browsing to the collections API: <a href="http://wiki.xmms2.xmms.se/index.php/Client:Esperanza">Esperanza</a> (Qt4 client), <a href="http://wejp.k.vu/projects/xmms2/">gxmms2</a> (GTK2 client) and the official command-line interface.</p>
<p>Hopefully, client developers will start exploring new directions now that collections are in the main release. The xmms2 CLI client has already been <a href="http://wiki.xmms2.xmms.se/index.php/New_korving_CLI">scheduled for a full rewrite</a>.</p>
<p>Several improvements are also expected to address current limitations of the collections implementation. One limitation is that all collections are treated equally as media sets; if a filter is applied on a playlist, the order and duplicated items will be lost. A smarter internal distinction between lists and sets inside the DAG is in the works. An ordering collection operator could then be introduced to transform a set into an ordered list, as well as an operator to select subsequences of such lists, similarly to SQL LIMIT operation. They could be used to create a collection containing the &#8220;list of the 20 most recently added media&#8221;. The SQL query generator could also be further optimized, unless we decide to replace the database backend completely.</p>
<p>Collections have just made it into the official XMMS2 distribution, but people already use them through features like search, Party Shuffle or groups of songs saved in the media library. They are a powerful toy for developing new features in the clients and hopefully helping users organize and use their music library.</p>
<p>It&#8217;s an exciting time to come up with fresh ideas in the XMMS2 world, and I hope the rest of the developers in the music player community will take the time to reflect on and discuss all these questions earnestly!</p>
]]></content:encoded>
			<wfw:commentRss>http://bytes.inso.cc/wp/2007/06/28/collections-in-the-xmms2-music-player/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
