<?xml version="1.0" encoding="utf-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
<title>A Plodding Mediocrity</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/" />
<modified>2012-02-20T16:59:09Z</modified>
<tagline>Jordan Husney&apos;s Collected Works and Memories</tagline>
<id>tag:jordan.husney.com,2012://7</id>
<generator url="http://www.movabletype.org/" version="3.33">Movable Type</generator>
<copyright>Copyright (c) 2012, jordanh</copyright>
<entry>
<title>Arduino DHT22 Library Improvement</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2012/02/arduino_dht22_library_improvem.php" />
<modified>2012-02-20T16:59:09Z</modified>
<issued>2012-02-20T12:46:05Z</issued>
<id>tag:jordan.husney.com,2012://7.424</id>
<created>2012-02-20T12:46:05Z</created>
<summary type="text/plain"> Rob Faludi and I have been teaching a class at the International Center for Theoretical Physics in Trieste, Italy. Marco Zennaro furnished us with a number of DHT22-based Grove Temperature and Humidity Sensors for Seeed Studio. The example code...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Development</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
<a href="http://www.faludi.com">Rob Faludi</a> and I have been teaching a class at the <a href="http://www.ictp.it/">International Center for Theoretical Physics</a> in Trieste, Italy.  <a href="http://www.wsnblog.com/about-us/">Marco Zennaro</a> furnished us with a number of DHT22-based <a href="http://www.seeedstudio.com/wiki/Grove_-_Temperature_and_Humidity_Sensor_Pro">Grove Temperature and Humidity Sensors for Seeed Studio</a>.  The example code on the Seeed wasn't very robust nor parameterized to work on any <a href="http://www.arduino.cc">Arduino</a> pin so I took a few moments to make some changes.  There are now two files:
</p>

<p>
DHT22.h:
</p>

<pre class="mtc_block"><span class="c_Preproc def_Directive">#<span class="c_PreprocWord def_DirectiveContent def_Directive">ifndef</span> DHT22_H</span>
<span class="c_Preproc def_Directive">#<span class="c_PreprocWord def_DirectiveContent def_Directive">define</span> <span class="c_DefineOutline def_Outlined def_Special">DHT22_H</span></span>

<span class="c_KeywordANSI def_Keyword">enum</span> <span class="c_EnumOutline c_StructOutline def_Outlined def_Special">DHT22_Err_t</span> <span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  DHT22_ERR_NONE <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">0</span><span class="c_Symbol def_Symbol">,</span>
  DHT22_ERR_HUNG <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol">,</span>
  DHT22_ERR_SYNC <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">2</span><span class="c_Symbol def_Symbol">,</span>
  DHT22_ERR_CHKSUM <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">3</span><span class="c_Symbol def_Symbol">,</span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>

DHT22_Err_t getDHT22<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">int</span> pin<span class="c_Symbol def_Symbol">,</span> <span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span> <span class="c_Symbol def_Symbol">*</span>temperature<span class="c_Symbol def_Symbol">,</span> <span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span> <span class="c_Symbol def_Symbol">*</span>humidity<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>

<span class="c_Preproc def_Directive">#<span class="c_PreprocWord def_DirectiveContent def_Directive">endif</span></span></pre>

<p>
DHT22.ino:
</p>

<div>
<pre class="mtc_block"><span class="c_Preproc def_Directive">#<span class="c_PreprocInclude def_Path def_URI">include <span class="c_IncludeOutline def_Outlined def_Special"><span class="c_PreprocIncludeEdge def_StringEdge def_String"><span class="def_PairStart def_Special">&quot;</span></span>DHT22.h<span class="c_PreprocIncludeEdge def_StringEdge def_String"><span class="def_PairEnd def_Special">&quot;</span></span></span></span></span>

<span class="c_KeywordANSI def_Keyword">static</span> byte <span class="c_FuncOutline def_Outlined def_Special">_read_dht22_dat</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_KeywordANSI def_Keyword">volatile</span> uint8_t <span class="c_Symbol def_Symbol">*</span>in<span class="c_Symbol def_Symbol">,</span> uint8_t bitmask<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  byte i <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">0</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  byte result<span class="c_Symbol def_Symbol">=</span><span class="def_NumberDec def_Number">0</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_KeywordANSI def_Keyword">for</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>i<span class="c_Symbol def_Symbol">=</span><span class="def_NumberDec def_Number">0</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> i<span class="c_Symbol def_Symbol">&lt;</span> <span class="def_NumberDec def_Number">8</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> i<span class="c_Symbol def_Symbol">+</span><span class="c_Symbol def_Symbol">+</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    <span class="c_KeywordANSI def_Keyword">while</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol">!</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol">*</span>in <span class="c_Symbol def_Symbol">&amp;</span> bitmask<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// wait for 50us</span>
    delayMicroseconds<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">30</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
    <span class="c_KeywordANSI def_Keyword">if</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol">*</span>in <span class="c_Symbol def_Symbol">&amp;</span> bitmask<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span> 
      result <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol">&lt;</span><span class="c_Symbol def_Symbol">&lt;</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">7</span><span class="c_Symbol def_Symbol">-</span>i<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
    <span class="c_KeywordANSI def_Keyword">while</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol">*</span>in <span class="c_Symbol def_Symbol">&amp;</span> bitmask<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// wait '1' finish</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
  <span class="c_KeywordANSI def_Keyword">return</span> result<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>

