<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Aaron Lerch</title>
	
	<link>http://www.aaronlerch.com/blog</link>
	<description />
	<lastBuildDate>Wed, 13 Feb 2013 04:00:56 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/aaronlerch" /><feedburner:info uri="aaronlerch" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>39.866913</geo:lat><geo:long>-86.123236</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by/2.5/</creativeCommons:license><item>
		<title>Why I Love You</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/0wFPYb4S2Pg/</link>
		<comments>http://www.aaronlerch.com/blog/2013/02/12/why-i-love-you/#comments</comments>
		<pubDate>Wed, 13 Feb 2013 03:36:25 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=298</guid>
		<description><![CDATA[Say what? Why do I love you? You probably read the title and thought this was going to be a mushy pre-Valentine&#8217;s Day post about how much I love you all, right? Well, it&#8217;s true that I love you &#8211; I do, really &#8211; but sorry to say that&#8217;s not it. I&#8217;m talking about a [...]]]></description>
				<content:encoded><![CDATA[<p>Say what? Why do I love you? You probably read the title and thought this was going to be a mushy pre-Valentine&#8217;s Day post about how much I love you all, right? Well, it&#8217;s true that I love you &#8211; I do, really &#8211; but sorry to say that&#8217;s not it.</p>
<p>I&#8217;m talking about a new venture that my friends <a href="https://twitter.com/dhosei" title="@dhosei" target="_blank">@dhosei</a>, <a href="https://twitter.com/bobmattax" title="@bobmattax" target="_blank">@bobmattax</a>, <a href="https://twitter.com/thisispeter" title="@thisispeter" target="_blank">@thisispeter</a>, and I launched a few days ago: <a href="http://whyiloveyou.co/" title="http://whyiloveyou.co/" target="_blank">http://whyiloveyou.co/</a></p>
<div id="attachment_300" class="wp-caption alignnone" style="width: 716px"><a href="http://www.aaronlerch.com/blog/wp-content/uploads/2013/02/why-i-love-you.png"><img src="http://www.aaronlerch.com/blog/wp-content/uploads/2013/02/why-i-love-you.png" alt="http://whyiloveyou.co/" width="706" class="size-full wp-image-300" /></a><p class="wp-caption-text">http://whyiloveyou.co/</p></div>
<p>A long while back, David came to me with an idea. He wanted to be able to queue up and send text messages (SMS) to his wife with short reasons why he loves her. Awww, what a thoughtful guy! But he, like most of us, can be forgetful and he didn&#8217;t want to have to remember to send the message every day. It&#8217;s not that he doesn&#8217;t love her, or the messages he sends aren&#8217;t sincere, he can just be forgetful sometimes &#8211; which is why his idea resonated with me. I&#8217;m really forgetful. And what&#8217;s the solution to our communal forgetfulness?</p>
<p>Automation.</p>
<p>Computers never forget. They&#8217;re like really lightweight and less-gassy elephants.</p>
<p>Always always automate those repeated tasks! <a href="http://secretgeek.net/" title="secretgeek" target="_blank">Leon Bambrick</a> has a great &#8220;Should I automate it?&#8221; calculator &#8211; <a href="http://nimbletext.com/automate" title="Should I Automate It?" target="_blank">http://nimbletext.com/automate</a>.</p>
<p>David wanted something he could queue up messages in and then let them stream out slowly over time, once per day. Like <a href="http://bufferapp.com/" title="Buffer" target="_blank">Buffer</a>, but for sweet sweet love.</p>
<p>I like buffering sweet sweet love. I was in. David and I worked on the initial version of the site, but with my schedule I wasn&#8217;t able to get it to a point where we were comfortable putting it out there for public use. In the meantime though, we used it, and it worked great &#8211; our wives were happy! Then a few months ago, we talked with Bob and Peter (aka <a href="http://www.remorastudio.com/" title="Remora Studio" target="_blank">Remora Studio</a>) about joining us and helping us finish off an initial version and they were in too. Perhaps they&#8217;re as forgetful as us. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Whether they&#8217;re forgetful or not (they don&#8217;t seem to be) they are a pretty amazing couple of guys. The code &#038; design that went into the site was very impressive &#8211; I had a blast just coming along for the ride and watching and learning.</p>
<p>But anyway, the point is that now it&#8217;s live &#8211; <a href="http://whyiloveyou.co/" title="http://whyiloveyou.co/" target="_blank">http://whyiloveyou.co/</a>. You can queue up short SMS or email messages to send to your loved one throughout the year! There&#8217;s a 30-day free trial for everyone, so really there&#8217;s no reason not to give it a shot. And it&#8217;s dirt cheap anyway. I&#8217;d personally love to hear your feedback, so please sign up and email me at aaronlerch at gmail with any thoughts or feedback.</p>
<p>And of course, here&#8217;s the disclaimer:</p>
<p>I first heard the quote from <a href="https://twitter.com/jsnover" title="@jsnover" target="_blank">@jsnover</a>: &#8220;To ship is to choose.&#8221; What a great quote; it&#8217;s so true. And it&#8217;s especially true for <a href="http://whyiloveyou.co/" title="http://whyiloveyou.co/" target="_blank">http://whyiloveyou.co/</a>. We&#8217;ve got a laundry list of features to implement, and more importantly, improvements to make. We want to walk down that road with our users. The first users to sign up for a service are special people. They care, they understand, and they are engaged. We love those folks. We want those folks. (I, selfishly, want YOU to be one of those folks.)</p>
<p>For example, right now our sign-up process can be confusing. &#8220;When does my free trial start? I signed up, but it says I need to subscribe?&#8221; Yep, we hear you &#8211; we have some work to do there, and we&#8217;re doing it. We need folks to participate with us in this early process.</p>
<p>And the best part of all: Valentine&#8217;s Day is only 2 days away &#8211; so it&#8217;s the <em>perfect</em> time to sign up and try out the site. Don&#8217;t give Hallmark any more of your money. Spend the equivalent of one card per month with us, and send something awesome every single day. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=0wFPYb4S2Pg:u5xCTXpXNSo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=0wFPYb4S2Pg:u5xCTXpXNSo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=0wFPYb4S2Pg:u5xCTXpXNSo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=0wFPYb4S2Pg:u5xCTXpXNSo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=0wFPYb4S2Pg:u5xCTXpXNSo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=0wFPYb4S2Pg:u5xCTXpXNSo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=0wFPYb4S2Pg:u5xCTXpXNSo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/0wFPYb4S2Pg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2013/02/12/why-i-love-you/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2013/02/12/why-i-love-you/</feedburner:origLink></item>
		<item>
		<title>Building breaktheicefor.me</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/Nf58RxZC7xE/</link>
		<comments>http://www.aaronlerch.com/blog/2012/08/09/building-breaktheicefor-me/#comments</comments>
		<pubDate>Thu, 09 Aug 2012 18:56:39 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=278</guid>
		<description><![CDATA[Sometimes I get these, well, hankerings. I get an idea for what usually is a stupid, silly thing, and I feel compelled to work on it. This past weekend I had another &#8220;episode&#8221; and the result is breaktheicefor.me. (Coming up with a domain name is hard! Why do I even try anymore. My next project [...]]]></description>
				<content:encoded><![CDATA[<p style="text-align: left;">Sometimes I get these, well, hankerings.</p>
<p style="text-align: left;">I get an idea for what usually is a stupid, silly thing, and I feel compelled to work on it. This past weekend I had another &#8220;episode&#8221; and the result is <a href="http://breaktheicefor.me/">breaktheicefor.me</a>. (Coming up with a domain name is hard! Why do I even try anymore. My next project will live at [latest git commit id].com &#8211; 4654bab.com)<br />
<a href="http://breaktheicefor.me"><img class="wp-image-280 aligncenter" title="breaktheicefor.me" src="http://www.aaronlerch.com/blog/wp-content/uploads/2012/08/breaktheiceforme-300x206.png" alt="Screenshot of breaktheicefor.me" width="400" height="275" /></a></p>
<p style="text-align: left;">I read about <a href="http://infospace.ischool.syr.edu/2012/08/03/beertext-us-10-hours-of-hacking-with-twilio-leads-to-thousands-of-users/">the beertext.us guys</a>, and their super-simple-yet-useful SMS-based app they put together that tells you about the beer you&#8217;re drinking. For some reason that I don&#8217;t recall I instantly thought about making something similar but for conversation starters. I was probably alone at the moment, wishing I was with a group of people, feeling sorry for myself.</p>
<p style="text-align: left;">Doing some quick searching showed:</p>
<ul>
<li>No existing SMS-based conversation starter services (that I could find)</li>
<li>A few iPhone and Android apps, some free, come that cost $</li>
<li>No public datasets to pull from</li>
</ul>
<p>I ignored the last two bullet points, focused on the first one, and said &#8220;Sweet. The world <em>needs this</em>. And it&#8217;s up to me to build it.&#8221;</p>
<h2>Step 1 &#8211; Get a number</h2>
<p>In the past, this would&#8217;ve been the hardest part of the app. Today, with services like <a href="http://www.twilio.com/">Twilio</a> it becomes the easiest.</p>
<p>Sign in to Twilio, purchase a number, and point it to your URL that handles voice or SMS. Bam. Done.</p>
<p><a href="http://www.aaronlerch.com/blog/wp-content/uploads/2012/08/twilio-config.png"><img class="size-full wp-image-282" title="Twilio configuration" src="http://www.aaronlerch.com/blog/wp-content/uploads/2012/08/twilio-config.png" alt="" width="702" height="74" /></a></p>
<h2>Step 2 &#8211; Spin up a Sinatra app on Heroku</h2>
<p>For small apps, or APIs, I freakin&#8217; love <a title="Sinatra" href="http://www.sinatrarb.com/">Sinatra</a>. Add <a title="Heroku" href="http://www.heroku.com/">Heroku</a> to the mix and you&#8217;ve got the closest thing to heaven a someone like me with only 30 minutes to spare can get. If you don&#8217;t know about them, google it, plenty of info out there.</p>
<h2>Step 3 &#8211; Hook up SMS</h2>
<p>I can&#8217;t emphasize to you how easy Twilio makes things. Seriously, they are one of my canonical references for a developer-friendly API. When you get an SMS, you can reply simply by returning a 200 response with Content-Type of text/plain, and the body is the response message. You can get fancier with it (using XML to send multiple response messages, etc.) but SERIOUSLY. That&#8217;s IT. When&#8217;s the last time an API was that easy to integrate with?</p>
<p>And no, I don&#8217;t work for Twilio, I don&#8217;t get paid by them, in fact I work for a <a title="Interactive Intelligence ROCKS!" href="http://www.inin.com/">different telephony company</a> so perhaps this is blasphemy. (Different market segments, different targets and audiences, so no big deal. I hope.)</p>
<h2>Step 4 &#8211; Stand up a single-page website</h2>
<p>Again, Sinatra, makin&#8217; things easy for me. Add something like <a title="Twitter Bootstrap" href="http://twitter.github.com/bootstrap/">Twitter&#8217;s Bootstrap</a> (or whatever other grid/typography framework you want), <a title="Google Web Fonts" href="http://www.google.com/webfonts/">Google&#8217;s Web Fonts</a> (for the love, people, at least customize bootstrap <em>a little</em>), a little jQuery form submit hooked into <a title="SendGrid" href="http://sendgrid.com/">SendGrid</a> email sending (database? What database?) and #! (<em>shebang!</em> I always thought that was a great way to start a file) you&#8217;ve got a <a title="breaktheicefor.me's homepage" href="http://breaktheicefor.me/">simple landing page</a>.</p>
<p>And that&#8217;s it! It&#8217;s taken me longer to write this post than it took for me to do steps 1-4. SERIOUSLY.</p>
<p>Then I published my app and made tons of cash from it.</p>
<p>Oh wait, except it has no actual <em>content</em>. Yeah, there&#8217;s that. Well, I said I&#8217;ll deal with it later &#8212; I did say that, didn&#8217;t I? &#8212; and now&#8217;s that time.</p>
<h2>Step 5 &#8211; Content</h2>
<p>When I was doing my initial quick-and-dirty research, I came across <a href="http://chatoms.com/">Chatoms</a>, an app by the good folks at <a href="http://iconoclastlabs.com/">Iconoclast Labs</a>. They even have a <a href="http://iconoclastlabs.com/cms/blog/posts/phonegap-vs-rubymotion">RubyMotion vs. PhoneGap smack-down</a> that creates&#8230; you guessed it&#8230; a mobile conversation stater app. And they have a curated dataset of ice breaker/conversation starters!</p>
<p>I reached out to them to talk about options, and they graciously agreed to give me their dataset. WOW. Talk about classy.</p>
<p>While we were communicating back and forth I remembered what my friend <a href="https://twitter.com/brandoncorbin">Brandon Corbin</a> told me once about his experiments with <a title="Mechanical Turk" href="https://www.mturk.com/">Amazon&#8217;s Mechanical Turk</a>. In a nutshell, Mechanical Turk is &#8220;artificial artificial intelligence&#8221; &#8211; it&#8217;s an interface (and an API) for automating tasks that are performed by humans.</p>
<p>So I signed up, funded my account with a few bucks, and set about creating a simple form people could use to submit an &#8220;Ice Breaker&#8221;. Here&#8217;s what I created, basically:</p>
<p><a href="http://www.aaronlerch.com/blog/wp-content/uploads/2012/08/mturk-form.png"><img class="alignnone size-full wp-image-283" title="Mechanical Turk Form" src="http://www.aaronlerch.com/blog/wp-content/uploads/2012/08/mturk-form.png" alt="" width="490" height="417" /></a></p>
<p>Pretty simple.</p>
<p>With Mechanical Turk, you can choose options regarding who&#8217;s allowed to perform the work (they have to have N-approved tasks in the past, etc. etc.) and you can choose how much you&#8217;ll pay per answer. I ran several tests with small numbers of people (2-5) at various price points and &#8220;quality&#8221; restrictions to see what gave me good bang for the buck, and I settled on 15 cents per answer. I threw a few dozen bucks at it, and ended up with a pretty nice sample of ice breakers.</p>
<p>Some were duds, for example some people <em>answered my example questions</em>. (Um, yeah, not so much. &#8220;yes, no, no, yes, yes&#8221;) but the nice thing about Mechanical Turk is that I get to accept or reject answers, and I only pay for what I accept.</p>
<p>So, now, I had some additional content &#8211; sweeeet.</p>
<h2>Step 6 &#8211; Profit!</h2>
<p>Okay, there is no profit to this. In fact, it costs me every time someone sends or receives a text message through this. But that&#8217;s a price I&#8217;m willing to pay, at least for the short term. If it becomes popular, which I pretty much guarantee it will, because <em>the world needs it</em>, then I&#8217;ll explore options. Until then, I hope you enjoy it.</p>
<p>Interestingly, I actually had a few opportunities to use it after I made it, and it actually. worked. Conversations were started. People talked and engaged. I grew hair back over my bald spot, and my runaway dog came back home. <del>I was shocked.</del> Of course I fully expected this.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=Nf58RxZC7xE:QsTuTYj1I6k:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=Nf58RxZC7xE:QsTuTYj1I6k:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=Nf58RxZC7xE:QsTuTYj1I6k:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=Nf58RxZC7xE:QsTuTYj1I6k:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=Nf58RxZC7xE:QsTuTYj1I6k:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=Nf58RxZC7xE:QsTuTYj1I6k:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=Nf58RxZC7xE:QsTuTYj1I6k:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/Nf58RxZC7xE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2012/08/09/building-breaktheicefor-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2012/08/09/building-breaktheicefor-me/</feedburner:origLink></item>
		<item>
		<title>Coderetreatin’</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/XA7JvrPWaSI/</link>
		<comments>http://www.aaronlerch.com/blog/2011/12/03/coderetreatin/#comments</comments>
		<pubDate>Sun, 04 Dec 2011 03:27:07 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[community]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=257</guid>
		<description><![CDATA[Today, the Global Day of Coderetreat came to Indianapolis. And it was great. 13 people chose to spend the whole day on Saturday, December 3rd, in the &#8220;common area&#8221; at Interactive Intelligence honing their skillz. By the way, I want to extend a huge thanks to Interactive Intelligence for providing the space, a catered lunch, [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.aaronlerch.com/blog/wp-content/uploads/2011/12/coderetreat-session-1.jpg"><img class="alignleft size-medium wp-image-258" title="Session 1 at Global Day of Coderetreat" src="http://www.aaronlerch.com/blog/wp-content/uploads/2011/12/coderetreat-session-1-300x224.jpg" alt="Session 1 at Global Day of Coderetreat" width="300" height="224" /></a>Today, the Global Day of Coderetreat came to Indianapolis. <em>And it was great.</em></p>
<p>13 people chose to spend the whole day on Saturday, December 3rd, in the &#8220;common area&#8221; at Interactive Intelligence honing their skillz.</p>
<p>By the way, I want to extend a huge <strong>thanks</strong> to Interactive Intelligence for providing the space, a catered lunch, and some breakfast! It was awesome!</p>
<p>This was my first coderetreat, not to mention the first one I&#8217;ve hosted and facilitated. I was trusting <a title="Corey Haines" href="http://coreyhaines.com/">Corey Haines&#8217;</a> experience when it came to the format, and I was very pleased with how it went. We did 6 45-minute sessions, each time pairing up and implementing Conway&#8217;s Game of Life. People used a wide variety of languages throughout the day: ruby, python, C#, java, javascript, even some C++.</p>
<p>Many of the people were new to practices like pairing, and TDD. We also got to explore a lot of design ideas and look at different ways to approach a problem. I really enjoyed being able to throw in various constraints during each session and then to see how it affected the approaches or designs that people came up with.</p>
<p>Overall, I got very positive feedback &#8211; it really seemed like a valuable day for everybody, for a wide variety of reasons. By far, people said that the pairing and the <a title="Ping Pong Programming" href="http://c2.com/cgi/wiki?PairProgrammingPingPongPattern">ping/pong TDD</a> were the most enlightening aspects of the day. It was great to have a structured and guided environment for people to explore those concepts that can otherwise be difficult to dig into ad-hoc.</p>
<p>Other things people learned or enjoyed were designing with the <a title="Tell, Don't Ask" href="http://pragprog.com/articles/tell-dont-ask">Tell, Don&#8217;t Ask</a> approach, and getting exposed to some new languages.</p>
<p>Overall I think it was a huge success. Or at least, I was very pleased with how it went and how it seemed to affect people. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  People grew as software developers today! That&#8217;s awesome in and of itself. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Thanks to all who attended!!</p>
<p><a href="http://www.aaronlerch.com/blog/wp-content/uploads/2011/12/coderetreaters.jpg"><img class="alignleft size-medium wp-image-259" title="Coderetreaters" src="http://www.aaronlerch.com/blog/wp-content/uploads/2011/12/coderetreaters-300x224.jpg" alt="Coderetreaters" width="300" height="224" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=XA7JvrPWaSI:pWV006l3uoY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=XA7JvrPWaSI:pWV006l3uoY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=XA7JvrPWaSI:pWV006l3uoY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=XA7JvrPWaSI:pWV006l3uoY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=XA7JvrPWaSI:pWV006l3uoY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=XA7JvrPWaSI:pWV006l3uoY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=XA7JvrPWaSI:pWV006l3uoY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/XA7JvrPWaSI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2011/12/03/coderetreatin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2011/12/03/coderetreatin/</feedburner:origLink></item>
		<item>
		<title>Global Day of Coderetreat in Indianapolis</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/SZZTLGlf6oA/</link>
		<comments>http://www.aaronlerch.com/blog/2011/11/10/global-day-of-coderetreat-in-indianapolis/#comments</comments>
		<pubDate>Fri, 11 Nov 2011 01:52:28 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=251</guid>
		<description><![CDATA[I recently came across this thing called a &#8220;coderetreat&#8221; that Corey Haines puts on. The gist is that it&#8217;s a free full-day event where a small group of dedicated-but-busy software developers can come together and work on honing the skill or art of writing software, away from the usual pressures of business. I thought it sounded [...]]]></description>
				<content:encoded><![CDATA[<p>I recently came across this thing called a &#8220;<a title="Coderetreat" href="http://coderetreat.com/" target="_blank">coderetreat</a>&#8221; that <a title="Tweets by Corey" href="https://twitter.com/coreyhaines" target="_blank">Corey Haines</a> puts on. The gist is that it&#8217;s a free full-day event where a small group of dedicated-but-busy software developers can come together and work on honing the skill or art of writing software, away from the usual pressures of business.</p>
<p>I thought it sounded awesome. I have yet to attend a developer event that was comprised primarily of the attendees coding, with the possible exception of some <a title="Codemash - a fantastic conference! I'm going this year, are you?" href="http://codemash.org/" target="_blank">codemash</a> sessions.</p>
<p>Then I saw something about a &#8220;Global Day of Coderetreat&#8221; &#8212; coderetreats organized to occur all around the world on the same day: December 3rd.</p>
<p>And I noticed that Indianapolis was <strong>not</strong> on the list.</p>
<p><em>That simply won&#8217;t do.</em></p>
<p><strong>So I&#8217;m happy to announce that Indianapolis is going to participate in the Global Day of Coderetreat!</strong> My employer <a title="Interactive Intelligence" href="http://www.inin.com/" target="_blank">Interactive Intelligence</a> (I contend it&#8217;s the best place to work in the midwest) has agreed to sponsor the entire event by providing a great space to meet and a <em>free catered lunch! </em>Check out these pics of our <a title="Our offices" href="https://www.facebook.com/media/set/?set=a.10150280912742721.326964.87805467720&amp;type=1" target="_blank">offices</a> and <a title="Interactive Cafe" href="https://www.facebook.com/media/set/?set=a.10150280879662721.326950.87805467720&amp;type=1" target="_blank">in-house cafe</a> on facebook.</p>
<p>You&#8217;re probably asking,</p>
<blockquote><p>&#8220;Okay, so what&#8217;s a coderetreat anyway?&#8221;</p></blockquote>
<p>I&#8217;ll talk about what ours is on December 3rd. I&#8217;ve opened it up to 26 people. (I said it was a small group&#8230;) You can see more information on the structure <a title="Coderetreat agenda" href="http://coderetreat.com/facilitation.html" target="_blank">here</a>, but the gist is that there is some meet &amp; greet time at the start, an intro, then 5 to 6 sessions (with a long lunch in the middle) of dividing up into pairs and tackling a problem (same problem all day). After each session, we <em>delete</em> all our code, switch pairs, and start over again, but working to grow our designs, and explore alternatives and practices like TDD. This is language agnostic, we just try to make sure each pair knows the same language (regardless of proficiency level.) Then there&#8217;s a wrap-up and whoever wants heads out for a beer. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>And did I mention it&#8217;s all free?</p>
<p>Sound good to you?</p>
<p>Yes? Me too!</p>
<p>See below for ticket info. I want to point out something first, though. With only 26 slots, I want to avoid it filling up quickly with people who won&#8217;t show up. So I&#8217;m charging $5 to attend. <em>If you attend, you will get a full refund</em>, or you can opt to donate your $5 to the <a title="Interactive Intelligence Foundation" href="http://www.inin.com/foundation/" target="_blank">Interactive Intelligence Foundation</a> &#8211; a great not-for-profit that helps at-risk youth, especially with technology education.</p>
<p><strong>You can get a ticket at <a href="http://coderetreatindy.eventbrite.com/" target="_blank">http://coderetreatindy.eventbrite.com/</a></strong></p>
<p>Any questions? Tweet to me at <a title="Mah tweets." href="http://twitter.com/aaronlerch" target="_blank">@aaronlerch</a> or email me at aaronlerch at gmail</p>
<p>Hope to see you on the 3rd!!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=SZZTLGlf6oA:7vFXiPYPmbw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=SZZTLGlf6oA:7vFXiPYPmbw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=SZZTLGlf6oA:7vFXiPYPmbw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=SZZTLGlf6oA:7vFXiPYPmbw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=SZZTLGlf6oA:7vFXiPYPmbw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=SZZTLGlf6oA:7vFXiPYPmbw:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=SZZTLGlf6oA:7vFXiPYPmbw:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/SZZTLGlf6oA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2011/11/10/global-day-of-coderetreat-in-indianapolis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2011/11/10/global-day-of-coderetreat-in-indianapolis/</feedburner:origLink></item>
		<item>
		<title>talkasaur.us – dirt simple conference calling</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/eO7Rw34Zalw/</link>
		<comments>http://www.aaronlerch.com/blog/2011/08/08/talkasaur-us-dirt-simple-conference-calling/#comments</comments>
		<pubDate>Mon, 08 Aug 2011 06:35:31 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[heroku]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=248</guid>
		<description><![CDATA[Both at work and &#8220;for fun&#8221;, I&#8217;ve used join.me for any simple screen sharing needs. I remember the first time I used it. It was simple, and it just worked. You download a small app to share your screen, and everybody else visits a URL and gets instant in-browser viewing. Let me emphasize the key [...]]]></description>
				<content:encoded><![CDATA[<p>Both at work and &#8220;for fun&#8221;, I&#8217;ve used <a href="http://join.me/">join.me</a> for any simple screen sharing needs. I remember the first time I used it. It was simple, and it <em>just worked</em>. You download a small app to share your screen, and everybody else visits a URL and gets instant in-browser viewing.</p>
<p>Let me emphasize the key points in case they were missed. It was <em>simple</em>, and it <em>just worked</em>.</p>
<p>The 19th century French novelist George Sand once said, &#8220;Simplicity is the most difficult thing to secure in this world; it is the last limit of experience and the last effort of genius.&#8221;</p>
<p>This is clearly a gentleman who coded against the <a href="http://stackoverflow.com/questions/4952154/what-is-the-best-way-to-deal-with-kludgy-interface-hierarchies-mshtml">MSHTML library</a>. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I would say I was kidding, except that I&#8217;m pretty sure MSHTML was around in the 1800s.</p>
<p>When I saw that <a href="http://twilio.com/">Twilio</a> announced that they released an in-browser soft phone and started a 2-week contest around it, I decided to create a simple in-browser ad-hoc conference call tool. My mind immediately went to join.me&#8217;s simplicity and just-work-edness. Imitation is the sincerest form of flattery, and with <a href="http://talkasaur.us/">talkasaur.us</a> I am seriously flattering join.me. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>There have been a few situations in recent memory where having a tool like <a href="http://talkasaur.us/">talkasaur.us</a> would have been useful:</p>
<ol>
<li>Scott Hanselman wanted to record a group conference call for an episode of his podcast. I think they went through at least 3-5 different services before settling on something, and if I recall correctly (and I probably don&#8217;t) even that service wasn&#8217;t very satisfactory.</li>
<li>Every group video chat I&#8217;ve done (which has not been many, admittedly) has ended up requiring me to a) put on clothes, and b) create an account or sign in with an existing account like twitter or facebook. When authentication gets added to the mix, simplicity decreases. Here&#8217;s a chart to illustrate, because <em>data doesn&#8217;t lie</em>:<br />
<img src="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus-complexity-authentication.png" border="0" alt="" /></li>
</ol>
<p>So thus I decided to pick a <em>horrible time</em>, personally, to spend time on this idea of <a href="http://talkasaur.us/">talkasaur.us</a> &#8211; the name of which was conceived at 3AM in a state of delirium and because I&#8217;ve always been fond of any &#8220;*saur.us&#8221; domain for some reason.</p>
<p>The result is &#8220;Iteration Zero&#8221; &#8211; enough to submit my app to the Twilio contest, and test out the waters of interest. It works like this. The homepage gives you two choices: start or join.</p>
<p><a href="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_home_screen.png" target="_blank"><img src="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_home_screen.png" border="0" alt="" width="400" /></a></p>
<p>When you start or join a conference, you get a view that shows you a few things:</p>
<ul>
<li>The current status (&#8220;connected&#8221;, &#8220;disconnected&#8221;, etc.)</li>
<li>Sharing options &#8211; you need to invite people to your call, otherwise you could save yourself the time and just talk to the mirror.</li>
<li>Actions &#8211; currently only muting and leaving the conference call (watch this space, though!)</li>
<li>Participants &#8211; a realtime list, see who&#8217;s on the call, change your name, etc.</li>
</ul>
<p><a href="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_in_conference.png" target="_blank"><img src="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_in_conference.png" border="0" alt="" width="400" /></a></p>
<p>When you leave the conference, you get a single call to action: start a new conference again.</p>
<p><a href="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_conference_over.png" target="_blank"><img src="https://s3.amazonaws.com/aaronlerch.com/images/talkasaurus_conference_over.png" border="0" alt="" width="400" /></a></p>
<p>Bam. That&#8217;s it! Of course I can already think of features to add, and the list keeps on growing:</p>
<ul>
<li>Moderation tools: first person in gets the ability to mute others, kick them out, etc.</li>
<li>Additional information: because the participant list is updated in realtime, we can display more information such as whether they are muted or not, and (if Twilio can implement <a href="http://getsatisfaction.com/twilio/topics/additional_event_on_the_twilio_client_connection_api">my suggestion</a>) even see who is currently speaking.</li>
<li>Call recording/archiving</li>
<li>External number integration &#8211; not excited about this, but it&#8217;s a possibility.</li>
<li>etc</li>
</ul>
<p>The whole thing about my idea is that it isn&#8217;t <strong>brand new</strong>, but it&#8217;s applying the discipline of keeping things simple and coming out with a better product.</p>
<p>And, because this is my tech blog, I&#8217;ll just do a quick list of the technologies I built this site on. <a href="http://www.ruby-lang.org/en/">Ruby</a>, <a href="http://www.sinatrarb.com/">sinatra</a>, <a href="http://www.heroku.com/">heroku</a>, <a href="http://www.mongodb.org/">mongodb</a> (via <a href="http://mongoid.org/">mongoid</a>), <a href="http://jquery.com/">jquery</a>, and of course, <a href="http://www.twilio.com/api/client">twilio</a>. Let me just say, for a simple app like this, these tools were a <em>joy</em> to use, even if I did spend the majority of the time fighting battles with them.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=eO7Rw34Zalw:aEo5rzYxcgI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=eO7Rw34Zalw:aEo5rzYxcgI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=eO7Rw34Zalw:aEo5rzYxcgI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=eO7Rw34Zalw:aEo5rzYxcgI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=eO7Rw34Zalw:aEo5rzYxcgI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=eO7Rw34Zalw:aEo5rzYxcgI:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=eO7Rw34Zalw:aEo5rzYxcgI:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/eO7Rw34Zalw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2011/08/08/talkasaur-us-dirt-simple-conference-calling/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2011/08/08/talkasaur-us-dirt-simple-conference-calling/</feedburner:origLink></item>
		<item>
		<title>How Talentopoly is Built</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/cLFhGjU9zOI/</link>
		<comments>http://www.aaronlerch.com/blog/2011/05/31/how-talentopoly-is-built/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 02:49:38 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=241</guid>
		<description><![CDATA[Today&#8217;s post is written by my guest and fellow Indianapolis-ite, Jared Brown. I asked Jared to guest post here because he has created an application using Ruby on Rails, Heroku, and a host of other bits and services that I&#8217;ve also been using to bootstrap my new business, beautifulsavings.com which I&#8217;ll post more about in [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://talentopoly.com/"><img src="http://www.aaronlerch.com/blog/wp-content/uploads/2011/05/T-Icon-vector.png" alt="Talentopoly" title="Talentopoly" width="200" height="200" class="alignright size-full wp-image-245" /></a>Today&#8217;s post is written by my guest and fellow Indianapolis-ite, <a href="http://twitter.com/jaredbrown">Jared Brown</a>. I asked Jared to guest post here because he has created an application using <a href="http://rubyonrails.org/">Ruby on Rails</a>, <a href="http://www.heroku.com/">Heroku</a>, and a host of other bits and services that I&#8217;ve also been using to bootstrap my new business, <a href="http://beautifulsavings.com/">beautifulsavings.com</a> which I&#8217;ll post more about in the near future. He&#8217;s done a fantastic job with Talentopoly, and he&#8217;s a developer I respect. Talentopoly is on my short-list when it comes to finding useful tidbits to expand my tech horizons. <a href="http://talentopoly.com/users/402">Check out my profile here.</a></p>
<p><em>Jared Brown is the founder of <a href="http://talentopoly.com/">Talentopoly.com</a>, a community for programmers, designers, and IT professionals staying current by sharing the best of what they discover online.</em></p>
<p>I wanted to take a minute to give a glimpse into the platform Talentopoly is built on. A lot of this may not be familiar to non-Rails developers.</p>
<p>The site is hosted on Heroku. I use it for staging as well as production. To say Heroku makes deployment easy would be an understatement. To deploy Talentopoly all it takes is a quick &#8220;git push heroku&#8221; or &#8220;git push heroku-staging&#8221;. To setup your project is also one command.</p>
<p>The production server consists of two dynos (Heroku&#8217;s term for a virtual server unit) for a cost of $36/mo. This setup can handle dozens of concurrent users per minute. The site regularly peaks at 50 users and doesn&#8217;t break a sweat.</p>
<p>Add-ons are Heroku&#8217;s way of making it easier to integrate with other services. Often times no configuration is necessary when turning on an add-on.</p>
<p>My staging server mirrors production. It uses the same add-ons. The WebSolr folks were nice enough to setup a free staging instance. So the staging server is free. I populate staging with production data via Heroku&#8217;s handy PostgreSQL commands.</p>
<p>Heroku uses nginx as the http server acting as a cache store and reverse proxy. nginx is written in C and super fast. Behind nginx are a load-balanced cluster of Thin servers (modified Mongrel servers) running the application stack. Heroku is constantly monitoring the health of the dynes and will spin up new ones to replace hung processes if necessary.</p>
<p>Other than Heroku non of these things are exclusive to Ruby on Rails developers. The following services help make my life easy.</p>
<p>Search is provided by WebSolr and the excellent Solr search engine. Search is configured on a per-model basis. Only a few lines of code are responsible for making the models searchable. It provides geospatial search as well as full text search. Unlike Sphinx Solr doesn&#8217;t rely on fragment indexes. Everything is handled transparently. When new records are added or destroyed the index is updated. WebSolr costs $20/mo. for 75k documents.</p>
<p>The database is a shared PostgreSQL instance on Heroku. It performs well under load. There are other options such as Amazon&#8217;s RDS but for simplicity of deployment I have stuck with Heroku&#8217;s native solution.</p>
<p>SendGrid handles all the outgoing email. It&#8217;s accomplished via a SMTP gateway, which saved time over using their API.</p>
<p>S3 handles user uploaded image assets via the awesome paperclip gem. Paperclip re-sizes and stores the images on S3.</p>
<p>Scribd is used to store and convert uploaded resumes. This is why Talentopoly can accept and properly display so many different file formats.</p>
<p>New Relic is also provided as an add-on. It&#8217;s invaluable for investigating bottlenecks. It provides a breakdown of the request stack tracing it through the database.</p>
<p>Chartbeat provides real-time analytics and alerts. I can see how many concurrent users I have on the site, which is useful if it&#8217;s seeming slow. Google Analytics gives me the full stats to analyze.</p>
<p>I haven&#8217;t had a strong need to implement an in-memory key-value store like Mongo, Memcached, or Redis yet. Though hopefully the increasing traffic on the site makes that a priority soon.</p>
<p>There are other great services, gems, and plug-ins I could talk about but hopefully that gives you a sense for how Talentopoly is built and what it&#8217;s like to build a Ruby on Rails app on Heroku.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=cLFhGjU9zOI:FRa68xvAmnY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=cLFhGjU9zOI:FRa68xvAmnY:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=cLFhGjU9zOI:FRa68xvAmnY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=cLFhGjU9zOI:FRa68xvAmnY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=cLFhGjU9zOI:FRa68xvAmnY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=cLFhGjU9zOI:FRa68xvAmnY:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=cLFhGjU9zOI:FRa68xvAmnY:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/cLFhGjU9zOI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2011/05/31/how-talentopoly-is-built/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2011/05/31/how-talentopoly-is-built/</feedburner:origLink></item>
		<item>
		<title>Office Prank</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/MymqaoVGdSA/</link>
		<comments>http://www.aaronlerch.com/blog/2011/04/12/office-prank/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 21:47:31 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/?p=237</guid>
		<description><![CDATA[Every now and then we like to have some fun with our boss. I&#8217;ve said it before, and I&#8217;ll say it again &#8211; he&#8217;s a fun-loving guy and we all love working together. Usually when you go on vacation for a week you can expect something to happen by the time you get back. Not [...]]]></description>
				<content:encoded><![CDATA[<p>Every <a href="http://www.aaronlerch.com/blog/2006/10/31/office-pranks/">now</a> and <a href="http://www.aaronlerch.com/blog/2008/01/29/office-pranks-part-deux/">then</a> we like to have some fun with our boss. I&#8217;ve said it before, and I&#8217;ll say it again &#8211; he&#8217;s a fun-loving guy and we all love working together. Usually when you go on vacation for a week you can expect something to happen by the time you get back. Not too long ago I returned to find my office completely filled with black plastic. I mean it took 6 large garbage cans and a mini-dumpster, tightly packed, to remove it all.</p>
<p>We recently played yet another prank on my boss. This one probably takes the cake, and it was a ton of fun to pull off. We actually geeked out a bit and we had two hidden cameras, which were automatically recording any motion they saw, as well as live streaming their feeds via ustream.tv. I wrote an app that monitored the filesystem and when it detected a new motion-based recording, it <a href="http://twitter.com/themissingdoor">tweeted</a> a frame of the motion. I just subscribed to mobile notifications and I got an SMS with a link to a JPG file every time it detected movement over the weekend. Pretty easy monitoring system!</p>
<p>Check out the video of the prank. His reaction was priceless!<br />
We love to work hard and have a lot of fun at the same time. If this sounds like the kind of software company you&#8217;d like to work for, <a href="http://inin.jobs/">we&#8217;re hiring</a>! (Nobody asked me to post that, in case you wondered.)</p>
<p><object width="480" height="390"><param name="movie" value="http://www.youtube.com/v/qD8MhnQs588?fs=1&amp;hl=en_US&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/qD8MhnQs588?fs=1&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="390"></embed></object></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=MymqaoVGdSA:Zwhsi9dqh1g:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=MymqaoVGdSA:Zwhsi9dqh1g:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=MymqaoVGdSA:Zwhsi9dqh1g:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=MymqaoVGdSA:Zwhsi9dqh1g:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=MymqaoVGdSA:Zwhsi9dqh1g:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=MymqaoVGdSA:Zwhsi9dqh1g:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=MymqaoVGdSA:Zwhsi9dqh1g:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/MymqaoVGdSA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2011/04/12/office-prank/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2011/04/12/office-prank/</feedburner:origLink></item>
		<item>
		<title>The Developer’s Almanac</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/kJlHjgLkNJU/</link>
		<comments>http://www.aaronlerch.com/blog/2010/09/26/the-developers-almanac/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 11:16:57 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2010/09/26/the-developers-almanac/</guid>
		<description><![CDATA[If you haven’t heard Rob Conery’s excellent new podcast This Developer’s Life then you really owe it to yourself to listen. It’s well done, and very entertaining. Either way, Rob inspired me. Inspired me to, just like Rob, emulate a podcast that has influenced and touched me. Naturally, or more likely unnaturally, I chose The [...]]]></description>
				<content:encoded><![CDATA[<p>If you haven’t heard Rob Conery’s excellent new podcast <a href="http://thisdeveloperslife.com/">This Developer’s Life</a> then you really owe it to yourself to listen. It’s well done, and very entertaining.</p>
<p>Either way, Rob inspired me.</p>
<p>Inspired me to, just like Rob, emulate a podcast that has influenced and touched me.</p>
<p>Naturally, or more likely unnaturally, I chose <a href="http://writersalmanac.publicradio.org/">The Writer’s Almanac</a> which I typically hear on <a href="http://www.npr.org/">NPR</a> (National Public Radio, the public radio station in the United States). It seems to always be on when I’m driving to work and it’s like a seeing a train wreck, you don’t want to watch but you just can’t look away. Few things bore me more than listening to the voice of <a href="http://en.wikipedia.org/wiki/Garrison_Keillor">Garrison Keillor</a> reading, but I can’t seem to stop listening and turn it off.</p>
<p>The Writer’s Almanac has a short but repeatable format: a few minutes of “on this day in [xyz]” followed by the reading of a poem, followed by credits, and capped with “Be well, do good work, and keep in touch.” <a href="http://writersalmanac.publicradio.org/">If you’ve never heard it, give the most recent episode a listen before you keep reading, just so you’re familiar with the format. It only takes a few minutes.</a></p>
<p>So I dutifully copied that format but gave it a computing focus. Hope you enjoy.</p>
<p><a href="http://developersalmanac.com/post/1095128510/episode1"><strong>I give you, dear innocent reader, The Developer’s Almanac.</strong></a></p>
<p><em>Code well, do open source work, and tweet frequently.</em></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=kJlHjgLkNJU:TP4nuG1gUB0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=kJlHjgLkNJU:TP4nuG1gUB0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=kJlHjgLkNJU:TP4nuG1gUB0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=kJlHjgLkNJU:TP4nuG1gUB0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=kJlHjgLkNJU:TP4nuG1gUB0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=kJlHjgLkNJU:TP4nuG1gUB0:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=kJlHjgLkNJU:TP4nuG1gUB0:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/kJlHjgLkNJU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2010/09/26/the-developers-almanac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2010/09/26/the-developers-almanac/</feedburner:origLink></item>
		<item>
		<title>Analyzing Code with NDepend</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/9bystspDqaE/</link>
		<comments>http://www.aaronlerch.com/blog/2010/04/03/analyzing-code-with-ndepend/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 19:38:09 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[visualization]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2010/04/03/analyzing-code-with-ndepend/</guid>
		<description><![CDATA[Disclaimer: A long time ago, in a galaxy far away, I helped coordinate the Indy Code Camp. We gave away a few donated copies of NDepend as prizes, and while setting that up, Patrick Smacchia offered me a license if I’d be willing to write about my NDepend experiences on my blog. Having heard about [...]]]></description>
				<content:encoded><![CDATA[<blockquote><p><strong>Disclaimer:</strong> A long time ago, in a galaxy far away, I helped coordinate the <a title="Indy Code Camp" href="http://www.aaronlerch.com/blog/2008/03/05/indy-code-camp-door-prizes/">Indy Code Camp</a>. We gave away a few donated copies of <a title="NDepend" href="http://www.ndepend.com/">NDepend</a> as prizes, and while setting that up, <a href="http://codebetter.com/blogs/patricksmacchia/">Patrick Smacchia</a> offered me a license if I’d be willing to write about my NDepend experiences on my blog. Having <a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx">heard about NDepend</a> in the past, I happily took him up on it – making sure it was clear that I would write about my experience regardless of whether they were positive or negative. So this is a “sponsored” post, in that I received an NDepend license, but the license donation did not purchase any of the content of this post.</p>
</blockquote>
<p>An astute reader will probably look at the date that I helped with the Indy Code Camp and compare it to the date of this post, and figure out that it was about <em>two years ago</em> that Patrick asked me to evaluate NDepend. And I’m not so happy to say that in those two years, I really didn’t use it. But recently <a href="http://www.aaronlerch.com/blog/2010/04/03/staying-sane-as-a-technical-manager-part-2/">I have more time available to me</a> for doing specifically this sort of thing.</p>
<p>I think Scott Hanselman <a href="http://www.hanselman.com/blog/ExitingTheZoneOfPainStaticAnalysisWithNDepend.aspx">summed up the initial NDepend experience quite well</a>.</p>
<blockquote><p>Like PowerShell, the first 10 minutes of NDepend is the hardest. It has to click first. There&#8217;s the whole &quot;what the hell am I looking at&quot; process, often followed by the &quot;screw this&quot; declaration, followed by a quick uninstallation and a sense of &quot;what happened.&quot;</p>
</blockquote>
<p>I’m not going to do a comprehensive overview like Scott or others have done – at this point I just <em>can’t</em> do that as I’m still in kind of the “what the hell is this” phase. But it’s slowly beginning to click. For me, two things that click and help me continue on and work to understand this application.</p>
<p><strong>One</strong>, I know I need the information NDepend can give me. I may not understand it all immediately, but I’ve been deep in the code of some applications long enough to see <em>(and write)</em> the good, the bad, and the ugly. I need ways to root out the bad and ugly, without having to dive into all the code in-depth. I also need metrics to help show that the good really is good. Especially when you’re working on a team of several people, each with varying opinions and each who writes their own flavor of code. Just because I don’t like someone else’s code doesn’t mean it’s <em>bad code</em>. Metrics can help me separate my aesthetic or organizational concerns from real problems or smells. And then I can make them write it my way anyway. <img src='http://www.aaronlerch.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Two</strong>, and more fun than the first is NDepend’s Code Query Language or CQL. In my opinion, this is an easy “hook” to get someone to look closer at NDepend and get past that 10-minute hump. I have seen a developer’s face literally light up when they hear what CQL can do, especially if they’ve done any work with a database and SQL in the past.</p>
<p>NDepend’s website has the best <a href="http://ndepend.com/CQL.htm">documentation of CQL</a>, even if the docs feel overwhelming at first. There’s also some information about <a href="http://ndepend.com/ConstraintsExtractedFromCode.aspx">embedding CQL into your code</a> as in-line constraints that NDepend can enforce during your build, though as <a href="http://plaureano.blogspot.com/2009/07/ndepend-review.html">others have mentioned</a> it’s not a practical solution.</p>
<p>Of immediate interest to me, due to something I’m doing at <a href="http://www.inin.com/">work</a>, is catching breaking API changes that might accidentally happen during a maintenance release. Patrick covers how to do this <a href="http://codebetter.com/blogs/patricksmacchia/archive/2008/01/20/avoid-api-breaking-changes.aspx">here</a>. But as an example, let’s analyze the breaking API changes in <a href="http://github.com/structuremap/structuremap">StructureMap</a> between version 2.5.4 and 2.6.1.</p>
<blockquote><p><em>Note:</em> I got confused at first, because I put both versions of StructureMap into the same directory and renamed the files to include the version number. NDepend didn’t like this and flagged every single method as removed and added. I’m not sure what I did wrong, but it took a bit to figure out, and it sucks for situations where a version number (or a name change) might cause an assembly name not to match, even though it’s functionally the same.</p>
</blockquote>
<p>The first thing to do is select the two assemblies to compare – here I’m choosing StructureMap 2.5.4 on the left, and 2.6.1 on the right.</p>
<p><img src="http://s3.amazonaws.com:80/aaronlerch.com/images/ndepend/build-comparison.png" width="608" height="346" /></p>
<p>After the NDepend project has been created, I can press ALT+Q to bring up the CQL editor, and enter the following query:</p>
<blockquote><p>WARN IF Count &gt; 0 IN SELECT METHODS WHERE      <br />IsInOlderBuild AND IsPublic AND (VisibilityWasChanged OR WasRemoved)</p>
</blockquote>
<p>It reads pretty well, especially if you’re familiar with SQL. Literally it’s “warn me if methods exist that were in the older build, were public, and the visibility has changed or the method was removed.”</p>
<p>You can see below, 5 methods were “removed” from StructureMap’s public API – in this case, they are literally removed (and not just made internal or private). That means that upgrading from 2.5.4 to 2.6.1 could mean you have to change or recompile your code.</p>
<p><img src="http://s3.amazonaws.com:80/aaronlerch.com/images/ndepend/method-query-results.png" /></p>
<p>Likewise you can see that no public types were removed, thus no breaking change exists and the CQL query isn’t flagged as a warning.</p>
<p><img src="http://s3.amazonaws.com:80/aaronlerch.com/images/ndepend/type-query-results.png" /></p>
<p>This is some powerful stuff, and as I begin to incorporate it more and more into my daily workflow I’ll post about how I’m using it.</p>
</p>
<p>The newest version supports a console runner, a stand-alone GUI, and full integration into Visual Studio 2005, 2008, and 2010. For small projects that can exist within a single Visual Studio solution, it’s perfect. For larger projects that span multiple solutions, NDepend still allows you to analyze a set of assemblies, the UI is just embedded inside Visual Studio – and the integration is pretty usable for me so far.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=9bystspDqaE:hlRX2Pj3bH4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=9bystspDqaE:hlRX2Pj3bH4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=9bystspDqaE:hlRX2Pj3bH4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=9bystspDqaE:hlRX2Pj3bH4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=9bystspDqaE:hlRX2Pj3bH4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=9bystspDqaE:hlRX2Pj3bH4:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=9bystspDqaE:hlRX2Pj3bH4:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/9bystspDqaE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2010/04/03/analyzing-code-with-ndepend/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2010/04/03/analyzing-code-with-ndepend/</feedburner:origLink></item>
		<item>
		<title>Staying Sane as a Technical Manager, Part 2</title>
		<link>http://feedproxy.google.com/~r/aaronlerch/~3/vtAkA8HPhRA/</link>
		<comments>http://www.aaronlerch.com/blog/2010/04/03/staying-sane-as-a-technical-manager-part-2/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 18:18:51 +0000</pubDate>
		<dc:creator>aaron</dc:creator>
				<category><![CDATA[misc]]></category>

		<guid isPermaLink="false">http://www.aaronlerch.com/blog/2010/04/03/staying-sane-as-a-technical-manager-part-2/</guid>
		<description><![CDATA[A year and a half ago I wrote about the three little words that are critical for a Technical Manager to understand. Know your limits. As I look back over the past year and a half, plus the years leading up to it, I am more and more convinced that this is an extremely important [...]]]></description>
				<content:encoded><![CDATA[<p>A year and a half ago I <a href="http://www.aaronlerch.com/blog/2008/09/02/staying-sane-as-a-technical-manager/">wrote about</a> the three little words that are critical for a Technical Manager to understand.</p>
<blockquote><p>Know your limits.</p>
</blockquote>
<p>As I look back over the past year and a half, plus the years leading up to it, I am more and more convinced that this is an extremely important concept to put into practice.</p>
<p><img style="display: inline; margin-left: 0px; margin-right: 0px" align="right" src="http://s3.amazonaws.com:80/aaronlerch.com/images/juggle-balls.png" />Over the past year+, my team has almost doubled in size (plus an intern or two in the summers). We are all working on different features, but on the same (or similar) products, so we weren’t as “scattered” as we were before I split us up. However, juggling as many balls as we have, being an <a href="http://www.aaronlerch.com/blog/2008/04/20/from-developer-to-technical-manager/">effective technical manager</a> was becoming more and more difficult for me. Most specifically my organizational skills and managing priorities were lacking. I’ve been working hard to manage the team, manage priorities, <em>and</em> keep my technical chops because like at many software companies that started as a small start-up, the technical manager is implicitly expected to manage <em>and</em> be the technical expert.</p>
<p>Eventually I realized that this lifestyle is ultimately unsustainable, and I couldn’t see a light at the end of the tunnel. That’s bad for me, bad for my family, and bad for the company. I needed to recognize that I was moving well outside my limits. I had to make a decision: stop being a technical expert, and just be a true <a href="http://www.aaronlerch.com/blog/2008/04/20/from-developer-to-technical-manager/">technical manager</a>, or, stop being a manager and remain as a technical expert.</p>
<p>The decision wasn’t hard&#8230; I enjoy code way too much.</p>
<p>Ahhh, this feels so much better! Now I can focus on things that have long interested me but I just plain haven’t had time for. Like, for example, digging deep into <a href="http://www.ndepend.com/">NDepend</a> to help keep that 10,000 foot view of our products that I couldn’t do before.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/aaronlerch?a=vtAkA8HPhRA:X-498h_bZNo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=vtAkA8HPhRA:X-498h_bZNo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=vtAkA8HPhRA:X-498h_bZNo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/aaronlerch?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=vtAkA8HPhRA:X-498h_bZNo:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=vtAkA8HPhRA:X-498h_bZNo:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/aaronlerch?a=vtAkA8HPhRA:X-498h_bZNo:gIN9vFwOqvQ"><img src="http://feeds.feedburner.com/~ff/aaronlerch?i=vtAkA8HPhRA:X-498h_bZNo:gIN9vFwOqvQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/aaronlerch/~4/vtAkA8HPhRA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.aaronlerch.com/blog/2010/04/03/staying-sane-as-a-technical-manager-part-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.aaronlerch.com/blog/2010/04/03/staying-sane-as-a-technical-manager-part-2/</feedburner:origLink></item>
	</channel>
</rss>
