<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Gumbo Labs</title>
	
	<link>http://www.gumbolabs.org</link>
	<description>A New Orleans Artist / Inventor / Technologist Collective (a.k.a. a hacker space)</description>
	<lastBuildDate>Thu, 19 Aug 2010 06:17:21 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/GumboLabs" /><feedburner:info uri="gumbolabs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>GumboLabs</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Kindle ebook to iPhone-optimized PDF</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/EzXwLfCnAIw/</link>
		<comments>http://www.gumbolabs.org/2010/08/19/kindle-ebook-to-iphone-optimized-pdf/#comments</comments>
		<pubDate>Thu, 19 Aug 2010 06:17:21 +0000</pubDate>
		<dc:creator>Simon Dorfman</dc:creator>
				<category><![CDATA[Tutorial/Documentation]]></category>
		<category><![CDATA[deDRM]]></category>
		<category><![CDATA[ebook]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[kindle]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=490</guid>
		<description><![CDATA[I bought a book for school using Kindle on my PC. When I tried to download it to my iPhone using the Kindle App, it gave an error saying something like &#8220;not available for iPhone&#8221;. The main reason I bought the kindle version (as opposed to the dead tree version) was so I could read [...]]]></description>
			<content:encoded><![CDATA[<p>I bought a book for school using Kindle on my PC. When I tried to download it to my iPhone using the Kindle App, it gave an error saying something like &#8220;not available for iPhone&#8221;. The main reason I bought the kindle version (as opposed to the dead tree version) was so I could read it on my iPhone when the opportunity presents itself (e.g. while waiting in line at the post office, etc.). So I set about the task of learning how to get the book onto my iPhone. This post will document the process. Fortunately, a bunch of smart people already figured it out. I just had to connect some dots to get it working for me.</p>
<h2>Overview:</h2>
<ol>
<li>Buy book using Kindle for PC</li>
<li>Decrypted to .azw with <a href="http://roke-isle.blogspot.com/2010/05/unskindle-step-by-step-guide.html">skindle</a></li>
<li><a href="http://roke-isle.blogspot.com/2010/05/unskindle-step-by-step-guide.html"></a>Convert to .epub with <a href="http://calibre-ebook.com/">calibre</a></li>
<li><a href="http://calibre-ebook.com/"></a>Convert to .pdf with <a href="http://epub2pdf.com/">epub2pdf</a></li>
<li><a href="http://epub2pdf.com/"></a>Open with <a href="http://itunes.apple.com/us/app/goodreader-for-iphone/id306277111">GoodReader</a>, an iPhone PDF-reader App</li>
</ol>
<p>There are many different ways one could go about this. After creating an .epub file, you could skip steps 4 &amp; 5 and just view the .epub on the iPhone with the free iBooks App. I prefer the interface of GoodReader (no bars or buttons blocking the text – true full screen reading, and you can pinch to zoom in on illustrations with small fonts) so I went the extra step to get a PDF that worked for me. Calibre is capable of creating PDFs too, but they didn&#8217;t work as well as epub2pdf.</p>
<p>The steps above are pretty self explanatory. Just click on the links, download the software, follow the instructions that come with the software. The only step that was a little tricky was getting epub2pdf to make PDFs the right size, so I will share some details for the epub2pdf step below.</p>
<h2>Key epub2pdf settings:</h2>
<p>(edit epub2pdf.properties)<br />
<code><br />
font.default.name: garamond<br />
font.default.sizebase: 9<br />
page.size: 49.87mmx73.24mm<br />
margins.size: .5mm, .5mm, .5mm, .5mm<br />
</code><br />
Those dimensions were chosen with an iPhone 4 screen in mind. If you want to view your PDF on a different screen, you&#8217;ll need to do some calculations. I used photoshop&#8217;s resize image window to do my calculations. Here are my notes:<br />
<code><br />
iphone 4 screen: 640x940 at 326ppi = 49.87mm x 73.24mm<br />
ipad screen: 768x1024 at 132ppi = 147.78mm x 197.04mm<br />
</code><br />
I did the epub2pdf step on my Mac, but I had trouble getting it to recognize the Garamond font. I finally had success after copying the GARA.TTF file from my windows box to the <em>epub2pdf/lib/fonts</em> folder on my mac.</p>
<p>Disclaimer:<br />
Using the software like skindle may be illegal where you are. I don&#8217;t condone illegal activity. Think before you act. Also, consider supporting the <a href="http://www.eff.org/issues/drm">EFF in the struggle against DRM</a>.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/EzXwLfCnAIw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/08/19/kindle-ebook-to-iphone-optimized-pdf/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/08/19/kindle-ebook-to-iphone-optimized-pdf/</feedburner:origLink></item>
		<item>
		<title>Muses Shoe, EL Wire and You</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/mBDymuwsnCY/</link>
		<comments>http://www.gumbolabs.org/2010/06/17/muses-shoe-el-wire-and-you/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 23:56:54 +0000</pubDate>
		<dc:creator>HunterKing</dc:creator>
				<category><![CDATA[Tutorial/Documentation]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=460</guid>
		<description><![CDATA[Here&#8217;s something for the locals. I knew there had to be some fun locked away in the light-up Mardi Gras throws that have become more popular in recent years. Unfortunately, I&#8217;m not cute enough to have a Muses shoe thrown to little old me, so I had to wait for somebody to throw it away [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s something for the locals. I knew there had to be some fun locked away in the light-up Mardi Gras throws that have become more popular in recent years. Unfortunately, I&#8217;m not cute enough to have a Muses shoe thrown to little old me, so I had to wait for somebody to throw it away at the Really Really Free Market held at Art House this past weekend.</p>
<p><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/musesshoe.jpg"><img class="alignnone size-medium wp-image-463" src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/musesshoe-300x201.jpg" alt="" width="300" height="201" /></a></p>
<p><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/shoeback.jpg"><img class="alignnone size-medium wp-image-466" src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/shoeback-300x219.jpg" alt="" width="300" height="219" /></a></p>
<p>A few notes about this. It&#8217;s not hard. Not really very impressive, either. There&#8217;s a lot that I don&#8217;t know as I only had one shoe and one 4ft EL wire that I picked up from Electronics Goldmine a while ago. For those same reasons, I could have documented this much better. The longest part was dealing with my miserable skills with a soldering iron.</p>
<p><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/disassembled.jpg"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/disassembled-300x240.jpg" alt="" width="300" height="240" class="alignnone size-medium wp-image-465" /></a></p>
<p>Up on the top there, if you peel back the circuit board you&#8217;ll see a coil telling you we are dealing with a high voltage AC inverter here (running on two AAs), which is why I did this; I was too lazy to ever order an AC inverter for the EL wire I had. For those that haven&#8217;t read up on EL wire, it won&#8217;t run on DC current, so these little pocket inverters, usually found in a 9V variety, are the way way to go if you want to, say, mount it on a bike like I did. Be careful, I shocked myself about 15 times messing with this, and though it wasn&#8217;t too bad it was because I was clumsy, not because I liked it.</p>
<p>The shoe half is mostly useless to this project. If you notice, I pulled off some of those pins from the shoe end. Don&#8217;t bother with that, I thought they&#8217;d make it easier to attach the EL wire to the leads from the board, but they didn&#8217;t stick on there well.</p>
<p>
<a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/wirestripped.jpg"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/wirestripped-300x205.jpg" alt="" width="300" height="205" class="alignnone size-medium wp-image-467" /></a></p>
<p>You need to strip one end of your EL wire a little to use it (the other end is free to dangle). The outer layer is essentially the tint of the wire. Underneath there are two very fragile wires, I&#8217;ve seen them called Corona wires or Angel Wires. They are important and frustratingly brittle. Then there&#8217;s the relatively fat, sheathed wire in the middle. You&#8217;ll need to strip that as well.</p>
<p></p>
<p>A couple of <a href="http://burningman.rengeekcentral.com/elwire.html">guides</a> recommend a strip of copper tape wrapped around the white wire. That way your brittle angel wires can be soldered to the tape, then the next thing you solder to the tape without worrying about tension on the angel wire. If you&#8217;ve got some copper tape DO IT, it will probably make your life much easier. It made my life harder because I checked out Radio Shack, Lowes and Home Depot, and none of them have copper tape. Instead I broke the angel wires a good 6 times until I finally managed to put the thing together intact, taping it all together so they wouldn&#8217;t be jostled much. But I&#8217;m skipping a step</p>
<p>
<a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/layout1.jpeg"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/layout1-300x175.jpg" alt="" width="300" height="175" class="aligncenter size-medium wp-image-469" /></a></p>
<p>This part&#8217;s a little shaky, but here&#8217;s what worked for me. The main rule that I discerned is that one wire from the EL has to be soldered to one of the two outside wires, the other to any of the middle three. Since different parts of the original shoe were supposed to work in certain ways, each one will behave differently. I found my favorite combo to be the fat wire on the lead the corresponds to the leftmost joint on the inverter&#8217;s circuit board, with the angel wire going right next to it. That&#8217;s the only configuration I found that allowed a sustained glow.</p>
<p><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/bike1.jpg"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/06/bike1-300x201.jpg" alt="" width="300" height="201" class="aligncenter size-medium wp-image-470" /></a><br />
From there I taped it up tight, waterproofed it by sticking it in a ziplock with a hole in one non-zip corner for the wire to escape (and taped that corner too) and packaging-taped it around my bike! There&#8217;s a lot more I&#8217;d like to learn about this, such as how long of an EL wire it can drive, whether it&#8217;ll run two wires just as easily etc., and I don&#8217;t even know about battery life just yet, but for once your Mardi Gras beads have some worth.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/mBDymuwsnCY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/06/17/muses-shoe-el-wire-and-you/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/06/17/muses-shoe-el-wire-and-you/</feedburner:origLink></item>
		<item>
		<title>Radioshack Infrared receiver  Arduino</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/pm47l_BBhJA/</link>
		<comments>http://www.gumbolabs.org/2010/05/29/radioshack-infrared-receiver-arduino/#comments</comments>
		<pubDate>Sat, 29 May 2010 19:56:08 +0000</pubDate>
		<dc:creator>Benjamin Eckel</dc:creator>
				<category><![CDATA[Arduino]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=405</guid>
		<description><![CDATA[I recently came across the need to read some IR signals from my universal remote. Having hacked around with IR in the past, I had an idea of what I was looking for so I stopped by RadioShack and found one of these:
A Brief Overview of IR
The idea behind transmission of data over infrared is [...]]]></description>
			<content:encoded><![CDATA[<p>I recently came across the need to read some IR signals from my universal remote. Having <a href="http://hackaday.com/2007/04/16/ir-decoding-with-your-guitar/">hacked around with IR in the past</a>, I had an idea of what I was looking for so I stopped by RadioShack and found one of these:</p>
<div id="attachment_406" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.radioshack.com/product/index.jsp?productId=2049727"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/pRS1C-2110718w345-300x204.jpg" alt="" title="Radioshack IR receiver module" width="300" height="204" class="size-medium wp-image-406" /></a><p class="wp-caption-text">Radioshack 38khz IR receiver module</p></div>
<h2>A Brief Overview of IR</h2>
<p>The idea behind transmission of data over infrared is dirt simple. Reading about it just reminds me of how overly-complicated some communication protocols have become. The idea is that you have a transmitter, which is just an LED that emits light in the infrared spectrum and you have a receiver, which is just a phototransistor that changes the current flowing through it based on how much infrared light is hitting it. The transmitter pulses out light and the receiver is able to &#8217;sense&#8217; those pulses in the exact condition they were in when they left the other circuit. All information is sent in a binary format. In most protocols, you have two different types of pulses, a long and a short. The long usually corresponds to 1 and the short to 0. Here is a diagram of Sony&#8217;s IR protocol:</p>
<div id="attachment_413" class="wp-caption aligncenter" style="width: 460px"><a href="http://www.sbprojects.com/knowledge/ir/sirc.htm"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/sircmodulation1.gif" alt="Sony IR protocol" title="Sony IR protocol" width="450" height="125" class="size-full wp-image-413" /></a><p class="wp-caption-text">Sony IR protocol source:http://www.sbprojects.com/knowledge/ir/sirc.htm</p></div>
<p>Here you can see that the 1 corresponds to a 1.2 millisecond pulse and the 0 a 0.6 millisecond pulse. So, there is one more detail that slightly complicates the issue. An astute reader may note: </p>
<blockquote><p>&#8220;IR light is everywhere. How does the receiver know the difference between a pulse and noise or ambient light?&#8221;</p></blockquote>
<p>The light coming from the transmitter is modulated at a very high frequency, usually between 38kHz and 40 kHz. It is then demodulated or integrated on the other end and turned into a solid waveform. Think of it like a <a href="http://en.wikipedia.org/wiki/High-pass_filter">high pass filter</a>, which it may actually be in implementation, I didn&#8217;t look it up. Any naturally occurring IR light is likely to be changing at a low frequency, so this gives us a way to distinguish the signal from the noise. On top of that, many commercial products cover their receiver with a piece of plastic or lens that is coated in a material that only lets in infrared light. This helps further eliminate noise that bright visible light may cause.</p>
<h2>The Radioshack module</h2>
<p>This thing was extremely easy to hook up. All you need to do is supply a resistor (I used 200 Ohms, with a 3.3V supply) to the power line, GND it, then connect the data line to one of your digital pins (I used pin #2). The module itself contains the demodulation circuit so what you see is a solid signal. </p>
<div id="attachment_418" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/crw1202.jpg"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/crw1202-300x199.jpg" alt="Arduino connected to IR module" title="Arduino connected to IR module" width="300" height="199" class="size-medium wp-image-418" /></a><p class="wp-caption-text">Arduino connected to IR module</p></div>
<p>At this point, I decided to hook up my oscilloscope to see what was coming out of this thing. I programmed a free channel on my universal remote for a Sony DVD and started hitting some buttons. This is generally what I saw:</p>
<div id="attachment_420" class="wp-caption aligncenter" style="width: 584px"><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/Picture-5.png"><img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/Picture-5.png" alt="Sony IR protocol" title="Sony IR protocol " width="574" height="653" class="size-full wp-image-420" /></a><p class="wp-caption-text">Signal captured</p></div>
<p>This signal was upside-down from what I had expected. The data pin appears to be idling HIGH and the signal drives it LOW. I verified this on my multimeter just to be sure. After this, I looked it up online and it appears to be the expected behavior. Not really a problem for our software, a pulse is a pulse, it is just a need to know detail for later. Another note, that first long low pulse is what is often called a <b>start bit</b>. It is an extra long, 2.4 millisecond pulse to notify the receiver that some bytes are coming. To read more about the protocol, take a look at this link: <a href="http://www.sbprojects.com/knowledge/ir/sirc.htm">http://www.sbprojects.com/knowledge/ir/sirc.htm</a>.</p>
<p>This is usually the point where I go online to see what others have done with the device and see if there is any code I can steal. I looked around for a bit and found <a href="http://www.rtfa.net/2008/12/31/arduino-infra-red-ir-remote-control">this link</a> and this code:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// 0.1 by pmalmsten</span>
<span style="color: #666666; font-style: italic;">// 0.2 by farkinga</span>
&nbsp;
<span style="color: #339933;">#define IR_BIT_LENGTH 12</span>
<span style="color: #339933;">#define BIT_1 1000          //Binary 1 threshold (Microseconds)</span>
<span style="color: #339933;">#define BIT_0 400           //Binary 0 threshold (Microseconds)</span>
<span style="color: #339933;">#define BIT_START 2000      //Start bit threshold (Microseconds)</span>
<span style="color: #339933;">#define DEBUG 0             //Serial connection must be started to debug</span>
<span style="color: #339933;">#define IR_PIN 7            //Sensor pin 1 wired through a 220 ohm resistor</span>
<span style="color: #339933;">#define LED_PIN 9           //&quot;Ready to Recieve&quot; flag, not needed but nice</span>
<span style="color: #339933;">#define POWER_PIN 11     // the red LED that indicates if the power button is pressed.</span>
&nbsp;
<span style="color: #993333;">int</span> runtime_debug <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> output_key <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> power_button <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  pinMode<span style="color: #009900;">&#40;</span>LED_PIN<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">//This shows when we're ready to recieve</span>
  pinMode<span style="color: #009900;">&#40;</span>POWER_PIN<span style="color: #339933;">,</span> OUTPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">//This is the &quot;power on&quot; indicator</span>
  pinMode<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>LED_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	    <span style="color: #666666; font-style: italic;">//not ready yet</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  digitalWrite<span style="color: #009900;">&#40;</span>LED_PIN<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	   <span style="color: #666666; font-style: italic;">//Ok, i'm ready to recieve</span>
&nbsp;
  <span style="color: #993333;">int</span> key <span style="color: #339933;">=</span> get_ir_key<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		    <span style="color: #666666; font-style: italic;">//Fetch the key</span>
&nbsp;
  digitalWrite<span style="color: #009900;">&#40;</span>LED_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  do_response<span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">200</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> do_response<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> key<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1437</span><span style="color: #339933;">:</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;toggle debug pulse&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      runtime_debug <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">-</span> runtime_debug<span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1498</span><span style="color: #339933;">:</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Toggle key output&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      output_key <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">-</span> output_key<span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1429</span><span style="color: #339933;">:</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Power&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      power_button <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span> <span style="color: #339933;">-</span> power_button<span style="color: #339933;">;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>power_button<span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
        digitalWrite<span style="color: #009900;">&#40;</span>POWER_PIN<span style="color: #339933;">,</span> HIGH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #b1b100;">else</span>
      <span style="color: #009900;">&#123;</span>
        digitalWrite<span style="color: #009900;">&#40;</span>POWER_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1424</span><span style="color: #339933;">:</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Channel Up&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">case</span> <span style="color: #0000dd;">1425</span><span style="color: #339933;">:</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Channel Down&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>output_key<span style="color: #009900;">&#41;</span>
      <span style="color: #009900;">&#123;</span>
        Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Key &quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>key<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; not programmed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> read_pulse<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> data<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> num_bits<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> num_bits<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    data<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> pulse_to_bits<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> pulse<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> bits<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> num_bits<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>DEBUG <span style="color: #339933;">||</span> runtime_debug<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;-----&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> num_bits <span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>DEBUG <span style="color: #339933;">||</span> runtime_debug<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>pulse<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pulse<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> BIT_1<span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">//is it a 1?</span>
    <span style="color: #009900;">&#123;</span>
      bits<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>pulse<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> BIT_0<span style="color: #009900;">&#41;</span> <span style="color: #666666; font-style: italic;">//is it a 0?</span>
    <span style="color: #009900;">&#123;</span>
      bits<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> 
&nbsp;
    <span style="color: #b1b100;">else</span> <span style="color: #666666; font-style: italic;">//data is invalid...</span>
    <span style="color: #009900;">&#123;</span>
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Error&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> bits_to_int<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> bits<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span> num_bits<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> result <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> seed <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//Convert bits to integer</span>
  <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span> <span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> num_bits <span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
  <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>bits<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
	result <span style="color: #339933;">+=</span> seed<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    seed <span style="color: #339933;">*=</span> <span style="color: #0000dd;">2</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> result<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> get_ir_key<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #993333;">int</span> pulse<span style="color: #009900;">&#91;</span>IR_BIT_LENGTH<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #993333;">int</span> bits<span style="color: #009900;">&#91;</span>IR_BIT_LENGTH<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>  
&nbsp;
  <span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">//Wait for a start bit</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> BIT_START<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  read_pulse<span style="color: #009900;">&#40;</span>pulse<span style="color: #339933;">,</span> IR_BIT_LENGTH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  pulse_to_bits<span style="color: #009900;">&#40;</span>pulse<span style="color: #339933;">,</span> bits<span style="color: #339933;">,</span> IR_BIT_LENGTH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> bits_to_int<span style="color: #009900;">&#40;</span>bits<span style="color: #339933;">,</span> IR_BIT_LENGTH<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This seemed to me like a lot of code and logic for such a simple protocol. I could go on about how wasteful I think the code is but honestly, it works and that is what is important. So, I don&#8217;t want to make it sound like it is a &#8216;bad&#8217; implementation. His is actually meant to be general and to debug different protocols. I just want to make it simpler for the processor and the human reader to understand and optimized for this one particular protocol. Here is my implementation, which itself may be more flaky:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define BITS_PER_MESSAGE 12    </span>
<span style="color: #339933;">#define B_1 1000              //1.2 milliseconds        </span>
<span style="color: #339933;">#define B_0 400                //0.6 milliseconds       </span>
<span style="color: #339933;">#define START_BIT 2000   //making it a little shorter than the actual 2400   </span>
<span style="color: #339933;">#define IR_PIN 2</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//find the threshold time b/w the two pulse sizes</span>
<span style="color: #339933;">#define BIT_THRESH B_0+((B_1-B_0)/2)</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  pinMode<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> INPUT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Ready...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//int where we are storing code, must start at 0</span>
  <span style="color: #993333;">unsigned</span> <span style="color: #993333;">int</span> code <span style="color: #339933;">=</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Waiting for first pulse&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//block until start pulse</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> START_BIT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">//read in next 12 bits shifting and masking them into the unsigned int 'code'</span>
  <span style="color: #666666; font-style: italic;">//remeber boolean is basically 0 [false] or 1 [true]</span>
  <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>byte i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> BITS_PER_MESSAGE<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      code <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> BIT_THRESH<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> i<span style="color: #339933;">;</span>  
  <span style="color: #009900;">&#125;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span>code<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>My general idea was this, calculate a threshold, the midpoint between the 2 bit pulse sizes, and compare every incoming pulse to that. So in this situation, BIT_THRESH is 700. First thing we do is create an <b>unsigned int</b> to store the code. Remember, an integer is 16 bits so it has more than enough space to store the 12 bits of the message. I just made it unsigned just in case but it is not likely that we will reach all the way to the sign bit on the MSB side. The next thing we do in the algorithm is wait for the start bit:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> START_BIT<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span></pre></div></div>

<p>It is set to 2000 instead of 2400 so we have a little bit of leeway. You can increase it if you start getting noise but it is not likely to happen. This is just an empty while loop or a blocking conditional. It just holds the program until it&#8217;s condition is met. In this case, we find a pulse longer than START_BIT. <a href="http://www.arduino.cc/en/Reference/PulseIn">PulseIn</a> is a really nice function if you aren&#8217;t familiar. The first parameter is the pin you are waiting on, and the next parameter describes how the pulse will come. From the reference:</p>
<blockquote><p>if value is HIGH, pulseIn()  waits for the pin to go HIGH, starts timing, then waits for the pin to go LOW and stops timing</p></blockquote>
<p>Remember that our signal is <b>inverted</b>, so we are waiting for the pin to go LOW. Our pulse is defined as a LOW then HIGH trough. That is why we chose LOW here. Once we get our start bit, we perform the meat of the logic:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>byte i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> BITS_PER_MESSAGE<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      code <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> BIT_THRESH<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;&lt;</span> i<span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This one is full of microcontroller jargon but shouldn&#8217;t be too hard to figure out. We are going through 12 steps, one for each bit, and calling pulseIn to get the pulse length then comparing that length to BIT_THRESH. That is going to give us a true or false which is in actuality a 1 or 0. After we get a result, we shift the 1 or 0 over by <b>i</b> bits and perform a bitwise OR to set the corresponding bit in the <b>code</b> variable. <a href="http://www.arduino.cc/en/Reference/Bitwise">See here for an explanation of bit logic</a>. So when the result is 0, it effectively skips the number. When it is 1, it sets bit <b>i</b> of the <b>code</b> to 1. This is relying on the fact that the code starts out as all 0 at first. Now that I think about it, it may be more efficient to do something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>byte i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> BITS_PER_MESSAGE<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>pulseIn<span style="color: #009900;">&#40;</span>IR_PIN<span style="color: #339933;">,</span> LOW<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> BIT_THRESH<span style="color: #009900;">&#41;</span> code <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> i<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>That way you only do the bitwise OR when you encounter a 1. Honestly consistency is much more important than efficiency in this situation so do whatever works for you. Also, the performance would be completely unnoticeable. </p>
<p>Technically, depending on the protocol, that integer may contain different control messages, devices, etc. But if you are just trying to map a button on your remote to an action in arduino, this should be good enough. If you are concerned about other people using your code with different remotes for different devices, I suggest further reading. </p>
<p>One last thing to note, I just realized that the B_1 and B_0 values don&#8217;t match with what the Sony specification says. I just took those values from that guy&#8217;s original code and didn&#8217;t think about it. It still works so I am not changing it without testing. Just a head&#8217;s up.</p>
<p>Hope this helps someone. I will address any questions in the comments section.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/pm47l_BBhJA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/05/29/radioshack-infrared-receiver-arduino/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/05/29/radioshack-infrared-receiver-arduino/</feedburner:origLink></item>
		<item>
		<title>iPhone App Development Study Group</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/utBqIcqksVI/</link>
		<comments>http://www.gumbolabs.org/2010/05/06/iphone-app-development-study-group/#comments</comments>
		<pubDate>Thu, 06 May 2010 21:22:40 +0000</pubDate>
		<dc:creator>Simon Dorfman</dc:creator>
				<category><![CDATA[Class]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=367</guid>
		<description><![CDATA[How would you like to learn iPhone App Development this summer? Me too. That&#8217;s why I decided to organize a group to watch the video lectures from the Stanford class together. We can work thru the assignments together. Learn together, get to know each other, figure things out, etc. It&#8217;s going to be awesome. Here [...]]]></description>
			<content:encoded><![CDATA[<p>How would you like to learn iPhone App Development this summer? Me too. That&#8217;s why I decided to organize a group to watch the video lectures from the <a title="CS193P Downloads (2010 Winter)" href="http://www.stanford.edu/class/cs193p/cgi-bin/drupal/downloads-2010-winter">Stanford class</a> together. We can work thru the assignments together. Learn together, get to know each other, figure things out, etc. It&#8217;s going to be awesome. Here are the details:<br />
<img class="alignright size-full wp-image-393" title="iPhoneAppCS193Psmall" src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/05/iPhoneAppCS193Psmall.jpg" alt="" width="220" height="165" /></p>
<p style="padding-left: 30px;"><strong>What</strong>: a free iPhone App development &#8220;class&#8221; where we watch the <a href="http://cs193p.stanford.edu/">Stanford lectures</a> together and do the assignments with help from each other<br />
<strong>When</strong>: Mondays &amp; Thursday nights from 7-9pm, May 31st-August 12th.<br />
<strong>Where</strong>: Gumbo Labs, <a title="Google Map" href="http://maps.google.com/maps?q=4820+Banks+St+New+Orleans+LA">4820 Banks St</a>. Studio #5, New Orleans, LA 70119<br />
<strong>Who</strong>: Anyone interested. I&#8217;ll be the organizer and video projectionist. I wont be the &#8220;teacher&#8221; though. I&#8217;ll be learning this along with everyone else.<br />
<strong>Registration</strong>: To sign up, just introduce yourself on <a title="Introductions Forum Thread" href="http://forum.gumbolabs.org/viewtopic.php?f=8&amp;t=134">this forum thread</a>. Also, add the <a title="App Dev Subforum RSS Feed" href="http://forum.gumbolabs.org/feed.php?f=8">App Dev Forum RSS feed</a> to your newsreader to keep up with discussion on the forum.</p>
<p>Other Notes:</p>
<ul>
<li>I&#8217;m going to try and get a Mac set up at Gumbo Labs with the iPhone developer tools installed for those folks who are interested, but don&#8217;t have a Mac. But it would be best if you had your own Intel Mac laptop.</li>
<li>These lectures were recorded for iPhone OS3. Even though iPhone OS4 beta is out now, I suggest sticking with iPhone OS3 for this class.</li>
</ul>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/utBqIcqksVI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/05/06/iphone-app-development-study-group/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/05/06/iphone-app-development-study-group/</feedburner:origLink></item>
		<item>
		<title>DSO nano and synth circuit</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/ZqP5zMR5uAc/</link>
		<comments>http://www.gumbolabs.org/2010/03/03/dso-nano-and-synth-circuit/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 03:09:57 +0000</pubDate>
		<dc:creator>Benjamin Eckel</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=349</guid>
		<description><![CDATA[A few days ago, a co-worker let me borrow his DSO nano to run a few tests. First thing I decided to do was throw a really chaotic waveform at it. I built this little synth with 2 square wave oscillators.


It is kind of comical to call this a synth or even a set of [...]]]></description>
			<content:encoded><![CDATA[<p>A few days ago, a co-worker let me borrow his <a href="http://www.seeedstudio.com/depot/micro-digital-storage-oscilloscopedso-nano-p-512.html">DSO nano</a> to run a few tests. First thing I decided to do was throw a really chaotic waveform at it. I built this little synth with 2 square wave oscillators.</p>
<p><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2010/03/2010-03-03-20.37.24.jpg"><br />
<img src="http://www.gumbolabs.org/cms/wp-content/downloads/2010/03/2010-03-03-20.37.24-300x225.jpg" alt="Square wave oscillator schematic" title="Square wave oscillator schematic" width="300" height="225" class="aligncenter size-medium wp-image-350" /></a></p>
<p>It is kind of comical to call this a synth or even a set of oscillators. It is basically a simple NOT gate arranged in a feedback loop. The capacitor fills up until it reaches the breakdown voltage of the internal diode in the NOT gate, at that point, the signal is inverted to GND and the capacitor discharges. When it reaches ground, the output signal inverts again and the process starts over. The result is a square wave. The potentiometer controls the amount of current flowing into the capacitor and thus alters the amount of time it takes to fill up. In effect, altering the frequency of the square wave. I built two of these and muxed the signals together with some resistors, kind of like a fixed mixer. The overall signal is pretty hectic, with weird beat frequencies and strange tiny oscillations in the individual frequencies themselves.</p>
<p><object width="480" height="393"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=9900653&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=A90000&amp;fullscreen=1" /><embed src="http://vimeo.com/moogaloop.swf?clip_id=9900653&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=A90000&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="480" height="393"></embed></object></p>
<p>I found it pretty hard to get the DSO nano to get a good read on it but it was pretty hard with my regular scope as well. Probably not the best waveform to start with. So, I decided to try out some simpler waveforms. I programmed an Arduino to just spit out &#8216;a&#8217; on the UART every second and used a rising slope trigger to freeze the waveform. It worked really well for that. It also worked really well for just a square wave generated on the Arduino. It was able to guess the frequency with accuracy. Unfortunately my phone had died at that point and I couldn&#8217;t get any pictures or video.</p>
<p>Overall I found it pretty simple to use and a surprising amount of functionality for it&#8217;s small size and price. I have to admit though, I wouldn&#8217;t find much use for it as I am almost always in front of a desk where I can use my USB scope and software. I think this would be more helpful for someone who works in &#8216;the field&#8217; so to speak. It is pretty much as good as you are going to get in a pocket-sized package.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/ZqP5zMR5uAc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/03/03/dso-nano-and-synth-circuit/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/03/03/dso-nano-and-synth-circuit/</feedburner:origLink></item>
		<item>
		<title>RFID  Ethernet Shield Client   Rails</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/EFs_6BKjcqI/</link>
		<comments>http://www.gumbolabs.org/2010/02/05/rfid-ethernet-shield-client-rails/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 04:10:27 +0000</pubDate>
		<dc:creator>Benjamin Eckel</dc:creator>
				<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Tutorial/Documentation]]></category>
		<category><![CDATA[ethernet shield]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=173</guid>
		<description><![CDATA[Last week A few months ago, I wrote an article on connecting the Parallax RFID reader to the the Arduino. The reason I was revisiting that device was because I am working on a system for our hackerspace which will allow people to find out who is in the hackerspace at any given time. The [...]]]></description>
			<content:encoded><![CDATA[<p><del>Last week</del> A few months ago, I wrote an article on connecting the <a href="http://www.gumbolabs.org/2009/10/17/parallax-rfid-reader-arduino/" target="_blank">Parallax RFID reader to the the Arduino</a>. The reason I was revisiting that device was because I am working on a system for our hackerspace which will allow people to find out who is in the hackerspace at any given time. The overall system requires the Arduino to connect to the internet as a client and tell the <a href="http://rubyonrails.org/" target="_blank">Ruby on Rails</a> application that person with RFID tag XXXXXXXXXX has walked into or left the space. The Rails application will be able to &#8216;publish&#8217; this information to different mediums [web, twitter, facebook, IRC, etc] by providing a simple API for other programmers in the space to utilize.</p>
<p>The whole system is too complicated to explain right now and I am not finished. I plan on writing my next article about that. For now, I just wanted to document some of the issues I had with the <a href="http://www.arduino.cc/en/Main/ArduinoEthernetShield" target="_blank">Arduino Ethernet Shield</a> and how I resolved them as it may be of help to others trying to figure it out.</p>
<div id="attachment_175" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.gumbolabs.org/cms/wp-content/downloads/2009/10/ArduinoWithEthernetShield.jpg" target="_blank"><img class="size-medium wp-image-175" title="ArduinoWithEthernetShield" src="http://www.gumbolabs.org/cms/wp-content/downloads/2009/10/ArduinoWithEthernetShield-300x195.jpg" alt="Arduino Ethernet Shield" width="300" height="195" /></a><p class="wp-caption-text">Arduino Ethernet Shield</p></div>
<p>The ethernet shield, like the RFID reader, was not as simple to use as I hoped it would be. The information out there was decent, but nothing beyond explaining the examples. First I must explain my use cases to put context to the example code.</p>
<p>My goals for the code are to first send two pieces of information to the Rails application:</p>
<ol>
<li>A secret API key [to prevent fraud]</li>
<li>The Tag code read by the RFID reader</li>
</ol>
<p>Then I want to read the response and differentiate between four situations:</p>
<ol>
<li>The user has been marked as &#8220;Logged In&#8221;</li>
<li>The user has been marked as &#8220;Logged Out&#8221;</li>
<li>There is no user with the tag code that was sent</li>
<li>The wrong API key was supplied</li>
</ol>
<p>The ethernet shield allows your Arduino to operate as a Client or a Server. In this situation, I just want to use the client interface as I am connecting to a server to get information. Now let&#8217;s just look at the code required to make a simple HTTP GET request client with no parameters. I just modified this from the examples.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;Ethernet.h&gt; // load ethernet SPI functions</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// a MAC address that you make up to identify the Arduino</span>
byte mac<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #208080;">0xDE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xED</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// this is the IP that will identify the Arduino</span>
byte ip<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">160</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// this is the IP of the server that we are trying to connect to</span>
byte server<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">101</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span> 
&nbsp;
<span style="color: #666666; font-style: italic;">//create the client</span>
<span style="color: #666666; font-style: italic;">//wide area HTTP networks are on port 80 but my local rails app is on 3000</span>
Client client<span style="color: #009900;">&#40;</span>server<span style="color: #339933;">,</span> <span style="color: #0000dd;">3000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> setup<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">//start ethernet</span>
  Ethernet.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span>mac<span style="color: #339933;">,</span> ip<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  Serial.<span style="color: #202020;">begin</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">9600</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  delay<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connecting...&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connected&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//this constructs the GET request, it is the equivalent</span>
    <span style="color: #666666; font-style: italic;">//going to the browser and entering http://192.168.0.101:3000/main/index</span>
    client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /main/rfid HTTP/1.1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// print a newline char to tell the server we are done?</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// this is called if conenction fails</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connection failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> loop<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">available</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// need to see if response has been read into the buffer yet</span>
    <span style="color: #993333;">char</span> c <span style="color: #339933;">=</span> client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//get next character and print it</span>
    Serial.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>c<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>client.<span style="color: #202020;">connected</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//if we lose connection</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;disconnecting.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    client.<span style="color: #202020;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// disconnects from the server</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">;;</span><span style="color: #009900;">&#41;</span>
      <span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Some of this warrants a little more explanation for some&#8230; </p>
<h2>Configuring the ethernet shield</h2>
<p>First is the MAC address.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">byte mac<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #208080;">0xDE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xED</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>For those unfamiliar with basic networks, a <a href="http://en.wikipedia.org/wiki/MAC_address" target="_blank">MAC address</a> is a unique number assigned to your network card that never changes. You don&#8217;t need to know much about it other than you need to make it up. You should be good if you use the one I have just used in this example but keep in mind that if you have multiple Arduinos connected to the same network, you may need to make up unique MAC addresses for each one.</p>
<p>Next is your IP.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">byte ip<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">160</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This array refers to the IP that you want your Arduino to take. The Arduino Ethernet Shield currently ?doesn&#8217;t support <a href="http://en.wikipedia.org/wiki/Dynamic_Host_Configuration_Protocol" target="_blank">DHCP</a>?, so you have to choose an unused IP yourself. There are a variety of ways and steps to do this. First what you need to do is figure out what the first three bytes in this array need to be. This is determined by the local router you are connecting to. For instance, Linksys is usually 192.168.1.XXX and D-Link, in my case, is usually 192.168.0.XXX. You can find out what your situation is by checking the IP of a computer on that network. Then you need to choose an unused number for the last byte, usually between 100 and 255. If you are on a network with few computers, around 150 is usually a safe bet. If you are not sure or have a lot of computers on the network, you should find a way to log into your router&#8217;s admin interface and check the DHCP information. It will tell you all the IP addresses that are currently assigned and you can make one up an unused one based off that.</p>
<p>Last is the server&#8217;s IP.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">byte server<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span> <span style="color: #0000dd;">192</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">168</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> <span style="color: #0000dd;">101</span> <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>This is the IP of the server that you are trying to connect to. In my case, it is a laptop running my Rails application connected to the same network. If you want to connect to a server outside your network, on the internet, you need to find it&#8217;s IP. Your computer usually does this under the surface using <a href="http://en.wikipedia.org/wiki/Domain_Name_System" target="_blank">DNS</a> but you will have to do it manually here. One way you can do this is by <a href="http://en.wikipedia.org/wiki/Ping" target="_blank">pinging</a> the domain name and seeing what IP it resolves to.</p>
<h2>Sending information to a server</h2>
<p>So, this example works out for many situations, but how can I send information to the server where my Rails app is being run? In my case, I need to send the API key and and the RFID tag I just read. What we need to do is build a <a href="http://en.wikipedia.org/wiki/Query_string" target="_blank">query string</a>. If you aren&#8217;t sure what that means, you will have to read that wikipedia article carefully. Let&#8217;s reexamine the code:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//I changed this line</span>
client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /main/rfid HTTP/1.1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//to this line</span>
client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /main/rfid?apikey=123&amp;tag=0123456789 HTTP/1.1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>When I run this code, I see this on the serial port:</p>
<blockquote><p>
connecting&#8230;<br />
connected<br />
HTTP/1.1 200 OK<br />
Connection: close<br />
Date: Mon, 26 Oct 2009 01:12:43 GMT<br />
ETag: &#8220;8da44df37e592a5020e852d50fc31a64&#8243;<br />
X-Runtime: 8<br />
Cache-Control: private, max-age=0, must-revalidate<br />
Content-Type: text/html; charset=utf-8<br />
Content-Length: 8</p>
<p>^=NOUSER
</p></blockquote>
<p>This is the HTTP response. The last bit:</p>
<blockquote><p>
^=NOUSER
</p></blockquote>
<p>Is what I have defined in the Rails application to tell the Arduino what has happened. Just for clarification, this is what the rfid function looks like in the Rails app:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">  <span style="color:#008000; font-style:italic;">#login via rfid service, has no view</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> rfid    
    <span style="color:#9966CC; font-weight:bold;">if</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:apikey</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#ff6633; font-weight:bold;">$api_key</span>
      <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">find_by_rfid_tag</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:tag</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@user</span>
        <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">in_space</span> = !@user.<span style="color:#9900CC;">in_space</span>
        <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">save</span>
        <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">in_space</span>
          render <span style="color:#ff3333; font-weight:bold;">:text</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;^=IN&quot;</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          render <span style="color:#ff3333; font-weight:bold;">:text</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;^=OUT&quot;</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        render <span style="color:#ff3333; font-weight:bold;">:text</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;^=NOUSER&quot;</span>
      <span style="color:#9966CC; font-weight:bold;">end</span> 
    <span style="color:#9966CC; font-weight:bold;">else</span>
      render <span style="color:#ff3333; font-weight:bold;">:text</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;^=KEYFAILED&quot;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>I tested a few different query strings and made sure it worked for all conditions and it did. Now I need a way to dynamically send the tag that we read from the reader. As you might have read in <a href="http://www.gumbolabs.org/2009/10/17/parallax-rfid-reader-arduino/" target="_blank">my RFID post</a>, I am storing the RFID tag in a 10 character array:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define CODE_LEN 10</span>
&nbsp;
<span style="color: #993333;">char</span> tag<span style="color: #009900;">&#91;</span>CODE_LEN<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>I initially thought I could do this:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">client.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /main/rfid?apikey=123&amp;tag=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
client.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; HTTP/1.1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Notice that I am using a series of print()s to build a string and ending it with println() to close it out with a newline. The only problem is that this doesn&#8217;t work. My Mongrel server (the Rails server) was telling me that my HTTP request were invalid. It seems like a lot of other people were running into this problem as well. After temporarily giving up, I realized the problem. I was reading <a href="http://oreilly.com/catalog/9780596510046" target="_blank">an essay by Brian Kernighan</a>, one of the creators of the C programming language, about a simple regular expression parser that he uses to teach students about programming methodologies. Scanning through the code, I was reminded that a character array cannot be interpreted as a string without a terminal null character &#8216;\0&#8242; as the last element. So, I handled this situation like this:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#define CODE_LEN 10</span>
&nbsp;
<span style="color: #993333;">char</span> tag<span style="color: #009900;">&#91;</span>CODE_LEN <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
tag<span style="color: #009900;">&#91;</span>CODE_LEN<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'<span style="color: #006699; font-weight: bold;">\0</span>'</span><span style="color: #339933;">;</span></pre></div></div>

<p>This didn&#8217;t affect any of my other code and now the tag array can be interpreted as a legit string <img src='http://www.gumbolabs.org/cms/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I love simple solutions. </p>
<p>Now I need a way to parse the response. The reason my responses had this format &#8216;^=XXXXXXX&#8217; was so I could do something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">/**
 * Finds result that we are looking for in the returned HTTP response
 */</span>
<span style="color: #993333;">char</span> getHTTPResult<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'^'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">'='</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">return</span> client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> 
  <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">'x'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>This would return the first character for the response I am looking for. For example, with the NOUSER message, I would get back the &#8216;N&#8217; character. I implemented this but the problem is that it was really slow. Or at least, it was a lot slower than it could be. The problem is the amount of pointless HTTP data you have to read before you get to the actual message, or it could be that I am printing all that data? Doesn&#8217;t matter because I can make it faster.  I could have configured my server to not spit out so much junk, or I could just place the message earlier in the response. </p>
<h2>Reverse REST</h2>
<p>The first thing you return is the status code so why not put it there? As I said before, there are only four states I am trying to identify and there are <a href="http://www.w3.org/Protocols/HTTP/HTRESP.html" target="_blank">plenty</a> of HTTP status codes to represent them. So I modified the Rails controller to look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">&nbsp;
  <span style="color:#008000; font-style:italic;">#login via rfid service, has no view</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> rfid    
    <span style="color:#9966CC; font-weight:bold;">if</span> params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:apikey</span><span style="color:#006600; font-weight:bold;">&#93;</span> == <span style="color:#ff6633; font-weight:bold;">$api_key</span>
      <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">find_by_rfid_tag</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:tag</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@user</span>
        <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">in_space</span> = !@user.<span style="color:#9900CC;">in_space</span>
        <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">save</span>
        <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@user</span>.<span style="color:#9900CC;">in_space</span>
          render <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">400</span> <span style="color:#008000; font-style:italic;">#IN</span>
        <span style="color:#9966CC; font-weight:bold;">else</span>
          render <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">401</span> <span style="color:#008000; font-style:italic;">#OUT</span>
        <span style="color:#9966CC; font-weight:bold;">end</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        render <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">402</span> <span style="color:#008000; font-style:italic;">#NOUSER</span>
      <span style="color:#9966CC; font-weight:bold;">end</span> 
    <span style="color:#9966CC; font-weight:bold;">else</span>
      render <span style="color:#ff3333; font-weight:bold;">:status</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">403</span> <span style="color:#008000; font-style:italic;">#FAILED</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>I can&#8217;t help but wanting to call this &#8216;reverse REST&#8217;, LOL. Rerunning my simple &#8220;no user&#8221; test, I now get this:</p>
<blockquote><p>
HTTP/1.1 402 Payment Required<br />
Connection: close<br />
Date: Sat, 06 Feb 2010 02:45:19 GMT<br />
X-Runtime: 12<br />
Content-Type: text/html; charset=utf-8<br />
Cache-Control: no-cache<br />
Content-Length: 0</p>
</blockquote>
<p>This is much quicker to parse. I probably could have used some nice code to make this more flexible, but just hardcoding the digit read process in is probably easier and just as reliable, if not more efficient:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> getHTTPResult<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'4'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span> 
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">//just to make sure</span>
    <span style="color: #b1b100;">return</span> client.<span style="color: #202020;">read</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// return either '0' or '1' or '2' or '3'</span>
  <span style="color: #009900;">&#125;</span> 
  <span style="color: #b1b100;">return</span> <span style="color: #ff0000;">'x'</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// something bad happened</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>At this point a simple switch allows us to define the behavior of the response:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> sendToServer<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
   client.<span style="color: #202020;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//just to be sure</span>
   <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>client.<span style="color: #202020;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      client.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;GET /main/rfid?apikey=123&amp;tag=&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      client.<span style="color: #202020;">print</span><span style="color: #009900;">&#40;</span>tag<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot; HTTP/1.0&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      client.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
      Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>getHTTPResult<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">:</span>
           Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;logged in&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'1'</span><span style="color: #339933;">:</span>
           Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;logged out&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>   
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'2'</span><span style="color: #339933;">:</span>
           Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;no user&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span> 
        <span style="color: #b1b100;">case</span> <span style="color: #ff0000;">'3'</span><span style="color: #339933;">:</span>
           Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;API key failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>    
        <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
          Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;broke&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
      client.<span style="color: #202020;">flush</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//just to be sure, probably not needed here</span>
      client.<span style="color: #202020;">stop</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//should stop it</span>
  <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    Serial.<span style="color: #202020;">println</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;connection failed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h2>A few more troubleshooting tips (will keep updated as they come in)</h2>
<ol>
<li>Be sure to use <a href="http://arduino.cc/en/Reference/ClientFlush">flush()</a> when appropriate. This ensures that your input buffer is clean and that you don&#8217;t have any left over remnants.</li>
<li>I noticed that sometimes the ethernet shield would not power up when I plugged in my Arduino. You can tell by the group of lights on the top. I could only get it to start up when I had unplugged anything that was leaching power from my board (in my case the RFID reader which is leaching current off the 5V pin). I am not 100% sure why this is but my guess is that it has something to do with some components on the ethernet shield not getting enough current to start it up. If this happens to you, you will often find that client.connect() will return false every time. I will try to investigate this further.</li>
</ol>
<h2>Conclusion</h2>
<p>Hopefully this isn&#8217;t too far out of context for your applications. Feel free to post questions about this device and I will try to help out.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/EFs_6BKjcqI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/02/05/rfid-ethernet-shield-client-rails/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/02/05/rfid-ethernet-shield-client-rails/</feedburner:origLink></item>
		<item>
		<title>Agenda For Our First Official Board Meeting</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/BK8STwdrS4E/</link>
		<comments>http://www.gumbolabs.org/2010/01/19/agenda-for-our-first-official-board-meeting/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 21:54:30 +0000</pubDate>
		<dc:creator>Simon Dorfman</dc:creator>
				<category><![CDATA[Board of Directors]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=229</guid>
		<description><![CDATA[Gumbo Labs, Inc.  Board Meeting
4820 Banks Street, Studio  #5, New Orleans, LA 70119
Jan 19, 2010, 7:30-9:00PM
Call Meeting to Order
Membership Business

Review Applications
Confirm Membership

Board Business

Confer Incorporators as    Officers
Elect Board of Directors
Discuss Board Waiver
Adopt Bylaws
Authorize Treasurer’s    Duties
Elect Officers
Authorize Officers’ Duties
Discuss Indemnification
Discuss Officer Reimbursements
Select Agent for the Corporation

Adjourn Meeting
]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span style="font-family: Verdana; font-size: medium;"><strong>Gumbo Labs, Inc.  Board Meeting</strong></span></p>
<p style="text-align: left;"><span style="font-family: Verdana; font-size: small;">4820 Banks Street, Studio  #5, New Orleans, LA 70119</span></p>
<p><span style="font-family: Verdana; font-size: small;">Jan 19, 2010, 7:30-9:00PM</span></p>
<blockquote><p><span style="font-family: Verdana; font-size: small;">Call Meeting to Order</span></p>
<p><span style="font-family: Verdana; font-size: small;">Membership Business</span></p>
<ol type="1">
<li><span style="font-family: Verdana; font-size: small;">Review Applications</span></li>
<li><span style="font-family: Verdana; font-size: small;">Confirm Membership</span></li>
</ol>
<p><span style="font-family: Verdana; font-size: small;">Board Business</span></p>
<ol type="1">
<li><span style="font-family: Verdana; font-size: small;">Confer Incorporators as    Officers</span></li>
<li><span style="font-family: Verdana; font-size: small;">Elect Board of Directors</span></li>
<li><span style="font-family: Verdana; font-size: small;">Discuss Board Waiver</span></li>
<li><span style="font-family: Verdana; font-size: small;">Adopt Bylaws</span></li>
<li><span style="font-family: Verdana; font-size: small;">Authorize Treasurer’s    Duties</span></li>
<li><span style="font-family: Verdana; font-size: small;">Elect Officers</span></li>
<li><span style="font-family: Verdana; font-size: small;">Authorize Officers’ Duties</span></li>
<li><span style="font-family: Verdana; font-size: small;">Discuss Indemnification</span></li>
<li><span style="font-family: Verdana; font-size: small;">Discuss Officer Reimbursements</span></li>
<li><span style="font-family: Verdana; font-size: small;">Select Agent for the Corporation</span></li>
</ol>
<p><span style="font-family: Verdana; font-size: small;">Adjourn Meeting</span></p></blockquote>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/BK8STwdrS4E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2010/01/19/agenda-for-our-first-official-board-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2010/01/19/agenda-for-our-first-official-board-meeting/</feedburner:origLink></item>
		<item>
		<title>Simon Dorfman’s Pecha Kucha Presentation about Gumbo Labs Video</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/BQwfCEIV1_8/</link>
		<comments>http://www.gumbolabs.org/2009/11/11/simon-dorfmans-pecha-kucha-presentation-about-gumbo-labs-video/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 15:10:45 +0000</pubDate>
		<dc:creator>Simon Dorfman</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=201</guid>
		<description><![CDATA[
Above video also viewable on vimeo. And the slides from this presentation were posted here.
I&#8217;ll try to update this post later with a summary and some links from the slides.
]]></description>
			<content:encoded><![CDATA[<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="400" height="300" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7548581&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="400" height="300" src="http://vimeo.com/moogaloop.swf?clip_id=7548581&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Above video also <a href="http://vimeo.com/7548581">viewable on vimeo</a>. And the slides from this presentation were <a href="http://www.gumbolabs.org/2009/10/30/slides-from-my-gumbo-labs-presentation-at-pecha-kucha-last-night/">posted here</a>.</p>
<p>I&#8217;ll try to update this post later with a summary and some links from the slides.</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/BQwfCEIV1_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2009/11/11/simon-dorfmans-pecha-kucha-presentation-about-gumbo-labs-video/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2009/11/11/simon-dorfmans-pecha-kucha-presentation-about-gumbo-labs-video/</feedburner:origLink></item>
		<item>
		<title>Tuesday Night Meeting 7:30 – 9:00</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/ksxQl1tzGHo/</link>
		<comments>http://www.gumbolabs.org/2009/11/11/tuesday-night-meeting-730-900/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:39:16 +0000</pubDate>
		<dc:creator>Tuesday Meeting Reminder Robot</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/2009/11/11/tuesday-night-meeting-730-900/</guid>
		<description><![CDATA[Is there anything in particular you&#8217;d like people to bring or prepare for this Tuesday&#8217;s meeting? Leave a comment. Otherwise it will be the usual hanging out, socializing, working on stuff together, what-have-you&#8230;
]]></description>
			<content:encoded><![CDATA[<p>Is there anything in particular you&#8217;d like people to bring or prepare for this Tuesday&#8217;s meeting? Leave a comment. Otherwise it will be the usual hanging out, socializing, working on stuff together, what-have-you&#8230;</p>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/ksxQl1tzGHo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2009/11/11/tuesday-night-meeting-730-900/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2009/11/11/tuesday-night-meeting-730-900/</feedburner:origLink></item>
		<item>
		<title>Slides from My Gumbo Labs Presentation at Pecha Kucha Last Night</title>
		<link>http://feedproxy.google.com/~r/GumboLabs/~3/pr1cpUzW7S4/</link>
		<comments>http://www.gumbolabs.org/2009/10/30/slides-from-my-gumbo-labs-presentation-at-pecha-kucha-last-night/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 13:46:50 +0000</pubDate>
		<dc:creator>Simon Dorfman</dc:creator>
				<category><![CDATA[Presentation]]></category>

		<guid isPermaLink="false">http://www.gumbolabs.org/?p=197</guid>
		<description><![CDATA[Gumbo Labs Presentation at Pecha Kucha
View more presentations from Gumbo Labs Inc..

]]></description>
			<content:encoded><![CDATA[<div id="__ss_2383928" style="width: 425px; text-align: left;"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Gumbo Labs Presentation at Pecha Kucha" href="http://www.slideshare.net/GumboLabs/gumbo-labs-presentation-at-pecha-kucha">Gumbo Labs Presentation at Pecha Kucha</a><object style="margin:0px" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dorfman-091030084019-phpapp01&amp;rel=0&amp;stripped_title=gumbo-labs-presentation-at-pecha-kucha" /><param name="allowfullscreen" value="true" /><embed style="margin:0px" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dorfman-091030084019-phpapp01&amp;rel=0&amp;stripped_title=gumbo-labs-presentation-at-pecha-kucha" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/GumboLabs">Gumbo Labs Inc.</a>.</div>
</div>
<img src="http://feeds.feedburner.com/~r/GumboLabs/~4/pr1cpUzW7S4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.gumbolabs.org/2009/10/30/slides-from-my-gumbo-labs-presentation-at-pecha-kucha-last-night/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.gumbolabs.org/2009/10/30/slides-from-my-gumbo-labs-presentation-at-pecha-kucha-last-night/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