DHT22_Err_t <span class="c_FuncOutline def_Outlined def_Special">getDHT22</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">int</span> pin<span class="c_Symbol def_Symbol">,</span> <span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span> <span class="c_Symbol def_Symbol">*</span>temperature<span class="c_Symbol def_Symbol">,</span> <span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span> <span class="c_Symbol def_Symbol">*</span>humidity<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  byte dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">5</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  byte dht22_in<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  byte i<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>

  uint8_t bitmask <span class="c_Symbol def_Symbol">=</span> digitalPinToBitMask<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>pin<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_KeywordANSI def_Keyword">volatile</span> uint8_t port <span class="c_Symbol def_Symbol">=</span> digitalPinToPort<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>pin<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_KeywordANSI def_Keyword">volatile</span> uint8_t <span class="c_Symbol def_Symbol">*</span>reg<span class="c_Symbol def_Symbol">,</span> <span class="c_Symbol def_Symbol">*</span>out<span class="c_Symbol def_Symbol">,</span> <span class="c_Symbol def_Symbol">*</span>in<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>

  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// setup registers and pins</span>
  reg <span class="c_Symbol def_Symbol">=</span> portModeRegister<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>port<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  out <span class="c_Symbol def_Symbol">=</span> portOutputRegister<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>port<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  in <span class="c_Symbol def_Symbol">=</span>  portInputRegister<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>port<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_Symbol def_Symbol">*</span>reg <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_Symbol def_Symbol">*</span>out <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>

  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// start condition</span>
  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// 1. pull-down i/o pin from 18ms</span>
  <span class="c_Symbol def_Symbol">*</span>out <span class="c_Symbol def_Symbol">&amp;</span><span class="c_Symbol def_Symbol">=</span> <span class="c_Symbol def_Symbol">~</span>bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  delay<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">18</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_Symbol def_Symbol">*</span>out <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  delayMicroseconds<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">40</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  <span class="c_Symbol def_Symbol">*</span>reg <span class="c_Symbol def_Symbol">&amp;</span><span class="c_Symbol def_Symbol">=</span> <span class="c_Symbol def_Symbol">~</span>bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  delayMicroseconds<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">40</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  dht22_in <span class="c_Symbol def_Symbol">=</span> <span class="c_Symbol def_Symbol">*</span>in <span class="c_Symbol def_Symbol">&amp;</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  <span class="c_KeywordANSI def_Keyword">if</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>dht22_in<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    Serial<span class="c_Symbol def_Symbol">.</span>println<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;dht22 start condition 1 not met&quot;</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
    <span class="c_KeywordANSI def_Keyword">return</span> DHT22_ERR_HUNG<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
  delayMicroseconds<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">80</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  dht22_in <span class="c_Symbol def_Symbol">=</span> <span class="c_Symbol def_Symbol">*</span>in <span class="c_Symbol def_Symbol">&amp;</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  <span class="c_KeywordANSI def_Keyword">if</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol">!</span>dht22_in<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    <span class="c_KeywordANSI def_Keyword">return</span> DHT22_ERR_SYNC<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
  delayMicroseconds<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">80</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// now ready for data reception</span>
  <span class="c_KeywordANSI def_Keyword">for</span> <span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>i<span class="c_Symbol def_Symbol">=</span><span class="def_NumberDec def_Number">0</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> i<span class="c_Symbol def_Symbol">&lt;</span><span class="def_NumberDec def_Number">5</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> i<span class="c_Symbol def_Symbol">+</span><span class="c_Symbol def_Symbol">+</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span>
    dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span>i<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span> <span class="c_Symbol def_Symbol">=</span> _read_dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>in<span class="c_Symbol def_Symbol">,</span> bitmask<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  <span class="c_Symbol def_Symbol">*</span>reg <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_Symbol def_Symbol">*</span>out <span class="c_Symbol def_Symbol">|</span><span class="c_Symbol def_Symbol">=</span> bitmask<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  byte dht22_check_sum <span class="c_Symbol def_Symbol">=</span> dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">0</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">+</span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">+</span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">2</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">+</span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">3</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_LineComment def_LineComment def_Comment def_Syntax">// check check_sum</span>
  <span class="c_KeywordANSI def_Keyword">if</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">4</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">!</span><span class="c_Symbol def_Symbol">=</span> dht22_check_sum<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    <span class="c_KeywordANSI def_Keyword">return</span> DHT22_ERR_CHKSUM<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
  
  <span class="c_Symbol def_Symbol">*</span>humidity<span class="c_Symbol def_Symbol">=</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">0</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">*</span><span class="def_NumberDec def_Number">256</span><span class="c_Symbol def_Symbol">+</span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol">/</span><span class="def_NumberDec def_Number">10</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_Symbol def_Symbol">*</span>temperature<span class="c_Symbol def_Symbol">=</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">2</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol">*</span><span class="def_NumberDec def_Number">256</span><span class="c_Symbol def_Symbol">+</span>dht22_dat<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">[</span></span><span class="def_NumberDec def_Number">3</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">]</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_Symbol def_Symbol">/</span><span class="def_NumberDec def_Number">10</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
 
  <span class="c_KeywordANSI def_Keyword">return</span> DHT22_ERR_NONE<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> 
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span></pre>
</div>

<p>
This can be used as in in the following example:
</p>

<div>
<pre class="mtc_block"><span class="c_Preproc def_Directive">#<span class="c_PreprocInclude def_Path def_URI">include <span class="c_IncludeOutline def_Outlined def_Special"><span class="c_PreprocIncludeEdge def_StringEdge def_String"><span class="def_PairStart def_Special">&quot;</span></span>DHT22.h<span class="c_PreprocIncludeEdge def_StringEdge def_String"><span class="def_PairEnd def_Special">&quot;</span></span></span></span></span>

<span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">void</span> <span class="c_FuncOutline def_Outlined def_Special">setup</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span> <span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  Serial<span class="c_Symbol def_Symbol">.</span>begin<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">9600</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  delay<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">2000</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span> <span class="c_LineComment def_LineComment def_Comment def_Syntax">// Recommended delay before sensor can be used</span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>

<span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">void</span> <span class="c_FuncOutline def_Outlined def_Special">loop</span><span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span> <span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
  DHT22_Err_t result<span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="c_KeywordANSI_typenames c_KeywordANSI def_Keyword">float</span> temperature <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">0</span><span class="c_Symbol def_Symbol">,</span> humidity <span class="c_Symbol def_Symbol">=</span> <span class="def_NumberDec def_Number">0</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  
  result <span class="c_Symbol def_Symbol">=</span> getDHT22<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">4</span><span class="c_Symbol def_Symbol">,</span> <span class="c_Symbol def_Symbol">&amp;</span>temperature<span class="c_Symbol def_Symbol">,</span> <span class="c_Symbol def_Symbol">&amp;</span>humidity<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>  
  <span class="c_KeywordANSI def_Keyword">if</span> <span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>result <span class="c_Symbol def_Symbol">!</span><span class="c_Symbol def_Symbol">=</span> DHT22_ERR_NONE<span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairStart def_Special">{</span></span>
    delay<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">5000</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
    <span class="c_KeywordANSI def_Keyword">return</span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  <span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span>
  
  Serial<span class="c_Symbol def_Symbol">.</span>print<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;Current humdity = &quot;</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  Serial<span class="c_Symbol def_Symbol">.</span>print<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>humidity<span class="c_Symbol def_Symbol">,</span><span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  Serial<span class="c_Symbol def_Symbol">.</span>print<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;%  &quot;</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  Serial<span class="c_Symbol def_Symbol">.</span>print<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;temperature = &quot;</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  Serial<span class="c_Symbol def_Symbol">.</span>print<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span>temperature<span class="c_Symbol def_Symbol">,</span><span class="def_NumberDec def_Number">1</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  Serial<span class="c_Symbol def_Symbol">.</span>println<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="c_String def_String">&quot;C  &quot;</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
  delay<span class="c_Symbol def_Symbol"><span class="def_PairStart def_Special">(</span></span><span class="def_NumberDec def_Number">5000</span><span class="c_Symbol def_Symbol"><span class="def_PairEnd def_Special">)</span></span><span class="c_StructureSymbol def_SymbolStrong def_Symbol">;</span>
<span class="def_SymbolStrong def_Symbol"><span class="def_PairEnd def_Special">}</span></span></pre>
</div>

