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

<channel>
	<title>michael f1337</title>
	<atom:link href="http://michael.f1337.us/feed/" rel="self" type="application/rss+xml" />
	<link>http://michael.f1337.us</link>
	<description>I am Michael who walks unworthily on the way to salvation.</description>
	<lastBuildDate>Mon, 13 Feb 2012 20:18:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Little Sisters Disciples of the Lamb</title>
		<link>http://michael.f1337.us/2012/02/12/little-sisters-disciples-of-the-lamb/</link>
		<comments>http://michael.f1337.us/2012/02/12/little-sisters-disciples-of-the-lamb/#comments</comments>
		<pubDate>Sun, 12 Feb 2012 16:36:14 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[Down syndrome]]></category>
		<category><![CDATA[trisomy 21]]></category>
		<category><![CDATA[vocations]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/2012/02/12/little-sisters-disciples-of-the-lamb/</guid>
		<description><![CDATA[&#8220;The Little Sisters Disciples of the Lamb are a contemplative community that enables girls with Down’s syndrome to respond to a religious vocation.&#8221; &#8220;We follow every day the &#8216;little way&#8217; taught by Saint Therese; knowing that &#8216;great actions are forbidden to us&#8217;, we learn from her to receive everything from God, to &#8216;love for the [...]]]></description>
			<content:encoded><![CDATA[<blockquote>&#8220;The Little Sisters Disciples of the Lamb are a contemplative community that enables girls with Down’s syndrome to respond to a religious vocation.&#8221;

&#8220;We follow every day the &#8216;little way&#8217; taught by Saint Therese; knowing that &#8216;great actions are forbidden to us&#8217;, we learn from her to receive everything from God, to &#8216;love for the brothers who fight&#8217;, to &#8216;scatter flowers for Jesus&#8217;, and to pray for the intentions entrusted to us.&#8221;</blockquote>

<p>
<a title="Little Sisters Disciples of the Lamb" href="http://exlaodicea.wordpress.com/2010/01/11/little-sisters-disciples-of-the-lamb/" target="_blank">Little Sisters Disciples of the Lamb</a> via <a title="Loadicea" href="http://exlaodicea.wordpress.com/" target="_blank">Laodicea</a><br />
<a title="Little Sisters with Big Grins" href="http://www.patheos.com/blogs/theanchoress/2011/11/21/little-sisters-with-big-grins/" target="_blank">Little Sisters with Big Grins</a> via <a title="The Anchoress" href="http://www.patheos.com/blogs/theanchoress/" target="_blank">The Anchoress</a>
</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2012/02/12/little-sisters-disciples-of-the-lamb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BDD Cheat Sheet</title>
		<link>http://michael.f1337.us/2012/01/15/bdd-cheat-sheet/</link>
		<comments>http://michael.f1337.us/2012/01/15/bdd-cheat-sheet/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 21:48:05 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[essays]]></category>
		<category><![CDATA[BDD]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906198</guid>
		<description><![CDATA[Epic A large or complex user story that should be broken into several smaller stories. Story A feature written as: AS A [person/role who will benefit], I WANT [some feature], SO THAT [some benefit or value is provided]. Scenario A story&#8217;s acceptance criterion, to be implemented as an executable test, and written as: GIVEN [some [...]]]></description>
			<content:encoded><![CDATA[<h3>Epic</h3>

<p>A large or complex user story that should be broken into several smaller stories.</p>

<h3>Story</h3>

<p>A feature written as:</p>

<p>AS A [person/role who will benefit],<br />
I WANT [some feature],<br />
SO THAT [some benefit or value is provided].</p>

<h3>Scenario</h3>

<p>A story&#8217;s acceptance criterion, to be implemented as an <em>executable test</em>, and written as:</p>

<p>GIVEN [some initial context],<br />
WHEN [an event occurs],<br />
THEN [ensure some outcomes].</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2012/01/15/bdd-cheat-sheet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What other answer would suffice?</title>
		<link>http://michael.f1337.us/2012/01/14/what-other-answer-would-suffice/</link>
		<comments>http://michael.f1337.us/2012/01/14/what-other-answer-would-suffice/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 21:53:42 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[quotes]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906194</guid>
		<description><![CDATA[I know now, Lord, why You utter no answer. You are Yourself the answer. Before Your face questions die away. What other answer would suffice? – C.S. Lewis, Till We Have Faces]]></description>
			<content:encoded><![CDATA[<blockquote>
  <p>I know now, Lord, why You utter no answer. You are Yourself the answer. Before Your face questions die away. What other answer would suffice?</p>
</blockquote>

<p>– C.S. Lewis, <em>Till We Have Faces</em></p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2012/01/14/what-other-answer-would-suffice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Blog Converters: blogger2wordpress</title>
		<link>http://michael.f1337.us/2011/12/28/google-blog-converters-blogger2wordpress/</link>
		<comments>http://michael.f1337.us/2011/12/28/google-blog-converters-blogger2wordpress/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 17:04:11 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[essays]]></category>
		<category><![CDATA[blogger]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906188</guid>
		<description><![CDATA[Yesterday, while using the Google Blog Converters to migrate a blog from Blogger to WordPress (see the &#8220;Plan B&#8221; section of Migrating an old Blogger blog to WordPress), I encountered the following error: $ google-blog-converters-r89/bin/blogger2wordpress.sh blog-12-27-2011.xml &#62; wordpress-blog-12-27-2011.xml Traceback (most recent call last): File "google-blog-converters-r89/bin/../src/blogger2wordpress/b2wp.py", line 28, in &#60;module&#62; import wordpress File "/Users/username/Downloads/google-blog-converters-r89/src/blogger2wordpress/wordpress.py", line 55, [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday, while using the <a href="http://code.google.com/p/google-blog-converters-appengine">Google Blog Converters</a> to migrate a blog from Blogger to WordPress (see the &#8220;Plan B&#8221; section of <a href="http://artlung.com/blog/2010/03/02/migrating-an-old-blogger-blog-to-wordpress/">Migrating an old Blogger blog to WordPress</a>), I encountered the following error:</p>

<pre class="prettyprint"><code>$ google-blog-converters-r89/bin/blogger2wordpress.sh blog-12-27-2011.xml &gt; wordpress-blog-12-27-2011.xml
Traceback (most recent call last):
  File "google-blog-converters-r89/bin/../src/blogger2wordpress/b2wp.py", line 28, in &lt;module&gt;
    import wordpress
  File "/Users/username/Downloads/google-blog-converters-r89/src/blogger2wordpress/wordpress.py", line 55, in &lt;module&gt;
    element_tree_write = ElementTree.ElementTree._write
AttributeError: type object 'ElementTree' has no attribute '_write'
</code></pre>

<p>A quick search led me to an <a href="http://code.google.com/p/google-blog-converters-appengine/issues/detail?id=77">open issue</a> on the Google Blog Converters site, but no solutions were provided. I did a little more research, and realized I had overlooked the fact that because the Google Blog Converters are built for Google&#8217;s App Engine, they require Python 2.5, and that more recent versions &#8212; say, the Python 2.7.1 provided with OS X &#8220;Lion&#8221; &#8212; may not work with the scripts provided. Another quick search (for &#8220;python 2.5 lion&#8221;) led me to <a href="http://stackoverflow.com/questions/6920278/configuring-python-for-gae-with-lion">a Stack Overflow post</a> where I learned that Apple provides Python 2.5 for Lion, with a custom binary at <code class="prettyprint">/usr/bin/python2.5</code>. With that information, I was able to fix the blogger2wordpress.sh script by changing line 13 from:</p>

<pre class="prettyprint"><code>PYTHONPATH=${PROJ_DIR}/lib python ${PROJ_DIR}/src/blogger2wordpress/b2wp.py $*
</code></pre>

<p>to:</p>

<pre class="prettyprint"><code>PYTHONPATH=${PROJ_DIR}/lib python2.5 ${PROJ_DIR}/src/blogger2wordpress/b2wp.py $*
</code></pre>

<p>I ran the script after the change, and it worked as expected. I hope this helps someone out there, though YMMV.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/12/28/google-blog-converters-blogger2wordpress/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rebuilding the Android NDK for Objective-C Support</title>
		<link>http://michael.f1337.us/2011/11/19/rebuilding-the-android-ndk-for-objective-c-support/</link>
		<comments>http://michael.f1337.us/2011/11/19/rebuilding-the-android-ndk-for-objective-c-support/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 23:01:25 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[essays]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[os x]]></category>

		<guid isPermaLink="false">http://f1337.us/?p=2895906175</guid>
		<description><![CDATA[How to make the Android NDK compile Objective-C! Many thanks to Jackie Gleason (@LifeIsTooShort) for his M3 Conference (@M3Conf) presentation, Adding Objective-C Support to the Android NDK, upon which most of this tutorial is based. DOWNLOAD AND PATCH THE ANDROID NDK TOOLCHAIN SOURCES Using the terminal, create a directory for your toolchain sources: mkdir -p [...]]]></description>
			<content:encoded><![CDATA[<p>How to make the Android NDK compile Objective-C! Many thanks to Jackie Gleason (<a href="http://twitter.com/LifeIsTooShort">@LifeIsTooShort</a>) for his <a href="http://www.m3conf.com/">M3 Conference</a> (<a href="https://twitter.com/#!/M3Conf">@M3Conf</a>) presentation, <a href="https://docs.google.com/present/view?id=dfj692w3_351gq89x8fv">Adding Objective-C Support to the Android NDK</a>, upon which most of this tutorial is based.</p>

<h3>DOWNLOAD AND PATCH THE ANDROID NDK TOOLCHAIN SOURCES</h3>

<p>Using the terminal, create a directory for your toolchain sources:</p>

<pre class="prettyprint"><code>mkdir -p ~/SDKs/Android/toolchain-src
cd ~/SDKs/Android/toolchain-src
</code></pre>

<p><strong>IMPORTANT: The build-gcc script expects a specific layout for the source directory. Create the above directory anywhere you like, but be sure to create the subdirectories below exactly as described.</strong></p>

<p>Next, fetch the sources:</p>

<pre class="prettyprint"><code>git clone https://android.googlesource.com/toolchain/build.git
git clone https://android.googlesource.com/toolchain/gmp.git
git clone https://android.googlesource.com/toolchain/gdb.git
git clone https://android.googlesource.com/toolchain/mpc.git
git clone https://android.googlesource.com/toolchain/mpfr.git
mkdir binutils
cd binutils/
curl -O ftp://sourceware.org//pub/binutils/snapshots/binutils-2.22.51.tar.bz2
tar xjfv binutils-2.22.51.tar.bz2
cd ../
mkdir gcc
cd gcc/
curl -O ftp://ftp.gnu.org//gnu/gcc/gcc-4.6.1/gcc-4.6.1.tar.bz2
tar xjfv gcc-4.6.1.tar.bz2
cd ../
</code></pre>

<p>Patch the toolchain makefile:</p>

<pre class="prettyprint"><code>git clone git://gist.github.com/1378127.git build-patch
cd build/
patch &lt; ../build-patch/Makefile.in.diff
cd ../
</code></pre>

<p>Patch GCC:</p>

<pre class="prettyprint"><code>cd gcc/
curl http://gcc.gnu.org/bugzilla/attachment.cgi?id=24879 &gt; gcc-4.6.1.patch
cd gcc-4.6.1/
patch -p1 &lt; ../gcc-4.6.1.patch
</code></pre>

<h3>DOWNLOAD AND PATCH THE ANDROID NDK</h3>

<p>Using the terminal, fetch the NDK:</p>

<pre class="prettyprint"><code>cd ~/SDKs/Android/
curl -O http://dl.google.com/android/ndk/android-ndk-r6-darwin-x86.tar.bz2
tar xjfv android-ndk-r6-darwin-x86.tar.bz2
</code></pre>

<p>Next, patch the build-gcc script:</p>

<pre class="prettyprint"><code>git clone git://gist.github.com/1378122.git android-ndk-build-gcc-patch
cd android-ndk-r6/build/tools/
patch &lt; ../../../android-ndk-build-gcc-patch/build-gcc.sh.diff
</code></pre>

<h3>BUILD THE ANDROID NDK TOOLCHAIN</h3>

<p>Using the terminal, get to the NDK build/tools directory:</p>

<pre class="prettyprint"><code>cd ~/SDKs/Android/android-ndk-r6/build/tools/
</code></pre>

<p>Next, rebuild GCC on Mac OS X:</p>

<pre class="prettyprint"><code>./build-gcc.sh --gmp-version=4.2.4 --mpfr-version=2.4.1 --binutils-version=2.22.51 --try-64 ~/SDKs/Android/toolchain-src ~/SDKs/Android/android-ndk-r6 arm-linux-androideabi-4.6.1
</code></pre>

<p>Or rebuild GCC on Linux:</p>

<pre class="prettyprint"><code>./build-gcc.sh --gmp-version=4.2.4 --mpfr-version=2.4.1 --mpc-version=0.8.1 --binutils-version=2.22.51 --try-64 ~/SDKs/Android/toolchain-src ~/SDKs/Android/android-ndk-r6 arm-linux-androideabi-4.6.1
</code></pre>

<h3>ACKNOWLEDGEMENTS</h3>

<p><a href="https://docs.google.com/present/view?id=dfj692w3_351gq89x8fv">Adding Objective-C Support to the Android NDK</a>. Gleason, Jackie. M3 Conference. 19 Nov. 2011.</p>

<p><a href="http://glandium.org/blog/?p=2146">Building an Android NDK with Recent GCC and Binutils</a>. Hommey, Mike. Glandium. 1 Aug. 2011.</p>

<p><a href="http://solarianprogrammer.com/2011/09/20/compiling-gcc-4-6-1-on-mac-osx-lion/">Compiling GCC 4.6.1 on Mac OSX Lion</a>. Solarian Programmer. 20 Sep. 2011.</p>

<p><a href="http://code.google.com/p/android-gcc-objc2-0/">Android NDK GCC 4.2.1 with Objective C 2.0 Support</a>. phausler@gmail.com. 19 Jan. 2010.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/11/19/rebuilding-the-android-ndk-for-objective-c-support/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Command-Line File Encryption and Decryption using OpenSSL</title>
		<link>http://michael.f1337.us/2011/11/09/command-line-file-encryption-and-decryption-using-openssl/</link>
		<comments>http://michael.f1337.us/2011/11/09/command-line-file-encryption-and-decryption-using-openssl/#comments</comments>
		<pubDate>Thu, 10 Nov 2011 01:15:37 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[decryption]]></category>
		<category><![CDATA[encryption]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[os x]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://f1337.us/?p=2895906169</guid>
		<description><![CDATA[To encrypt file.txt (you will be prompted for a password): openssl aes-256-cbc -salt -in file.txt -out file.txt.enc To decrypt file.txt.enc (you will be prompted for the password used to encrypt): openssl aes-256-cbc -d -in file.txt.enc -out file.txt &#8212; Simple File Encryption with OpenSSL. Dryer, Tom. Tombuntu. 12 Dec. 2007.]]></description>
			<content:encoded><![CDATA[<p>To encrypt file.txt (you will be prompted for a password):</p>

<pre class="prettyprint"><code>openssl aes-256-cbc -salt -in file.txt -out file.txt.enc
</code></pre>

<p>To decrypt file.txt.enc (you will be prompted for the password used to encrypt):</p>

<pre class="prettyprint"><code>openssl aes-256-cbc -d -in file.txt.enc -out file.txt
</code></pre>

<p>&mdash; <a href="http://tombuntu.com/index.php/2007/12/12/simple-file-encryption-with-openssl/">Simple File Encryption with OpenSSL</a>. Dryer, Tom. Tombuntu. 12 Dec. 2007.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/11/09/command-line-file-encryption-and-decryption-using-openssl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Holy Week Timeline Visualization</title>
		<link>http://michael.f1337.us/2011/04/20/holy-week-timeline-visualization/</link>
		<comments>http://michael.f1337.us/2011/04/20/holy-week-timeline-visualization/#comments</comments>
		<pubDate>Wed, 20 Apr 2011 13:07:54 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[photos]]></category>
		<category><![CDATA[quotes]]></category>
		<category><![CDATA[catholic]]></category>
		<category><![CDATA[faith]]></category>
		<category><![CDATA[saints]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906155</guid>
		<description><![CDATA[Click to enlarge. Also available as a PDF. Holy Week (or Passion Week) [is] the week that commemorates Jesus’ death and resurrection. Here’s a new visualization we created that harmonizes the four Gospel accounts of Holy Week and lets you examine the “who,” “what,” and “where” of events leading up to and through Easter. Follow [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://michael.f1337.us/wp-content/uploads/2011/04/holy-week-timeline.png"><img src="http://michael.f1337.us/wp-content/uploads/2011/04/holy-week-timeline.png" alt="Holy Week Timeline" title="Holy Week Timeline" width="2488" height="700" class="alignnone size-full wp-image-2895906156" /></a></p>

<p>Click to enlarge. Also available as a <a href="http://bg3-blog.s3.amazonaws.com/blog/wp-content/uploads/2011/04/holy-week-timeline.pdf">PDF</a>.</p>

<blockquote>
  <p>Holy Week (or Passion Week) [is] the week that commemorates Jesus’ death and resurrection. Here’s a new visualization we created that harmonizes the four Gospel accounts of Holy Week and lets you examine the “who,” “what,” and “where” of events leading up to and through Easter. Follow the lines in the chart to see at a glance what people were doing, where they were, and whom they were with at any point during the week.</p>
</blockquote>

<p>&mdash; <a href="http://www.biblegateway.com/blog/2011/04/holy-week-timeline-visualization/">Holy Week Timeline Visualization</a>. The Bible Gateway Blog. 15 Apr. 2011. via @<a href="http://twitter.com/weisjohn">weisjohn</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/04/20/holy-week-timeline-visualization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dvorak Keyboard Layout on Ubuntu</title>
		<link>http://michael.f1337.us/2011/04/15/dvorak-keyboard-layout-on-ubuntu/</link>
		<comments>http://michael.f1337.us/2011/04/15/dvorak-keyboard-layout-on-ubuntu/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 18:59:05 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[essays]]></category>
		<category><![CDATA[dvorak]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906149</guid>
		<description><![CDATA[Switch to Dvorak layout: sudo loadkeys dvorak Switch back to U.S.: sudo loadkeys us That was easy!]]></description>
			<content:encoded><![CDATA[<p>Switch to Dvorak layout:</p>

<blockquote>
  <p>sudo loadkeys dvorak</p>
</blockquote>

<p>Switch back to U.S.:</p>

<blockquote>
  <p>sudo loadkeys us</p>
</blockquote>

<p>That was easy!</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/04/15/dvorak-keyboard-layout-on-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An Unlikely Crusader for Cleaning Up the Food Supply</title>
		<link>http://michael.f1337.us/2011/04/11/an-unlikely-crusader-for-cleaning-up-the-food-supply/</link>
		<comments>http://michael.f1337.us/2011/04/11/an-unlikely-crusader-for-cleaning-up-the-food-supply/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 01:21:38 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[links]]></category>
		<category><![CDATA[videos]]></category>
		<category><![CDATA[family]]></category>
		<category><![CDATA[food]]></category>
		<category><![CDATA[green]]></category>
		<category><![CDATA[parenting]]></category>
		<category><![CDATA[social justice]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906141</guid>
		<description><![CDATA[&#8212; TEDxAustin Robyn O&#8217;Brien 2011. O&#8217;Brien, Robyn. TEDxAustin. Mar. 2011.]]></description>
			<content:encoded><![CDATA[<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/rixyrCNVVGA?rel=0" frameborder="0" allowfullscreen></iframe>

<p>&mdash; <a href="http://www.youtube.com/watch?v=rixyrCNVVGA">TEDxAustin Robyn O&#8217;Brien 2011</a>. O&#8217;Brien, Robyn. TEDxAustin. Mar. 2011.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/04/11/an-unlikely-crusader-for-cleaning-up-the-food-supply/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Catching the &#8220;Little Things&#8221; with BDD</title>
		<link>http://michael.f1337.us/2011/04/04/catching-the-little-things-with-bdd/</link>
		<comments>http://michael.f1337.us/2011/04/04/catching-the-little-things-with-bdd/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 16:40:34 +0000</pubDate>
		<dc:creator>michael</dc:creator>
				<category><![CDATA[essays]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[TDD]]></category>

		<guid isPermaLink="false">http://michael.f1337.us/?p=2895906116</guid>
		<description><![CDATA[I&#8217;ve often read/heard the following kind of critique comparing TDD (Test-Driven Development) and BDD (Behavior-Driven Development): BDD is great, but unlike TDD, it can&#8217;t catch little things like obj.length vs. obj.length() Such assertions tell me that we need to improve how we teach BDD. BDD is TDD. Many argue BDD is simply TDD &#8220;done right&#8221;. [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve often read/heard the following kind of critique comparing TDD (Test-Driven Development) and BDD (Behavior-Driven Development):</p>

<blockquote>
  <p>BDD is great, but unlike TDD, it can&#8217;t catch little things like obj.length vs. obj.length()</p>
</blockquote>

<p>Such assertions tell me that we need to improve how we teach BDD. <a href="http://dannorth.net/introducing-bdd/">BDD <em>is</em> TDD</a>. Many argue <a href="http://hendryluk.wordpress.com/2009/07/17/bdd-tdd-done-right/">BDD is simply TDD &#8220;done right&#8221;</a>. So why the new name? Because Test-Driven Development, thanks to its misleading name, tends to place inordinate emphasis on testing over design, prompting immediate resistance from developers and project managers alike.</p>

<p>Alright Mr. SmartyPants, how do we ensure our BDD covers &#8220;little things&#8221; such as obj.length versus obj.length()? I&#8217;m glad you asked! Suppose we are working with the following Story and Scenario:</p>

<pre class="prettyprint"><code>Feature: Count my friends
    In order to track my popularity
    As a social networker
    I want to be given a sum of all my friends

    Scenario: Add friends
        Given Tom, Jerry and Tweety are my friends
        When I add Sylvester and Sylvester Jr. to my friends
        Then I should have 5 friends
</code></pre>

<p>And the following <a href="http://cukes.info/">Cucumber</a> steps for JavaScript (purposefully <em>not</em> DRY, for the sake of demonstration):</p>

<pre class="prettyprint"><code>Given(/(.*) are my friends/, function(s)
{
    me = new Person();
    var friends = s.split(/,\s?|\s?and\s?/);
    for (var i in friends)
    {
        me.friends.push(new Person({ name: friends[i] }));
    }
}

When(/I add (.*) to my friends/, function(s)
{
    var friends = s.split(/,\s?|\s?and\s?/);
    for (var i in friends)
    {
        me.friends.push(new Person({ name: friends[i] }));
    }
}
</code></pre>

<p>Then, depending on which is needed, one can easily test obj.length:</p>

<pre class="prettyprint"><code>Then(/I should have (.*) friends/, function(n)
{
    assertEqual(n, me.friends.length);
}
</code></pre>

<p>Or obj.length():</p>

<pre class="prettyprint"><code>Then(/I should have (.*) friends/, function(n)
{
    assertEqual(n, me.friends.length());
}
</code></pre>

<p>Voila! Now your BDD is covering your length/length() dilemma, and you didn&#8217;t have to &#8220;switch back&#8221; to a &#8220;test-driven&#8221; mindset.</p>
]]></content:encoded>
			<wfw:commentRss>http://michael.f1337.us/2011/04/04/catching-the-little-things-with-bdd/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

