<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Evan&#039;s Code Clunkers</title>
	<atom:link href="http://evanl.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://evanl.wordpress.com</link>
	<description>Engineering UX the old fashioned way</description>
	<lastBuildDate>Fri, 29 Jul 2011 19:40:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='evanl.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Evan&#039;s Code Clunkers</title>
		<link>http://evanl.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://evanl.wordpress.com/osd.xml" title="Evan&#039;s Code Clunkers" />
	<atom:link rel='hub' href='http://evanl.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Stupid Emulator Tricks</title>
		<link>http://evanl.wordpress.com/2011/07/26/stupid-emulator-tricks/</link>
		<comments>http://evanl.wordpress.com/2011/07/26/stupid-emulator-tricks/#comments</comments>
		<pubDate>Tue, 26 Jul 2011 21:04:53 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=215</guid>
		<description><![CDATA[Or&#8230; trick. Just one. I&#8217;ve been poking around with Windows Phone more often lately. The system makes heavy use of multitouch gestures, and I thought it was a shame that it didn&#8217;t have some kind of multitouch emulation that came with its emulator. In the emulator all you get is the mouse, so you can&#8217;t [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=215&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Or&#8230; trick. Just one.</p>
<p>I&#8217;ve been poking around with Windows Phone more often lately. The system makes heavy use of multitouch gestures, and I thought it was a shame that it didn&#8217;t have some kind of multitouch emulation that came with its emulator. In the emulator all you get is the mouse, so you can&#8217;t pinch zoom or rotate or any other the other fun things MT can enable. I do not actually have a physical Windows Phone of my own, so this made me sad.</p>
<p>That was until I downloaded the <a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=26716">Surface 2.0 SDK</a>. It comes with a utility called &#8216;Input Simulator&#8217; which is intended to allow you to emulate Surface-style interaction with an ordinary PC mouse.  It leverages the fundamental system multitouch support that Microsoft released with Windows 7.</p>
<p>The coolest side effect of this that I&#8217;ve seen is that it works perfectly with the Windows Phone Emulator. My friend <a href="http://www.identitymine.com/About/About/Jobi-Joy/Default.aspx">Jobi </a>put together <a href="http://www.youtube.com/watch?v=SQAexKkJ5WA">this video</a> to demonstrate.</p>
<p>Ta daaa</p>
<span style="text-align:center; display: block;"><a href="http://evanl.wordpress.com/2011/07/26/stupid-emulator-tricks/"><img src="http://img.youtube.com/vi/SQAexKkJ5WA/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/215/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/215/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/215/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=215&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/07/26/stupid-emulator-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Double?!?</title>
		<link>http://evanl.wordpress.com/2011/06/23/double/</link>
		<comments>http://evanl.wordpress.com/2011/06/23/double/#comments</comments>
		<pubDate>Thu, 23 Jun 2011 19:42:14 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=213</guid>
		<description><![CDATA[I feel like a quick rant&#8230;. Why on earth is the standard numeric data type used throughout WPF and Silverlight a double? 97% of the time, when you&#8217;re working with numbers in any app, a float will do you  just fine. Particularly when you&#8217;re merely dealing with layout and transforms in WPF/SL, I can scarcely [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=213&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I feel like a quick rant&#8230;.</p>
<p>Why on earth is the standard numeric data type used throughout WPF and Silverlight a double?</p>
<p>97% of the time, when you&#8217;re working with numbers in any app, a float will do you  just fine. Particularly when you&#8217;re merely dealing with layout and transforms in WPF/SL, I can scarcely imagine ever needing anything more than a float.</p>
<p>&#8220;Why NOT doubles?&#8221; you may ask. After all, if you just use them everywhere then you never have to worry about switching between double and float.</p>
<p>If you do a lot of work with special animations, as I do, you wind up using calls like TransformToDescendant/TransformToVisual a lot. And you may notice, as I have, that you are really limited on the number of these calls you can make per frame without degrading your application&#8217;s performance; they are not cheap in the slightest. These calls involve a series of matrix multiplications that can really add up quickly if you&#8217;re not careful.</p>
<p>It might surprise you to learn that, if you switch to floats and strip away the inherent overhead of C#, matrix multiplication is almost <em>trivial.</em> It&#8217;s one of the more common functions a CPU will perform, and as such their designers have optimized it on hardware umpteen different ways. On most CPUs a matrix multiply using floats can be performed with merely 3 or 4 machine instructions using SIMD extensions. Even if you don&#8217;t have access to those, CPUs are inherently designed to perform math on floats much faster than on doubles.</p>
<p>So by using doubles everywhere, Microsoft has effectively thrown out all of the optimized paths CPUs offer to applications that need to do this sort of extremely common math. I&#8217;m too lazy at the moment to put together a quick benchmark comparison, but if I get around to it I&#8217;ll post it here. Bottom line is we can&#8217;t have as much fun with animation as we might otherwise be able to, and I, for one, have no idea why.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/213/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/213/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/213/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=213&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/06/23/double/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Official Microsoft Kinect SDK Released!</title>
		<link>http://evanl.wordpress.com/2011/06/20/official-microsoft-kinect-sdk-released/</link>
		<comments>http://evanl.wordpress.com/2011/06/20/official-microsoft-kinect-sdk-released/#comments</comments>
		<pubDate>Mon, 20 Jun 2011 20:13:55 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=208</guid>
		<description><![CDATA[It&#8217;s here, in beta form! http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx As part of Microsoft&#8217;s SDK launch event, then held a 24-hour &#8216;code camp&#8217; in which small teams had 24 hours to produce something cool with the Kinect. I was invited to participate, and made a simple app that turns the user into a cylon! It turned out quite well. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=208&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s here, in beta form!</p>
<p><a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx">http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx</a></p>
<p>As part of Microsoft&#8217;s SDK launch event, then held a 24-hour &#8216;code camp&#8217; in which small teams had 24 hours to produce something cool with the Kinect. I was invited to participate, and made a simple app that turns the user into a cylon! It turned out quite well.</p>
<p>You can see the video currently up at <a href="http://channel9.msdn.com/live">http://channel9.msdn.com/live</a>. Scroll to roughly 2:20:00 to see me bumble around on camera.</p>
<p>I also got a chance to wedge in a really basic Kinect-powered PowerPoint presentation viewer. It existed in OpenNI first&#8230; so not really in the spirit of the code camp, but what I thought was remarkable was that the Microsoft SDK is easy enough to get into that I was able to port it while sitting on the couch waiting to go on the air at the channel9 building. Well done Microsoft!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/208/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/208/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/208/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=208&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/06/20/official-microsoft-kinect-sdk-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>New Kinect Interaction Mechanism?</title>
		<link>http://evanl.wordpress.com/2011/06/16/new-kinect-interaction-mechanism/</link>
		<comments>http://evanl.wordpress.com/2011/06/16/new-kinect-interaction-mechanism/#comments</comments>
		<pubDate>Thu, 16 Jun 2011 20:47:04 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=205</guid>
		<description><![CDATA[Well, that took entirely too long. Anyway, I tried out the idea I mentioned in my last post and it didn&#8217;t go very well. Oh well. Basically, the idea was to provide an analog of mouse down/mouse up events using the Kinect with a hand cursor by having the user touch their hands together. If [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=205&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Well, that took entirely too long. Anyway, I tried out the idea I mentioned in my last post and it didn&#8217;t go very well. Oh well. Basically, the idea was to provide an analog of mouse down/mouse up events using the Kinect with a hand cursor by having the user touch their hands together. If both hands were together, consider that the equivalent of a &#8216;down&#8217; event. When they came apart, consider it an &#8216;up&#8217; event.</p>
<p>It doesn&#8217;t work that well because your non-cursor arm gets really tired moving up to reach the other hand, and then back down when you&#8217;re done. Particularly if you&#8217;re already reaching out pretty far with your cursor hand to reach a far corner of the screen, touching it with your other hand can be damn near impossible.</p>
<p>So, this idea fizzled. The search for something better than hover continues!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/205/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/205/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/205/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=205&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/06/16/new-kinect-interaction-mechanism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>New Kinect UI Interaction Mechanism</title>
		<link>http://evanl.wordpress.com/2011/05/26/new-kinect-ui-interaction-mechanism/</link>
		<comments>http://evanl.wordpress.com/2011/05/26/new-kinect-ui-interaction-mechanism/#comments</comments>
		<pubDate>Thu, 26 May 2011 20:49:47 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=197</guid>
		<description><![CDATA[I&#8217;m excited! I don&#8217;t want to divulge details yet but I&#8217;ve thought of a way to interact with an application using Kinect that doesn&#8217;t involve hover-over, and if it works well it ought to have all the power and flexibility of a standard Apple mouse! (pretty low standard, I know&#8230; /rib /rib) I&#8217;ll post a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=197&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m excited! I don&#8217;t want to divulge details yet but I&#8217;ve thought of a way to interact with an application using Kinect that doesn&#8217;t involve hover-over, and if it works well it ought to have all the power and flexibility of a standard Apple mouse! (pretty low standard, I know&#8230; /rib /rib)</p>
<p>I&#8217;ll post a demo of it when I get the chance. The idea is just to easily gesture something that&#8217;s the equivalent of a mouse click. Pull it off and I&#8217;ll have saved people countless hours of hovering their hand in one place for ~1.5 seconds at a time. <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/197/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/197/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/197/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=197&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/05/26/new-kinect-ui-interaction-mechanism/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Series on Kinect-Based Interaction</title>
		<link>http://evanl.wordpress.com/2011/05/17/series-on-kinect-based-interaction/</link>
		<comments>http://evanl.wordpress.com/2011/05/17/series-on-kinect-based-interaction/#comments</comments>
		<pubDate>Tue, 17 May 2011 21:55:54 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=187</guid>
		<description><![CDATA[In case you haven&#8217; t seen, I have a series of blogs published on IdentityMine&#8217;s website regarding Kinect-based interaction and some of the thoughts and experiments I&#8217;ve done with it. You&#8217;ll find it here: Part 1: Intro Part 2: Gestures Part 3: Cursor Part 4: Buttons Part 5: Multiple Users My thinking surrounding a lot [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=187&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In case you haven&#8217; t seen, I have a series of blogs published on IdentityMine&#8217;s website regarding Kinect-based interaction and some of the thoughts and experiments I&#8217;ve done with it. You&#8217;ll find it here:</p>
<p><a href="http://www.identitymine.com/forward/2011/04/using-kinect-for-nui-part-1/">Part 1: Intro</a><br />
<a href="http://www.identitymine.com/forward/2011/04/using-kinect-for-nui-part-2-gestures/">Part 2: Gestures</a><br />
<a href="http://www.identitymine.com/forward/2011/04/using-kinect-for-nui-part-3-cursor/">Part 3: Cursor</a><br />
<a href="http://www.identitymine.com/forward/2011/04/using-kinect-for-nui-part-4-buttons/">Part 4: Buttons</a><br />
<a href="http://www.identitymine.com/forward/2011/05/using-kinect-for-nui-part-5-multiuser-scenarios/">Part 5: Multiple Users</a></p>
<p>My thinking surrounding a lot of these issues has already evolved quite a bit, so some of it is outdated at this point, but I&#8217;ll stand by it as an accurate reflection of my thinking at the time, and update here as things progress.</p>
<p>For example, although I feel it is a crutch, I do find myself using hover-activated buttons quite a bit. Finding alternative interactions that actually work well is difficult. It&#8217;s rather easy to create an interaction that&#8217;s tuned to my particular way of gesturing, but other people do things differently, and properly identifying them all is a real challenge.</p>
<p>It&#8217;s not just getting the machine to recognize gestures right, however. Getting the user to understand how to do a particular gesture is the other half of this. It&#8217;s the easier half, to be sure. The solution is to play an animation displaying exactly how to perform the gesture. I&#8217;ve learned that plain English descriptions of a gesture are never enough to properly convey the right information. But I&#8217;m no artist so it&#8217;ll be a bit before I get around to those. <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/187/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/187/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/187/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=187&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/05/17/series-on-kinect-based-interaction/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>The Flipside of Consumer-Centric Computing</title>
		<link>http://evanl.wordpress.com/2011/04/15/the-flipside-of-consumer-centric-computing/</link>
		<comments>http://evanl.wordpress.com/2011/04/15/the-flipside-of-consumer-centric-computing/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 20:21:14 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Rant]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=153</guid>
		<description><![CDATA[Steve Jobs called this the &#8220;post-PC&#8221; era, where simpler smartphones and tablets dominate a market that used to be exclusive to desktops and laptops.  Even game consoles can do many of the basic services of a computer. The focus on the consumer has, in the past few years, taken on its primary role as the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=153&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Steve Jobs called this the &#8220;post-PC&#8221; era, where simpler smartphones and tablets dominate a market that used to be exclusive to desktops and laptops.  Even game consoles can do many of the basic services of a computer. The focus on the consumer has, in the past few years, taken on its primary role as the center of developer attention (and rightfully so!). We see it not only in the growth of the smartphone and tablet markets, but also in the growth of the casual game market, and the expansion of game consoles&#8217; capabilities into space that used to be reserved for a standard PC.</p>
<p>Although there&#8217;s always room for improvement, I feel like the original problem of not being focused on or properly understanding &#8220;the consumer&#8221; is fixed. Within the professional development community, it seems to be on our mind quite regularly these days. Good for us! I&#8217;m beginning to get a better picture of this new side of the fence, and although there are many wonderful things about it, there are a couple that bother me, which I wanted to throw out there. Maybe others feel the same, or think I&#8217;m full of crap&#8211;either way, I&#8217;m curious to find out.</p>
<p>First, the obvious observation&#8211;not <em>everybody</em> is a casual, ordinary consumer. Certainly not many people bothering to read this blog. We exist too, and our demands of our hardware and software are different. We prefer flexibility and performance over simplicity and smallness. We are impressed primarily by the raw power of the devices we hold because, unlike a &#8220;normal&#8221; consumer, we intend to <em>use it all.</em> Certainly we are in the minority, and that disparity in demand may necessarily lead to more expensive products for us. I&#8217;m OK with that&#8230; as long as we&#8217;re not completely forgotten in this &#8220;post-PC&#8221; era.</p>
<p>Why would I fear being forgotten? Well, perhaps it is somewhat irrational, but in another sense it has already happened. Modern smartphones and tablets generally run on iOS, Android, and WP7. All support a centralized distribution mechanism (app store) for the apps that users can download. It&#8217;s a great way to get apps, and it makes life a lot easier than downloading it on your PC and then syncing it to the device. But on iOS and WP7 (and with the pressure it&#8217;s faced, I would suspect eventually Android), this is the one and only mass distribution mechanism allowed. Every time you submit an app it has to be &#8216;approved&#8217; by someone at Apple/Microsoft, which can take days to weeks and fail for any number of reasons.</p>
<p>So what if, as a developer, I wanted to create some interesting experimental apps. With the portability of these devices, and the cameras, GPS, accelerometers, and wifi at your disposal, there&#8217;s a ton of stuff you can do on them that you just can&#8217;t really pull off on a laptop. My apps wouldn&#8217;t be a big production, just me bashing away at some of the wackier ideas I&#8217;ve had. Ideally I&#8217;d like to be able to quickly publish new builds on a frequent basis&#8230; they&#8217;d surely be kinda buggy, and the UX pretty roughshod, but just getting the concept out there and generally working would satisfy me. Tons of popular programs have essentially started this way, yet on iOS and WP7, and probably eventually Android, this way of doing things is simply not allowed.</p>
<p>You may think &#8220;Evan, your idea sounds stupid. Why would ordinary users download your buggy, unfinished app?&#8221; Because, once again,<em> we&#8217;re not all ordinary consumers!!  </em>Us geeks still exist, we have smartphones too, and we&#8217;d love to try cool new stuff even if it&#8217;s really rough. It&#8217;s the same reason people sign up to beta test things. What would be wrong with having an App Store/Marketplace Beta Portal for such projects? It&#8217;d be special, sectioned off from the rest of the store, and would make you agree to some additional disclaimer when you enter. But once you did, you&#8217;d have access to a bunch of interesting little toys people are playing with.</p>
<p><em></em>It&#8217;s not just a matter of personal preference, either. This community of developers, experimenters, and their geeky fans are the origin of tons of technology that today has finally achieved &#8220;consumer-centric&#8221; status. Multitouch touchscreens, streaming video, voice recognition, wireless networks, motion tracking (the Kinect), GPS, hardware accelerated graphics, and even digital photography all began life as the often-broken, barely-functional toys of us geeks who loved them, and it was ultimately us being willing to put up with their eccentricity that allowed them to evolve into the more polished, friendly versions they exist as today. In the long run, stifling this community will stifle a huge source of new features for the almighty ordinary consumer.</p>
<p>It&#8217;s not all that bad yet, and hopefully I&#8217;m just overreacting, but I do see a dramatic change in the mentalities of device/OS developers from truly empowering and enabling users by giving them access to everything their machine is capable of, to locking it down for safety,  forcibly funneling developers down the same path to ensure a consistent user experience, and dumbing it down for people who aren&#8217;t really interested in the technology. Just remember that although ordinary consumers  are the large majority of users and they don&#8217;t care what&#8217;s going on under the hood or how it got there, they would not have hardly any of that power were it not for the people who do, and our crappy barely-functional toys.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/153/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/153/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/153/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=153&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/04/15/the-flipside-of-consumer-centric-computing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Parametric Animation in WPF (What for?)</title>
		<link>http://evanl.wordpress.com/2011/04/07/parametric-animation-in-wpf-what-for/</link>
		<comments>http://evanl.wordpress.com/2011/04/07/parametric-animation-in-wpf-what-for/#comments</comments>
		<pubDate>Thu, 07 Apr 2011 15:22:32 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Graphics]]></category>
		<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=98</guid>
		<description><![CDATA[WPF animations are described through the use of Storyboard objects. They&#8217;re nice because a designer can create them in Blend and nobody has to mess with their XAML. Write a couple storyboards manually and you&#8217;ll see just how important that is. But storyboard objects animate only with respect to the simple passage of time. This [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=98&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>WPF animations are described through the use of Storyboard objects. They&#8217;re nice because a designer can create them in Blend and nobody has to mess with their XAML. Write a couple storyboards manually and you&#8217;ll see just how important that is.</p>
<p>But storyboard objects animate only with respect to the simple passage of time. This bothers me. What if I want to play an animation in response to mouse movement, or something scrolling? Here&#8217;s an example. Suppose I have an app that has a cool mechanical theme, with gears moving and things spinning like the app itself is some kind of machine. The app has a scrollable region, with a scrollbar. I want some gears attached to that scrollbar, and I want them to turn, not constantly over time, but in response to me adjusting the scrollbar&#8217;s value. That&#8217;d be much more interactive and fun.</p>
<p>Fundamentally, what I want is the ability to map an artibrary range of values (in this example, the range of my scrollbar) to a storyboard&#8217;s timeline, and then bind that value to the animation.</p>
<p>While I am a little disappointed that Microsoft doesn&#8217;t have any means of implementing your own animation clock directly (at least, not that I could find), it&#8217;s actually not that hard to set this up. Care must be taken, however, because normally animations occur on another thread (that seems to be lower priority than the UI thread). Thankfully Microsoft gives us a means to seek to a specific position along the timeline synchronously through <code>Storyboard.SeekAlignedToLastTick</code>.</p>
<p>My implementation defines 4 properties: Storyboard, Value (used in place of a clock), and Minimum/Maximum, which provide boundaries for the Value property. Most of the class is just plumbing, and you can download it using the link below. But the meat of it involves finding the duration of the storyboard, and seeking to the right timeline position when Value changes.</p>
<p>Finding the duration of a storyboard is strangely harder than it ought to be. Here&#8217;s what worked well for me:</p>
<p><code>Storyboard.Begin();<br />
Storyboard.SeekAlignedToLastTick(TimeSpan.FromMilliseconds(<br />
TimeSpan.MaxValue.TotalMilliseconds - 1));<br />
double dur = Storyboard.GetCurrentTime().TotalMilliseconds;<br />
Storyboard.Stop();<br />
return dur;</code></p>
<p>Annoying. But, it works, so I&#8217;ll take it. Now, when Value changes, the storyboard timeline needs to be updated to reflect that. Here&#8217;s what that looks like:</p>
<p><code>Storyboard.SeekAlignedToLastTick(TimeSpan.FromMilliseconds(_sbDuration * (Value - Minimum) / (Maximum - Minimum)));</code></p>
<p>What&#8217;s it good for? In addition to binding to things like slider values, scrollbar positions, and progress bar values, you can use it to animate in response to user input. Maybe bind it to the position or velocity of the mouse. In my case, I intend to use it in response to a user&#8217;s movement from the Kinect. Animation like this provides feedback to the user that can be invaluable in providing discoverability to your application.</p>
<p>The source is available <a title="Parametric Storyboard Animation Source" href="https://sites.google.com/site/codeclunkersfiles/ParametricAnimator.cs" target="_blank">here</a>.</p>
<span style="text-align:center; display: block;"><a href="http://evanl.wordpress.com/2011/04/07/parametric-animation-in-wpf-what-for/"><img src="http://img.youtube.com/vi/_3qYl0AEjIQ/2.jpg" alt="" /></a></span>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/98/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/98/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/98/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=98&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/04/07/parametric-animation-in-wpf-what-for/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Pointing at the Screen With Kinect Part 2</title>
		<link>http://evanl.wordpress.com/2011/04/05/pointing-at-the-screen-with-kinect-part-2/</link>
		<comments>http://evanl.wordpress.com/2011/04/05/pointing-at-the-screen-with-kinect-part-2/#comments</comments>
		<pubDate>Tue, 05 Apr 2011 19:41:25 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=120</guid>
		<description><![CDATA[As promised, this post is about how to calibrate your Kinect and display to allow the user to physically point at the screen. See my previous post if you missed it, as it describes exactly what data is needed to be derived during calibration. In short, we need two things: coefficients of a plane equation, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=120&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>As promised, this post is about how to calibrate your Kinect and display to allow the user to physically point at the screen. See my previous post if you missed it, as it describes exactly what data is needed to be derived during calibration. In short, we need two things:</p>
<ul>
<li>coefficients of a plane equation, that describe the plane of the display in world space</li>
<li>a transform matrix that transforms from world space into screen/pixel space</li>
</ul>
<p>So let&#8217;s get right to it. I realized that a plane in 3D space can be defined  by three points. Once you know those, getting the plane coefficients is simple. Also, if you know the relative pixel locations of each of those three points as well, you can easily construct the transform.</p>
<p>I&#8217;ll work backwards a little bit and assume we have these three points; their coordinates in both world space and in pixelspace. To find the plane, we&#8217;ll find its normal (coefficients <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />, <img src='http://s0.wp.com/latex.php?latex=B&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='B' title='B' class='latex' />, and <img src='http://s0.wp.com/latex.php?latex=C&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='C' title='C' class='latex' /> from before&#8230; we called it <img src='http://s0.wp.com/latex.php?latex=N_s&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='N_s' title='N_s' class='latex' />) and then use it to find the last coefficient D. We use the rule that the cross product of two vectors is going to be normal to both of them. We can use the three points to construct two vectors that both lie on that plane. I&#8217;m going to call my three world space points <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' />, <img src='http://s0.wp.com/latex.php?latex=w_2&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_2' title='w_2' class='latex' />, and <img src='http://s0.wp.com/latex.php?latex=w_3&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_3' title='w_3' class='latex' /> and my three pixel space vectors <img src='http://s0.wp.com/latex.php?latex=p_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_1' title='p_1' class='latex' />, <img src='http://s0.wp.com/latex.php?latex=p_2&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_2' title='p_2' class='latex' />, and <img src='http://s0.wp.com/latex.php?latex=p_3&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_3' title='p_3' class='latex' />. The math to get the normal of the display then looks like:</p>
<p style="padding-left:30px;"><img src='http://s0.wp.com/latex.php?latex=v_1%3Dw_2-w_1%5Cnewline+v_2%3Dw_3-w_1%5Cnewline+N_s%3D%5Cfrac%7Bv_1+%5Ctimes+v_2%7D%7B%7Cv_1%7C%7Cv_2%7C%7D&amp;bg=f9f9f9&amp;fg=333333&amp;s=2' alt='v_1=w_2-w_1&#92;newline v_2=w_3-w_1&#92;newline N_s=&#92;frac{v_1 &#92;times v_2}{|v_1||v_2|}' title='v_1=w_2-w_1&#92;newline v_2=w_3-w_1&#92;newline N_s=&#92;frac{v_1 &#92;times v_2}{|v_1||v_2|}' class='latex' /></p>
<p>There is a minor detail here regarding which direction the normal goes. You could just as easily swap <img src='http://s0.wp.com/latex.php?latex=v_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='v_1' title='v_1' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=v_2&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='v_2' title='v_2' class='latex' /> and the normal would point in the opposite direction. But if you choose your three points carefully, this isn&#8217;t going to be a problem. Don&#8217;t choose three points at random; make sure you choose three that work well for the calibration process (more on getting the points later).</p>
<p>Now that you we have the normal, we need D. The plane equation again (using <img src='http://s0.wp.com/latex.php?latex=N_s&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='N_s' title='N_s' class='latex' />) is <img src='http://s0.wp.com/latex.php?latex=N_sx%2BD%3D0&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='N_sx+D=0' title='N_sx+D=0' class='latex' />, where <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> is any point that lies on the plane. Just use one of our three points for <img src='http://s0.wp.com/latex.php?latex=x&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='x' title='x' class='latex' /> (I&#8217;ll use <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' />, why not).</p>
<p style="padding-left:30px;"><img src='http://s0.wp.com/latex.php?latex=D+%3D+-N_sw_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=3' alt='D = -N_sw_1' title='D = -N_sw_1' class='latex' /></p>
<p>Piece of cake. Now for the transform! We know that the transform (which I&#8217;ll label <img src='http://s0.wp.com/latex.php?latex=A&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='A' title='A' class='latex' />) is supposed to properly transform from <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' /> to <img src='http://s0.wp.com/latex.php?latex=p_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_1' title='p_1' class='latex' />, and likewise for the other two. Turns out, if you have 4 of these sample transformations, it&#8217;s easy to derive the transform that successfully transforms them all (since A is a 4&#215;4 matrix). Here&#8217;s how: I can write the transform of one vector as <img src='http://s0.wp.com/latex.php?latex=w_1A%3Dp_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1A=p_1' title='w_1A=p_1' class='latex' />, but first I kinda have to redefine <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=p_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_1' title='p_1' class='latex' />. <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' /> was 3D before. Now it&#8217;s 4D. The extra component should just be a 1, so the vector looks like &lt;x, y, z, 1&gt;. For <img src='http://s0.wp.com/latex.php?latex=p_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='p_1' title='p_1' class='latex' />, it used to be 2D but now it&#8217;s 4D as well. Use 0 for the z coordinate, so the vector looks like &lt;x, y, 0, 1&gt;.  <img src='http://s0.wp.com/latex.php?latex=w_1&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_1' title='w_1' class='latex' /> is used as a horizontal vector in this previous equation, so suppose I &#8216;stacked&#8217; it on top of <img src='http://s0.wp.com/latex.php?latex=w_2&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_2' title='w_2' class='latex' />, like this:</p>
<p style="padding-left:30px;"><img src='http://s0.wp.com/latex.php?latex=%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7Dw_1+%5C%5C+w_2+%5Cend%7Barray%7D+%5Cright%29A%3D+%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7Dp_1+%5C%5C+p_2+%5Cend%7Barray%7D+%5Cright%29&amp;bg=f9f9f9&amp;fg=333333&amp;s=2' alt='&#92;left( &#92;begin{array}{c}w_1 &#92;&#92; w_2 &#92;end{array} &#92;right)A= &#92;left( &#92;begin{array}{c}p_1 &#92;&#92; p_2 &#92;end{array} &#92;right)' title='&#92;left( &#92;begin{array}{c}w_1 &#92;&#92; w_2 &#92;end{array} &#92;right)A= &#92;left( &#92;begin{array}{c}p_1 &#92;&#92; p_2 &#92;end{array} &#92;right)' class='latex' /></p>
<p>That&#8217;s just fine, according to the rules of matrix multiplication, right? If I do this with 4 points, this turns those &#8216;stacks&#8217; of vectors into 4&#215;4 matrices of their own, which we can work with to solve A! So now let&#8217;s do it with 4 points&#8230; I just need that 4th point first. A really easy way to get the 4th point is to just move one of my world points out from the screen along the normal. Because it&#8217;s moving directly away from the screen, I know it&#8217;s not actually changing the pixel position of the point. I&#8217;ll do this for <img src='http://s0.wp.com/latex.php?latex=w_3&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='w_3' title='w_3' class='latex' /> so it looks nice. So here&#8217;s what it looks like now:</p>
<p style="padding-left:30px;"><img src='http://s0.wp.com/latex.php?latex=%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7Dw_1+%5C%5C+w_2+%5C%5C+w_3+%5C%5C+w_3%2BN_s+%5Cend%7Barray%7D+%5Cright%29A%3D+%5Cleft%28+%5Cbegin%7Barray%7D%7Bc%7Dp_1+%5C%5C+p_2+%5C%5C+p_3+%5C%5C+p_3+%5Cend%7Barray%7D+%5Cright%29&amp;bg=f9f9f9&amp;fg=333333&amp;s=2' alt='&#92;left( &#92;begin{array}{c}w_1 &#92;&#92; w_2 &#92;&#92; w_3 &#92;&#92; w_3+N_s &#92;end{array} &#92;right)A= &#92;left( &#92;begin{array}{c}p_1 &#92;&#92; p_2 &#92;&#92; p_3 &#92;&#92; p_3 &#92;end{array} &#92;right)' title='&#92;left( &#92;begin{array}{c}w_1 &#92;&#92; w_2 &#92;&#92; w_3 &#92;&#92; w_3+N_s &#92;end{array} &#92;right)A= &#92;left( &#92;begin{array}{c}p_1 &#92;&#92; p_2 &#92;&#92; p_3 &#92;&#92; p_3 &#92;end{array} &#92;right)' class='latex' /></p>
<p>So now with a simple inverse, we can solve for A!! We did it!</p>
<p>All of this math hinges now on having 3 points, both in world space and pixel space. Finding these is the calibration step that the user must perform. You can get really creative with how this is done. I have this grand vision of using a special mirror that reflects visible light but is opaque in the IR spectrum. But I haven&#8217;t found that yet, and I don&#8217;t know squat about materials engineering, so I&#8217;m stuck there. What I did do, that works pretty well, is displayed my three points on the screen (using hard coded pixel locations), and asked the user to point at them. After pointing at them once, I ask the user to move around a bit and point at them again. This creates two lines per point, which I can find the intersection of to get the corresponding world coordinates for each point.</p>
<p>There may be other, better, ways to do the calibration that I haven&#8217;t thought of yet. I like the pointing approach because it doesn&#8217;t require any additional hardware, but naturally it&#8217;s limited by the imprecision of a human arm doing the pointing. Feel free to reply with any ideas. <img src='http://s2.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/120/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/120/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/120/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=120&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/04/05/pointing-at-the-screen-with-kinect-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
		<item>
		<title>Pointing at the Screen with Kinect</title>
		<link>http://evanl.wordpress.com/2011/03/30/pointing-at-the-screen-with-kinect/</link>
		<comments>http://evanl.wordpress.com/2011/03/30/pointing-at-the-screen-with-kinect/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 18:15:39 +0000</pubDate>
		<dc:creator>evanl</dc:creator>
				<category><![CDATA[Kinect]]></category>

		<guid isPermaLink="false">http://evanl.wordpress.com/?p=69</guid>
		<description><![CDATA[So I put together a fancy gesture recognition library for the Kinect. I used some fancy math to get the system to recognize common movements, and translated those directly into specific events that an application could work with. To get an application to interpret the events directly, I implemented a focus model for controls very [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=69&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>So I put together a fancy gesture recognition library for the Kinect. I used some fancy math to get the system to recognize common movements, and translated those directly into specific events that an application could work with.</p>
<p>To get an application to interpret the events directly, I implemented a focus model for controls very similar to keyboard focus. When you press a key on the keyboard, the system sends the events to the control with focus. It&#8217;s no different with Kinect gestures. To focus on a particular control, all you had to do was point at them (I&#8217;m using past tense on purpose&#8230; I&#8217;ll get to that story later).</p>
<p>So, one major issue was how to take the &#8220;raw&#8221; (relatively speaking) data of the user&#8217;s hand, elbow, and shoulder positions, and convert that into a specific pixel on the screen being pointed at.</p>
<p>There are three basic steps to this process:</p>
<ol>
<li>Figure out whether the user is using their arm to point at something. If so, find a ray in world space that represents the pointing arm.</li>
<li>The display screen lies on a plane in world space. We must know this plane, and must intersect it with the ray we just computed to find a specific point on the display plane.</li>
<li>Once we have that point, a simple transform can convert it into screen space (a pixel coordinate). Of course, the trick is <em>getting</em> that transform in the first place.</li>
</ol>
<p>Problem #1 is fairly simple. When a user is pointing at something, their shoulder, elbow, and hand are all basically collinear. To test this, I construct unit vectors representing the forearm and upper arm, and the use the property of dot products that states:</p>
<p><img src='http://s0.wp.com/latex.php?latex=a+%5Ccdot+b+%3D+%7Ca%7C+%7Cb%7C+%5Ccos+%5Ctheta&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='a &#92;cdot b = |a| |b| &#92;cos &#92;theta' title='a &#92;cdot b = |a| |b| &#92;cos &#92;theta' class='latex' /></p>
<p>Where <img src='http://s0.wp.com/latex.php?latex=%5Ctheta&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='&#92;theta' title='&#92;theta' class='latex' /> is the angle between the two vectors. We want that angle to be close to zero, so the cosine of it should be close to 1. Since the upper arm and forearm vectors are unit vectors already, their lengths are both 1, so those drop out of the equation. Realistically, it&#8217;s impossible to expect your hand, elbow, and shoulder to be precisely collinear, so we threshold it. In the end, the code looks like:</p>
<p><code>Vector3D upperarm = Elbow - Shoulder;<br />
Vector3D forearm = Hand - Elbow;<br />
upperarm.Normalize();<br />
forearm.Normalize();<br />
bool ispointing = Vector3D.DotProduct(upperarm, forearm) &gt; 0.95;</code></p>
<p>So by checking whether the dot product is greater than 0.95, the system allows you to be &#8216;close enough&#8217; without any trouble. Next, we need to define the ray that represents the pointing arm. I just use the vector that goes from the user&#8217;s shoulder to the hand, making our ray (which originates at <img src='http://s0.wp.com/latex.php?latex=R_o&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='R_o' title='R_o' class='latex' /> going in direction <img src='http://s0.wp.com/latex.php?latex=R_d&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='R_d' title='R_d' class='latex' />), and our solution to problem #1:</p>
<p><img src='http://s0.wp.com/latex.php?latex=R_o%3DShoulder+%5Cnewline+R_d%3DHand+-+Shoulder&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='R_o=Shoulder &#92;newline R_d=Hand - Shoulder' title='R_o=Shoulder &#92;newline R_d=Hand - Shoulder' class='latex' /></p>
<p>For problem #2, we need to know the plane that the display lies on. This requires a calibration step that I think I&#8217;ll save for my next blog post, since it&#8217;s kind of its own topic. So for now I&#8217;ll just assume I know these numbers magically. To define the plane, we use the traditional plane equation:</p>
<p><img src='http://s0.wp.com/latex.php?latex=Ax+%2B+By+%2B+Cz+%2B+D+%3D+0&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='Ax + By + Cz + D = 0' title='Ax + By + Cz + D = 0' class='latex' /></p>
<p>To intersect the ray with the plane, first realize that the ray breaks down to three different equations, one for each dimension in 3D space:</p>
<p><img src='http://s0.wp.com/latex.php?latex=x+%3D+x_0+%2B+%5Cdelta_xu%5Cnewline+y%3Dy_0+%2B+%5Cdelta_yu%5Cnewline+z%3Dz_0%2B%5Cdelta_zu&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='x = x_0 + &#92;delta_xu&#92;newline y=y_0 + &#92;delta_yu&#92;newline z=z_0+&#92;delta_zu' title='x = x_0 + &#92;delta_xu&#92;newline y=y_0 + &#92;delta_yu&#92;newline z=z_0+&#92;delta_zu' class='latex' /></p>
<p>where <img src='http://s0.wp.com/latex.php?latex=u+%3E+0&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='u &gt; 0' title='u &gt; 0' class='latex' />. To find our point, we need to use substitution to factor out the x, y, and z variables, leaving u as the only unknown. Remember, <img src='http://s0.wp.com/latex.php?latex=x_0%2C+y_0%2C+z_o%2C+%5Cdelta_x%2C+%5Cdelta_y%2C&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='x_0, y_0, z_o, &#92;delta_x, &#92;delta_y,' title='x_0, y_0, z_o, &#92;delta_x, &#92;delta_y,' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=%5Cdelta_z&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='&#92;delta_z' title='&#92;delta_z' class='latex' /> were all figured out in step 1 (they&#8217;re the components of <img src='http://s0.wp.com/latex.php?latex=R_o&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='R_o' title='R_o' class='latex' /> and <img src='http://s0.wp.com/latex.php?latex=R_d&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='R_d' title='R_d' class='latex' />). Substitution yields this nasty thing:</p>
<p><img src='http://s0.wp.com/latex.php?latex=A%28x_0+%2B+%5Cdelta_xu%29+%2B+B%28x_o+%2B+%5Cdelta_yu%29+%2B+C%28z_0+%2B+%5Cdelta_zu%29%2BD+%3D+0&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='A(x_0 + &#92;delta_xu) + B(x_o + &#92;delta_yu) + C(z_0 + &#92;delta_zu)+D = 0' title='A(x_0 + &#92;delta_xu) + B(x_o + &#92;delta_yu) + C(z_0 + &#92;delta_zu)+D = 0' class='latex' /></p>
<p>With a little bit of swapping things around and simplifying, we can figure out u:</p>
<p><img src='http://s0.wp.com/latex.php?latex=u+%3D+-%5Cfrac%7BAx_0%2BBy_0%2BCz_0%2BD%7D%7BA%5Cdelta_x%2BB%5Cdelta_y%2BC%5Cdelta_z%7D&amp;bg=f9f9f9&amp;fg=333333&amp;s=2' alt='u = -&#92;frac{Ax_0+By_0+Cz_0+D}{A&#92;delta_x+B&#92;delta_y+C&#92;delta_z}' title='u = -&#92;frac{Ax_0+By_0+Cz_0+D}{A&#92;delta_x+B&#92;delta_y+C&#92;delta_z}' class='latex' /></p>
<p>Personally, I&#8217;m a big fan of vector calculus. It makes everything look so much cleaner! Did you know that in the plane equation, the coefficients A, B, and C actually represent the normal of the plane? Just for fun, if I let that same normal be represented as <img src='http://s0.wp.com/latex.php?latex=N_s&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='N_s' title='N_s' class='latex' />, the previous equation becomes</p>
<p><img src='http://s0.wp.com/latex.php?latex=u+%3D+-%5Cfrac%7BN_s+%5Ccdot+R_o+%2B+D%7D%7BN_s+%5Ccdot+R_d%7D&amp;bg=f9f9f9&amp;fg=333333&amp;s=2' alt='u = -&#92;frac{N_s &#92;cdot R_o + D}{N_s &#92;cdot R_d}' title='u = -&#92;frac{N_s &#92;cdot R_o + D}{N_s &#92;cdot R_d}' class='latex' /></p>
<p>Ahhh&#8230; clean. Once you know u, you can calculate the point in space using the equations for the ray I listed earlier. Or,  just <img src='http://s0.wp.com/latex.php?latex=P%3DR_o+%2B+R_du&amp;bg=f9f9f9&amp;fg=333333&amp;s=0' alt='P=R_o + R_du' title='P=R_o + R_du' class='latex' />. Hee!</p>
<p>So that solves problem #2! We&#8217;re almost done. Problem #3 involves converting this point of ours into a pixel location on the screen. We do this using a 4&#215;4 transform matrix. The difficulty with problem #3 is entirely in finding this matrix, which is part of the calibration step and therefore something for my next blog post. So, assuming we have it, just use it to transform the point P we just found. I set my matrix up so that the pixel locations are in the X and Y coordinates of the output vector. The Z should be zero, but if it doesn&#8217;t wind up that way&#8230; I don&#8217;t really care. I just want the pixel position.</p>
<p>So that&#8217;s it! After transforming P, we have an onscreen pixel (well, you&#8217;ll have to do some bounds checking to make sure of that) that the user is pointing at.</p>
<p>As an aside, the reason I originally referred to this method in the past tense is that it is fairly inaccurate, no matter what you do. The idea that I can pinpoint a precise pixel with my arm is a bit silly, and in practice you do indeed get a lot of jitter in the input, and the pixel that is computed winds up being offset from where you think it should be. This isn&#8217;t because of a defect in the calibration process, but in our own perceptions (which in my experience changes rather frequently, depending on subtle differences in your stance). I think in the future, when the sensors have better precision, and as long as your UI is either very simple or displayed on a VERY large screen, this technique might be useful. Lately I&#8217;ve opted to just take pointing as a rough suggestion, based simply on direction the user is pointing in. It doesn&#8217;t require calibration, the precision is much better, and the fact that you aren&#8217;t physically pointing at anything doesn&#8217;t seem to be a bother.</p>
<p>In the future I may try adjusting my algorithm in step #1, so that the pointing ray actually starts from the user&#8217;s eye, instead of the shoulder, but I&#8217;m really not sure that will have a huge impact on the overall quality of the experience. I&#8217;m happy with the simpler approach, but when it works well, being able to physically point at the screen and see it respond is very impressive.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/evanl.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/evanl.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/evanl.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=evanl.wordpress.com&amp;blog=5144183&amp;post=69&amp;subd=evanl&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://evanl.wordpress.com/2011/03/30/pointing-at-the-screen-with-kinect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/1128f2fbb70674f2716af78e1cda700c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">evanl</media:title>
		</media:content>
	</item>
	</channel>
</rss>