<p>
You may download the file
<a href="http://jordan.husney.com/archives/downloads/ICTP_DHT22_XIG.zip">ICTP_DHT22_XIG.zip</a>.  It contains a slightly enhanced example which transmits the information to the <a href="http://code.google.com/p/xig">XBee Internet Gateway</a>.
</p>]]>

</content>
</entry>
<entry>
<title>XBee Pulse I/O</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2012/02/xbee_pulse_io.php" />
<modified>2012-05-19T09:28:03Z</modified>
<issued>2012-02-14T20:43:46Z</issued>
<id>tag:jordan.husney.com,2012://7.423</id>
<created>2012-02-14T20:43:46Z</created>
<summary type="text/plain"> What is an XBee Pulse I/O? A Fully Populated XBee Pulse I/O Board The XBee Pulse I/O is a simple, general purpose electronic design which can be used for many automation and monitoring tasks. It includes up to two...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Technology</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<div>
<h3><b>What is an XBee Pulse I/O?</b></h3>

<div style="margin: 8px; align: center">
<img alt="20120201_XBeePulseIO.jpg" src="http://jordan.husney.com/diary/images/20120201_XBeePulseIO.jpg" width="340" height="262" /><br/>
<span style="font-size: x-small">A Fully Populated XBee Pulse I/O Board</span>
</div>

<p>
The XBee Pulse I/O is a simple, general purpose electronic design which can be used for many automation and monitoring tasks.  It includes up to two relays which may be driven through a one-shot pulse generator, simulating pressing and releasing a button, or it may be connected and controlled directly by the XBeeâ€™s digital output pins. There are also two powered digital inputs which can be used with closure sensors or leak detectors.  Itâ€™s open-source hardware: use our design, improve it, sell it to your friends, or give it as a gift to win over your enemies.
</p>

<p>
The project is a collaboration between myself and my friend Andy Warner.
</p>

<div style="margin: 8px;">
<img alt="oshw-logo-100-px.png" src="http://jordan.husney.com/diary/images/oshw-logo-100-px.png" width="95" height="100" />
</div>

<p>
The XBee Pulse I/O is open-source hardware.
</p>
</div>

<div>
<h3><b>Where is the XBee Pulse I/O Used?</b></h3>

<p>
The XBee Pulse I/O is used in automation projects such as the  <a href="http://jordan.husney.com/xgd">XBee Garage Door</a> project; a project which connects an automatic garage door lift to a mobile phone for remote monitoring and control using <a href="http://www.idigi.com">iDigi</a>.
</p>
</div>

<div>
<h3><b>Where can I get an XBee Pulse I/O?</b></h3>

<p>
At present, there are three options for obtaining an XBee Pulse I/O board.
</p>

<p>
The first is to obtain a blank XBee Pulse I/O PCB and components and solder a board together yourself.  This option is good if you want to use the XBee Pulse I/O in a permanent installation. 
</p>

<p>
The second option is to build a simpler XBee Pulse I/O for prototyping purposes on a boardboard.  To build this design you order a smaller set of components from somebody such as <a href="http://www.digi-key.com">Digi-Key</a>.
</p>

<p>
The third option is to obtain the design files used to create the XBee Pulse I/O PCB and make one yourself: either by fabricating the board using your own method or ordering one from a manufacturer of your choice.  This option is for advanced users or users who which to modify the XBee Pulse I/O design for their own purposes.
</p>
</div>

<div>
<h3>Ordering a Blank PCB and Components from Digi-Key</h3>

<p>
You order a manufactured board from <a href="http://batchpcb.com/">BatchPCB</a> here:
</p>

<ul>
<li><a href="http://batchpcb.com/index.php/Products/84137">XBee Pulse I/O Single Port on BatchPCB</a></li>
</ul>

<p>
The bill-of-materials for the board can be found below.  Please note that if you are building a breadboard design, these is likely not the component list you want, unless you'll be be building a PCB version later.  The breadboard BOM can be found an additional section further down.
</p>

<ul>
<li><a href="https://docs.google.com/spreadsheet/ccc?key=0AnNUvPAI-vPJdDVucXpidm5rMjRRcjNndno1YkF5OVE#gid=1">XBee Pulse I/O PCB BOM</a></li>
</ul>

<p>
You may order this complete PCB bill-of-materials from <a href="http://www.digi-key.com">Digi-Key</a> by <a href="http://ordering.digikey.com/Ordering/AddPart.aspx?qty=1&part=6958220-KIT-ND">clicking this link</a> which will add Digi-Key part number 6958220-KIT-ND to your order.
</p>

<p>
The all important assembly instructions can be found at <a href="http://makeprojects.com/Project/XBee-Pulse-I-O-Single-Port-Assembly-Instructions/2264/1">Make: Projects XBee Pulse I/O Single Port Assembly Instructions</a>.
</p>

<div>
<h3>Breadboarding a Simple, Prototype XBee Pulse I/O</h3>

<p>
The breadboard version of the XBee Pulse I/O has a reduced bill-of-materials and eliminates several of the components used to make the design more robust.  Namely the breadboard design does not include a power-on protection circuit to keep the timer from triggering at power on and does not contain protection diodes on the sensor inputs.
</p>

<p>
The bill-of-materials for the breadboard can be found below.
</p>

<ul>
<li><a href="https://docs.google.com/spreadsheet/ccc?key=0Ah8DOXfZ7i1adEQ5NmRGajZqbHktWUVuTm5qVTkzVkE#gid=1">XBee Pulse I/O Breadboard BOM</a></li>
</ul>

<p>
You may order this XBee Pulse I/O bill-of-materials from <a href="http://www.digi-key.com">Digi-Key</a> by <a href="http://ordering.digikey.com/Ordering/AddPart.aspx?qty=1&part=6843976-KIT-ND">clicking this link</a> which will add Digi-Key part number 6843976-KIT-ND to your order.
</p>

<p>
Complete, step-by-step assembly instructions are available from <a href="http://makeprojects.com/Project/intro/1871">Make: Projects</a>.
</p>
</div>

<div>
<h3>Obtaining the Design Files for the XBee Pulse I/O</h3>

<p>
The <a href="http://www.cadsoftusa.com/">CadSoft EAGLE PCB</a> files are available for download here:
</p>

<ul>
<li><a href="http://jordan.husney.com/archives/downloads/XBPIO-SPv1.zip">XBPIO-SPv1.zip</a></li>
</ul>

</div>

<div>
<h3>The Dual Channel XBee Pulse I/O</h3>

<p>
For users who wants an XBee Pulse I/O with two relays and two digital inputs, here are the relavant links:
</p>

