<?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>CoderHump.com &#187; How To</title>
	<atom:link href="http://coderhump.com/archives/category/how-to/feed" rel="self" type="application/rss+xml" />
	<link>http://coderhump.com</link>
	<description>Game Development Technology, in Flash and Elsewhere</description>
	<lastBuildDate>Tue, 06 Jul 2010 17:18:41 +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>I Wrote A Book: Video Game Optimization</title>
		<link>http://coderhump.com/archives/585</link>
		<comments>http://coderhump.com/archives/585#comments</comments>
		<pubDate>Mon, 05 Apr 2010 06:16:18 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[Publication]]></category>

		<guid isPermaLink="false">http://coderhump.com/?p=585</guid>
		<description><![CDATA[
More precisely, Eric Preisz and I wrote a  book!
The book is called Video Game Optimization, and it covers everything you need to know to get maximum performance from any software project &#8211; but especially games. If you&#8217;re struggling with getting a great framerate out of your game, I highly recommend checking it out.  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.amazon.com/Video-Game-Optimization-Eric-Preisz/dp/1598634356"><img src="http://coderhump.com/wp-content/uploads/2010/04/photo-225x300.jpg" alt="" title="Ben Garney With Video Game Optimization" width="225" height="300" class="alignleft size-medium wp-image-591" /></a></p>
<p>More precisely, <a href="http://www.torquepowered.com/account/profile/59817">Eric Preisz</a> and I wrote a  <a href="http://www.amazon.com/Video-Game-Optimization-Eric-Preisz/dp/1598634356">book</a>!</p>
<p>The book is called <a href="http://www.amazon.com/Video-Game-Optimization-Eric-Preisz/dp/1598634356">Video Game Optimization</a>, and it covers everything you need to know to get maximum performance from any software project &#8211; but especially games. If you&#8217;re struggling with getting a great framerate out of your game, I highly recommend checking it out. <img src='http://coderhump.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>Video Game Optimization goes all the way from high-level concepts like planning for performance in your project&#8217;s timeline, to determining which broad area of your system is a bottleneck, down to specific tips and tricks for optimizing for space, time, and interactivity. Based on the course that Eric Preisz taught at Full Sail University on optimization, it isn&#8217;t the only book you&#8217;d ever want to read on the subject, but we think it is a great introduction!</p>
<p>The journey from that initial conversation where our mutual friend <a href="http://www.linkedin.com/in/jdmoore">Jay Moore</a> introduced us and suggested I would be a good co-author, to the day when we finished and shipped the book was a long but rewarding trek. Eric moved across the country from Florida to Nevada, as he moved from teaching at Full Sail University to running the Tech and Tools group at InstantAction. He also became a father with the arrival of his son, Grant. I left after 5 years at GarageGames and helped build a new company, <a href="http://www.pushbuttonlabs.com/">PushButton Labs</a>.</p>
<p>A lot has changed while we wrote it, but it still felt really good to arrive at GDC, visit the book store outside the exhibition hall, and finding a big stack of Video Game Optimization sitting front and center. <img src='http://coderhump.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://coderhump.com/archives/585/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>3D in Flash 10 &amp; Git</title>
		<link>http://coderhump.com/archives/536</link>
		<comments>http://coderhump.com/archives/536#comments</comments>
		<pubDate>Mon, 14 Dec 2009 07:12:05 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://coderhump.com/?p=536</guid>
		<description><![CDATA[
I spent a little time with Flash 10&#8217;s 3d features recently. Since Flash 10.1 is imminent and FP10 has been at 90%+ penetration for a while now, it&#8217;s probably safe to start looking at using FP10 stuff in my projects.  
I also used this as an opportunity to try out git. It was easy [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coderhump.com/wp-content/uploads/2009/12/picture-1.png" alt="picture-1" title="picture-1" width="231" height="196" class="alignright size-full wp-image-537" /></p>
<p><b>I spent a little time with Flash 10&#8217;s 3d features recently.</b> Since Flash 10.1 is imminent and FP10 has been at 90%+ penetration for a while now, it&#8217;s probably safe to start looking at using FP10 stuff in my projects. <img src='http://coderhump.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I also used this as <b>an opportunity to try out git</b>. It was easy to get git installed on OSX (I used the command line version, installed from <a href="http://code.google.com/p/git-osx-installer/">git-osx-installer</a>) and put my code up on <a href="http://www.github.com/">Github</a>. You can browse my test code at <a href="http://github.com/bengarney/garney-experiments/tree/master/exploringFlash3D/">http://github.com/bengarney/garney-experiments/tree/master/exploringFlash3D/</a>.</p>
<p><b>My main concern was the transformation pipeline</b> &#8211; I think there might be some benefits to using 3d positions for the rendering pipeline in PBE. So I wanted to do a brief survey of the built-in 3d capabilities, then look more closely at the transformation routines.</p>
<p>My first test was making a DisplayObject rotate in 3d (<a href="http://github.com/bengarney/garney-experiments/blob/27c17dcd6a6daf828b631f93620b28f83e325038/exploringFlash3D/src/exploringFlash3D.as">minimal source code</a>). It runs well, and if you turn on redraw region display, you can see that it&#8217;s properly calculating the parts of the screen that need to be modified.</p>
<p>This was easy to write, but <b>it revealed the primary flaws with the built-in Flash 3d capabilities</b>. First, look closely &#8211; the edges of the shape were sharp, but the interior detail is aliased. This is because whenever the 3D rendering path is engaged, it turns on cacheAsBitmap. This is fine for simple scenarios (say, taking a single element in a UI and giving it a nice transition) but not for more complex situations.</p>
<p>Which brings us to the second and bigger flaw. I added a thousand simple particle sprites at different 3d positions (<a href="http://github.com/bengarney/garney-experiments/blob/4b2ed8fa9dcc2e9fca4eebc2783fb3b47fa3ce40/exploringFlash3D/src/exploringFlash3D.as">source code</a>). This runs extremely slowly because of <a href="http://www.bit-101.com/blog/?p=2391">an issue described by Keith Peters involving nested 3d transforms<a>. <b>Nested 3d objects cause excessive bitmap caching, dramatically reducing performance.</b> You might end up with bitmap-caching in action on every 3d object and every DisplayObject containing 3d objects.</p>
<p>In addition, because it&#8217;s cached, moving objects further/closer from the camera results in an upsampled/downsampled image. So you tend to get mediocre visual results if your objects move much.</p>
<p>My next step was to stop using the 3d capabilities of DisplayObjects, and just position them in x/y based on their 3D position (<a href="http://github.com/bengarney/garney-experiments/tree/249c73b1387d6e530caadafe1402ad679a79c5ac/exploringFlash3D/src">source code, notice it is two files now</a>). This gave a massive performance gain. At low quality, 1000 particles runs at 1440×700 at acceptable FPS. Most of the overhead is in the Flash renderer, not the code to update DisplayObject positions, but it still takes a while to do all the transformation, and it causes a lot of pressure on the garbage collector from all the 1000 temporary Vector3D instances that are created every frame. (600kb/second or so &#8211; not insignificant.)</p>
<p>Next I figured it would be helpful to make my camera move around (<a href="http://github.com/bengarney/garney-experiments/blob/1abbe2d5e874c5b7097cc55e610b5656e172ca96/exploringFlash3D/src/exploringFlash3D.as">sample code</a>). </p>
<p>This required that I understand the coordinate space all this operated in. What are the coordinate spaces? <a href="http://help.adobe.com/en_US/FlashPlatform/beta/reference/actionscript/3/flash/geom/PerspectiveProjection.html#fieldOfView">According to the official docs</a>, screen XY maps to world XY. So forward is Z+, up is Y-, right is X+. Once I figured that out, I had to prepare a worldMatrix with the transform of the camera, then append the projectionMatrix. The PerspectiveProjection class always seems to assume screen coordinate (0,0) is the center of the projection so you will have to manually offset. Maybe I was not using the projection right, since the docs imply otherwise.</p>
<p>There were two other details to sort out. First, I had to reject objects behind the camera, and second, I had to scale objects correctly so they appeared to have perspective. The solution revolved around the same information &#8211; the pre-projection Z. By hiding all objects with <i>Z &lt; 0</i> and scaling by <i>focalLength / preZ</i>, I was able to get it to behave properly.</p>
<p>Next up is Matrix3D.transformVector… which is slow. <b>Transforming 1000 vectors eats 3ms in release build!</b> This is really slow in absolute terms (<a href="http://www.unitzeroone.com/blog/2009/03/18/flash-10-massive-amounts-of-3d-particles-with-alchemy-source-included/">Ralph Hauwert has a good example of the same functionality running much much faster</a>). I didn’t really want to introduce Alchemy for this project. But we can use AS3 code that avoids the allocations, saving us GC overhead and getting us an incremental improvement in performance.</p>
<p>Andre Michelle has some interesting thoughts on <b>the problem of temporary objects related to transformations</b> (see http://blog.andre-michelle.com/2008/too-late-very-simple-but-striking-feature-request-for-flash10-3d/). I did notice that Utils3D.projectVectors had some options for avoiding allocations, but it did not seem to run significantly faster (even in release build). (<a href="http://github.com/bengarney/garney-experiments/blob/7d98b9d905015002f9c4fcde0c02138ab2817c2c/exploringFlash3D/src/exploringFlash3D.as">sample code for using projectVectors</a>)</p>
<p>In the end, <b>I settled on my own implementation of transformVectors</b>, as it seemed to give the best balance between performance and ease of us. There&#8217;s a <a href="http://github.com/bengarney/garney-experiments/blob/342444710c9563df406b52d4936495d919e31538/exploringFlash3D/src/exploringFlash3D.as">final version of the sample app where you can toggle between transformVector and the AS3 version by commenting out line 105/106</a> up on github, so you can test it for yourself. The transform function took some effort to get right, so here it is to save you the pain of implementing it yourself. It transform i by m and stores it in o.</p>
<pre>        final public function transformVec(m:Matrix3D, i:Vector3D, o:Vector3D):void
        {
            const x:Number = i.x, y:Number = i.y, z:Number = i.z;
            const d:Vector.<Number> = m.rawData;

            o.x = x * d[0] + y * d[4] + z * d[8] + d[12];
            o.y = x * d[1] + y * d[5] + z * d[9] + d[13];
            o.z = x * d[2] + y * d[6] + z * d[10] + d[14];
            o.w = x * d[3] + y * d[7] + z * d[11] + d[15];
        }</pre>
<p>Time for some conclusions. I think that the 3D capabilities built into DisplayObject are OK, but very focused on light-weight graphic design use. <b>Building a significant 3D application requires you write your own rendering code built on Flash&#8217;s 2D capabilities (either DisplayObjects or drawTriangles and friends).</b> The 3d math classes are ok, but immature. Some things are very handy (like the prepend/append versions of all the methods on Matrix3D), but the tendency for Flash APIs to implicitly allocate temporary objects limits the usefulness of some the most central API calls. In addition, important assumptions like the order of the values in Matrix3D.rawData were not documented, leading to frustrating trial and error. <b>I am excited to see Flash&#8217;s 3d capabilities mature.</b> </p>
]]></content:encoded>
			<wfw:commentRss>http://coderhump.com/archives/536/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Tweaking your game with Google Spreadsheets</title>
		<link>http://coderhump.com/archives/385</link>
		<comments>http://coderhump.com/archives/385#comments</comments>
		<pubDate>Sun, 01 Feb 2009 07:42:04 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Cool Stuff]]></category>
		<category><![CDATA[How To]]></category>
		<category><![CDATA[PushButton Engine]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[spreadsheets]]></category>
		<category><![CDATA[tweak]]></category>

		<guid isPermaLink="false">http://coderhump.com/?p=385</guid>
		<description><![CDATA[ Our latest game, Grunts: Skirmish, has 200 tweakable parameters. There are 9 player units with three levels of upgrade, and another 9 enemy units. Each unit has between three and ten parameters that can be altered.
We tried a few approaches &#8211; hand-editing a large XML file (but it was too large and spread out) [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://coderhump.com/wp-content/uploads/2009/02/tweaksheet.png" alt="tweaksheet" title="tweaksheet" width="300" height="270" class="alignright size-full wp-image-386" /> Our latest game, <a href="http://makeitbigingames.com/2009/01/woohoo-grunts-skirmish-has-a-logo/">Grunts: Skirmish</a>, has <b>200 tweakable parameters</b>. There are 9 player units with three levels of upgrade, and another 9 enemy units. Each unit has between three and ten parameters that can be altered.</p>
<p>We tried a few approaches &#8211; <b>hand-editing a large XML file</b> (but it was too large and spread out) and an in-game <b>tweaking UI</b> (but it was too much work to get the UI to be friendly to use). The old standby of having <a href="http://makeitbigingames.com/">the designer</a> and <a href="http://subreal.net/">artist</a> <b>file bug reports</b> to have <a href="http://coderhump.com/">the programmer</a> update the game wasn&#8217;t getting us very far, either.</p>
<p>&#8220;Well,&#8221; says I, &#8220;We&#8217;re some sort of Web 2.0 startup, right? And we&#8217;re developing a Flash game aren&#8217;t we? And Flash can talk to websites, can&#8217;t it? And don&#8217;t we use Google Docs for everything?&#8221;</p>
<p>It turns out there is an <a href="http://code.google.com/apis/spreadsheets/docs/2.0/reference.html#CellFeed">XML feed from public Google spreadsheets</a>. And ActionScript 3 supports <a href="http://en.wikipedia.org/wiki/E4X">E4X</a>, so you can directly manipulate XML without any extra work. <b>Now we tweak our game using a shared spreadsheet up on Google Docs.</b></p>
<p>I wrote a parser for their format:</p>
<pre><code>// Extract the entries. It's namespaced, so deal with that.
var xmlns:Namespace = new Namespace("xmlns", "http://www.w3.org/2005/Atom");
tweakXML.addNamespace(xmlns);

// Parse into a dictionary.
var cellDictionary:Dictionary = new Dictionary();
for each(var entryXML:XML in tweakXML.xmlns::entry)
{
   cellDictionary[entryXML.xmlns::title.toString()] = entryXML.xmlns::content.toString();
}</code></pre>
<p>And wrote a quick component that would fetch the spreadsheet feed, parse it, and stuff it into the right places on named objects or template data. Now I have a little entry in our level file that looks like:</p>
<pre><code>&lt;object id="googleTweaker"&gt;
   &lt;component class="com.pblabs.debug.GoogleSpreadsheetTweaker"&gt;
     &lt;SpreadsheetUrl&gt;http://spreadsheets.google.com/feeds/cells/0d8somekey848x/od6/public/basic&lt;/SpreadsheetUrl&gt;
     &lt;Config&gt;
        &lt;!--  Grunt Level 1 tweaks --&gt;
        &lt;_&gt;&lt;Cell&gt;B3&lt;/Cell&gt;&lt;Property&gt;#TheGruntProxy.creator.WarPointCost&lt;/Property&gt;&lt;/_&gt;
        &lt;_&gt;&lt;Cell&gt;C3&lt;/Cell&gt;&lt;Property&gt;!Grunt.health.mMaxHealth&lt;/Property&gt;&lt;/_&gt;
        &lt;_&gt;&lt;Cell&gt;D3&lt;/Cell&gt;&lt;Property&gt;!Grunt.ai.AttackSearchRadius&lt;/Property&gt;&lt;/_&gt;
     &lt;/Config&gt;
  &lt;/component&gt;
&lt;/object&gt;</code></pre>
<p>Each line maps a cell in the spreadsheet to a property on a template or active game object. Some properties have to be set several places, which the system deals with automatically.</p>
<p>The biggest wrinkle was Google&#8217;s crossdomain.xml policy. Basically they do not allow random Flash apps to access their site. So I had to write a small proxy script, which sits on our development server next to the game and fetches the data for it. Figuring out I had to do this took more time than any other step.</p>
<p>The main difference between the snippet and the full code is the version in our repository is 220 lines long. I only have around 150 of the full set of 200 parameters hooked up, but after a hard afternoon&#8217;s work, the process for tweaking the game has become:</p>
<ol>
<li>Open Google Docs.</li>
<li>Edit a clearly labeled value &#8211; like level 1 grunt health.</li>
<li>Restart the game, which is running in another tab in your browser.</li>
</ol>
<p><b>This takes you about a minute between trials.</b> Not too bad. Before this, the process was:</p>
<ol>
<li>Get the game source from SVN.</li>
<li>Find the right XML file &#8211; there are several.</li>
<li>Find the right section in the XML &#8211; altogether we have 200kb of the stuff for Grunts!</li>
<li>Change the value.</li>
<li>Commit the change.</li>
<li>Wait 5-15 minutes for the build system to refresh the live version of the game.</li>
</ol>
<p><b>Ten minutes per tweak is not a good way to develop.</b></p>
<p>I&#8217;ve heard about developers using Excel spreadsheets for tweaking, but can&#8217;t find anything about using Google Docs to do it. <b>But Google Spreadsheet is obviously a better choice</b>. It has built-in revision tracking. You can edit it simultaneously with someone else. You can access live data in XML either publicly (like we did) or privately via their authentication API. It&#8217;s absolutely worth the half-day of your time it will take to add Google Spreadsheet-based tweaking to your game &#8211; even if it&#8217;s a non-Flash game, downloading and parsing XML is pretty easy with the right libraries.</p>
<p>I strongly suspect this feature will find its way into the next beta of the <a href="http://www.pushbuttonengine.com/">PushButton Engine</a>. Which, by the way, you should sign up for if you are interested in developing Flash games. <b>We&#8217;re bringing people in from the signup form starting this week.</b> If you want more information, or just like looking at cool websites, click below to check out the new version of the PBEngine site, which has a bunch of information on the tech. <a href="http://subreal.net/">Tim</a> did an awesome job on the site design.</p>
<p><a href="http://pushbuttonengine.com/"><img src="http://coderhump.com/wp-content/uploads/2009/02/betashot.png" alt="betashot" title="betashot" width="565" height="217" class="aligncenter size-full wp-image-400" /></a></p>
<p><b>Edit:</b> Patrick over on the GG forums asked about the proxy script. It&#8217;s actually ludicrously simple. Not very secure either so I wouldn&#8217;t recommend deploying it on a public server. I got my script from a post on <a href="http://www.adenforshaw.co.uk/?p=4">Aden Forshaw&#8217;s blog</a>. In the real world you would want to have some security token to limit access to your proxy script&#8230; but since this is for tweaking a game that is in development I didn&#8217;t sweat it.</p>
]]></content:encoded>
			<wfw:commentRss>http://coderhump.com/archives/385/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Tip: Setting Up Flex Builder The Sane Way</title>
		<link>http://coderhump.com/archives/280</link>
		<comments>http://coderhump.com/archives/280#comments</comments>
		<pubDate>Fri, 12 Dec 2008 02:36:10 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://coderhump.com/?p=280</guid>
		<description><![CDATA[
There is a right and a wrong way to set up Flex Builder. The wrong way is to get the Flex Builder package from the Adobe site. It&#8217;s running on a super old version of Eclipse, and it lacks a lot of useful editors and functionality. I have lost many man-hours of productivity to this [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-medium wp-image-281" title="Flex Logo" src="http://coderhump.com/wp-content/uploads/2008/12/fx-300x300.png" alt="Flex Logo" width="300" height="300" /></p>
<p>There is a right and a wrong way to set up <a href="http://www.adobe.com/products/flex/">Flex Builder</a>. The wrong way is to get the Flex Builder package from the Adobe site. It&#8217;s running on a super old version of Eclipse, and it lacks a lot of useful editors and functionality. I have lost many man-hours of productivity to this version of Flex, which is why I am writing this post.</p>
<p>What you want to do is this: Go get the latest, vanilla Java-IDE version of Eclipse. You can do this at the <a href="http://www.eclipse.org/downloads/">Eclipse downloads</a> page, the package called &#8220;Eclipse IDE For Java Developers.&#8221; (<strong>Not</strong> Java SE, unless you want an extra hundred megs of Java tools.)</p>
<p>Now, go to the Adobe Flex <a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3email">download page</a>, and go to download it &#8211; but scroll <em>waaay</em> down and get the plug-in instead.</p>
<p>Finally, install Eclipse &#8211; then install the plugin. Now you have a fully up to date, ready to go version of Flex, as well as a bunch of nice tools that come with Eclipse for Java. In my experience, this is significantly more reliable and responsive than the all-in-one build from Adobe.</p>
<p><i>Edit:</i> Don&#8217;t forget to do Help -> Search for Flex Builder Updates and Help -> Software Updates&#8230; to make sure that you are fully up to date!</p>
]]></content:encoded>
			<wfw:commentRss>http://coderhump.com/archives/280/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Working with the Apple Remote on Boot Camp</title>
		<link>http://coderhump.com/archives/214</link>
		<comments>http://coderhump.com/archives/214#comments</comments>
		<pubDate>Sun, 20 Jul 2008 03:38:31 +0000</pubDate>
		<dc:creator>Ben</dc:creator>
				<category><![CDATA[How To]]></category>

		<guid isPermaLink="false">http://coderhump.com/?p=214</guid>
		<description><![CDATA[ Maybe you want to listen to ALL the events that come in off the Apple Remote. I don’t know how to do that under OS X, but here’s how to do it under Windows with Boot Camp: 

Open up the System icon from the Control Panel.

Choose the Hardware tab.

Click on the Device Manager button.

Expand [...]]]></description>
			<content:encoded><![CDATA[<p><img hspace="10" vspace="5" align="right" src="http://coderhump.com/wp-content/uploads/2008/07/apple_remote.jpg" alt="Apple Remote"/> Maybe you want to listen to ALL the events that come in off the Apple Remote. I don’t know how to do that under OS X, but here’s how to do it under Windows with Boot Camp: </p>
<ol>
<li>Open up the System icon from the Control Panel.
</li>
<li>Choose the Hardware tab.
</li>
<li>Click on the Device Manager button.
</li>
<li>Expand “Human Interface Devices” in the tree view.
</li>
<li>Right click on “Apple IR Receiver” and choose Update Drivers…
</li>
<li>Choose “Install from a list or specific location” and click next.
</li>
<li>Choose “Don’t search.” and click next.
</li>
<li>You’ll see a list with several options. Choose “USB Human Interface Device” and hit Next.
</li>
<li>Continue clicking “Next” to get through the wizard. Eventually you’ll be asked to reboot, after the drivers are installed. Do so.
</li>
<li>Reboot. Now you will get complete and unfiltered HID events from the IR Receiver. In addition, +/- and Menu will no longer change your volume or launch iTunes.
</li>
</ol>
<p>At this point you could grab a program like <a href="http://www.eventghost.org/wiki/EventGhost:About" target="_blank">EventGhost</a>, and use the HID plugin (at the bottom of the list of plugins) to listen to events from the remote and do whatever you like with them! Be sure to uncheck “Trigger enduring events for buttons” and check “Use raw Data as event name” or you won’t see any events.</p>
<p>Enjoy!</p>
]]></content:encoded>
			<wfw:commentRss>http://coderhump.com/archives/214/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
