<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.1.3" -->
<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/"
	>

<channel>
	<title>Luke Melia</title>
	<link>http://www.lukemelia.com</link>
	<description>Thoughts from software developer from New York City who attempts to live every day with passion.</description>
	<pubDate>Mon, 19 May 2008 03:14:13 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.3</generator>
	<language>en</language>
			<item>
		<title>5 Tips for porting javascript from Prototype to jQuery</title>
		<link>http://www.lukemelia.com/blog/archives/2008/05/18/5-tips-for-porting-javascript-from-prototype-to-jquery/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/05/18/5-tips-for-porting-javascript-from-prototype-to-jquery/#comments</comments>
		<pubDate>Mon, 19 May 2008 03:04:45 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/05/18/5-tips-for-porting-javascript-from-prototype-to-jquery/</guid>
		<description><![CDATA[I've been really enjoying working with jQuery and the pattern of progressive enhancement.
But I haven't been enjoying supporting both Prototype/script.aculo.us and jQuery on in the same web app. It felt downright wrong to make my visitors download all that javascript.
So, this weekend, I set out to eliminate the last of the public-facing prototype-dependent code from [...]]]></description>
			<content:encoded><![CDATA[<p>I've been really enjoying working with <a href="http://jquery.com/">jQuery</a> and the pattern of <a href="http://en.wikipedia.org/wiki/Progressive_Enhancement">progressive enhancement</a>.</p>
<p>But I haven't been enjoying supporting both <a href="http://www.prototypejs.org/">Prototype</a>/<a href="http://script.aculo.us/">script.aculo.us</a> and jQuery on in the same web app. It felt downright wrong to make my visitors download all that javascript.</p>
<p>So, this weekend, I set out to eliminate the last of the public-facing prototype-dependent code from <a href="http://www.weplay.com/">weplay</a> and gained some peace of mind along with a 50% reduction in javascript bytes required for the fattest page.</p>
<p>Here are a few tips based on my experience so far:</p>
<ol id="tips">
<li><strong>Grab your inheritance.</strong> For porting components that rely on Prototype's <a href="http://www.prototypejs.org/api/class/create">Class.create</a> mechanism, the most straightforward path is to leverage a jQuery-native implementation of the same concept. I used <a href="http://github.com/danwrong/low-pro-for-jquery/tree/master/src/lowpro.jquery.js">Dan Webb's $.klass code from his jQuery version of LowPro</a>. I also came across the <a href="http://code.google.com/p/jquery-klass/">jquery-klass project</a>, which looks like it would do the job.
<p>It feels a little dirty to bring Prototype's inheritance-based OO approach into jQuery -- the jQuery philosophy is more about embracing the prototype-based OO baked into the language. As part of a porting effort, though, I think this approach makes sense, at least for a step.
</li>
<li><strong>Firebug is your friend.</strong> After I addressed the Class.create challenge, my approach was basically to repeatedly load the page in the Firefox and fix the first error that Firebug reported. By the time I worked through them all, dealing with a few remaining IE-specific issues was not too bad.
</li>
<li><strong>Enjoy watching the code shrink.</strong> Here's a bit of code before and after the port...
<p>Before:</p>
<div class="igBar"><span id="ljavascript-3"><a href="#" onclick="javascript:showPlainTxt('javascript-3'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-3">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow = document.<span style="color: #006600;">createElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'img'</span><span style="color: #66cc66;">&#41;</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">border</span> = <span style="color: #CC0000;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">className</span> = <span style="color: #3366CC;">'color_picker_arrow'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">src</span> = <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">settings</span>.<span style="color: #006600;">arrowImage</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">margin</span> = <span style="color: #CC0000;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">padding</span> = <span style="color: #CC0000;color:#800000;">0</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">style</span>.<span style="color: #006600;">position</span> = <span style="color: #3366CC;">'absolute'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">style</span>.<span style="color: #006600;">top</span> = <span style="color: #3366CC;">'0px'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">style</span>.<span style="color: #006600;">left</span> = <span style="color: #3366CC;">'0px'</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow.<span style="color: #006600;">style</span>.<span style="color: #006600;">zIndex</span> = <span style="color: #CC0000;color:#800000;">10000</span>;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">document.<span style="color: #006600;">body</span>.<span style="color: #006600;">appendChild</span><span style="color: #66cc66;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>._arrow<span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p>After:</p>
<div class="igBar"><span id="ljavascript-4"><a href="#" onclick="javascript:showPlainTxt('javascript-4'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">JAVASCRIPT:</span>
<div id="javascript-4">
<div class="javascript">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color: #000066; font-weight: bold;">this</span>._arrow = jQuery<span style="color: #66cc66;">&#40;</span>document.<span style="color: #006600;">createElement</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'img'</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span style="color: #006600;">attr</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>border: <span style="color: #CC0000;color:#800000;">0</span>, src: <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #006600;">settings</span>.<span style="color: #006600;">arrowImage</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span style="color: #006600;">addClass</span><span style="color: #66cc66;">&#40;</span><span style="color: #3366CC;">'color_picker_arrow'</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span style="color: #006600;">css</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#123;</span>margin:<span style="color: #CC0000;color:#800000;">0</span>, padding:<span style="color: #CC0000;color:#800000;">0</span>, position:<span style="color: #3366CC;">'absolute'</span>, top:<span style="color: #CC0000;color:#800000;">0</span>, left:<span style="color: #CC0000;color:#800000;">0</span>, zIndex:<span style="color: #CC0000;color:#800000;">10000</span><span style="color: #66cc66;">&#125;</span><span style="color: #66cc66;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .<span style="color: #006600;">appendTo</span><span style="color: #66cc66;">&#40;</span>document.<span style="color: #006600;">body</span><span style="color: #66cc66;">&#41;</span>; </div>
</li>
</ol>
</div>
</div>
</div>
<p>
</li>
<li><strong>Grok the jQuery event model.</strong> jQuery has excellent support for working with events, but it is different from Prototype's. In particular, Prototype's <a href="http://www.prototypejs.org/api/function/bindAsEventListener">bindAsEventListener</a> method, which changes what this refers to in your event handler, is nowhere to be found. Figure out how to use closure to attain the same thing and revel in jQuery's simpler approach to "this".
</li>
<li><strong>Consider jRails.</strong> If you're working in Rails and using the link_to_remote methods, consider <a href="http://ennerchi.com/projects/jrails">jRails</a> as a stop-gap measure to help you show Prototype the door. I say "stop-gap" because link_to_remote does not produce unobtrusive javascript and does not tend to support real progressive enhancement.
</li>
<li><em>Bonus Tip:</em> <strong>Learn to write jQuery plugins.</strong> While not strictly required by my porting efforts, I wrote a few plugins along the way to help out. Writing a plugin sounds like it could be a big deal, but <a href="http://docs.jquery.com/Plugins/Authoring">writing a jQuery plugin</a> is very straightforward, and it's an addictive way to package up functionality as well as get more comfortable with the jQuery philosophy.
</li>
</ol>
<p>Good luck, and share your porting stories!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/05/18/5-tips-for-porting-javascript-from-prototype-to-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>GoRuCo 2008</title>
		<link>http://www.lukemelia.com/blog/archives/2008/04/27/my-badge-from-gotham-ruby-conference-2008/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/04/27/my-badge-from-gotham-ruby-conference-2008/#comments</comments>
		<pubDate>Sun, 27 Apr 2008 17:28:23 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/04/27/my-badge-from-gotham-ruby-conference-2008/</guid>
		<description><![CDATA[Gotham Ruby Conference was yesterday at Pace University. It was a great day - kudos to the organizers. If you missed it, check out the video from Confreaks when it is posted.

UPDATE: A few more conference pics, courtesy of Sebastian, including some of the afterparty/hackfest, where Jeanhee &#038; Chiara came out to meet the ruby [...]]]></description>
			<content:encoded><![CDATA[<p>Gotham Ruby Conference was yesterday at Pace University. It was a great day - kudos to the organizers. If you missed it, check out the video from Confreaks when it is posted.</p>
<p><a href="http://www.flickr.com/photos/melia/2445593493/" title="photo sharing"><img src="http://farm3.static.flickr.com/2254/2445593493_cedce3c7c5.jpg" alt="My badge from Gotham Ruby Conference 2008" class="standalone" /></a></p>
<p>UPDATE: <a href="http://www.flickr.com/search/?q=lukemelia+goruco2008&#038;m=tags">A few more conference pics</a>, courtesy of Sebastian, including some of the afterparty/hackfest, where Jeanhee &#038; Chiara came out to meet the ruby geeks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/04/27/my-badge-from-gotham-ruby-conference-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Finding code to hurt</title>
		<link>http://www.lukemelia.com/blog/archives/2008/04/26/finding-code-to-hurt/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/04/26/finding-code-to-hurt/#comments</comments>
		<pubDate>Sat, 26 Apr 2008 21:32:09 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/04/26/finding-code-to-hurt/</guid>
		<description><![CDATA[After listening to Ryan Davis' inspiring talk, "Hurting Code for Fun &#038; Profit" at GoRuCo today, I wrote this rake task to figure out what code to hurt. It looks though your git log, and takes the 15 .rb files in your Rails' app/ directory and runs them through flog, so you can see which [...]]]></description>
			<content:encoded><![CDATA[<p>After listening to Ryan Davis' inspiring talk, "Hurting Code for Fun &#038; Profit" at <a href="http://2008.goruco.com/">GoRuCo</a> today, I wrote this rake task to figure out what code to hurt. It looks though your git log, and takes the 15 .rb files in your Rails' app/ directory and runs them through flog, so you can see which are the most complicated.</p>
<div class="igBar"><span id="lruby-6"><a href="#" onclick="javascript:showPlainTxt('ruby-6'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">RUBY:</span>
<div id="ruby-6">
<div class="ruby">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">namespace :analyze <span style="color:#9966CC; font-weight:bold;">do</span>&nbsp; </div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; namespace :commits <span style="color:#9966CC; font-weight:bold;">do</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; desc 'Flog the most commonly revised files <span style="color:#9966CC; font-weight:bold;">in</span> the git history'</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; task :most_changed_files <span style="color:#9966CC; font-weight:bold;">do</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; counts = Hash.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;color:#800000;">0</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; IO.<span style="color:#9900CC;">popen</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">"PAGER=cat git log --name-only --pretty=oneline 2&gt;&amp;1"</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> |pipe|</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">while</span> <span style="color:#006600; font-weight:bold;">&#40;</span>!pipe.<span style="color:#9900CC;">eof</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; line = pipe.<span style="color:#CC0066; font-weight:bold;">readline</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">next</span> <span style="color:#9966CC; font-weight:bold;">unless</span> line =~ /^<span style="color:#006600; font-weight:bold;">&#40;</span>app|lib<span style="color:#006600; font-weight:bold;">&#41;</span>.*\.<span style="color:#9900CC;">rb</span>$/</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counts<span style="color:#006600; font-weight:bold;">&#91;</span>line.<span style="color:#CC0066; font-weight:bold;">chomp</span><span style="color:#006600; font-weight:bold;">&#93;</span> += <span style="color:#006666;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; counts.<span style="color:#9900CC;">sort_by</span><span style="color:#006600; font-weight:bold;">&#123;</span>|item| item.<span style="color:#9900CC;">last</span><span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">reverse</span>.<span style="color:#9900CC;">first</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;color:#800000;">15</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">each</span> <span style="color:#9966CC; font-weight:bold;">do</span> |item|</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; flog_score = <span style="color:#996600;">`flog -s #{item.first}`</span>.<span style="color:#9900CC;">to_f</span>.<span style="color:#9900CC;">round</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; &nbsp; <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">"#{item.first} (in #{item.last} commits) (Flog: #{flog_score})"</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">end</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
<p><a href="http://pastie.caboo.se/187352.txt">Install it with sake from here.</a></p>
<p>UPDATE: If you're interested in watching Ryan's stellar talk, it will be up on Confreaks soon, or you can try <a href="http://rubyconf2007.confreaks.com/d1t2p3_hurting_code.html">the RubyConf edition of the talk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/04/26/finding-code-to-hurt/feed/</wfw:commentRss>
		</item>
		<item>
		<title>the not-so-interesting life of my terminal</title>
		<link>http://www.lukemelia.com/blog/archives/2008/04/22/the-not-so-interesting-life-of-my-terminal/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/04/22/the-not-so-interesting-life-of-my-terminal/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 04:36:28 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/04/22/the-not-so-interesting-life-of-my-terminal/</guid>
		<description><![CDATA[lmelia$ history 1000 &#124; awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' &#124; sort -rn &#124; head
184 git
122 script/story
64 rake
26 sudo
12 dig
11 cap
9 script/rstakeout
9 sc
8 ./script/story
5 history
]]></description>
			<content:encoded><![CDATA[<pre>lmelia$ history 1000 | awk '{a[$2]++}END{for(i in a){print a[i] " " i}}' | sort -rn | head
184 git
122 script/story
64 rake
26 sudo
12 dig
11 cap
9 script/rstakeout
9 sc
8 ./script/story
5 history</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/04/22/the-not-so-interesting-life-of-my-terminal/feed/</wfw:commentRss>
		</item>
		<item>
		<title>weplay.com has launched</title>
		<link>http://www.lukemelia.com/blog/archives/2008/03/27/weplaycom-has-launched/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/03/27/weplaycom-has-launched/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 23:23:17 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/03/27/weplaycom-has-launched/</guid>
		<description><![CDATA[The startup I work for, weplay, opened our beta to the public on Tuesday night, just a few hours ahead of a New York Times article about us. It's been an insane couple of weeks leading up to this launch, and I'm happy it's behind me, though it was fun and I really enjoyed working [...]]]></description>
			<content:encoded><![CDATA[<p>The startup I work for, <a href="http://www.weplay.com/">weplay</a>, opened our beta to the public on Tuesday night, just a few hours ahead of a <a href="http://www.nytimes.com/2008/03/26/technology/26caa.html?_r=2&#038;ref=business&#038;oref=slogin&#038;oref=slogin">New York Times article about us</a>. It's been an insane couple of weeks leading up to this launch, and I'm happy it's behind me, though it was fun and I really enjoyed working so intensely with my team.</p>
<p><a href="http://abcnews.go.com/Video/playerIndex?id=4534227">We got covered on ABC News today</a>, and have spawned a bunch of blog posts and conversations. Our "official" launch is in a few weeks.</p>
<p>If you have any connection to youth sports, I hope you'll consider using <a href="http://www.weplay.com">the site</a> to help organize your team and activities!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/03/27/weplaycom-has-launched/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tracks 1.5 is out</title>
		<link>http://www.lukemelia.com/blog/archives/2008/03/27/tracks-15-is-out/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/03/27/tracks-15-is-out/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 23:16:42 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/03/27/tracks-15-is-out/</guid>
		<description><![CDATA[We released Tracks 1.5 today. Tracks is the open source Rails app for implementing the Getting Things Done system. I contributed heavily to this app in the too-long time since the last stable release. Big kudos and thanks go to Reinier Balt in the Netherlands, who contributed some great statistical visualizations and generally ran the [...]]]></description>
			<content:encoded><![CDATA[<p>We released <a href="http://www.rousette.org.uk/projects/">Tracks 1.5</a> today. Tracks is the open source Rails app for implementing the Getting Things Done system. I contributed heavily to this app in the too-long time since the last stable release. Big kudos and thanks go to <a href="http://www.balt.nu/lrbalt/">Reinier Balt</a> in the Netherlands, who contributed some great statistical visualizations and generally ran the project the past few months while bsag and I have been busy with out professional commitments.</p>
<p>Anyway, lots of great changes since 1.043. Check it out and let us know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/03/27/tracks-15-is-out/feed/</wfw:commentRss>
		</item>
		<item>
		<title>capistrano task autocompletion for bash</title>
		<link>http://www.lukemelia.com/blog/archives/2008/03/10/capistrano-task-autocompletion-for-bash/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/03/10/capistrano-task-autocompletion-for-bash/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 13:41:24 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/03/10/capistrano-task-autocompletion-for-bash/</guid>
		<description><![CDATA[Remembering all those capistrano tasks can be tough for the sleep-impaired startup employee.... Help yourself out with this autocomplete script:
PLAIN TEXT
RUBY:




#!/usr/bin/env ruby


&#160;


# Save this somewhere, chmod 755 it, then add


#&#160; &#160;complete -C path/to/this/script -o default cap


# to your ~/.bashrc


#


# If you update your tasks, just $ rm ~/.captabs*


#


&#160;


exit 0 unless /^cap\b/ =~ ENV&#91;"COMP_LINE"&#93;


&#160;


def cap_silent_tasks


&#160; if [...]]]></description>
			<content:encoded><![CDATA[<p>Remembering all those capistrano tasks can be tough for the sleep-impaired startup employee.... Help yourself out with this autocomplete script:</p>
<div class="igBar"><span id="lruby-8"><a href="#" onclick="javascript:showPlainTxt('ruby-8'); return false;">PLAIN TEXT</a></span></div>
<div class="syntax_hilite"><span class="langName">RUBY:</span>
<div id="ruby-8">
<div class="ruby">
<ol>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;">#!/usr/bin/env ruby</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># Save this somewhere, chmod 755 it, then add</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;">#&nbsp; &nbsp;complete -C path/to/this/script -o default cap</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># to your ~/.bashrc</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;">#</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># If you update your tasks, just $ rm ~/.captabs*</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;">#</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0066; font-weight:bold;">exit</span> <span style="color:#006666;color:#800000;">0</span> <span style="color:#9966CC; font-weight:bold;">unless</span> /^cap\b/ =~ ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">"COMP_LINE"</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">def</span> cap_silent_tasks</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">if</span> File.<span style="color:#9900CC;">exists</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>dotcache = File.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>File.<span style="color:#9900CC;">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span>'~'<span style="color:#006600; font-weight:bold;">&#41;</span>, <span style="color:#996600;">".captabs-#{Dir.pwd.hash}"</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; File.<span style="color:#9900CC;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span>dotcache<span style="color:#006600; font-weight:bold;">&#41;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">else</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tasks = <span style="color:#996600;">`cap -qT`</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tasks = tasks.<span style="color:#CC0066; font-weight:bold;">select</span><span style="color:#006600; font-weight:bold;">&#123;</span>|task| task =~ /^cap/ <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="color:#9900CC;">join</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; File.<span style="color:#CC0066; font-weight:bold;">open</span><span style="color:#006600; font-weight:bold;">&#40;</span>dotcache, 'w'<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#123;</span> |f| f.<span style="color:#CC0066; font-weight:bold;">puts</span> tasks <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; &nbsp; tasks</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; <span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">after_match = $'</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">task_match = <span style="color:#006600; font-weight:bold;">&#40;</span>after_match.<span style="color:#9900CC;">empty</span>? || after_match =~ /\s$/<span style="color:#006600; font-weight:bold;">&#41;</span> ? <span style="color:#0000FF; font-weight:bold;">nil</span> : after_match.<span style="color:#CC0066; font-weight:bold;">split</span>.<span style="color:#9900CC;">last</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">tasks = cap_silent_tasks.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">"<span style="color:#000099;">\n</span>"</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;color:#800000;">1</span>..-<span style="color:#006666;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">map</span> <span style="color:#006600; font-weight:bold;">&#123;</span> |line| line.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#006666;color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">tasks = tasks.<span style="color:#CC0066; font-weight:bold;">select</span> <span style="color:#006600; font-weight:bold;">&#123;</span> |t| /^<span style="color:#008000; font-style:italic;">#{Regexp.escape task_match}/ =~ t } if task_match</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#008000; font-style:italic;"># handle namespaces</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">if</span> task_match =~ /^<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#91;</span>-\w:<span style="color:#006600; font-weight:bold;">&#93;</span>+:<span style="color:#006600; font-weight:bold;">&#41;</span>/</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; upto_last_colon = $<span style="color:#006666;color:#800000;">1</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; after_match = $'</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp; tasks = tasks.<span style="color:#9900CC;">map</span> <span style="color:#006600; font-weight:bold;">&#123;</span> |t| <span style="color:#006600; font-weight:bold;">&#40;</span>t =~ /^<span style="color:#008000; font-style:italic;">#{Regexp.escape upto_last_colon}([-\w:]+)$/) ? &quot;#{$1}&quot; : t }</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#9966CC; font-weight:bold;">end</span></div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;">&nbsp;</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0066; font-weight:bold;">puts</span> tasks</div>
</li>
<li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;color:#3A6A8B; font-weight:bold;">
<div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"><span style="color:#CC0066; font-weight:bold;">exit</span> <span style="color:#006666;color:#800000;">0</span> </div>
</li>
</ol>
</div>
</div>
</div>
<p></p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/03/10/capistrano-task-autocompletion-for-bash/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Valentine&#8217;s Dinner 2008</title>
		<link>http://www.lukemelia.com/blog/archives/2008/02/15/valentines-dinner-2008/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/02/15/valentines-dinner-2008/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 07:43:52 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/02/15/valentines-dinner-2008/</guid>
		<description><![CDATA[It was my year to cook Valentine's Day dinner this year. Working web startup hours meant I couldn't be as ambitious as in years past, but I tried to make up for it with creative presentation. And an artichoke theme(!).


The menu:
 * A garden love plate, with avocado, red pepper hearts, cucumber and marinated artichoke [...]]]></description>
			<content:encoded><![CDATA[<p>It was my year to cook Valentine's Day dinner this year. Working web startup hours meant I couldn't be as ambitious as in years past, but I tried to make up for it with creative presentation. And an artichoke theme(!).<br />
<a href="http://www.flickr.com/photos/melia/2266685820/" title="photo sharing"><img src="http://farm3.static.flickr.com/2096/2266685820_6f01196131.jpg" alt="Valentine's Dinner 2008" class="standalone" /></a><br />
<br />
The menu:</p>
<p> * A garden love plate, with avocado, red pepper hearts, cucumber and marinated artichoke hearts<br />
 * a 5-grain heart-shaped seeded bread with artichoke Kalamata olive hummus, an Italian spiced artichoke spread, and olives<br />
 * ravioli, stuffed with artichoke and ricotta, topped with a dab of rich basil pesto</p>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/02/15/valentines-dinner-2008/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What I Do - a meme perpetuated</title>
		<link>http://www.lukemelia.com/blog/archives/2008/01/06/what-i-do-a-meme-perpetuated/</link>
		<comments>http://www.lukemelia.com/blog/archives/2008/01/06/what-i-do-a-meme-perpetuated/#comments</comments>
		<pubDate>Mon, 07 Jan 2008 03:46:48 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[General]]></category>

		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2008/01/06/what-i-do-a-meme-perpetuated/</guid>
		<description><![CDATA[I'm not too into these blog memes, but I like Mike Moore, who "passed the pain" to me in his own What I Do post.
My Day Job
I recently left my job of almost 8 years at Oxygen, the cable television network for women. I'll quote and hack apart my goodbye email to give you a [...]]]></description>
			<content:encoded><![CDATA[<p>I'm not too into these blog memes, but I like Mike Moore, who "passed the pain" to me in his own <a href="http://blowmage.com/2008/1/6/what-i-do">What I Do</a> post.</p>
<p><strong>My Day Job</strong></p>
<p>I recently left my job of almost 8 years at Oxygen, the cable television network for women. I'll quote and hack apart my goodbye email to give you a sense of it:</p>
<blockquote><p>I fell in love with Oxygen when I saw all those baby fists get thrown up in the air on TV in 2000.</p></blockquote>
<p>See the last paragraph of <a href="http://www.slate.com/id/1004498">this</a> for context. At the launch party two weeks after I started, I danced on stage with Luscious Jackson.</p>
<blockquote><p>I had just started here as a web developer and didn’t know much about television, media… or software development, looking back.</p></blockquote>
<p>I started with some Perl CGI, HTML &#038; Javascript skills and better instincts than I realized I had. At Oxygen, I learned VB, Java and C#, SQL, and lots more geekery. I learned Ruby on my own and then introduced my team to it. I learned Agile by encouragement (thanks, Ken), reading, and trial and error, including a solid year pair programming with the same guy. (Thanks, Kris.)</p>
<blockquote><p>I’ve grown a ton over my time here, both professionally and personally. I was a grown child when I started, and I’m leaving today a man.</p>
<p>What does it mean to have become a man while working at a women’s media company? I’m sure I’ll hash it out in therapy in a few years. Just kidding – it means most importantly that I’ll be a better father and husband to my daughter and wife (who I met here…).
</p></blockquote>
<p>The emotional growth that happens between 23 and 31 is pretty substantial, and Oxygen seemed to have grown up on about the same schedule.</p>
<blockquote><p>Thanks to everyone who I had the pleasure to work with over the last 8 years, and in particular, my team and department, &#038; Gerry: you are collectively responsible for the best moments of my professional life so far. Much love &#038; respect.</p></blockquote>
<p>I started off as a Web Developer, and got promoted to Senior Web Developer, which changed into Senior Software Developer after the world changed it's mind about the Web in 2001. Then Software Development Manager, and then Director of Software Development. It was all very rewarding, but best was the last year and half, when I hired a top notch team of developers and collaborated closely with our visionary CEO, putting everything we had learned about Agile into practice.</p>
<p>Mike tagged me because he wanted to know what I was going to do next, and all I've talked about is what I did the last 8 years. Sorry, Mike.</p>
<p>I'm involved with a startup that is not publicly discussing what we're doing quite yet. We're past the phase of totally secretive, so if you know me and ask me, I'll probably give you an overview.</p>
<p>I can say that I'm working my butt off, being challenged in lots of new ways and loving it.</p>
<p><strong>My "Contribution"</strong></p>
<p>I'm following Mike's format, because I'm a lazy blogger. So now I have a section about contribution to fill out.</p>
<p>The truth is, I'm kind of a selfish guy. I mean, we give a nice chunk of change to non-profits who we feel are doing important work. But everything else I do, I do either because I love it and enjoy it, or I can't figure out how to avoid it.</p>
<p>Some of those activities could pass as "Contribution," if you discount the impure motivations.</p>
<p>I helped organize <a href="http://www.goruco.com">GoRuCo</a> last year, New York City's first Ruby conference. This year, I'm less involved, but still trying to help out. I attended the first session with my 2 year old daughter, and basically, we were more of a hindrance than a help.</p>
<p>I'm an active contributor to an open source project called <a href="http://www.rousette.org.uk/projects/">Tracks</a>, which helps people get stuff done GTD-style. Since I started working on it, a whole host of commercial products have been released.</p>
<p><strong>My Night Job</strong></p>
<p>Maybe following Mike's format is not such a good idea. I used to pick up freelance work here and there. A couple of projects for my friends the <a href="http://www.sanbornmediafactory.com/">Sanborns</a> helped me learn Rails. Anyway, I've cut out all of my "night job" because my day job is now my night job, too.</p>
<p><strong>Other Stuff</strong></p>
<p>I'm involved in the ALT.NET community, though I'm feeling like a stranger in a strange land now that I am working in Ruby and on my Mac 100%.</p>
<p>I prioritize my health and fitness pretty highly. A big piece of that is eating a mostly vegetarian diet full of all the stuff that is not fad-of-the-week but obviously a good idea, like organic fruits and veggies, whole grains and avoiding refined sugar. The other side is exercise: I use my inline skates as transportation most places in Manhattan, including my daily commute. I'm an avid beach volleyball player, and play a few times a week at my gym, which has an indoor sand court. By the way... playing sand doubles in your boardshorts when there is snow outside -- that is luxury.</p>
<p><strong>My Family</strong></p>
<p>I come from a big wonderful family. My siblings and I have managed to find the positive aspects of my parents' divorce -- great relationships with each of them as well as their 2nd spouses. My wife and I have loved becoming parents ourselves -- Chiara is a constant source of wonder and joy.</p>
<p><strong>Who Next?</strong></p>
<p>Pain begets pain it seems... I'm tagging:</p>
<ol>
<ul><a href="http://turnings.phrasewise.com/">Daniel Berlinger</a> – Because he has a thoughtful perspective on life and work.</ul>
<ul><a href="http://wundasworld.blogspot.com">Wendy Friedlander</a> – Because she needs an excuse to blog again.</ul>
<ul><a href="http://thesanblog.blogspot.com/">Chris and Amie Sanborn</a> - Because their life right now should be made into a movie.</ul>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2008/01/06/what-i-do-a-meme-perpetuated/feed/</wfw:commentRss>
		</item>
		<item>
		<title>pdf-storycards 0.0.1 Released - my first gem</title>
		<link>http://www.lukemelia.com/blog/archives/2007/12/29/pdf-storycards-001-released-my-first-gem/</link>
		<comments>http://www.lukemelia.com/blog/archives/2007/12/29/pdf-storycards-001-released-my-first-gem/#comments</comments>
		<pubDate>Sat, 29 Dec 2007 07:42:50 +0000</pubDate>
		<dc:creator>lukemelia</dc:creator>
		
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.lukemelia.com/blog/archives/2007/12/29/pdf-storycards-001-released-my-first-gem/</guid>
		<description><![CDATA[I just released pdf-storycards 0.0.1, my first gem! Thanks to Ryan Davis for hoe, which made it a much easier process, and to Jacob Harris &#038; Geoffrey Grosenbach for teaching me how to use hoe in their PDF and blog post respectively.

pdf-storycards version 0.0.1 has been released!
* 
## DESCRIPTION:
Provides a script and library to parses [...]]]></description>
			<content:encoded><![CDATA[<p>I just released pdf-storycards 0.0.1, my first gem! Thanks to Ryan Davis for hoe, which made it a much easier process, and to Jacob Harris &#038; Geoffrey Grosenbach for teaching me how to use hoe in their PDF and blog post respectively.</p>
<blockquote><p>
pdf-storycards version 0.0.1 has been released!</p>
<p>* <<a href="http://rubyforge.org/projects/pdf-storycards/">http://rubyforge.org/projects/pdf-storycards/</a>></p>
<p>## DESCRIPTION:</p>
<p>Provides a script and library to parses stories saved in the RSpec<br />
plain text story format and saves a PDF file with printable 3"x5"<br />
index cards suitable for using in agile planning and prioritization.</p>
<p>## FEATURES/PROBLEMS:</p>
<p>* Create a PDF with each page as a 3x5 sheet, or as 4 cards per 8.5 x 11 sheet<br />
* Currently reads stories from a single file.<br />
* TODO: Take a directory and find all stories in it<br />
* TODO: Take stories via STDIN<br />
* TODO: Improve test coverage</p>
<p>## SYNOPSIS:<br />
  /usr/local/bin/stories2cards /path/to/stories.txt</p>
<p>  or</p>
<p>  StorycardPdfWriter.make_pdf("/tmp/stories.txt", "/tmp/storycards.pdf", :style => :card_1up)</p>
<p>## REQUIREMENTS:</p>
<p>Changes:</p>
<p>## 0.0.1 / 2007-12-27</p>
<p>* Initial release</p>
<p>* <<a href="http://rubyforge.org/projects/pdf-storycards/">http://rubyforge.org/projects/pdf-storycards/</a>>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.lukemelia.com/blog/archives/2007/12/29/pdf-storycards-001-released-my-first-gem/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