<ul>
<li>http://batchpcb.com/index.php/Products/81282</li>
<li><a href="https://docs.google.com/spreadsheet/ccc?key=0AnNUvPAI-vPJdHlDT055YnRzZkEyRDN6UHZUWFdCdHc#gid=0">XBee Pulse I/O PCB BOM</a></li>
<li>http://makeprojects.com/Project/XBee-Pulse-I-O-PCB-Assembly-Instructions/2067/1</li>
<li>A link to order the BOM from Digi-Key as <a href="http://ordering.digikey.com/Ordering/AddPart.aspx?qty=1&part=6811380-KIT-ND">part 6811380-KIT-ND</a></li>
<li>CadSoft EAGLE files: <a href="http://jordan.husney.com/archives/downloads/XBPIOv3.zip">XBPIOv3.zip</a></li>
</ul>


</div>]]>

</content>
</entry>
<entry>
<title>XBee Garage Door</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2012/02/xbee_garage_door.php" />
<modified>2012-05-19T09:02:48Z</modified>
<issued>2012-02-01T23:14:04Z</issued>
<id>tag:jordan.husney.com,2012://7.422</id>
<created>2012-02-01T23:14:04Z</created>
<summary type="text/plain"> Introduction The XBee Garage Door is an automation project which allows you to connect your automatic garage door lift to your mobile telephone via an Android or a mobile web application. This project was featured in Make Magazine Vol....</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Technology</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[
<div>
<iframe width="400" height="225" src="http://www.youtube.com/embed/FVX0M8FLKqs" frameborder="0" allowfullscreen></iframe>
</div>

<div>
<h3>Introduction</h3>

<p>
The XBee Garage Door is an automation project which allows you to connect your automatic garage door lift to your mobile telephone via an Android or a mobile web application.  This project was featured in <a href="http://makeprojects.com/Wiki/30">Make Magazine Vol. 30</a> in the article "12,000-mile .
<p>

<p>
The XBee Garage Door project uses a <a href="http://www.digi.com/xbee">Digi XBee</a> to communicate and attaches to the door using a hardware design called the <a href="http://jordan.husney.com/xbpio">XBee Pulse I/O</a>&mdash;a general purpose, open-source hardware design for simple automation projects.
</p>

<div>
<img alt="xgd_rumble_rumble.png" src="http://jordan.husney.com/software/images/xgd_rumble_rumble.png" width="400" height="352" />
</div>

<p>
There are four components to making your own XBee Garage Door:
<p>

<p>
<ol>
<li>An Breadboarded or populated printed circuit board (PCB) <a href="">XBee Pulse I/O</a></li>
<li>A door-closure sensor and length of wire to connect to your existing automatic garage door lift button</li>
<li>A ConnectPort X gateway running the <a href="http://code.google.com/p/xig/">XIG application</a> or a computer running the <a href="http://code.google.com/p/xig/">XIG</a> with an XBee module attached</li>
<li>Using the Android or Web application to monitor and control your door remotely</li>
</ol>
</p>
</div>

<div>
<h3>Building Your Own XBee Pulse I/O Board</h3>
<p>
You can build your own your XBee Pulse I/O from a prepared PCB or by breadboarding your own.  Complete instructions are available on the <a href="http://jordan.husney.com/xbpio">XBee Pulse I/O page</a>.
</p>
</div>

<div>
<h3>Attaching the Sensors and Garage Door Lift</h3>
<p>
Installing the XBee Pulse I/O into your garage is easy.  Follow these simple steps:
</p>
<ol>
<li>Affix the free end of the door closure sensor to the bottom of your garage door</a></li>
<li>Attach lead wires to the other half of the sensor; attach it to the wall opposite the sensor when the door is in the fully closed position.</li>
<li>Connect this sensor to input 1 of the XBee Pulse I/O PCB, or between XBee pin AD1 and ground on the PCB.</li>
<li>Attach two wires in parallel to the button used to open your garage door</li>
<li>Attach the other side of these two wires to the pulsed output of the XBee Pulse I/O or between the normally open and common terminals of the relay on your breadboard.</li>
<li>Power the XBee Pulse I/O with 4.5v-9v power.</li>
<li>You're done installing!</li>
</ol>
</div>

<div>
<h3>Obtaining the XIG and Using a Gateway</h3>
<p>
Obtain a Digi ConnectPort X2 gateway from someplace such as <a href="http://www.sparkfun.com/products/10569">SparkFun</a> or order a second <a href="http://www.sparkfun.com/products/10421">XBee Series 2 module</a> and attach it to your computer using a USB or serial adapter such as the <a href="http://www.sparkfun.com/products/8687">SparkFun XBee Explorer USB</a>.
</p>
<p>
Download and install the XBee Internet Gateway  from the <a href="http://code.google.com/p/xig">XIG site on Google Code</a> and follow the documentation to get the XIG running on your Digi ConnectPort gateway or PC.
</p>
</div>

<div>
<h3>Using the Android or Web Application</h3>
<p>
If you have an Android phone install <a href="https://market.android.com/details?id=com.digi.garagedoor">this application</a> from the Android Market.  The source for the application can be found on the GitHub repository <a href="https://github.com/jordanh/xbee-garage-door-android">jordanh/xbee-garage-door-android</a>.
</p>

<p>
If you have another smartphone or if you'll be experimenting with a web browser, use <a href="http://xbee-garage-door.herokuapp.com/">this website</a>.  The source, by <a href="http://www.mlmckenna.com/">Margaret McKenna</a>, can be found on <a href="https://github.com/mlm79/RemoteControl">GitHub</a>.
</p>
<p>
Next follow these steps:
</p>
<ol>
<li>Create a free developer account on <a href="http://www.idigi.com">iDigi</a>, the iDigi webservice will be used to connect your gateway and make it securely accessible from anywhere. This will make it so not just anybody can control your garage door.</li>
<li>Add your gateway to the iDigi Device List by using the "plus" button, selecting "Add Manually" and then choosing your Digi ConnectPort gateway (found on a sticker on the gateway) or XIG-on-a-PC's MAC address (found in the UI)</li>
<li>Start the Android or navigate to the <a href="http://mm-remote-control.herokuapp.com/">web application</a></li>
<li>Select your gateways device id as it is specified from the iDigi device list</li>
<li>Select the XBee address which is installed in the XBee Pulse I/O attache to your garage door lift</li>
<li><em>Voila!</em> you can now monitor and control your garage door from anywhere!</li>
</ol>
</div>]]>

</content>
</entry>
<entry>
<title>DanceShanty</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2012/01/danceshanty.php" />
<modified>2012-01-16T14:39:39Z</modified>
<issued>2012-01-15T01:29:03Z</issued>
<id>tag:jordan.husney.com,2012://7.421</id>
<created>2012-01-15T01:29:03Z</created>
<summary type="text/plain"> Over the past two weeks I&apos;ve been involved in the construction of an Art Shanty Project called the DancyShanty. Art Shanty Projects is a four-week exhibition that is part sculpture park, part artist residency and part social experiment, inspired...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Development</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
Over the past two weeks I've been involved in the construction of an <a href="http://artshantyprojects.org">Art Shanty Project</a> called the DancyShanty.
</p>

