<?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>gnuu.org &#187; hacks</title>
	<atom:link href="http://gnuu.org/tag/hacks/feed/" rel="self" type="application/rss+xml" />
	<link>http://gnuu.org</link>
	<description>my word against yours, fight.</description>
	<lastBuildDate>Fri, 16 Jul 2010 22:12:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Announcing &#8220;Friend&#8221;: Adding Fine Grained Visibility Semantics to Ruby</title>
		<link>http://gnuu.org/2010/04/01/announcing-friend-adding-fine-grained-visibility-semantics-to-ruby/</link>
		<comments>http://gnuu.org/2010/04/01/announcing-friend-adding-fine-grained-visibility-semantics-to-ruby/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 21:12:07 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[eiffel]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[Metaprogramming]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[visibility]]></category>

		<guid isPermaLink="false">http://gnuu.org/2010/04/01/announcing-friend-adding-fine-grained-visibility-semantics-to-ruby/</guid>
		<description><![CDATA[Note: this is not an April Fool&#8217;s joke. And no, this notice is not an April Fool&#8217;s joke either. Update: 04/02/2010 &#8211; Thanks to Martin Luder who pointed out that you can in fact do visibility in Eiffel without the inheritance &#8220;export&#8221; syntax. Updated the example. I&#8217;ve used Eiffel a couple of times. I&#8217;ve even [...]]]></description>
			<content:encoded><![CDATA[<p class="note"><strong>Note</strong>: this is not an April Fool&#8217;s joke. And no, this notice is not an April Fool&#8217;s joke either.</p>
<p class="note"><strong>Update: 04/02/2010</strong> &#8211; Thanks to Martin Luder who pointed out that you can in fact do visibility in Eiffel without the inheritance &#8220;export&#8221; syntax. Updated the example.</p>
<p>I&#8217;ve used <a href="http://www.eiffel.com/">Eiffel</a> a couple of times. I&#8217;ve even <a href="http://gnuu.org/2008/09/19/a-basic-http-req-in-eiffel-and-rant/">blogged about it</a> once. There&#8217;s one really cool feature in Eiffel that lives below the whole DbC radar. Peculiarly, the feature itself deals with &quot;features&quot;. Basically, Eiffel allows you to decide which classes can see which &quot;features&quot; (in Ruby features are basically methods) on an individual basis. Therefore, Eiffel has no need for a half-baked &quot;public&quot;, &quot;protected&quot;, &quot;private&quot; solution to the visibility problem because by exporting features you have extreme control over exactly how public, protected or private a feature can be. Here&#8217;s what it looks like:</p>
<p></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2010/04/01/announcing-friend-adding-fine-grained-visibility-semantics-to-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>No Dice? No Problem.</title>
		<link>http://gnuu.org/2008/02/23/no-dice-no-problem/</link>
		<comments>http://gnuu.org/2008/02/23/no-dice-no-problem/#comments</comments>
		<pubDate>Sun, 24 Feb 2008 00:09:10 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[applescript]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[monopoly]]></category>
		<category><![CDATA[os x]]></category>

		<guid isPermaLink="false">http://gnuu.org/2008/02/23/no-dice-no-problem/</guid>
		<description><![CDATA[This was my day: I invited a friend (who doesn&#8217;t happen to be very geeky) over to play some Star Wars monopoly (okay, maybe she is) this afternoon because she had recently realized she had the box lying around her house. We opened up the box and started setting up the game. Got the pieces? [...]]]></description>
			<content:encoded><![CDATA[<p>This was my day: <img height="240" alt="Star Wars Monopoly" src="http://www.gnuu.org/wp-content/uploads/2008/02/NoDiceNoProblem_1054B/61YWHBG8X4L__SS500_.jpg" width="240" align="right" /></p>
<p>I invited a friend (who doesn&#8217;t happen to be very geeky) over to play some <a title="You can even buy it!" href="http://www.amazon.com/Monopoly-Game-Star-Wars-Saga/dp/B00061I4X8">Star Wars monopoly</a> (okay, maybe she is) this afternoon because she had recently realized she had the box lying around her house. We opened up the box and started setting up the game. Got the pieces? Check. Got all the money? Check. Properties? Check. Everything seemed to be going smooth until everything was ready and we were ready to roll the dice&#8230; <em>the dice!</em></p>
<p>Now, I don&#8217;t play boardgames often, so it&#8217;s not like I can just go to my trivial pursuit box and steal them for a bit. The only other games I have in my house were downstairs hidden behind years of legos and children&#8217;s toys (<a title="Marlon does cool things with it" href="http://gnuu.org/2008/02/07/stop-it-click-it-pose-it-dress-it/">legos are not children&#8217;s toys</a>). So, like any geek, the first thing I thought was, &quot;<em>Hmm, what are good ways to generate a random number from 1 to 6 without having to get up?</em>&quot;. I looked at my mac&#8230;</p>
<h4>Requirements Phase</h4>
<p>Now first it&#8217;s important that we list some base requirements for our Dice application. It was very important that we not have to get up, and since the computer was across the room, this limited our input device. The monitor was also far away, so if the output was text-based, it would have to be displayed appropriately large to be seen across the room.</p>
<h4>Design &amp; Implementation</h4>
<p>Given the requirements, it seemed that the best choice would be to have the output be spoken out loud by the machine. This would avoid any issues with displaying output from far, and Macs have this stuff built in. Now we were able to choose a language best suited for the task. I thought quickly about doing this in Ruby but remembered that this is really something that <a title="Apple Script is Script.. on the Apple" href="http://www.apple.com/applescript">AppleScript</a> was built for. Interfacing with the speech module is dead easy, and so is our code:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="230" alt="The AppleScript Dice code" src="http://www.gnuu.org/wp-content/uploads/2008/02/NoDiceNoProblem_1054B/SnapzProXScreenSnapz001.png" width="439" border="0" /></p>
<p><strong>Now we need a way to trigger our dice</strong>. Voice recognition also comes built-in on a mac but I couldn&#8217;t figure out how to take advantage of it quickly enough so I abandoned that. I tried to think about other input devices that worked from far and settled on the <em>Apple Remote</em>. Now, the remote by default comes with about zero functionality, but I remembered that many people have hacked it up nicely to do pretty much everything under the sun, so I did a little googling and came up with an application called <a title="Remote Buddy" href="http://www.iospirit.com/index.php?mode=view&amp;obj_type=infogroup&amp;obj_id=24&amp;o_infogroup_objcode=infogroup-23&amp;sid=5752438G9a60a16d4a8aadcd">Remote Buddy</a>, which pretty much does just that. Instead of figuring out how to interface specifically with the <em>Script Editor</em> application, I just moved my mouse over the run button (in photo above) and hooked up the play button on the remote to perform a left click:</p>
<p><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="120" alt="The Remote Buddy Configuration" src="http://www.gnuu.org/wp-content/uploads/2008/02/NoDiceNoProblem_1054B/Picture1.png" width="514" border="0" />&#160;</p>
<p><strong>And there we have it.</strong> A dice machine. Keep in mind, this all sounds complex but it pretty much happened in under 5 minutes. I go to great lengths to play monopoly.</p>
<p class="update"><em>Update: <strong>February 24th 2008</strong>: </em>I did a little more googling today while I had more time and came up with the <em>complete-speech-recognition</em> version of my dice app. Turns out the code isn&#8217;t that much more complex. Note that we wrap our code in a <tt>try</tt> because the <em>SpeechRecognitionServer</em> likes to <em>time out</em>.</p>
<pre class="applescript"><span class="keyword">repeat while</span> <span class="recword">true</span>
	<span class="keyword">try</span>
		<span class="keyword">tell</span> <span class="recword">application</span> &quot;SpeechRecognitionServer&quot;
			<span class="keyword">set</span> <span class="var">resp</span> <span class="keyword">to</span> <span class="recword">listen for</span> {&quot;roll&quot;, &quot;quit&quot;}
			<span class="keyword">if</span> <span class="var">resp</span> <span class="keyword">is</span> &quot;quit&quot; <span class="keyword">then</span>
				<span class="keyword">return</span>
			<span class="keyword">else</span>
				<span class="keyword">set</span> <span class="var">x</span> <span class="keyword">to</span> <span class="arg">((((<span class="recword">random number</span>) * 5) + 1) <span class="keyword">as</span> <span class="recword">integer</span>)</span>
				<span class="keyword">set</span> <span class="var">y</span> <span class="keyword">to</span> <span class="arg">((((<span class="recword">random number</span>) * 5) + 1) <span class="keyword">as</span> <span class="recword">integer</span>)</span>
				<span class="recword">say</span> &quot;You rolled &quot; &amp; <span class="var">x</span> &amp; &quot;, and &quot; &amp; <span class="var">y</span> &amp; &quot;, the total is, &quot; &amp; (<span class="var">x</span> + <span class="var">y</span>)
			<span class="keyword">end if</span>
		<span class="keyword">end tell</span>
	<span class="keyword">on error</span> <span class="var">errmsg</span>
	<span class="keyword">end try</span>
<span class="keyword">end repeat</span></pre>
<p>Now all you need to do is tweak your speech recognition settings to not use the <em>&quot;Esc&quot;</em> key to begin speaking. I also turned off the command prefix:</p>
<p><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="488" alt="Speech settings" src="http://www.gnuu.org/wp-content/uploads/2008/02/NoDiceNoProblem_1054B/Picture3.png" width="669" border="0" /></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2008/02/23/no-dice-no-problem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>If only all hackers were this awesome.</title>
		<link>http://gnuu.org/2008/02/16/if-only-all-hackers-were-this-awesome/</link>
		<comments>http://gnuu.org/2008/02/16/if-only-all-hackers-were-this-awesome/#comments</comments>
		<pubDate>Sun, 17 Feb 2008 03:01:05 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[cell phone]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[humor]]></category>
		<category><![CDATA[max cornilesse]]></category>
		<category><![CDATA[videos]]></category>

		<guid isPermaLink="false">http://gnuu.org/2008/02/16/if-only-all-hackers-were-this-awesome/</guid>
		<description><![CDATA[These are fake but oh so cool: He has way more on his youtube page.]]></description>
			<content:encoded><![CDATA[<p>These are fake but oh so cool:</p>
<p><embed src="http://www.youtube.com/v/zcmmFQGxMNU&amp;rel=1" width="425" height="355" type="application/x-shockwave-flash" wmode="transparent" /></p>
<p><embed src="http://www.youtube.com/v/nku1w-DQhHU&amp;rel=1" width="425" height="355" type="application/x-shockwave-flash" wmode="transparent" /></p>
<p><embed src="http://www.youtube.com/v/32JgSJYpL8o&amp;rel=1" width="425" height="355" type="application/x-shockwave-flash" wmode="transparent" /></p>
<p>He has way more <a title="Max Cornelisse on YouTube" href="http://www.youtube.com/user/maxcornelisse">on his youtube page</a>. </p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2008/02/16/if-only-all-hackers-were-this-awesome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing the monome 20h, the poor man&#8217;s music interface</title>
		<link>http://gnuu.org/2008/02/04/introducing-the-monome-32h-the-poor-mans-music-interface/</link>
		<comments>http://gnuu.org/2008/02/04/introducing-the-monome-32h-the-poor-mans-music-interface/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 05:51:31 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[mirc]]></category>
		<category><![CDATA[monome]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://gnuu.org/2008/02/04/introducing-the-monome-32h-the-poor-mans-music-interface/</guid>
		<description><![CDATA[I really really really want a monome, but even if I did have $1400, I&#8217;d still have to wait however many months before they become available. Now, I could just get a monome 64 or 128, but those are also pretty pricey for someone with no disposable income. I also wanted to see if this [...]]]></description>
			<content:encoded><![CDATA[<p><a title="monome" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" href="http://www.monome.org"><img height="129" alt="monome" src="http://www.gnuu.org/wp-content/uploads/2008/02/IntroducingtheMonome32hthePoorMansMusicI_140CE/256_01c.jpg" width="172" align="right" /></a> I <em>really really really</em> <a title="monome is the coolest thing since sliced bread" href="http://www.monome.org">want a monome</a>, but even if I did have $1400, I&#8217;d still have to wait however many months before they become available. Now, I could just get a monome 64 or 128, but those are also pretty pricey for someone with no disposable income. I also wanted to see if this device would really help me create music more efficiently than my current non-tangible methods, or if I would just be wasting my money. monome releases a simple emulator that you can use to test how the device would work once in your hands, but it works via mouse clicks only and is <a title="You can use the monome emulator but the monome emulator will not use you." href="/wp-content/uploads/2008/02/monome-cripple.png" rel="lightbox"><strike>purposely crippled out of principle</strike></a> <em>(Update: Okay, Brian Crabtree, aka tehn, creator of the monome, <a href="http://post.monome.org/comments.php?DiscussionID=749&#038;page=1#Item_0" title="monome discussion">assures me this wasn&#8217;t done intentionally</a>- I forgive you Brian)</em>. But, considering the software is all <a title="Free monome apps!" href="http://monome.org/data/app">free and open source</a>, I figured instead that I&#8217;d attempt to build the cheapest monome clone I could&#8230; all I needed was a 2d grid of buttons. Hmm, a 2d grid of buttons, where could I find one of those&#8230;</p>
<h3>Enter the keyboard: monome replacement?</h3>
<p>It&#8217;s almost so obvious that it&#8217;s <em>too</em> obvious. We&#8217;ve been using these things for decades, and it turns out that they&#8217;re exactly that: a 2d grid of buttons. Of course, I can&#8217;t take all the credit; somebody <a title="monome emulator for keyboard" href="http://post.monome.org/comments.php?DiscussionID=561&amp;page=1">already implemented this idea</a> in Max/MSP. Problem was that it wasn&#8217;t working with the <a title="Live Sample Cutting Application for Monome" href="http://monome.org/data/app/mlr">mlr app</a> for me. Plus, what kind of nerd would I be if I didn&#8217;t try to do it myself?</p>
<p>So using a keyboard seems like the best way to emulate a monome. Granted, they don&#8217;t give you much LED light feedback action, but I could always just show that up on the screen. It&#8217;s not like I stare at my keyboard when I type anyway. Also, there are considerably less buttons than a 256, but I could easily get a good 32 solid buttons to play with.</p>
<p><a title="A monomeyboard interface!" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" href="http://www.gnuu.org/wp-content/uploads/2008/02/IntroducingtheMonome32hthePoorMansMusicI_140CE/wireless_1_20070813copy.jpg" rel="lightbox"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="160" alt="A monomeyboard interface" src="http://www.gnuu.org/wp-content/uploads/2008/02/IntroducingtheMonome32hthePoorMansMusicI_140CE/wireless_1_20070813copy_thumb.jpg" width="244" border="0" /></a> </p>
<p>As far as implementing the <em>monomemulator</em> went, I figured I would attempt to do it on my own, in a language I knew (I like the Max concept, but in the end, programming with a mouse is so tedious). I oddly chose to use the scripting language found in the <a title="mIRC chat client" href="http://www.mirc.om">mIRC chat client</a>. I&#8217;ve made some <a title="mIRC Befunge Interpreter" href="http://www.jinxdesign.net/befunge">crazy things</a> in this language before, as well as <a title="Common Language Bridge" href="http://www.kthx.net/clb">some less crazy things</a>, and in my opinion it was up for the task.</p>
<h3>Why mIRC? Why not Max, PD, Ruby, Processing, Python, &#8230;?</h3>
<p>mIRC scripting is sort of my comfort food when I want to prototype code. There are however two specific reasons that it&#8217;s perfect for the job: </p>
<ol>
<li>The mIRC community lacks smart people doing cool things (no offense to the few people doing cool things). This meant that I wouldn&#8217;t feel like I was re-inventing the wheel if I was to write an <a title="OpenSoundControl" href="http://opensoundcontrol.org/">OpenSoundControl</a> library for the language. <em>Chance to contribute original code = extra points.</em></li>
<li>mIRC may be an IRC client, but it actually has a rather extensive windowing library built-in. My entire implementation for the UI was about 12 lines of code. This probably beats out <a title="wxWidgets" href="http://www.wxwidgets.org/">wxWidgets</a>, <a title="FOX Window Toolkit" href="http://www.fox-toolkit.org/">Fox</a>&#8230; <a title="Shoes Windowing Toolkit" href="http://code.whytheluckystiff.net/shoes/">Shoes</a>? Maybe I&#8217;ll port it some other time. Considering it took 30 minutes including learning how to encode OSC messages, that&#8217;s not too bad. </li>
</ol>
<p>The implementation actually ended up being 120 lines in total with the OSC library (a very simple/incomplete one) built in. You control the monome by simply hitting the keys shown in the above keyboard photo. Feedback for the LEDs are lit up using OSC messages as well. The UI for this emulator can actually expand to any grid size, so if you had a way to actually input 256 keys, you could just change the script up a bit to load it. You could even <a href="http://www.gnuu.org/wp-content/uploads/2008/02/monome400.jpg" rel="lightbox" title="400 buttons of pure man. All I need now is 12 more keyboards and about 390 more fingers.">make it bigger</a>; <em>take that, monome</em>.</p>
<pre><span class="keyword">alias</span> -l monome_width { <span class="keyword">return</span> <strong>8</strong> }
<span class="keyword">alias</span> -l monome_height { <span class="keyword">return</span> <strong>4</strong> }</pre>
<p>The next few lines have options to change the prefix as well. Running the code with <em>/monome</em> gets you this (I&#8217;m running mlr in this screenshot as well):</p>
<p><a style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" href="http://www.gnuu.org/wp-content/uploads/2008/02/monome32h-mlr.png" rel="lightbox" title="The mIRC monome emulator in action. Go emulator, go!"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="473" alt="The monome emulator in action" src="http://www.gnuu.org/wp-content/uploads/2008/02/IntroducingtheMonome32hthePoorMansMusicI_140CE/monome32hmlr_thumb.png" width="644" border="0" /></a> </p>
<p>Well. That&#8217;s about it. I actually played around with it for a bit and really liked the workflow. I might actually be up for making the plunge sometime soon, though I&#8217;ll try and save up for a 256.</p>
<p>If you&#8217;re interested in the script files involved you can grab em from here:</p>
<p>
<a title="osc.mrc: OpenSoundControl library for mIRC" class="download_txt" href="http://www.gnuu.org/wp-content/uploads/2008/02/osc.mrc">osc.mrc: OpenSoundControl library for mIRC</a><br/><br />
<a title="monome.mrc: The mIRC monome emulator" class="download_txt" href="http://www.gnuu.org/wp-content/uploads/2008/02/monome.mrc">monome.mrc: The mIRC monome emulator</a></p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2008/02/04/introducing-the-monome-32h-the-poor-mans-music-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subverting QTrax Ads in 5 Minutes or Less (and a Songbird Comparison)</title>
		<link>http://gnuu.org/2008/01/29/subverting-qtrax-ads-in-5-minutes-or-less-and-a-songbird-comparison/</link>
		<comments>http://gnuu.org/2008/01/29/subverting-qtrax-ads-in-5-minutes-or-less-and-a-songbird-comparison/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 05:26:04 +0000</pubDate>
		<dc:creator>Loren Segal</dc:creator>
				<category><![CDATA[post]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[drm]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[legal download]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[p2p]]></category>
		<category><![CDATA[qtrax]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://gnuu.org/2008/01/29/subverting-qtrax-ads-in-5-minutes-or-less-and-a-songbird-comparison/</guid>
		<description><![CDATA[This is a follow-up post to the on-going set of QTrax articles I&#8217;ve been posting. If you don&#8217;t know what QTrax is, start here or here. If you don&#8217;t know what Songbird is, start here. A Quick Comparison of QTrax &#38; Songbird For those interested, this is a side by side comparison of QTrax vs. [...]]]></description>
			<content:encoded><![CDATA[<p><em>This is a follow-up post to the on-going set of QTrax articles I&#8217;ve been posting. If you don&#8217;t know what QTrax is, <a title="QTrax Tonight" href="http://gnuu.org/2008/01/27/qtrax-tonight/">start here</a> or <a title="QTrax First Impressions" href="http://www.gamedrift.com/2008/01/27/qtrax-first-impressions/">here</a>. If you don&#8217;t know what Songbird is, <a title="QTrax Works From Songbird" href="http://gnuu.org/2008/01/28/qtrax-works-from-songbird/">start here</a>.</em></p>
<h3>A Quick Comparison of QTrax &amp; Songbird</h3>
<p>For those interested, this is a side by side comparison of QTrax vs. Songbird in the application, which still isn&#8217;t allowing downloads but it&#8217;s easy to see how it will work in both. Let&#8217;s get right to the screenshots:</p>
<p>&#160;<a href="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image.png" style="border:0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="image" src="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_thumb.png" width="244" border="0" /></a> <a href="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_3.png" style="border:0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="166" alt="image" src="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_thumb_3.png" width="244" border="0" /></a> </p>
<p>You can see that the only major difference between Songbird and QTrax is that QTrax re-skinned the play controls to give more room at the top for banner ads. Looking further into the app you also notice that they did a similar job with the library screen to make room on the right for ads as well. But with Songbird working perfectly on the same service (so far), there must be something that the QTrax app must do to deal with this, otherwise, why do I need to deal with the ads when I could just, not?</p>
<p><em>Another advantage to just using Songbird is that <strong>Songbird actually works on OS X, Linux, and other platforms.</strong> Why the hell doesn&#8217;t QTrax?</em> </p>
<p>Oh, and even if they have something up their sleeves, it&#8217;s all right there exposed in the app, since they used XUL in order to write their Mozilla-like extensions&#8230;</p>
<h3>Removing QTrax Ads</h3>
<p>The QTrax service isn&#8217;t even functional yet and I&#8217;ve already managed to remove their ads. That doesn&#8217;t say much for this company&#8217;s ability to succeed with this ad-based business model. Frankly, if I was an advertiser or record label, I would probably back out of the deal as quick as possible if I saw this.</p>
<p>Like I said <a title="QTrax Works from Songbird" href="http://gnuu.org/2008/01/28/qtrax-works-from-songbird/">in the previous article</a>, QTrax is really just a bunch of Firefox/Songbird extensions plugged into Songbird without any modification to the source (that I&#8217;m aware of). I&#8217;d love to dig deeper and confirm that the source has not been touched, but that will have to wait. For now, we can easily just dive right into the XUL that they used to right their ad-adding skin and take it right out.</p>
<p><em>Let me first point out that there are about 500 different ways to disable the ads in this thing. The simplest would be to just remove the extension. I&#8217;m only showing one more complex one just to show that even if the extension added something really cool, we could still work around it.</em></p>
<p>But here we go. Just load up the extension folder in the QTrax program files folder and go to any of the .xul, .js, or .html files and mess around. You can pretty much undo whatever you don&#8217;t like and keep what you do.</p>
<p><a href="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_4.png" style="border:0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="165" alt="image" src="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_thumb_4.png" width="244" border="0" /></a> <a href="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_5.png" style="border:0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="131" alt="Getting around the ads" src="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_thumb_5.png" width="244" border="0" /></a>&#160; </p>
<p><a href="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_6.png" style="border:0"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="165" alt="image" src="http://www.gnuu.org/wp-content/uploads/2008/01/QTraxvs.Songbird_14507/image_thumb_6.png" width="244" border="0" /></a> </p>
<p>I&#8217;m waiting to see if QTrax actually thought this through somehow on the server-end&#8230; but even then, it would be very difficult unless they <em>actually</em> modified the binaries. I can&#8217;t tell if QTrax is <em>really dumb</em> in not realizing how easy they made it to subvert their ads, or <em>really sneaky</em> in trying to make an app that will secretly not be a pain in the ass to use, unbeknown to the labels.</p>]]></content:encoded>
			<wfw:commentRss>http://gnuu.org/2008/01/29/subverting-qtrax-ads-in-5-minutes-or-less-and-a-songbird-comparison/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
