<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Aaron Lerch &#187; interactive intelligence</title>
	<atom:link href="http://www.aaronlerch.com/blog/category/interactive-intelligence/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aaronlerch.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 10 Mar 2010 12:45:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Office pranks, part deux</title>
		<link>http://www.aaronlerch.com/blog/2008/01/29/office-pranks-part-deux/</link>
		<comments>http://www.aaronlerch.com/blog/2008/01/29/office-pranks-part-deux/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 18:39:24 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2008/01/29/office-pranks-part-deux/</guid>
		<description><![CDATA[My boss has a good sense of humor, and we like to have fun with him. (And by that I mean &#34;at his expense&#34;. It&#8217;s our way of showing love and respect.)
My friend and co-worker Mike coined a phrase today: speed prank. Our boss was in Europe for business for 2 weeks, and came home [...]]]></description>
			<content:encoded><![CDATA[<p>My boss has a good sense of humor, and we like to <a href="http://www.aaronlerch.com/blog/2006/10/31/office-pranks/">have fun with him</a>. (And by that I mean &quot;at his expense&quot;. It&#8217;s our way of showing love and respect.)</p>
<p>My friend and co-worker <a href="http://ilikeellipses.com/">Mike</a> coined a phrase today: <a href="http://ilikeellipses.com/2008/01/29/office-morale/">speed prank</a>. Our boss was in Europe for business for 2 weeks, and came home expecting <em>something</em> to happen, which nothing did (sometimes the best pranks involve doing nothing when you&#8217;re expected to <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Until he went out for lunch today&#8230; It&#8217;s amazing what you can accomplish in 20 minutes!</p>
<p>Welcome back, Todd! &lt;g&gt; (I mean&#8230; &quot;who did that? I have no idea!&quot;)</p>
<p><a href="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil1.jpg"><img src="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil1-thumb.jpg" /></a> </p>
<p><a href="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil2.jpg"><img src="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil2-thumb.jpg" /></a> </p>
<p><a href="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil3.jpg"><img src="http://aaronlerch.com.s3.amazonaws.com/images/pranks/tinfoil3-thumb.jpg" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2008/01/29/office-pranks-part-deux/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Save I3DIR Files to CSV with PowerShell</title>
		<link>http://www.aaronlerch.com/blog/2007/09/18/save-i3dir-files-to-csv-with-powershell/</link>
		<comments>http://www.aaronlerch.com/blog/2007/09/18/save-i3dir-files-to-csv-with-powershell/#comments</comments>
		<pubDate>Wed, 19 Sep 2007 03:10:53 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>
		<category><![CDATA[powershell]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2007/09/18/save-i3dir-files-to-csv-with-powershell/</guid>
		<description><![CDATA[Here&#8217;s a post that will apply to exactly 0.3 people out there. But I think it&#8217;s a great story of how PowerShell came to the rescue for one of our customers.
A support request came in this morning for a customer who had accidentally deleted the source for one of their data sources. (Background: our client [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a post that will apply to exactly 0.3 people out there. But I think it&#8217;s a great story of how PowerShell came to the rescue for one of our customers.</p>
<p>A support request came in this morning for a customer who had accidentally deleted the source for one of their data sources. (Background: our client software displays directories&#8211;sort of like detailed address books&#8211;that can be sourced from pretty much anywhere.) They remembered that our client app maintains an encrypted local cache of the data and wanted to know if there was any way they could use that to create a CSV file to re-import back to the original data source.</p>
<p>My first thought: <a href="http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx">PowerShell</a>.</p>
<p>It took 20-30 minutes to review and remember what our application code was doing and create a PowerShell script that decrypted the data and exported it to CSV. It helps that we used standard .NET functionality like the built-in serialization of a DataSet and the Data Protection API. If anything had been customized it would&#8217;ve been trickier, but still do-able.</p>
<p>End result, here&#8217;s the script (it&#8217;s also available for <a href="http://www.aaronlerch.com/files/blog/Convert-I3DirToCSV.zip">download here</a>, if you&#8217;re an Interactive Intelligence customer and find it useful in some way) &#8212; completely unsupported of course, use at your own risk, etc.</p>
<p><!-- code formatted by http://manoli.net/csharpformat/ --><br />
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}</p>
<p>.csharpcode pre { margin: 0em; }</p>
<p>.csharpcode .rem { color: #008000; }</p>
<p>.csharpcode .kwrd { color: #0000ff; }</p>
<p>.csharpcode .str { color: #006080; }</p>
<p>.csharpcode .op { color: #0000c0; }</p>
<p>.csharpcode .preproc { color: #cc6633; }</p>
<p>.csharpcode .asp { background-color: #ffff00; }</p>
<p>.csharpcode .html { color: #800000; }</p>
<p>.csharpcode .attr { color: #ff0000; }</p>
<p>.csharpcode .alt
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}</p>
<p>.csharpcode .lnum { color: #606060; }
</style>
<pre class="csharpcode"><span class="kwrd">param</span>
(
    [string] $i3DirFile = $(<span class="kwrd">throw</span> <span class="str">"You must specify an i3dir file that has been created on this same machine"</span>),
    [string] $outputCSVFile = $(<span class="kwrd">throw</span> <span class="str">"You must specify an output file name for the resulting CSV data"</span>)
)

<span class="rem"># Load the DPAPI assembly</span>
[System.Reflection.Assembly]::LoadWithPartialName(<span class="str">"System.Security"</span>) | out-null

<span class="rem"># Load the encrypted file</span>
$encryptedData = get-content -encoding byte $i3DirFile
$decryptedData = [System.Security.Cryptography.ProtectedData]::Unprotect($encryptedData, $null, [System.Security.Cryptography.DataProtectionScope]::LocalMachine)

$rawXml = [System.Text.Encoding]::UTF8.GetString($decryptedData)

$dataset = new-object System.Data.DataSet
$reader = new-object System.IO.StringReader($rawXml)
$dataset.ReadXml($reader, [System.Data.XmlReadMode]::ReadSchema) | out-null

$dataset.Tables[0] | export-csv $outputCSVFile</pre>
<p>That&#8217;s it! Just 8 or so lines of code (with no error checking, of course). A great example of how PowerShell came to the rescue, even though this had nothing to do with the command line, or scripting, or PowerShell itself.</p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f68e9ad3-ce38-4d5e-a671-4b9fbbf5c529" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/PowerShell" rel="tag">PowerShell</a>, <a href="http://technorati.com/tags/Interactive%20Intelligence" rel="tag">Interactive Intelligence</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2007/09/18/save-i3dir-files-to-csv-with-powershell/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Office</title>
		<link>http://www.aaronlerch.com/blog/2007/08/16/the-office/</link>
		<comments>http://www.aaronlerch.com/blog/2007/08/16/the-office/#comments</comments>
		<pubDate>Thu, 16 Aug 2007 14:59:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2007/08/16/the-office/</guid>
		<description><![CDATA[No, not the show (but that rocks).  Where I work, everybody gets their own office &#8211; that&#8217;s right, no cubes. Thank God.  (Want your own office? We&#8217;re looking for top-notch developers! Shoot me an email at aaron [dot] lerch [at] inin [dot] com if you&#8217;re interested.)  Some people have home offices they&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>No, not <a href="http://www.nbc.com/The_Office/">the show</a> (but that rocks).  <a href="http://www.inin.com/">Where I work</a>, everybody gets their own office &#8211; that&#8217;s right, no cubes. Thank God.  (Want your own office? <a href="http://www.prohire.com/candidates/joblist.cfm?szCategory=JobList&amp;szFormat=search&amp;szWID=7850&amp;szCID=35327">We&#8217;re looking for top-notch developers!</a> Shoot me an email at aaron [dot] lerch [at] inin [dot] com if you&#8217;re interested.)  Some people have home offices they&#8217;ve &#8220;pimped&#8221; to be &#8220;just right&#8221;. I actually work at my peak performance in my office at work, believe it or not.  I thought I&#8217;d share my setup, just for kicks.</p>
<p>Click the image to go to Flickr where I&#8217;ve defined some hotspots describing the different items on my desktop. In Flickr, mouse over the pic to see the hotspots.<br />
<a href="http://www.flickr.com/photos/31828990@N00/1140197942/" title="View this on Flickr to see it tagged with notes" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/TheOffice_D2AB/MyOfficeRig.jpg" style="border: 0px none " alt="My Office Rig" border="0" height="360" width="477" /></a></p>
<p>And just for some more fun, here are a couple images that I was going to use (along with others) to stitch together into a single image, but it just didn&#8217;t work out right (crappy camera &amp; crappy photographer).</p>
<p><a href="http://www.aaronlerch.com/files/blog/TheOffice_D2AB/100_6193.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/TheOffice_D2AB/100_6193_thumb.jpg" style="border: 0px none " alt="It's a beautiful day in Indiana!" border="0" height="148" width="225" /></a> <a href="http://www.aaronlerch.com/files/blog/TheOffice_D2AB/100_6192.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/TheOffice_D2AB/100_6192_thumb.jpg" style="border: 0px none " alt="My " border="0" height="135" width="250" /></a></p>
<p>I know these types of things have gone &#8217;round before, but if you blog (and you should), post a pic/description of your favorite work place and leave a comment here with a link!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2007/08/16/the-office/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interactive Intelligence is the best tech place to work in Indiana</title>
		<link>http://www.aaronlerch.com/blog/2007/05/07/interactive-intelligence-is-the-best-tech-place-to-work-in-indiana/</link>
		<comments>http://www.aaronlerch.com/blog/2007/05/07/interactive-intelligence-is-the-best-tech-place-to-work-in-indiana/#comments</comments>
		<pubDate>Mon, 07 May 2007 12:51:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2007/05/07/interactive-intelligence-is-the-best-tech-place-to-work-in-indiana/</guid>
		<description><![CDATA[Don&#8217;t believe me? We just won an award, so it&#8217;s official. Yeah.  We came up 7th overall for large companies in Indiana, and 1st for technical companies.
But I honestly do believe it, this is a great company to work for.  Here&#8217;s some portions of the press release that I believe are relevant. (And [...]]]></description>
			<content:encoded><![CDATA[<p>Don&#8217;t believe me? <a href="http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;newsId=20070507005487&amp;newsLang=en">We just won an award, so it&#8217;s official.</a> Yeah.  We came up 7th overall for large companies in Indiana, and 1st for technical companies.</p>
<p>But I honestly do believe it, this is a great company to work for.  Here&#8217;s some portions of the press release that I believe are relevant. (And I happen to work with one of the quoters &#8211; Andrew Moore! Do you suppose I could be one of those &#8220;exceptionally talented developers&#8221; he is surrounded by? Nah! <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<blockquote><p>&#8220;The Interactive Intelligence headquarters facility features a modern, award-winning interior design, a fitness center and a game room. Employee benefits include a comprehensive health and vision insurance program, a wellness program, a 401(k) matching program, tuition reimbursement, a computer loan purchase plan and no dress code. Unique family benefits include paternity leave for new dads and adoption assistance. The company offers higher than Indiana-average wages.&#8221;</p></blockquote>
<blockquote><p>&#8220;&#8216;I selected Interactive Intelligence as an employer about a year ago because of its reputation as a leading vendor of quality IP telephony solutions, and also based on some very positive remarks from other developers who worked for the company at the time,&#8217; said software developer, Andrew Moore. &#8216;Since joining Interactive Iâ€™ve been most impressed with the way the company empowers employees through training and a general culture of excellence, which encourages us to be the best that we can be. Being surrounded by exceptionally talented developers inspires me to improve, and keeps me passionate about my job, which is something you canâ€™t put a price on.&#8217;&#8221;</p></blockquote>
<p>In case that got you excited about developing some really fun software in Indiana (didn&#8217;t it??) you should look us up &#8211; we have lots of openings! (3 on my team right now.)  Email me at aaron dot lerch at inin dot com (love those &#8220;<a href="http://haacked.com/archive/2007/04/02/how-to-harvest-emails-with-google-and-protect-yours-from.aspx">secretly embedded emails</a>&#8220;), or go to <a href="http://www.prohire.com/candidates/joblist.cfm?szCategory=JobList&amp;szFormat=search&amp;szWID=7850&amp;szCID=35327">our website</a>.</p>
<p>I&#8217;m still hoping to do some posts covering our product and client applications (now that I have permission) in the near future.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2007/05/07/interactive-intelligence-is-the-best-tech-place-to-work-in-indiana/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>It Was a Good Year for Business&#8230;</title>
		<link>http://www.aaronlerch.com/blog/2006/12/31/it-was-a-good-year-for-business/</link>
		<comments>http://www.aaronlerch.com/blog/2006/12/31/it-was-a-good-year-for-business/#comments</comments>
		<pubDate>Sun, 31 Dec 2006 17:01:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2006/12/31/it-was-a-good-year-for-business/</guid>
		<description><![CDATA[&#8230; well, &#8220;our&#8221; business anyway.  The Indianapolis Star published an article today talking about the performance of Indiana-related stocks over the course of 2006.  ININ topped the list by a long-shot:

Interactive Intelligence &#8211; 340%
Kimball International &#8211; 137%
American Commercial Lines &#8211; 116%
Steel Dynamics &#8211; 85%
General Motors Corp. &#8211; 64%(source: indystar.com)

We had a great year, [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; well, &#8220;<a href="http://www.inin.com/" title="Interactive Intelligence">our</a>&#8221; business anyway.  <a href="http://www.indystar.com/" title="The Indianapolis Star">The Indianapolis Star</a> published <a href="http://www.indystar.com/apps/pbcs.dll/article?AID=/20061231/BUSINESS/612310372/-1/ZONES04">an article</a> today talking about the performance of Indiana-related stocks over the course of 2006.  ININ topped the list by a long-shot:</p>
<ol>
<li>Interactive Intelligence &#8211; 340%</li>
<li>Kimball International &#8211; 137%</li>
<li>American Commercial Lines &#8211; 116%</li>
<li>Steel Dynamics &#8211; 85%</li>
<li>General Motors Corp. &#8211; 64%(source: <a href="http://www.indystar.com/apps/pbcs.dll/article?AID=/20061231/BUSINESS/612310372/-1/ZONES04">indystar.com</a>)</li>
</ol>
<p>We had a great year, and I&#8217;m excited about some of the cool stuff we&#8217;re working on right now.  In the coming year I&#8217;m hoping to do some posts on our client application(s) including some interesting features and challenges.  But we&#8217;ll see if that New Year&#8217;s resolution sticks or not. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><font color="#0080ff" size="3"><strong>Happy New Year!</strong></font></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2006/12/31/it-was-a-good-year-for-business/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Office Pranks</title>
		<link>http://www.aaronlerch.com/blog/2006/10/31/office-pranks/</link>
		<comments>http://www.aaronlerch.com/blog/2006/10/31/office-pranks/#comments</comments>
		<pubDate>Tue, 31 Oct 2006 00:01:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[humor]]></category>
		<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2006/10/31/office-pranks/</guid>
		<description><![CDATA[My boss was on vacation all last week.  So when the email arrived with the subject line &#8220;I&#8217;ve got 800 post-it notes and some spider webbing, who&#8217;s in?&#8221;, I knew what was up.  Names will not be named, of course, since my boss reads this blog, but never-the-less, whoever did this *cough*, must&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>My boss was on vacation all last week.  So when the email arrived with the subject line &#8220;I&#8217;ve got 800 post-it notes and some spider webbing, who&#8217;s in?&#8221;, I knew what was up.  Names will not be named, of course, since my boss reads this blog, but never-the-less, whoever did this *cough*, must&#8217;ve had a lot of fun doing it! <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office48.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office4_thumb6.jpg" style="border-width: 0px" border="0" height="328" width="425" /></a></p>
<p><a href="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office113.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office1_thumb11.jpg" style="border-width: 0px" align="left" border="0" height="175" width="135" /></a> <a href="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office29.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office2_thumb7.jpg" style="border-width: 0px" align="left" border="0" height="171" width="135" /></a> <a href="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office36.jpg" atomicselection="true"><img src="http://www.aaronlerch.com/files/blog/OfficePranks_A4B6/Office3_thumb4.jpg" style="border-width: 0px" align="left" border="0" height="174" width="135" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2006/10/31/office-pranks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>My team is hiring!</title>
		<link>http://www.aaronlerch.com/blog/2006/08/25/my-team-is-hiring/</link>
		<comments>http://www.aaronlerch.com/blog/2006/08/25/my-team-is-hiring/#comments</comments>
		<pubDate>Fri, 25 Aug 2006 16:36:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2006/08/25/my-team-is-hiring/</guid>
		<description><![CDATA[My team is looking for a driven, passionate Application developer (specializing in User Interfaces).  We are working on some very cool technology and creating some kick-ass client applications (our CEO&#8217;s words).  If you&#8217;re a .NET developer who excels at delivering an amazing user experience, drop me a line.  aaron [dot] lerch [at] [...]]]></description>
			<content:encoded><![CDATA[<p>My team is looking for a driven, passionate Application developer (specializing in User Interfaces).  We are working on some very cool technology and creating some kick-ass client applications (<a href="http://www.inin.com/News/PressCoverage/presscoverage.asp?id=289">our CEO&#8217;s words</a>).  If you&#8217;re a .NET developer who excels at delivering an amazing user experience, drop me a line.  aaron [dot] lerch [at] inin [dot] com.</p>
<p><a href="http://www.prohire.com/candidates/jobprofile.cfm?szWID=7850&amp;szCID=35327&amp;szOrderID=326808&amp;szCandidateID=0&amp;szSearchWords=">Here&#8217;s the link to the official job post.</a></p>
<p>We also have many other opportunities in the company, check them out here:<br />
<a href="http://www.inin.com/Company/Careers/careers.asp">http://www.inin.com/Company/Careers/careers.asp</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2006/08/25/my-team-is-hiring/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>X10-ified</title>
		<link>http://www.aaronlerch.com/blog/2005/09/26/x10-ified/</link>
		<comments>http://www.aaronlerch.com/blog/2005/09/26/x10-ified/#comments</comments>
		<pubDate>Mon, 26 Sep 2005 14:41:00 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[interactive intelligence]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2005/09/26/x10-ified/</guid>
		<description><![CDATA[I work for Interactive Intelligence. It&#8217;s a great company, with very cool technology. Our IP-Telephony software means that all of my phone communications (and so much more) are managed via our client software that runs on my computer. One feature of our client software is the ability to have plug-ins that can receive and respond [...]]]></description>
			<content:encoded><![CDATA[<p>I work for <a href="http://www.inin.com/">Interactive Intelligence</a>. It&#8217;s a great company, with very cool technology. Our IP-Telephony software means that all of my phone communications (and so much more) are managed via our client software that runs on my computer. One feature of our client software is the ability to have plug-ins that can receive and respond to events. This extensibility can lead to a <em>lot</em> of great innovation when it comes to integration with existing 3rd party products (think IM clients, Outlook, custom applications, etc).</p>
<p>I primarily use a SIP phone for my calls, but since I don&#8217;t have a SIP hardphone, I have to use a softphone (my headset plugged into the sound card). One disadvantage of this is that it&#8217;s really hard to tell if I&#8217;m listening to music or on the phone, and that can lead to both interruptions in phone conversations, and/or embarrassed co-workers who interrupt a conference call accidentally! So I thought to myself, how could I indicate my status to a person at my door wanting attention? Our software of course has presence management built in, which means another user in our organization can look at my current status, but that does them no good when they&#8217;re standing there looking at me. To make a long story short, I decided that I could try to turn on and off lights depending on my availability (ala an &#8220;On Air&#8221; light in a radio station). Then I could also handle another problem my SIP softphone presented: I can&#8217;t tell when my phone is ringing if I have my speakers turned down and am not looking at the computer screen! Turning on a light (maybe a strobe??) in the hallway will alert me to my silently ringing phone.</p>
<p>After a sleeplessness night and a lot of web researching, I settled on using <a href="http://www.x10.com/">X10</a> to control lamp states. X10 has a reasonably priced <a href="http://www.x10.com/automation/firecracker.htm">&#8220;Firecracker&#8221;</a> kit, and as awful as their website is, this seemed to be the best bet. A serial-port driven wireless interface that can control any X10 device? Sounds great! My only hesitation was the lack of documentation on interfacing with the firecracker. I was worried that it would be some complex propriatary protocol that would take forever to reverse engineer. After doing a little more research, I came across two very encouraging blog/web posts that convinced me to go for it! <a href="http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi/Monitor/Devices/BubbleBubbleBuildsInTrouble.rdoc">Bubble, Bubble, Build&#8217;s In Trouble</a> at <a href="http://www.pragmaticautomation.com/cgi-bin/pragauto.cgi">Pragmatic Automation</a>, as well as a blog post by <a href="http://pluralsight.com/blogs/craig/">Craig Andera</a> called <a href="http://pluralsight.com/blogs/craig/archive/2005/01/24/5386.aspx">Build Lights</a> (<a href="http://pluralsight.com/wiki/default.aspx/Craig.BuildLightsCode">wiki page with his source code</a>). We were definitely thinking along the same lines! And Craig showed me the light in pointing to the ActiveHome SDK that offers an easy-to-use API for the X10 Firecracker.</p>
<p>I purchased the X10 kit on eBay (saved 10 bucks), and began writing my plugin. A day or 3 later, my unit showed up, and my plugin was ready for testing. Funny thing was, though, that it didn&#8217;t work. Big Disappointment #1: I was using the approach taken by Craig (using the ActiveHome SDK) and the call to the provided dll was tanking. As it turns out, I just didn&#8217;t read the documentation thoroughly enough at the outset. The ActiveHome SDK requires that the ActiveHome software be installed on the computer. Not only does the software cost $50/pop, but when you&#8217;re writing a plugin that with the flick of a keyboard can be installed to all the users in an enterprise, requiring an extra 3rd party application just, well, sucks. It makes sense for Windows Messenger, or Outlook, but in this case my requirements (generated by myself) were that people could plug in the firecracker dongle and get cracking, no special software required.<br />
After a little more investigation, I saw that the Pragmatic folks didn&#8217;t use the same X10 interface that Craig used. Their software was written in Java, and used a freely available Java Firecracker API (<a href="http://www.micheldalal.com/sw/java/x10/">thanks to Michel Dalal</a>&#8211;credit goes to him for my C# port of his logic). Now we&#8217;re getting somewhere! I cleaned up my spilt milk, stopped crying, and began porting the Java API into C#. Big Disappointment #2: the .NET Framework (v1.1 and earlier) doesn&#8217;t offer an easy way to control your serial port. I had hoped it would be as easy as Java where you specify a port and say .open(). However, some more searching on the web revealed that while 95% of the information about serial ports and .NET included the statement &#8220;Use .NET 2.0&#8243;, somebody from the remaining 5% had created some classes (in C#&#8211;I don&#8217;t like porting VB.NET to C# if I can help it) that used P/Invoke to talk with the serial port. Back in business again! This time, to avoid as much trouble as possible, I stripped out all the wonderful functionality of those serial port classes and left the bare minimum that I needed. I called it &#8220;SimpleSerialPort&#8221;. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8212; You see, the Firecracker device/dongle does not communicate over standard serial port protocols. It watches the RTS/DTR pins for it&#8217;s signal and power.</p>
<p>Anyway, to make a long post only a little bit longer, it worked! A few bucks more at Target snagged me an &#8220;ON AIR&#8221; light (that says &#8220;Applause&#8221; on the other side&#8211;fairly appropriate) and another simple base with bright red bulb. Now when my phone rings, out in the hallway the red bulb glows with an evil look. When I am on the phone, the ON AIR light switches on and warms me up with the residual heat! It&#8217;s great! I&#8217;ll try to post a picture soon, if I can.</p>
<p>I am planning on posting the code for both the simple serial port and the Firecracker API soon. I&#8217;d also like to add dimming capability to the Firecracker control, and make the code generally a little cleaner. Once I have those posted, you should be good to go to control X10 devices from whatever application you want!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2005/09/26/x10-ified/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