<blockquote class="quote">
<a href="http://artshantyprojects.org">Art Shanty Projects</a> is a four-week exhibition that is part sculpture park, part artist residency and part social experiment, inspired by traditional ice fishing houses that dot the state's lakes in winter. It is an artist driven temporary community exploring the ways in which the relatively unregulated public space of the frozen lake can be used as a new and challenging artistic environment to expand notions of what art can be.
</blockquote>

<p>
The DanceShanty, an innocuous white structure on a frozen lake, draws you inside with music and the sound of people having fun.  As you enter you are invited to hangup your coat and dance!
</p>

<div style="align: center;">
<iframe width="399" height="203" src="http://www.youtube.com/embed/3f86wATruMM" frameborder="0" allowfullscreen></iframe>
</div>

<p>
My part in the DanceShanty was to design the lighting system for the project.  Hans Scharler of <a href="http://www.iobridge.com">ioBridge</a>/<a href="http://www.thingspeak.com">ThingSpeak</a> had shared the <a href="http://www.idigi.com/blog/community/spreading-cheer-with-the-internet-of-things-cheerlights/">Cheerlights</a> project with me where people have interconnected strands of GE Color Effects LED lights using <a href="http://www.thingspeak.com">ThingSpeak</a> and a variety of communications components including <a href="http://www.sparkfun.com/products/10569">Digi ConnectPort X2</a> Internet-to-ZigBee gateways and of course, good ol' <a href="http://www.digi.com/xbee/">Digi XBee</a> radios.
</p>

<p>
I love lights. A hackable strand of full-color RGB Christmas lights are a dream come true.  I found a strand of 25 lights for $25 at <a href="http://www.sears.com/shc/s/p_10153_12605_07111065000P?aff=Y&i_cntr=1325369785756&sid=I0084400010000100312">Sears</a>.  A little <a href="http://www.processing.org">Processing</a> and <a href="http://www.arduino.cc">Arduino</a> code (using my friend <a href="http://www.faludi.com">Rob Faludi's</a> <a href="http://shop.oreilly.com/product/9780596807740.do">excellent book</a>, of course!) and I had a prototype working in an evening.  Using an <a href="http://www.sparkfun.com">SparkFun</a> <a href="http://www.sparkfun.com/products/9976">XBee Shield</a> and a pair of <a href="http://www.sparkfun.com/products/8664">Series 1 XBee Radios</a> I was able to made the whole setup wireless&mdash;and able to hide away the PC from view while being able to maintain a connection to the lights.  I work for <a href="http://www.digi.com">Digi</a>, so every design screams like it needs to be made wireless.
</p>

<p>
I am going to do a full tech write-up with source-code soon.  The laptop I have in the DanceShanty now is old and slow and only able to run the display at about 10 frames per second.  The Arduino code I wrote is able to run four synchronized strands of lights at well over 30 frames per second as you can see from the below staging video:
</p>

<div style="align: center;">
<iframe width="399" height="203" src="http://www.youtube.com/embed/sz96jGAyqzw" frameborder="0" allowfullscreen></iframe>
</div>

<p>
Before the DanceShanty comes down I am going to write a quick mobile app and connect the setup to people via <a href="http://www.idigi.com">iDigi</a> in order to allow people dancing to choose the color and visualization mode of the lights.  It's going to be sweet!
</p>

]]>

</content>
</entry>
<entry>
<title>To The Cloud</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2011/12/to_the_cloud.php" />
<modified>2011-12-31T16:39:25Z</modified>
<issued>2011-12-31T00:11:41Z</issued>
<id>tag:jordan.husney.com,2011://7.420</id>
<created>2011-12-31T00:11:41Z</created>
<summary type="text/plain"><![CDATA[ ...and we're back. I took advantage of the holiday break to do some digital re-organization. I've retired my tired &amp; faithful Gentoo Linux server and pushed everything up to "the cloud"&emdash;a virtual hosted server within Rackspace. I'm no stranger...]]></summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Diary</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
...and we're back.
</p>

<p>
I took advantage of the holiday break to do some digital re-organization.  I've retired my tired &amp; faithful <a href="http://www.gentoo.org">Gentoo Linux</a> server and pushed everything up to "the cloud"&emdash;a virtual hosted server within <a href="http://www.rackspace.com">Rackspace</a>.
</p>

<p>
I'm no stranger to the cloud.  I'm <a href="Jordan Husney | LinkedIn ">Product Manager at Digi International</a> for the <a href="http://www.idigi.com">iDigi Device Cloud</a> allowing ubiquitous access to any device to any application, anywhere.  My home thermostat, gas and water meters are connected to my iPhone for monitoring and control via <a href="http://www.digi.com">Digi International's</a> <a href="http://www.idigi.com>iDigi Device Cloud service</a> and the <a href="http://www.energydaytrader.com">Energy Daytrader application</a>--incidentally, Energy Daytrader won <a href="http://postscapes.com/">Postscapes</a> People's Choice aware for <a href="http://postscapes.com/best-quantified-self-implementation-2011">Best Internet of Things Self Tracking Application of 2011</a>.
</p>

<p>
None of us are strangers to the cloud: so many of us use web-based e-mail applications such as <a href="http://www.gmail.com">GMail</a>, social networking sites such as <a href="http://www.facebook.com>Facebook</a> or <a href="http://www.linkedin.com">LinkedIn</a>, and storage services such as <a href="http://www.dropbox.com">Dropbox</a>.  We even use less obvious clouds like <a href="http://www.flickr.com">Flickr</a>, <a href="http://www.netflix.com">Netflix</a> and <a href="http://www.hulu.com">Hulu</a>.  In a sense even common infrastructure such as the mobile phone networks from AT&T, Verizon, T-Mobile and Sprint can be seen as clouds if one takes the term "cloud" to mean massively scalable, multi-tenant and secure products distributed as a service.  I just hate the term cloud, it's opaque and literally nebulous.
</p>

<p>
Nonetheless the cloud is great.  I migrated my Linux box up to Rackspace's cloud storage in hours using <a href="http://duplicity.nongnu.org/">Duplicity</a> and then executed a few commands to migrate my databases and get my webserver running.  My site is faster, I can easily scale the performance and it's fully backed up.  I'm so happy!
</p>

<p>
Hosting my machine at Rackspace will cost me about <a href="http://www.wolframalpha.com/input/?i=%28%28%28convert+1+year+to+hours%29+*+%240.03%29+%2F+hours%29">$263 per year</a> or $21.90 per month.  The electricity alone on my old server cost me about <a href="http://www.wolframalpha.com/input/?i=%28%28%28convert+100+watts+to+kilowatts%29+*+1+hour%29+*+%28%240.068%2FkWh%29%29+*+%28%28convert+1+year+to+hours%29%2Fhours%29">$60 per year</a> or about $5.00 per month. Taking electricity into account, my overall cost of switching to the cloud is around $17 per month which I deem to be a fair price for the additional performance and services I receive.
</p>

<p>
I've got some big plans for 2012.  Watch this space!
</p>]]>

