<?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>(not that) Dave Foley</title>
	<atom:link href="http://www.notthatdavefoley.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.notthatdavefoley.com</link>
	<description>Bloviating, misinformed tripe</description>
	<lastBuildDate>Tue, 19 Oct 2010 16:03:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Quartz Composer: Building on the Spiral ideas</title>
		<link>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-building-on-the-spiral-ideas/</link>
		<comments>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-building-on-the-spiral-ideas/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 23:29:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Quartz Composer]]></category>
		<category><![CDATA[Visuals]]></category>

		<guid isPermaLink="false">http://www.notthatdavefoley.com/?p=127</guid>
		<description><![CDATA[Playing around with the spiral ideas from my last post, I came up with this composition, which I think is kind of cool:]]></description>
			<content:encoded><![CDATA[<p>Playing around with the spiral ideas from my last post, I came up with this composition, which I think is kind of cool:</p>
<p><iframe src="http://player.vimeo.com/video/15067759" width="400" height="300" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-building-on-the-spiral-ideas/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Composer: Spiral</title>
		<link>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-spiral/</link>
		<comments>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-spiral/#comments</comments>
		<pubDate>Fri, 17 Sep 2010 20:34:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.notthatdavefoley.com/?p=123</guid>
		<description><![CDATA[Building on the previous post about iterators in Quartz Composer, here&#8217;s an example that shows how to draw a spiral. Here&#8217;s what it looks like: The spiral is composed of segments that progress outward radially from the origin. Each successive endpoint is computed as a polar coordinate (Degrees, Distance), then converted to a cartesian (X,Y) [...]]]></description>
			<content:encoded><![CDATA[<p>
Building on the previous post about <a href="/2010/09/16/quartz-composer-iterators">iterators in Quartz Composer</a>, here&#8217;s an example that shows how to draw a spiral.
</p>
<p>
Here&#8217;s what it looks like:
</p>
<p><iframe src="http://player.vimeo.com/video/15064120" width="400" height="300" frameborder="0"></iframe></p>
<p>
The spiral is composed of segments that progress outward radially from the origin. Each successive endpoint is computed as a polar coordinate (Degrees, Distance), then converted to a cartesian (X,Y) coordinate relative to the origin.
</p>
<p>
This also shows the basics of using LFOs (low frequency oscillators) to automate parameters that change over time: a Sawtooth LFO is used to rotate the spiral, and a Sine LFO is used to grow and shrink it.
</p>
<p>You can download the source file here:</p>
<p><a href="http://www.notthatdavefoley.com/wp-content/uploads/quartz-examples/SpiralExample.qtz">SpiralExample.qtz</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/09/17/quartz-composer-spiral/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quartz Composer iterators</title>
		<link>http://www.notthatdavefoley.com/2010/09/16/quartz-composer-iterators/</link>
		<comments>http://www.notthatdavefoley.com/2010/09/16/quartz-composer-iterators/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 17:54:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Quartz Composer]]></category>
		<category><![CDATA[Visuals]]></category>

		<guid isPermaLink="false">http://www.notthatdavefoley.com/?p=119</guid>
		<description><![CDATA[So I&#8217;ve been playing with Quartz Composer on and off for a while now, and have been using it to create cusomt visual patches for use with the excellent VDMX VJ software for doing live visual projections with my band. Coming to QC from other languages (in my case C#, Ruby and JavaScript for the [...]]]></description>
			<content:encoded><![CDATA[<p>
So I&#8217;ve been playing with Quartz Composer on and off for a while now, and have been using it to create cusomt visual patches for use with the excellent <a href="http://vidvox.com">VDMX VJ software</a> for doing live visual projections with <a href="http://hypatialake.net">my band</a>.
</p>
<p>Coming to QC from other languages (in my case C#, Ruby and JavaScript for the most part), there are a few gotchas&#8230; or perhaps my brain is slow to adapt. Anyway, one of these has to do with the Iterator and Iterator Variables patches. </p>
<p>
So, the way this works, is you create an Iterator patch (think &#8220;for loop&#8221; if you are familiar with C-style languages). The Iterator patch is a &#8220;macro patch&#8221;, which means that it contains other patches. Within the Iterator patch (right-click and select &#8220;Edit Macro Patch&#8230;&#8221;) you create an Iterator Variables patch, which provides your current index, the number of iterations, and a &#8220;Position&#8221; output that doesn;t quite do what I thought it might:
</p>
<p><a href="http://www.notthatdavefoley.com/wp-content/uploads/2010/09/IteratorVariables.png"><img src="http://www.notthatdavefoley.com/wp-content/uploads/2010/09/IteratorVariables.png" alt="" title="IteratorVariables" width="197" height="113" class="alignnone size-full wp-image-120" /></a></p>
<p> So you can think of this as:
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;">  <span class="kw1">for</span> <span class="br0">&#40;</span>CurrentIndex <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> CurrentIndex <span class="sy0">&lt;</span> Iterations<span class="sy0">;</span> CurrentIndex<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="co1">// Why is this (Iterations &#8211; 1) ?</span><br />
&nbsp; &nbsp; <span class="co1">// I think it&#8217;s crazy too, but in Quartz, </span><br />
&nbsp; &nbsp; <span class="co1">// the Current Position goes from 0 to 1</span><br />
&nbsp; &nbsp; CurrentPosition <span class="sy0">=</span> CurrentIndex<span class="sy0">/</span><span class="br0">&#40;</span>Iterations <span class="sy0">-</span> 1<span class="br0">&#41;</span><span class="sy0">;</span> <br />
 <span class="br0">&#125;</span></div>
</div>
<p> I&#8217;ve attached a Quartz Composer patch that demonstrates the behavior visually, and shows how to use the iterator and iterator variables patches to draw a set of spheres arranged in a circle about the origin:</p>
<p><a href="/wp-content/uploads/quartz-examples/IteratorExample.qtz">IteratorExample.qtz</a>
</p>
<p><a href="/wp-content/uploads/quartz-examples/IteratorExample.qtz"><img src="http://www.notthatdavefoley.com/wp-content/uploads/2010/09/IteratorVariablesViewer.png" alt="" title="IteratorVariablesViewer" width="514" height="485" class="alignnone size-full wp-image-121" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/09/16/quartz-composer-iterators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StorEvil 0.1 released</title>
		<link>http://www.notthatdavefoley.com/2010/03/11/storevil-0-1-released/</link>
		<comments>http://www.notthatdavefoley.com/2010/03/11/storevil-0-1-released/#comments</comments>
		<pubDate>Thu, 11 Mar 2010 22:10:42 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[BDD]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=102</guid>
		<description><![CDATA[StorEvil 0.1 was &#8220;released&#8221; today&#8230; and by &#8220;released&#8221; I mean I zipped up the binaries and added some installation instructions. You can get it from the github download page. Changes since my last in-depth post about StorEvil: - Added HTML reporting of spec results using the Spark View Engine. - New command &#8220;storevil init&#8221; which [...]]]></description>
			<content:encoded><![CDATA[<p>StorEvil 0.1 was &#8220;released&#8221; today&#8230; and by &#8220;released&#8221; I mean I zipped up the binaries and added some installation instructions.</p>
<p>You can get it <a href="http://github.com/davidmfoley/storevil/downloads">from the github download page</a>.</p>
<p>Changes since <a href="http://anotherdave.wordpress.com/2010/02/23/storevil-intro/">my last in-depth post about StorEvil</a>:</p>
<p>- Added HTML reporting of spec results using the <a href="http://sparkviewengine.com/">Spark View Engine</a>.<br />
- New command &#8220;storevil init&#8221; which creates a config file &amp; spark template in the current directory as well as some examples.<br />
- Ability to bind tables to arrays of parameters that are custom types. <a href="http://wiki.github.com/davidmfoley/storevil/tables-of-values">(more info on the github wiki)</a>.<br />
- Added an example that implements Conway&#8217;s Game Of Life using the <a href="http://github.com/coreyhaines/practice_game_of_life/tree/master/features/"> Cucumber features created by Corey Haines</a>.<br />
- Hacked out a very early semi-functional ReSharper runner (not included in the binaries yet&#8230; only supports ReSharper 5 Beta). I&#8217;ll work on this more once ReSharper 5.0 is released.<br />
- Support for dependent contexts: StorEvil will inject any constructor parameters into your context classes, and reuse the same contexts throughout the execution of a scenario (so you can break up your contexts into classes irrespective of their shared context). <a href="http://wiki.github.com/davidmfoley/storevil/storevil-context-classes">(more info on the github wiki)</a><br />
- Cleaned up some namespace inconsistencies<br />
- Reworked and simplified a bunch of complex code (Thank you Reflector &amp; the CodeMetrics plugin)<br />
- fixed a bunch of bugs (of course)</p>
<p>If you take a look at it let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/03/11/storevil-0-1-released/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>StorEvil: What&#8217;s in a Name?</title>
		<link>http://www.notthatdavefoley.com/2010/02/23/storevil-whats-in-a-name/</link>
		<comments>http://www.notthatdavefoley.com/2010/02/23/storevil-whats-in-a-name/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 01:14:03 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[StorEvil]]></category>
		<category><![CDATA[storevil]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=86</guid>
		<description><![CDATA[My Alt.NET Seattle compatriot Brian Henderson asked about the reason behind the name &#8220;StorEvil&#8221;. It&#8217;s sort of a pun&#8230; first off, obviously, in agile development, a unit of work to-be-done is often referred to as &#8220;story&#8221;. In StorEvil, &#8220;Story&#8221; refers to a set of scenarios (basically a single natural language specification file). Also, many years [...]]]></description>
			<content:encoded><![CDATA[<p>My Alt.NET Seattle compatriot <a href="http://twitter.com/brian_henderson">Brian Henderson</a> asked about the reason behind the name &#8220;StorEvil&#8221;.</p>
<p>It&#8217;s sort of a pun&#8230; first off, obviously, in agile development, a unit of work to-be-done is often referred to as &#8220;story&#8221;. In StorEvil, &#8220;Story&#8221; refers to a set of scenarios (basically a single natural language specification file).</p>
<p>Also, many years ago, when I was young and just getting into jazz, I listened to <a href="http://www.amazon.com/Charlie-Parker-at-Storyville/dp/B000005HDV">a certain live Charlie Parker album</a> quite a bit.</p>
<p>Also, I&#8217;ve always had the suspicion that the whole idea of natural language specs might be slightly Evil.</p>
<p>So, being an old DOS/Windows guy, I just took &#8220;Storyville&#8221; and twisted it into an 8-character name that almost makes sense.</p>
<p>So there you have it, the triple-entendre behind the StorEvil name.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/02/23/storevil-whats-in-a-name/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduction to StorEvil</title>
		<link>http://www.notthatdavefoley.com/2010/02/23/storevil-intro/</link>
		<comments>http://www.notthatdavefoley.com/2010/02/23/storevil-intro/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 20:56:54 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[StorEvil]]></category>
		<category><![CDATA[storevil]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/2010/02/23/storevil-intro/</guid>
		<description><![CDATA[StorEvil This is the first in a series of posts about a tool I wrote a while back, and have recently picked up again, called StorEvil. You can check out StorEvil on GitHub After I wrote it I sort of lost interest in this whole approach, although I paid some attention to Cucumber as it [...]]]></description>
			<content:encoded><![CDATA[<h3>StorEvil</h3>
<p>This is the first in a series of posts about a tool I wrote a while back, and have recently picked up again, called StorEvil.</p>
<p>You can check out <a href="http://github.com/davidmfoley/storevil">StorEvil on GitHub</a></p>
<p>After I wrote it I sort of lost interest in this whole approach, although I paid some attention to <a href="http://cukes.info">Cucumber</a> as it gained popularity.<br />
Recently, at an Alt.NET Seattle meeting, I saw a demo of <a href="http://specflow.org/">SpecFlow</a>, which is a similar tool for .NET.</p>
<p>SpecFlow is a nice tool insofar as it is basically a reimplementation of Cucumber in .NET.<br />
However, I think that some of the nice metadata tools (Reflection) that we have in .NET can provide for a much richer experience.<br />
This is not to imply that I think .NET is better than Ruby for this type of thing, by any means. In fact, quite the opposite.</p>
<p>But, if you are going to take on the pain of static-typing, I think you should partake of the joy of System.Reflection to provide a tool that does things that are simply not possible or very difficult in Ruby.<br />
Otherwise, you might as well just use Cucumber and IronRuby&#8230; Or eschew .NET altogether if possible.</p>
<p>Now, big disclaimer: StorEvil is not very polished. It may not work on your machine. It may not work as expected.<br />
I&#8217;m pretty sure that it won&#8217;t reformat your hard disk, but beyond that I make no claims.</p>
<h3>What is StorEvil?</h3>
<p>Well, if you know what Cucumber is, you can basically think of it as a Cucumber-ish tool for .NET that allows you to easily write .NET code to interpret natural language specifications.<br />
If you don&#8217;t know what Cucumber is, I would advise you to <a href="http://cukes.info">read about it</a>.</p>
<p>StorEvil is a tool that you can use to write specifications in English, and then execute those specifications.<br />
It supports a set of natural language that is a subset of the <a href="http://wiki.github.com/aslakhellesoy/cucumber/gherkin">Gherkin</a> language used by Cucumber.</p>
<p>It supports .NET languages such as C#.<br />
It has only been tested on Windows (so far).<br />
It only supports English (so far).</p>
<h3>Why StorEvil?</h3>
<h4>Reflection-based language matching</h4>
<p>Other similar tools use regular expressions, which makes sense for Ruby.</p>
<p>In .NET, there is a rich Reflection model which gives access to the method names, parameter names and type info,<br />
which can help to reduce noise and code-duplication.</p>
<p>In StorEvil, although Regular-Expression matching is supported, matching based on the names of functions is the preferred method:</p>
<p>For example, in order to match the following:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;">Given I have a savings account with $<span class="nu0">100</span></div>
</div>
<p>In SpecFlow, and similarly in Cucumber (ignoring the language differences between C# &amp; Ruby), you would write something like this:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;"><span class="br0">&#91;</span>Given<span class="br0">&#40;</span><span class="st_h">@&quot;I have a (\w+) account with $(.*)&quot;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><br />
<span class="kw1">public</span> <span class="kw1">void</span> GivenIHaveAccount<span class="br0">&#40;</span><span class="kw4">string</span> type, <span class="kw4">decimal</span> amount<span class="br0">&#41;</span> <span class="br0">&#123;</span> &#8230; <span class="br0">&#125;</span></div>
</div>
<p>In StorEvil, you could use similar syntax to the above, OR, you can write it in as follows:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">void</span> Given_I_Have_A_accountType_Account_with_amount<span class="br0">&#40;</span><span class="kw4">string</span> accountType, <span class="kw4">decimal</span> amount<span class="br0">&#41;</span> <span class="br0">&#123;</span> &#8230; <span class="br0">&#125;</span></div>
</div>
<p>StorEvil splits the method name into its constituent words and matches the values to the parameters based on the names of the parameters (accountType and amount).</p>
<h4>Context Chaining</h4>
<p>In StorEvil, your Context class methods (like Steps in Cucumber) can return any object, which can then be used to fulfill the remaining grammar on a line.</p>
<p>For example, in the specification alluded to in the above example, you may end up with the following similar steps:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;">Given I have a savings account with a balance of $100<br />
Given I have a savings account that <a href="http://www.google.com/search?q=is+msdn.microsoft.com"><span class="kw3">is</span></a> preferred<br />
Given I have a checking account that has been placed on fraud alert</div>
</div>
<p>In StorEvil, rather than creating a separate step for each one of these, you could do the following:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;"><span class="br0">&#91;</span>StorEvil.<span class="me1">Context</span><span class="br0">&#93;</span><br />
<span class="kw1">public</span> <span class="kw4">class</span> AccountTestContext <span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> AccountOptions Given_I_Have_A_accountType_Account<span class="br0">&#40;</span><span class="kw4">string</span> accountType<span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// create and return AccountOptions object here</span><br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="co1">//</span><br />
<span class="kw1">public</span> <span class="kw4">class</span> AccountOptions <span class="br0">&#123;</span><br />
<span class="kw1">public</span> <span class="kw1">void</span> With_a_balance_of_accountBalance<span class="br0">&#40;</span><span class="kw4">decimal</span> accountBalance<span class="br0">&#41;</span> <span class="br0">&#123;</span> &#8230; <span class="br0">&#125;</span><br />
<span class="kw1">public</span> <span class="kw1">void</span> That_is_preferred<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &#8230; <span class="br0">&#125;</span><br />
<span class="kw1">public</span> <span class="kw1">void</span> That_has_been_placed_on_fraud_alert<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> &#8230; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>StorEvil will first invoke <strong>AccountTestContext.Given<em>I</em>Have<em>A</em>accountType_Account()</strong>, passing in the account type.<br />
It will then take the returned <strong>AccountOptions</strong> object and invoke the appropriate method to complete the rest of the step.</p>
<p>You could also declare a method to return <em>object</em> or any other type, and return different types of objects from the function depending on the parameters.</p>
<p>This can be chained to as deep a level as desired.</p>
<p>On successive steps during a scenario, StorEvil will preserve the same context objects…<br />
meaning that you can use private variables in the context objects to maintain state between steps.</p>
<h4>Extension Method Support</h4>
<p>StorEvil can invoke extension methods. For example, to interpret the following:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;">My total balance should equal $<span class="nu0">42</span></div>
</div>
<p>You could write something like this:</p>
<div class="codesnip-container" >
<div class="csharp codesnip" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">class</span> TestExtensionMethods<br />
<span class="br0">&#123;</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw1">void</span> ShouldEqual<span class="br0">&#40;</span><span class="kw1">this</span> <span class="kw4">object</span> actual, <span class="kw4">object</span> expected<span class="br0">&#41;</span><br />
&nbsp; &nbsp; <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;&#8230; <span class="me1">assertion</span> code here &#8230;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span><br />
<span class="br0">&#125;</span><br />
<span class="co1">//</span><br />
<span class="br0">&#91;</span>StorEvil.<span class="me1">Context</span><span class="br0">&#93;</span><br />
<span class="kw1">public</span> <span class="kw4">class</span> AccountTestContext <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &#8230;<br />
&nbsp; &nbsp; <span class="co1">//</span><br />
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw4">decimal</span> My_Total_Balance <span class="br0">&#123;</span> get <span class="br0">&#123;</span> <span class="kw1">return</span> &#8230; <span class="sy0">;</span><span class="br0">&#125;</span><span class="br0">&#125;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>StorEvil will invoke the .ShouldEqual() extension method on the number returned by AccountTestContext.My<em>Total</em>Balance property, passing in “$42”;</p>
<h4>Executes in the console</h4>
<p>StorEvil is executed via a simple command-line interface. This is my personal preference. It might not be for you if you are not comfortable on the command-line. Integration with ReSharper is something I&#8217;ve looked into but frankly, it&#8217;s kind of a bear and not high on the priority list right now.</p>
<p>It was originally written to generate NUnit fixtures (and still supports this), although there are some limitations to the NUnit fixture generation.</p>
<h3>Why not StorEvil?</h3>
<h4>Less polished than other options</h4>
<p>StorEvil does not have VisualStudio integration.</p>
<p>StorEvil does not have NAnt or MSBuild tasks. (yet)</p>
<p>It does not have TDD.NET or <del datetime="2010-03-05T21:30:07+00:00">Resharper integration. </del><br />
(Unless you use it in NUnit generation mode)</p>
<p><em>Update: StorEvil now has a ReSharper runner</em></p>
<p>Overall, it just a less-used tool than the other options.</p>
<h4>Is natural language testing appropriate?</h4>
<p>There is definitely an extra cost to writing natural language specs as well as context classes.<br />
Sometimes it can even feels like “writing the tests twice”.</p>
<p>Another option is to use a tool whose <em>output</em> is close to the natural language specification.<br />
For .NET development, Machine.Specifications (MSpec) is a good choice.</p>
<h3>Other similar tools</h3>
<h4>Cucumber</h4>
<p><a href="http://cukes.info">Cucumber</a> is by far the most established BDD tool, and if you use Ruby you have probably heard of it.<br />
It is in use by a large number of people, supports many languages, and is under very active development.</p>
<h4>SpecFlow</h4>
<p><a href="http://specflow.org/">SpecFlow</a> is another .NET tool that is similar to Cucumber. It also has a fairly active community.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/02/23/storevil-intro/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Calculator TDD Kata in JavaScript</title>
		<link>http://www.notthatdavefoley.com/2010/01/13/calculator-tdd-kata-in-javascript/</link>
		<comments>http://www.notthatdavefoley.com/2010/01/13/calculator-tdd-kata-in-javascript/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 15:53:13 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Geekery]]></category>
		<category><![CDATA[JavaScript is the Future]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=28</guid>
		<description><![CDATA[So, I&#8217;m back from the deadosphere. Here&#8217;s a run through  Roy Osherove&#8217;s Calculator Kata, in JavaScript, using Screw.Unit. It was quite educational to do this kata and watch it back on video. The main things I learned were: I am a horrible typist. Writing code takes a lot longer than I think it does. I [...]]]></description>
			<content:encoded><![CDATA[<p>So, I&#8217;m back from the deadosphere.</p>
<p>Here&#8217;s a run through  <a title="Roy Osherove's Calculator TDD Kata" href="http://osherove.com/tdd-kata-1/">Roy Osherove&#8217;s Calculator Kata</a>, in JavaScript, using <a href="http://github.com/pivotal/screw-unit">Screw.Unit</a>.</p>
<p>It was quite educational to do this kata and watch it back on video. The main things I learned were:</p>
<h4>I am a horrible typist.</h4>
<h4>Writing code takes a lot longer than I think it does.</h4>
<p>I expected to be able to do the beginner steps in about 10 minutes, but it actually took more than twice that long. Some of this is down to unfamiliarity with the editor (RubyMine), and some of it is standard programmer optimism.</p>
<h4>It is embarrassing to watch yourself code&#8230;.</h4>
<p>I did this kata three times so I&#8217;ve watched myself code more than is healthy.</p>
<h4>&#8230; but it is a great learning experience as well.</h4>
<p>I see a lot of areas I can improve on, coding-wise, and there are some things I do a lot that I&#8217;ve never noticed before.</p>
<h4>Without further ado&#8230;</h4>
<p>Here it is. The first 21 minutes are the &#8220;beginner&#8221; steps, the following steps are about 15 minutes, and the remaining few minutes are code tidying. There is sporadic commentary for the bits that I feel are noteworthy.
<p>[vimeo 8708519]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2010/01/13/calculator-tdd-kata-in-javascript/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>The perfect pairing</title>
		<link>http://www.notthatdavefoley.com/2008/04/23/the-perfect-pairing/</link>
		<comments>http://www.notthatdavefoley.com/2008/04/23/the-perfect-pairing/#comments</comments>
		<pubDate>Wed, 23 Apr 2008 17:25:52 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Drinkin']]></category>
		<category><![CDATA[Philosophical Bullshit]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=12</guid>
		<description><![CDATA[I&#8217;m no food chemist and I certainly couldn&#8217;t tell you which red pairs most exquisitely with pan-seared cruelty-free open-source analog halibut, but there&#8217;s one pairing that never fails me: I&#8217;d call it a match made in heaven, if there was a heaven.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m no food chemist and I certainly couldn&#8217;t tell you which red pairs most exquisitely with pan-seared cruelty-free open-source analog halibut, but there&#8217;s one pairing that never fails me:</p>
<p><a href="http://anotherdave.files.wordpress.com/2008/04/rainjam.png"><img class="alignnone size-medium wp-image-13" src="http://anotherdave.files.wordpress.com/2008/04/rainjam.png?w=235" alt="" width="235" height="300" /></a></p>
<p>I&#8217;d call it a match made in heaven, if there was a heaven.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2008/04/23/the-perfect-pairing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Best NBA quote of all time</title>
		<link>http://www.notthatdavefoley.com/2008/04/22/best-nba-quote-of-all-time/</link>
		<comments>http://www.notthatdavefoley.com/2008/04/22/best-nba-quote-of-all-time/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 23:24:33 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Philosophical Bullshit]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=11</guid>
		<description><![CDATA[&#8220;Is he the greatest? He&#8217;s in the top two.&#8221; - Larry Bird, on Michael Jordan]]></description>
			<content:encoded><![CDATA[<p>&#8220;Is he the greatest? He&#8217;s in the top two.&#8221;</p>
<p>- Larry Bird, on Michael Jordan</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2008/04/22/best-nba-quote-of-all-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2005 and Monorail RC3 setup for local development on Vista/IIS 7</title>
		<link>http://www.notthatdavefoley.com/2008/03/26/visual-studio-2005-and-monorail-rc3-setup-for-local-development-on-vistaiis-7/</link>
		<comments>http://www.notthatdavefoley.com/2008/03/26/visual-studio-2005-and-monorail-rc3-setup-for-local-development-on-vistaiis-7/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 01:20:40 +0000</pubDate>
		<dc:creator>dave</dc:creator>
				<category><![CDATA[Geekery]]></category>

		<guid isPermaLink="false">http://anotherdave.wordpress.com/?p=4</guid>
		<description><![CDATA[These are the steps I had to follow to get my Monorail RC3 project up and running in Visual Studio 2005 on Vista on my MacBook. 1. Install IIS6 compatibility, Metabase, and Application Development Features from Control Panel\Programs and Features\Turn Windows Features On and Off. 2. Follow the instructions here: How to map .rails to [...]]]></description>
			<content:encoded><![CDATA[<p>These are the steps I had to follow to get my Monorail RC3 project up and running in Visual Studio 2005 on Vista on my MacBook.</p>
<p>1. Install <b>IIS6 compatibility</b>, <b>Metabase</b>, and <b>Application Development Features</b> from <b>Control Panel\Programs and Features\Turn Windows Features On and Off</b>.</p>
<p><a href="http://anotherdave.files.wordpress.com/2008/03/iis_setup.png" title="iis_setup"><img src="http://anotherdave.files.wordpress.com/2008/03/iis_setup.thumbnail.png" alt="iis_setup" /></a></p>
<p>2. Follow the instructions here:<a href="http://blog.sneal.net/Blog/Trackback.aspx?guid=409fdfe6-3829-4c0e-8838-2e609f0c5b95"> How to map .rails to the asp.net runtime on IIS7.</a></p>
<p>3. If you are using &lt;httpModules&gt; in web.config, change the application pool to the Classic Application Pool (in IISManagementConsole, click the <b>Advanced Settings&#8230;</b> link on the right side). Alternatively, follow the instructions to migrate to the integrated pipeline mode (I couldn&#8217;t for this project).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.notthatdavefoley.com/2008/03/26/visual-studio-2005-and-monorail-rc3-setup-for-local-development-on-vistaiis-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

