<?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>Justin Lange</title>
	<atom:link href="http://itp.nyu.edu/~jl4554/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://itp.nyu.edu/~jl4554/blog</link>
	<description></description>
	<lastBuildDate>Mon, 06 Aug 2012 23:05:17 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Pesky Autoresets</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=395</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=395#comments</comments>
		<pubDate>Mon, 06 Aug 2012 23:05:17 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=395</guid>
		<description><![CDATA[<p>I revised my circuit board to avoid any and all communication pins (not just 0 &#038; 1, as I mentioned in my ) by adding jumpers. Requires an even hand, a Dremal, and desperately small drill bits (I could only find them at a Manhattan jewelry supply store) but workable as an ad-hoc solution. </p> [...]]]></description>
			<content:encoded><![CDATA[<p>I revised my circuit board to avoid any and all communication pins (not just 0 &#038; 1, as I mentioned in my <a href="http://itp.nyu.edu/~jl4554/blog/?p=392" title="last post" target="_blank"></a>) by adding jumpers. Requires an even hand, a Dremal, and desperately small drill bits (I could only find them at a Manhattan jewelry supply store) but workable as an ad-hoc solution. </p>
<p>To make sure all the solenoids were correctly firing, I created an array and iterated through it with a For() loop, turning the solenoids off and on.</p>
<blockquote><p><code>int stringPins[] = {<br />
  2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 28, 29, 32, 33, 36, 37 };</p>
<p>for (int j = 0; j < firstPinDigit[thisPin]; j++){<br />
        Serial.print(stringPins[thisPin]);<br />
        Serial.println(" is the pin we are writing to");<br />
        digitalWrite(stringPins[thisPin], HIGH);<br />
        delay(timeDelayHigh);<br />
        digitalWrite(stringPins[thisPin], LOW);<br />
        delay(timeDelayLow); </code></p></blockquote>
<p>It worked. Mostly. Sometimes, the Arduino still reset. I checked everything for potential shorts, and made absolutely sure I wasn't using any communication pins. Still, occasional resets persisted, often when I wrote "high" to pin 28. If I removed any Serial commands, the reset problem vanished.</p>
<p>While I was happy to have pinpointed the problem, I knew that getting rid of all serial commands would render any future programming debugging (and there will be plenty) unacceptably murky. Scouring the internet, I gathered that the consensus is that the autoreset problem is a derivative of a "feature" of new arduinos: when they detect that an effort to communicate with computer communication (you guessed it-- Serial) they reset themselves, so that the bootloader (their baked-in software that allows them to load new code) can run and download a new program to their memory. "They" being the Arduinos. I may be getting too close to mine. But I digress.</p>
<p>The next question is obvious: how does one <em>temporarily</em> disable this auto-reset functionality? I found forums full of fine folks looking for answers. The best solution I found came from senior member DCB over at http://www.arduino.cc/ who<br />
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213719666/all<a href="http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1213719666/all" title="wrote" target="_blank"></a>:</p>
<blockquote><p>FYI, I just tried another little experiment (modified)</p>
<p>I took a 110 ohm resistor and connected the arduino 5v pin to the reset pin, jumper style.  They are close together.</p>
<p>Guess what?  No more com port resets </p>
<p>Remove the jumper resistor and com port resets resume.</p>
<p>The 110 ohm resistor is just enough to keep the reset pin high (2.38v) when the ftdi chip tries to pull it low, and limits the current through the ftdi pins to 24ma*.  </p>
<p>It also limits the current through the reset switch to 45ma.
</p></blockquote>
<p>Sounds like a plan to me. I'll drill holes for another jumper (what's another, anyhow?) and maybe add a switch to my board so that I can turn my auto-reset disabling function on &#038; off, which could be useful since my circuit board (effectively a home-brew Arduino shield at this point) completely covers the manual "reset" switch.</p>
<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/08/DSC2720.jpg"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/08/DSC2720-1024x680.jpg" alt="" title="_DSC2720" width="640" height="425" class="aligncenter size-large wp-image-396" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=395</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>That pin is bad, bad news&#8230;</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=392</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=392#comments</comments>
		<pubDate>Thu, 26 Jul 2012 17:27:06 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=392</guid>
		<description><![CDATA[<p>A poem in 60 seconds:</p> <p>never use pins one and zero to connect most things to your Arduino</p> <p>reserved they should stay for all things serial; else &#8220;Timeout Errors&#8221; will be your burial</p> <p></p> <p>There are plenty of pins to choose from. Fellow learners: don&#8217;t use TX or RX pins (usually 1 &#038; 0) unless [...]]]></description>
			<content:encoded><![CDATA[<p>A poem in 60 seconds:</p>
<p>never use<br />
pins one and zero<br />
to connect most things<br />
to your Arduino</p>
<p>reserved they should stay<br />
for all things serial;<br />
else &#8220;Timeout Errors&#8221;<br />
will be your burial</p>
<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/07/Screen-Shot-2012-07-26-at-1.24.52-PM.png"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/07/Screen-Shot-2012-07-26-at-1.24.52-PM-300x77.png" alt="" title="Screen Shot 2012-07-26 at 1.24.52 PM" width="300" height="77" class="aligncenter size-medium wp-image-393" /></a></p>
<p>There are plenty of pins to choose from. Fellow learners: don&#8217;t use TX or RX pins (usually 1 &#038; 0) unless you really know what you&#8217;re doing. Since they&#8217;re used in the upload process, you&#8217;ll run the risk of having to disconnect your Arduino every time you want to change your sketch if those pins are connected to anything else.</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=392</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Back on Blog</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=389</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=389#comments</comments>
		<pubDate>Thu, 26 Jul 2012 03:44:07 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=389</guid>
		<description><![CDATA[<p>Whoza! Having regained access to my blog (an important acivity that was delayed a month due to my injury and surgery) I now find myself tasked with lots of documentation to post on FolkBox progress. I&#8217;ll start with where I am now, and work my way back. </p> ]]></description>
			<content:encoded><![CDATA[<p>Whoza! Having regained access to my blog (an important acivity that was delayed a month due to my injury and surgery) I now find myself tasked with lots of documentation to post on FolkBox progress. I&#8217;ll start with where I am now, and work my way back. </p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=389</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tracking motion in space</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=383</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=383#comments</comments>
		<pubDate>Sun, 06 May 2012 23:08:15 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=383</guid>
		<description><![CDATA[<p>Purchased the 9dof sensor stick from sparkfun. Installation was a bit tricky. Needed to download drivers for the FTDI breakout board before it would show up as serial port over USB. Once installed, showed up reliably on port 0 and 1. Nice. Installed the excellent code rewritten by [these fine folks] which takes the data [...]]]></description>
			<content:encoded><![CDATA[<p>Purchased the 9dof sensor stick from sparkfun. Installation was a bit tricky. Needed to <a href="http://www.ftdichip.com/FTDrivers.htm" title="download the drivers" target="_blank">download drivers</a> for the FTDI breakout board before it would show up as serial port over USB. Once installed, showed up reliably on port 0 and 1. Nice. Installed the excellent code rewritten by [these fine folks] which takes the data from the gyroscope, accelerometer and magnetometer and intelligently averages them to give very decent, low-latency output of yaw, pitch and roll. I&#8217;ll need to measure movement on three more axis before my headtracking application is complete (X, Y and Z) but for head perspective, I think it&#8217;s going to work great.</p>
<p>Initially I was attracted to the idea of reading serial communication from the board directly in OF, but the example sketch utilizes multithreading, which is a pandora&#8217;s box that I&#8217;m going to avoid opening for now. So, I decided to <a href="http://ameliahancock.com/remquilt" title="once again" target="_blank">once again</a> employ processing as an intermediary between an arduino chip and openFrameworks.</p>
<p>I started with the Razor_AHRS_test and added OSC functionality with the <a href="http://www.sojamo.de/libraries/oscP5/" title="OSC p5 library" target="_blank">OSC p5 library</a> to send yaw, pitch and roll over OSC. I also added a small modification to the calibration code so that the yaw value sent would take into account the calibration that&#8217;s happening in Processing.   </p>
<blockquote><p><code>//send razorDOF variables over OSC</p>
<p>int intYaw = int(yaw) -int(yawOffset);<br />
int intPitch = int(pitch);<br />
int intRoll = int(roll);</p>
<p>razorValues[0] = intYaw;<br />
razorValues[1] = intPitch;<br />
razorValues[2] = intRoll;</p>
<p>OscMessage myMessage = new OscMessage("");<br />
myMessage.add(razorValues);<br />
oscP5.send(myMessage, myRemoteLocation); </code></p></blockquote>
<p>Getting the values out of the razorValues array in OF turned out to be a cinch, thanks to ofxOSC. Borrowing heavily from the ofx example code, I created a new function that I call during my update loop:</p>
<blockquote><p><code>void testApp::updateOsc(){</p>
<p>	while( receiver.hasWaitingMessages() )<br />
	{<br />
		ofxOscMessage m;<br />
		receiver.getNextMessage( &#038;m );<br />
        razorYaw = m.getArgAsInt32( 0 );<br />
        razorPitch = m.getArgAsInt32( 1 );<br />
        razorRoll = m.getArgAsInt32( 2 );<br />
	}</p>
<p>    printf("razorYaw: %d razorPitch: %d razorRoll: %d\n", razorYaw, razorPitch, razorRoll);<br />
}<br />
</code></p></blockquote>
<p>Now, I just need to pass those variables into my updateMesh method. Right now, it looks like this:</p>
<blockquote><p><code>myMesh->updateMesh(smoothPZ, smoothDiffX, smoothDiffY, transZ);<br />
</code></p></blockquote>
<p>I&#8217;ll need to modify updateMesh to accept an additional variable for roll (which measures side to side movement of your head &#8212; imagine cocking your head to one side to look at a picture that&#8217;s oriented the wrong way &#8212; that&#8217;s roll). Time to figure out how to translate on that axis&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=383</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>To Infinity &amp; Beyond!</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=367</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=367#comments</comments>
		<pubDate>Tue, 24 Apr 2012 02:47:36 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=367</guid>
		<description><![CDATA[<p>Or, at least a few seconds into the past&#8230;</p> <p></p> <p>Major steps &#8216;forward&#8217; on my time machine simulator today. Seeing the beauty of classes to really keep your code clean &#038; efficient. My main draw loop now looks like this:</p> <p>void testApp::draw() {</p> <p>ofTranslate(fullWindowWidth/2,fullWindowHeight/2); ofViewport(0, ofGetWindowHeight()/2, ofGetWindowWidth(), ofGetWindowHeight()/2); myMesh->updateMesh(smoothPZ, smoothDiffX, smoothDiffY, transZ); ofViewport(0, 0, ofGetWindowWidth(), [...]]]></description>
			<content:encoded><![CDATA[<p>Or, at least a few seconds into the past&#8230;</p>
<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/Screen-shot-2012-04-23-at-10.30.47-PM.png"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/Screen-shot-2012-04-23-at-10.30.47-PM-1024x576.png" alt="" title="viewing the recent past in 3D" width="640" height="360" class="aligncenter size-large wp-image-371" /></a></p>
<p>Major steps &#8216;forward&#8217; on my time machine simulator today. Seeing the beauty of classes to really keep your code clean &#038; efficient. My main draw loop now looks like this:</p>
<blockquote><p><code>void testApp::draw() {</p>
<p>ofTranslate(fullWindowWidth/2,fullWindowHeight/2);<br />
ofViewport(0, ofGetWindowHeight()/2, ofGetWindowWidth(), ofGetWindowHeight()/2);<br />
myMesh->updateMesh(smoothPZ, smoothDiffX, smoothDiffY, transZ);<br />
ofViewport(0, 0, ofGetWindowWidth(), ofGetWindowHeight()/2);<br />
myMesh->updateMesh(smoothPZ, smoothDiffX+eyeDistance, smoothDiffY, transZ);</p>
<p>}<br />
</code></p></blockquote>
<p>Everything else happens under the hood. Since I&#8217;m building a layered, installation-oriented, theatrical application, one can easily imagine expanding the graphics processing to incorporate playful 2D visuals layered in a &#8220;heads-up-display&#8221; style. Relying on a class that is external to my main draw loop allows me to clearly see and see the order in which I draw my graphics.</p>
<p>Once I figured out ofViewport (thanks, again, to Kyle McDonald) incorporating 3D has been surprisingly easy. Rotating right eye&#8217;s perspective 7.5 degrees from the perspective of the left eye did the trick. I was expecting more complex stereoscopic subtleties to pose significant problems; convergence and other 3D-specific parameters often provide significant challenges to the live-action 3D cinematographer (as my 3D simulcast gig next week may demonstrate). </p>
<p>One bug: sometimes when I connect the sony HMD (think video goggles) I&#8217;m using, the top and bottom image sections are offset by about 1/4 of the screen height. It&#8217;s not a bug in my coding, since I observe this discordance outside of openFrameworks. I can&#8217;t seem to reliably repeat the problem, and only a long restart fixes it (and even then, only some of the time). The order with which I connect the components (the goggles, their control box, the DVI to HDMI adapter) may have something to do with it. The best thing, here, would probably be to look into a proper graphics card that provides true HD 3D output. As it stands, I&#8217;m squashing two images into a single 1280&#215;720 output &#8212; that&#8217;s about 640&#215;360 per eye, significantly less resolution than the 1280&#215;720 pixels the sony HMD is able of displaying <em>per eye</em> &#8212; and relying on the HMD to &#8220;unsquish&#8221; each image into discrete left and right images, a process of encoding 3D that is colloquially referred to as &#8220;over-under&#8221;. It&#8217;s somewhere in this last process, I think, that things are going awry, since the 2D mode seems fine. Since the HMD also supports a &#8220;side-by-side&#8221; mode, that&#8217;ll be the next thing to try.</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=367</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Transform, Rotate, and a splash of Scale</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=359</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=359#comments</comments>
		<pubDate>Mon, 16 Apr 2012 07:53:48 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=359</guid>
		<description><![CDATA[<p></p> <p>I sat down with Deqing Sun yesterday and tried to wrap my head around a more formal understanding of the relationship between transform, rotate and scale within an orthographically projected/viewed &#8220;3D&#8221; scene. We fired up processing and took a gander at a simplified problem: how to manipulate a 2D object within 3D space. Quickly [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/funwith3d.jpg"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/funwith3d.jpg" alt="" title="funwith3d" width="1344" height="620" class="aligncenter size-full wp-image-360" /></a></p>
<p>I sat down with <a href="http://itp.nyu.edu/blogs/ds3457" title="Deqing Sun" target="_blank">Deqing Sun</a> yesterday and tried to wrap my head around a more formal understanding of the relationship between transform, rotate and scale within an orthographically projected/viewed &#8220;3D&#8221; scene. We fired up processing and took a gander at a simplified problem: how to manipulate a 2D object within 3D space. Quickly we realized that the order with which these operations are performed is the essential element.</p>
<blockquote><p>
<code></p>
<p>float eyePoint = 1000;</p>
<p>void setup(){<br />
 size(600,600,P3D);<br />
}</p>
<p>void draw(){<br />
  background(200);<br />
  translate(300,300);<br />
  translate(0,0,eyePoint);<br />
  rotateY((mouseY-300)/300.0*(0.5*PI));<br />
  scale(300.0/mouseX);<br />
  translate(0,0,-eyePoint);<br />
  rect(-20,-20,40,40);<br />
}<br />
</code></p></blockquote>
<p>Note that we&#8217;re translating three times. Here&#8217;s why: first we translate to the middle of the screen, then we translate on the Z axis to <em>the point around which we want to rotate</em> and then we translate back to our original position. Another way to say this is, we nest the rotation commands inside of an operation that translates to the coordinate around which we wish to rotate.</p>
<p>I then reworked these operations in openFrameworks / C++. <a href="http://www.robbietilton.com/" title="Robbie Tiltom" target="_blank">Robby Tilton</a> helped me realize that for my purposes, I could just drop scale all together. I&#8217;m not interested in changing the field of view, or truly &#8220;scaling&#8221; the scene &#8212; just in navigating within it based on arbitrary input. As I understand it, I don&#8217;t need to change the relative distance between objects &#8212; just the distance between objects and a viewpoint, and then angle from which those objects will be &#8220;projected&#8221; on the screen.</p>
<p>So I dropped scale &#8212; but not before I had a little fun (see picture). When it comes to building the impressionistic side of the re(time) simulator, I think some scale distortions will make transitionary aesthetic elements as I try to provide the experience of traveling (briefly) back in time.</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=359</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EXTRA: Dark material not particularly visible on camera!</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=351</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=351#comments</comments>
		<pubDate>Sat, 14 Apr 2012 01:19:20 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=351</guid>
		<description><![CDATA[<p>As you may have guessed, that&#8217;s not what I was hoping would happen. I purchased a few IR reflective markers with the intent of cutting them up into a fiducial marker that would nicely reflect IR light.</p> <p> infrared (IR) reflective material intended for the covert combat identification of troops, vehicles and equipment. It is [...]]]></description>
			<content:encoded><![CDATA[<p>As you may have guessed, that&#8217;s not what I was hoping would happen. I purchased a few <a href="http://www.nightvisionsystems.com/prod/prodDetail.aspx?ID=295&#038;from=4" title="IR markers">IR reflective markers</a> with the intent of cutting them up into a fiducial marker that would nicely reflect IR light.</p>
<blockquote><p> infrared (IR) reflective material intended for the covert combat identification of troops, vehicles and equipment. It is most commonly used to prevent fratricide (the inadvertent killing of friendly forces). To the naked eye, GloTape appears to be similar to black duct tape in both texture and finish without a visible reflective glow. When illuminated with the infrared diode on standard night vision goggles (NVGs), the GloTape gives a bright reflection that is clearly visible up to 70 meters away. </p></blockquote>
<p>No dice &#8212; at least with the 15-ILO5 Infrared Illuminator Panel I tested it with. And it&#8217;s worth mentioning that it didn&#8217;t reflect the IR laser used in the Kinect Camera, either. So, either the frequency of IR diodes on &#8220;standard night vision goggles&#8221; is way different than the 15-IL05 and the Kinect diode &#8211;OR&#8211; the squares I purchased are duds.</p>
<div id="attachment_352" class="wp-caption aligncenter" style="width: 678px"><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/Screen-shot-2012-04-13-at-8.48.13-PM.png"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/Screen-shot-2012-04-13-at-8.48.13-PM.png" alt="" title="Screen shot 2012-04-13 at 8.48.13 PM" width="668" height="430" class="size-full wp-image-352" /></a><p class="wp-caption-text">My fingers appear brighter than the &quot;reflective square&quot;. Not what I was hoping for.</p></div>
<p>As a side not, to get the PS3 camera working under OSX 10.6.8, I had to install <a href="http://www.webcam-osx.sourceforge.net" title="macam">macam</a>. Worked like a charm.</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=351</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FolkBox: more twang, more solder</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=324</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=324#comments</comments>
		<pubDate>Fri, 13 Apr 2012 00:25:12 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=324</guid>
		<description><![CDATA[<p></p> <p>At the 2011 ITP Winter Show, I presented my invention, the FolkBox, which I described rather blandly as &#8220;a device that allows a person with limited left-hand dexterity to play the acoustic guitar.&#8221; The reason I really built is is to let my Dad play the guitar again. And, at the show, he did [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0749-1024x612.jpg" alt="" title="IMAG0749" width="640" height="382" class="aligncenter size-large wp-image-338"/></p>
<p>At the 2011 ITP Winter Show, I presented my invention, the <strong>FolkBox</strong>, which I described rather blandly as &#8220;a device that allows a person with limited left-hand dexterity to play the acoustic guitar.&#8221; The reason I really built is is to let my Dad play the guitar again. And, at the show, he did &#8212; for the first time in over a year. Since then, I&#8217;ve been building a revised prototype. A full video is going to have to wait until I finish the robust, revised prototype this summer. I&#8217;ve documented some of the progress I made over break in an earlier post but I also want to share the first story of how it all came about. Here&#8217;s what I wrote for the winter show:</p>
<blockquote><p>I grew up with my Dad&#8217;s songs. Some of my first memories are of him and my Mom singing to me and my siblings. A bad fall last winter left my Dad with a dislocated shoulder and detached nerves. His function in his left arm remains very limited. And he sure can&#8217;t play guitar.</p>
<p>I thought,&#8217;how about I just build something to allow him to get back to his songs?&#8217; Something of a Luddite at heart, he was a little slow warming up to the idea of an electronic device interfacing between him and an acoustic instrument. Furthermore, he was understandably a bit pessimistic; he said, &#8220;Justin, that sounds like a great idea if you&#8217;ve got a ten-million dollar research budget behind you, but I just don&#8217;t think what you&#8217;re talking about is possible&#8221;. I said, &#8220;let me see what I can do&#8221;.</p>
<p>My design revolves around three rows of solenoids, positioned just above the fret board at the base of the neck on the first, second and third frets. A series of buttons near the body allow simple, intuitive control over chord selection. </p>
<p>Pressing and holding the first button plays an &#8220;A major&#8221; chord; pressing and holding the second button plays a &#8220;B major&#8221; chord, and so on. Other buttons, for instance, &#8220;7th&#8221; or &#8220;minor&#8221;, modify the chords that the root buttons create; pushing &#8220;minor&#8221; and then &#8220;B&#8221; plays a &#8220;B&#8221; minor chord.</p>
<p>FolkBox is a prototype in early development. At the time of this writing, John, who lives in upstate New York, has not yet tested the device. We&#8217;re excited and hopeful.</p>
<p>John is experiencing some nerve regrowth, at the rate of about 1mm every few weeks. It&#8217;s not known how long this will continue, and even if it does, his range of motion will likely remain limited.</p>
<p>As John warmed to the idea of utilizing an assistive device, I investigated what kind of input might feel most &#8220;natural&#8221; to him, most akin to playing the guitar. We considered using a combination of buttons on the guitar and a foot pedal, but settled on using buttons solely on the guitar because it most closely resembled the form factor of the instrument. Because of his limited dexterity, the &#8220;modfier&#8221; buttons are toggle switches; he need only press a minor button to enter the minor &#8220;mode&#8221;, wherein all chords will be minor until the mode is changed. This way, he doesn&#8217;t need to hold down multiple buttons at once, a task that we anticipated might prove difficult for him.</p>
<p>Our conversations first revolved around (1) what it might feel like to use a mechanical/digtal interface, and soon moved to hands-on conversations, where he would hold a guitar and we would examine where his hand could comfortably sit. The idea of having the buttons anywhere near the frets that would actually be pressed was quickly scraped &#8212; not only did he have difficulty moving his fingers, I learned, but he also couldn&#8217;t move his arm up the fretboard. Thus, we chose the intersection of the body and neck of the guitar as the ideal location for the buttons. I quickly fabricated a piece of wood and taped it to the guitar to see if he could reach it. </p>
<p><strong>Audiance</strong><br />
Because the &#8220;folkBox&#8221; is controlled by a micro-controller, the input mechanism (the series of buttons placed below the fretboard) can be considered modular; it&#8217;s not hard to conceive of other forms of input that could be utilized to put the device in the service of other disabilities. A full amputee, for example, could utilize the foot pedal input module that John rejected.
</p></blockquote>
<p>A few pictures:</p>
<p></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=326' title='IMAG0486'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0486-150x150.jpg" class="attachment-thumbnail" alt="IMAG0486" title="IMAG0486" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=327' title='IMAG0490'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0490-150x150.jpg" class="attachment-thumbnail" alt="IMAG0490" title="IMAG0490" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=328' title='IMAG0487'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0487-150x150.jpg" class="attachment-thumbnail" alt="IMAG0487" title="IMAG0487" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=329' title='IMAG0510'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0510-150x150.jpg" class="attachment-thumbnail" alt="IMAG0510" title="IMAG0510" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=330' title='IMAG0527'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0527-150x150.jpg" class="attachment-thumbnail" alt="IMAG0527" title="IMAG0527" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=331' title='IMAG0541'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0541-150x150.jpg" class="attachment-thumbnail" alt="IMAG0541" title="IMAG0541" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=332' title='IMAG0546'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0546-150x150.jpg" class="attachment-thumbnail" alt="IMAG0546" title="IMAG0546" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=333' title='IMAG0601'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0601-150x150.jpg" class="attachment-thumbnail" alt="IMAG0601" title="IMAG0601" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=335' title='IMAG0696'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0696-150x150.jpg" class="attachment-thumbnail" alt="IMAG0696" title="IMAG0696" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=336' title='IMAG0733'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0733-150x150.jpg" class="attachment-thumbnail" alt="IMAG0733" title="IMAG0733" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=337' title='IMAG0752'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0752-150x150.jpg" class="attachment-thumbnail" alt="IMAG0752" title="IMAG0752" /></a>
<a href='http://itp.nyu.edu/~jl4554/blog/?attachment_id=338' title='IMAG0749'><img width="150" height="150" src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/04/IMAG0749-150x150.jpg" class="attachment-thumbnail" alt="IMAG0749" title="IMAG0749" /></a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=324</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quoth the NSA: &#8216;Nothing to see here&#8217;</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=319</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=319#comments</comments>
		<pubDate>Fri, 30 Mar 2012 20:48:40 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=319</guid>
		<description><![CDATA[<p>Prompted by Kyle McDonald&#8217;s presentation of face tracking and recognition technology in my Spring 2012 Appropriating New Technologies class, I became interested in how some of the first algorithms fit into the paradigm of modern facial recognition. Through muckrock.org, I filed a Freedom of Information Request (FOI) to the NSA, a likely funder of some [...]]]></description>
			<content:encoded><![CDATA[<p>Prompted by Kyle McDonald&#8217;s presentation of face tracking and recognition technology in my Spring 2012 Appropriating New Technologies class, I became interested in how some of the first algorithms fit into the paradigm of modern facial recognition. Through muckrock.org, I filed a Freedom of Information Request (FOI) to the NSA, a likely funder of some of this original work. Frankly, it was a shot in the dark, based on a cursory reference in the Wikipedia Article on the history of Facial Recognition Systems:</p>
<blockquote><p>
During 1964 and 1965, Bledsoe, along with Helen Chan and Charles Bisson, worked on using the computer to recognize human faces (Bledsoe 1966a, 1966b; Bledsoe and Chan 1965). He was proud of this work, but because the funding was provided by an unnamed intelligence agency that did not allow much publicity, little of the work was published.
</p></blockquote>
<p>The NSA, surprisingly, responded to my <a href="http://www.muckrock.com/foi/view/united-states-of-america/computer-facial-recognition-research/1097/#doc-1893" title="FOI request" target="_blank">FOI reequest</a>. Less surprisingly, they didn&#8217;t find anything relevant under the incredibly specific parameters that I provided.</p>
<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/03/Screen-shot-2012-03-30-at-4.18.15-PM.png"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/03/Screen-shot-2012-03-30-at-4.18.15-PM.png" alt="" title="Screen shot 2012-03-30 at 4.18.15 PM" width="816" height="588" class="aligncenter size-full wp-image-321" /></a></p>
<p>While there are certainly many other US intelligence agencies whose archives could be queried under the FOI, I have a much more promising lead: a box of papers titled &#8220;Facial Recognition Project Report&#8221; from 1964 and 1965, which contains two articles: &#8220;Multi-Category Pattern Classification&#8221; and &#8220;Two Dimensional Terrain Following: a &#8216;back and fill&#8217; method&#8221;. </p>
<p>I&#8217;m seeking a small grant from ITP to cover the cost of getting the papers photocopied (the repository housing the papers doesn&#8217;t provide a scanning service). Assuming I find the work comprehensible, I&#8217;ll make a small addition to the wikipedia article and find a way to make the articles freely available online.</p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=319</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Time Machine</title>
		<link>http://itp.nyu.edu/~jl4554/blog/?p=311</link>
		<comments>http://itp.nyu.edu/~jl4554/blog/?p=311#comments</comments>
		<pubDate>Thu, 29 Mar 2012 04:01:42 +0000</pubDate>
		<dc:creator>jl4554</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://itp.nyu.edu/~jl4554/blog/?p=311</guid>
		<description><![CDATA[<p>Today in Spatial Media I presented my concept for a Time Machine Simulator to a few scratching heads and some appreciating smiles. Off to the races. Our professor generously offered to pitch the project to the other section of the class on Thursday morning. Currently, I&#8217;m without a partner, which is totally fine &#8212; but [...]]]></description>
			<content:encoded><![CDATA[<p>Today in Spatial Media I presented my concept for a Time Machine Simulator to a few scratching heads and some appreciating smiles. Off to the races. Our professor generously offered to pitch the project to the other section of the class on Thursday morning. Currently, I&#8217;m without a partner, which is totally fine &#8212; but I do love coding collaborative coding. I learn so much, and work so quickly!</p>
<p>I get the feeling that some of my colleagues think the project is more than a bit ambitious. To me, it&#8217;s really just a matter of assembling a collection of off-the-shelf parts and open-source code: the Kinect 3D sensor, ofxHeadPostEstimator, ofxOpenNI, a variety of other openFrameworks code &#8212; porting over a General Relativity visualizer written (thankfully) in C++ &#8212; and having fun designing an aesthetic architecture in which for (time-traveling) users to enjoy the experience).</p>
<p>Here&#8217;s a quick visual pitch: </p>
<p><a href="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/03/time-machine-concept.jpg"><img src="http://itp.nyu.edu/~jl4554/blog/wp-content/uploads/2012/03/time-machine-concept.jpg" alt="" title="time machine concept" width="1275" height="1651" class="aligncenter size-full wp-image-312" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://itp.nyu.edu/~jl4554/blog/?feed=rss2&#038;p=311</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