</content>
</entry>
<entry>
<title>The Craft of Water Color</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2011/08/the_craft_of_water_color.php" />
<modified>2011-08-02T23:03:08Z</modified>
<issued>2011-08-02T16:53:23Z</issued>
<id>tag:jordan.husney.com,2011://7.418</id>
<created>2011-08-02T16:53:23Z</created>
<summary type="text/plain"> This diary entry summarizes the Aegean Center for the Fine Arts 2011 Summer Course: The Craft of Watercolor which I attended from July 10th - July 24th; it will be mirrored on the Aegean Center&apos;s official blog. Image Source:...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Diary</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
<i>This diary entry summarizes the <a href="http://aegeancenter.org/">Aegean Center for the Fine Arts</a> <a href="http://aegeancenter.org/Summer_WC.html">2011 Summer Course: The Craft of Watercolor</a> which I attended from July 10th - July 24th; it will be mirrored on the Aegean Center's <a href="http://aegeancenter.wordpress.com/">official blog</a>.</i>
</p>

<div style="margin: 8px; float: left">
<img alt="20110802_00_LOC_Emigrants_3b04473r_scaled.jpg" src="http://jordan.husney.com/diary/images/20110802_00_LOC_Emigrants_3b04473r_scaled.jpg" width="192" height="201" /></br>
<span style="font-size: x-small">Image Source: Library of Congress</span>
</div>

<p>
As Paros is an island, you've got to take a boat.  I didn't immediately realize the significance of this until I was on board the ferry and motoring away from the hazy landmass of Athens.  Out in the middle of the Aegean--long, long before the sea appeared to me as brushstroke washes of ultramarine blue and viridian green--I felt as though I was not only traveling but emigrating.
</p>

<p>
Surely I knew what I had signed up for: I wasn't leaving an impoverished, famine stricken land carrying all my portable property for a chance at a better life on Paros. I was vacationing from New York City to learn how to paint. Yet, there was a palpably different feeling to this trip.  
</p>

<p>
Our incredible professor (and my friend of some years from Minnesota), <a href="http://junpierre.net">Jun-Pierre Shiozawa</a>, collected us individually from the ferry port as we arrived.  We were taken to our quarters, a small set of apartments only 200 paces from the sea.  I was shown the café in town were we would receive our free student meals.  I was shown where to shop for our own groceries.  I was shown where to walk to reach the classroom.  I was even taught the particularities of the Greek toilet.  These basic instructions heightened my sense of emigration.  I wouldn't only be taught how to paint, I would be shown how to live.
</p>


<div style="margin: 8px; float: right">
<img alt="20110802_02_Jordan_Aegean_Studio_Panorama_scaled.jpg" src="http://jordan.husney.com/diary/images/20110802_02_Jordan_Aegean_Studio_Panorama_scaled.jpg" width="442" height="169" />
</div>

<p>
During our first classroom session we had received an outline detailing our expected arrival time for each day, the topic to be covered during the day's class, and the start time and subject of the evening lecture.  Still, many details were omitted--would we paint indoors or on excursion? If we are going out, Where are we going?  What will we be painting?  Can we choose what to paint?  The intentional vagary bothered some of our fellow students.  Answers to these questions were occasionally demanded.  I was exhilarated.
</p>



<div style="margin: 8px; float: left"
<img alt="20110802_03_Jordan_Colorwheels_scaled.jpg" src="http://jordan.husney.com/diary/images/20110802_03_Jordan_Colorwheels_scaled.jpg" width="192" height="146" />
</div>

<p>
Each day unfolded magnificently.  Early in the morning we had time to do as we pleased.  I would wake early to take a dip in the sea, sketch or paint, and take a walk to town for a fresh baked spanikopita or Greek yogurt with honey.  Classroom time was dynamic.  Jun-Pierre would instruct on a topic of focus and provide a variety of hands-on exercises.  For example, on the class period focusing on color Jun had us create a variety of color wheels using a particular color family and using a variety of wet and dry brush techniques.  After creating these wheels he had us wash over them with various colors to understand their effects.  We would break from one in the afternoon until four-thirty.  We could do whatever we wanted during the break.  Many of us chose to eat lunch at our designated cafe, Cafe ???????? (Distrato).  Some of us would then swim, shop, or nap.  Often for the resumption of class we would take an excursion to someplace on the island such as a superlatively beautiful hillside, monastery, or windmill overlooking sea and rock where we would practice applying the day's classroom instruction.  In the evening there was often an optional lecture offered by a professor at the Aegean Center.  Night would mean dinner on our own, perhaps a final night swim under moonlight and then sleep.  Sleep!  The kind of sleep that comes quickly to those who are satisfied, exhausted, and content to be lulled by soft breezes and the sound of the sea.
</p>

<div style="margin: 8px; float: right">
<img alt="20110802_01_Jordan_Greek_Cuisine_scaled.jpg" src="http://jordan.husney.com/diary/images/20110802_01_Jordan_Greek_Cuisine_scaled.jpg" width="191" height="256" />
</div>

<p>
After our second week of studying, exploring, and tasting something wonderful happened.  We were more relaxed, our personalities had settled in to one another.  I gathered the distinct sense that it became less about what we expected from the class and more about being able to absorb everything we were being offered.  Our work reflected this.  Our conversations and deportment reflected this.  We had a rhythm and a little livelihood on Paros, no matter how transitory.  Rather sadly, following our student show it was time to leave.
</p>

<div style="margin: 8px; float: left; clear: both">
<img alt="20110802_04_Jordan_Sketchbook_Sample_scaled.jpg" src="http://jordan.husney.com/diary/images/20110802_04_Jordan_Sketchbook_Sample_scaled.jpg" width="358" height="214" />
</div>

<p>
We came by boat and we left by boat.  New York and the old life was calling.  It was time to strip myself of my Greek sandals and my responsibly cultivated tan to once again return to pushing my plow through fields of ones and zeros.  And after so much!  I had eaten incredible locally grown food.  I had mastered zigzagging from shadow to shadow in order to avoid the summer sun.  I had learned how to draw, to paint, <em>to see</em>.  Now, it was time to return.  I may not always have fresh urchin roe, but I'm forever changed. I know because I did not merely visit, I had emigrated--even if it was only temporary.
</p>

<p>
The ferry approaches on the horizon.  Hot people queue haphazardly in bunches, luggage awkwardly in tow.  Up until the last moments there are kind words, embraces, and well wishing.  It is unlike air travel: the airline security acting as a hermetic seal between your destination and airport-land and all airport-lands connected by flying tubes of recycled air.  With air travel you enter on one side of the tube and come out uncomfortably on the other. This produces an illusion that destinations belong to differing neighborhoods within a grand scale world-metropolis. Objects seem closer than they appear.  Traveling by boat is different.  Up on the deck of the boat you can see the land and your loved ones standing there, all getting smaller and receding slowly into the distance.  They recede just as slowly as the thought, wouldn't it be great if I could stay forever?
</p>

]]>

</content>
</entry>
<entry>
<title>Where Storage Tanks Go to Die</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2011/01/where_storage_tanks_go_to_die.php" />
<modified>2011-01-27T07:04:14Z</modified>
<issued>2011-01-27T00:58:43Z</issued>
<id>tag:jordan.husney.com,2011://7.416</id>
<created>2011-01-27T00:58:43Z</created>
<summary type="text/plain"></summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00285.jpg"><img alt="00285.jpg" src="http://jordan.husney.com/archives/00000/00285-thumb.jpg" width="168" height="128" /></a>
]]>
<![CDATA[    <div style="float: right; margin: 8px 8px 8px 8px;">
        <table class="podEXIF">
            <tr><td>Camera</td><td>Polaroid 104</td></tr>
            <tr><td>Lens</td><td>3 Element Glass</td></tr>
            <tr><td>Shutter @ Aperture</td><td>Unknown @ Unknown</td></tr>
            <tr><td>ISO</td><td>100</td></tr>
        </table>
    </div>

<p>
Continuing on the series of North Short Polaroids, here is a shot I took outside of Grand Marais.  I drove my car over a little rise and found where all of the above-ground gas storage tanks must go to die.
</p>
]]>
</content>
</entry>
<entry>
<title>North Shore Timber</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2011/01/north_shore_timber.php" />
<modified>2011-01-13T22:12:20Z</modified>
<issued>2011-01-13T15:59:31Z</issued>
<id>tag:jordan.husney.com,2011://7.415</id>
<created>2011-01-13T15:59:31Z</created>
<summary type="text/plain"></summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00284.jpg"><img alt="00284.jpg" src="http://jordan.husney.com/archives/00000/00284-thumb.jpg" width="165" height="128" /></a>]]>
<![CDATA[    <div style="float: right; margin: 8px 8px 8px 8px;">
        <table class="podEXIF">
            <tr><td>Camera</td><td>Polaroid 104</td></tr>
            <tr><td>Lens</td><td>3 Element Glass</td></tr>
            <tr><td>Shutter @ Aperture</td><td>Unknown @ Unknown</td></tr>
            <tr><td>ISO</td><td>100</td></tr>
        </table>
    </div>

<p>
I was going through my box of Polaroids this morning and I found a number of prints that I had intended to post but had not.
</p>

<p>
This image was taken during the same trip as <a href="http://jordan.husney.com/archives/photoblog/2009/03/000379.html">this image</a>.  It taken in early March, nearly two years ago.  I was driving alone down the <a href="http://maps.google.com/maps?q=Minnesota+gunflint+trail&ie=UTF8&hq=&hnear=Gunflint+Trail,+Grand+Marais,+Minnesota&gl=us&z=9">Gunflint Trail</a> and around a bend I saw this logging yard.
</p>
]]>
</content>
</entry>
<entry>
<title>Mom and Duck 1962</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/12/mom_and_duck_1965.php" />
<modified>2011-01-13T22:11:46Z</modified>
<issued>2010-12-27T00:08:37Z</issued>
<id>tag:jordan.husney.com,2010://7.414</id>
<created>2010-12-27T00:08:37Z</created>
<summary type="text/plain">
</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00283.jpg"><img alt="00283.jpg" src="http://jordan.husney.com/archives/00000/00283-thumb.jpg" width="129" height="128" /></a>
]]>
<![CDATA[<p>
Last week I joined my mother for dinner.  I mentioned that I was continuing some research on the family tree.  She reminded me that she had a box of pictures that she inherited from my grandmother and that there might be some interesting treasures in there.  After dinner I went to her house and we took the box up from the basement and looked over them together.
</p>

<p>
There were many wonderful photos in that old Wisconsin beer box.  This might be my favorite.  It is my mother and her duck in South Minneapolis.  The border of the picture reveals the year: 1962
</p>
]]>
</content>
</entry>
<entry>
<title>Food So Bad It&apos;s National</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/12/food_so_bad_its_national.php" />
<modified>2010-12-17T03:40:48Z</modified>
<issued>2010-12-16T21:36:57Z</issued>
<id>tag:jordan.husney.com,2010://7.413</id>
<created>2010-12-16T21:36:57Z</created>
<summary type="text/plain"> Food TV picked up Andrew Zimmern&apos;s Tweet of the photo I took of Wonderous Awful Kitchen&apos;s plate of slime. See: http://goo.gl/JOplV...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>

<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
Food TV picked up Andrew Zimmern's <a href="http://twitter.com/andrewzimmern/status/1730048004460544"></a>Tweet</a> of the photo I took of Wonderous Awful Kitchen's plate of slime.
</p>

</p>
See: <a href="http://goo.gl/JOplV">http://goo.gl/JOplV</a>
</p>]]>

</content>
</entry>
<entry>
<title>General Mills Sleep Out</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/11/general_mills_sleep_out.php" />
<modified>2010-11-09T04:40:43Z</modified>
<issued>2010-11-08T22:07:11Z</issued>
<id>tag:jordan.husney.com,2010://7.412</id>
<created>2010-11-08T22:07:11Z</created>
<summary type="text/plain"> I&apos;m going to participate in the General Mills Sleep Out on Friday, November 12th. I will be sleeping in a cardboard box in order to raise money for the Minneapolis-St. Paul metro area homeless. According to the General Mills...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Diary</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
I'm going to participate in the General Mills Sleep Out on Friday, November 12th.  I will be sleeping in a cardboard box in order to raise money for the Minneapolis-St. Paul metro area homeless.  According to the General Mills Fundraising for Interfaith Outreach & Community Partners website:

<blockquote>
Funds raised during the Sleep Out allow IOCP to respond to more than 1,800 emergency housing crises...Every month, IOCP turns away about 20 worthy housing requests because of lack of funds. 
</blockquote>
</p>

<p>
If you'd like to donate to this cause please see: <a href="https://iocp.ejoinme.org/?tabid=220097&joinme=2087">https://iocp.ejoinme.org/?tabid=220097&joinme=2087</a>
</p>
]]>

</content>
</entry>
<entry>
<title>Tweet from Andrew Zimmern</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/11/tweet_from_andrew_zimmern.php" />
<modified>2010-11-09T04:06:56Z</modified>
<issued>2010-11-08T22:02:24Z</issued>
<id>tag:jordan.husney.com,2010://7.411</id>
<created>2010-11-08T22:02:24Z</created>
<summary type="text/plain"> A little validation feels so good: andrewzimmern Andrew Zimmern A pic from my pal @Jordan_Husney’s meal @ Wondrous Awful Kitchen in MPLS. You cant make this crap up. http://twitpic.com/2xcbyq...</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Diary</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<p>
A little validation feels so good:

<blockquote><i>
<b><a href="http://twitter.com/#!/andrewzimmern">andrewzimmern</a></b> Andrew Zimmern<br/><br/> 
A pic from my pal <a href="http://twitter.com/#!/jordan_husney">@Jordan_Husney</a>’s meal @ Wondrous Awful Kitchen in MPLS. You cant make this crap up. <a href="http://twitpic.com/2xcbyq">http://twitpic.com/2xcbyq</a>
</i></blockquote>
</p>]]>

</content>
</entry>
<entry>
<title>Parisian Portrait Photographer</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/08/parisian_portrait_photographer.php" />
<modified>2010-08-03T13:20:24Z</modified>
<issued>2010-08-03T08:07:32Z</issued>
<id>tag:jordan.husney.com,2010://7.410</id>
<created>2010-08-03T08:07:32Z</created>
<summary type="text/plain"></summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00282.jpg"><img alt="00282.jpg" src="http://jordan.husney.com/archives/00000/00282-thumb.jpg" width="212" height="128" /></a>]]>
<![CDATA[    <div style="float: right; margin: 16px;">
<img alt="00282_photopher_entry_inset.jpg" src="http://jordan.husney.com/archives/00000/entry/00282_photopher_entry_inset.jpg" width="200" height="200" />
    </div>

<p>
The <a href="http://jordan.husney.com/archives/photoblog/2010/07/000409.html">previous entry</a> was taken and processed by this man.  I loved his camera, I loved his attire, I loved his manner but most of all I loved his face.  It reminded me of the eerie cartoon faces from <a href="http://www.tetesaclaques.tv/">Têtes à claques</a>.
</p>

    <div style="float: left; margin: 16px;">

<img alt="00282_will_waller_entry_inset.jpg" src="http://jordan.husney.com/archives/00000/entry/00282_will_waller_entry_inset.jpg" width="256" height="144" />

    </div>


<p>
If you are unfamiliar with Têtes à claques you should watch <a href="http://www.youtube.com/watch?v=BB6r1Hc2_18">this clip.</a> Even if you don't understand French the Québécois is punctuated with so much English that it's not that hard to understand. C'est pas beautiful?
</p>

    <div style="clear: both;">&nbsp;</div>]]>
</content>
</entry>
<entry>
<title>Parisian Street Portrait</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/07/parisian_street_portrait.php" />
<modified>2010-07-31T02:12:49Z</modified>
<issued>2010-07-30T20:39:10Z</issued>
<id>tag:jordan.husney.com,2010://7.409</id>
<created>2010-07-30T20:39:10Z</created>
<summary type="text/plain">
</summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00281.jpg"><img alt="00281.jpg" src="http://jordan.husney.com/archives/00000/00281-thumb.jpg" width="106" height="128" /></a>]]>
<![CDATA[<p>
We may as well continue the series of portraits.
</p>

<p>
Back in June I had to travel to Paris for work.  I love traveling to Paris: one, I love the city and two, I have good friends there.
</p>

<p>
My friend <a href="http://findingmika.blogspot.com/">Mika</a> lives in the <a href="http://en.wikipedia.org/wiki/1st_arrondissement_of_Paris">first arrondissement</a>. When I go to visit her it feels more like visiting family than friends. I've shown up sick, been mothered and healed.  I've had my face stuffed with pâté, wine & cheese.  There are sisters and brothers and children and friends.  It's a very lively place. Being a bit of a nomadic hermit, I crave this kind of environment from time to time.  I'd come lonely and leave with a warm heart and a new book to read.
</p>

<p>
Mika's boyfriend <a href="http://findingmika.blogspot.com/2010/07/crazy-eyes.html">C</a> is one of the coolest men on the planet.  He's who I want to be when I grow up.  He's incredibly kind, handsome, deeply thinking and creative.  Children love him.  It seems as though he never lost the way children look at the world and yet he developed the full emotional and spiritual maturity of a Zen master.  I enjoy spending time with him, hearing his travel stories and trying to see Paris as he sees Paris.  He makes me want to improve my French.
</p>

<p>
There was an arts festival in Paris where artists opened up their apartments to show where their workspaces and art.  C and I took in a few of these places.  Along the way we ran into a photographer who had constructed his own camera.  For ten Euros he would snap your pictures (using his hand as the shutter), develop a negative print, snap a positive print using the same camera, and give you the resulting image.  I could n't resist!
</p>

<p>
The image above was the result of his process.  I couldn't be happier with it!  It was rainy and humid.  I felt like waterlogged cardboard.  I look like waterlogged cardboard.  This photograph represents a wonderful memory.
</p>]]>
</content>
</entry>
<entry>
<title>Nerd</title>
<link rel="alternate" type="text/html" href="http://jordan.husney.com/archives/2010/07/nerd.php" />
<modified>2010-07-29T20:40:40Z</modified>
<issued>2010-07-29T14:58:38Z</issued>
<id>tag:jordan.husney.com,2010://7.408</id>
<created>2010-07-29T14:58:38Z</created>
<summary type="text/plain"></summary>
<author>
<name>jordanh</name>
<url>http://jordan.husney.com/</url>
<email>jordan@husney.com</email>
</author>
<dc:subject>Photoblog</dc:subject>
<content type="text/html" mode="escaped" xml:lang="en" xml:base="http://jordan.husney.com/">
<![CDATA[<a href="http://jordan.husney.com/archives/00000/00280.jpg"><img alt="00280.jpg" src="http://jordan.husney.com/archives/00000/00280-thumb.jpg" width="278" height="128" /></a>]]>
<![CDATA[<div style="float: right; margin: 16px;">
<img alt="20100728_Jordan_Headshot_Suit_thumb.jpg" src="http://jordan.husney.com/archives/00000/entry/20100728_Jordan_Headshot_Suit_thumb.jpg" width="96" height="144" />
</div>

<p>
Over the past several years I've had more and more opportunity with my employer to speak at trade events, conduct training sessions, and give <a href="http://www.digi.com/learningcenter/video/?EQ_show_flg=Y">webinars</a>.  When I was in New York last weekend I commissioned a photographer for a corporate headshot.
</p>

<p>
The photographer, <a href="http://www.daphneborowski.com/">Daphne Borowski</a>, did a superb job and turned around the images in just a couple of days.  I had over 100 shots to choose from. 
</p>


<p>
I winnowed down the images to five candidate images and enlisted my family for help.  I asked them to pick their top two favorite images.  My brother took one of the images and replied saying, "I much prefer this."
</p>

<div style="clear: all;">&nbsp;</div>]]>
</content>
</entry>

</feed>
