<?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>Stephen St. Martin</title>
	<atom:link href="http://www.stevestmartin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.stevestmartin.com</link>
	<description>personal projects and ramblings</description>
	<lastBuildDate>Sat, 16 Jan 2010 02:04:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Getting started with Rails 3</title>
		<link>http://www.stevestmartin.com/2010/01/11/getting-started-with-rails-3/</link>
		<comments>http://www.stevestmartin.com/2010/01/11/getting-started-with-rails-3/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 03:55:23 +0000</pubDate>
		<dc:creator>stevestmartin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[rails3 ruby rails]]></category>

		<guid isPermaLink="false">http://www.stevestmartin.com/?p=122</guid>
		<description><![CDATA[Installation first lets get a copy of rails 3 going # make sure you have gem bundler and rack installed: sudo gem install bundler rack # clone of edge rails git clone git://github.com/rails/rails.git # generate a new app: ruby rails/railties/bin/rails &#8230; <a href="http://www.stevestmartin.com/2010/01/11/getting-started-with-rails-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<h2>Installation</h2>
<p>first lets get a copy of rails 3 going</p>
<pre class="brush: bash">
# make sure you have gem bundler and rack installed:
sudo gem install bundler rack

# clone of edge rails
git clone git://github.com/rails/rails.git

# generate a new app:
ruby rails/railties/bin/rails my_app
cd my_app
</pre>
<p>generate a new app:</p>
<pre class="brush: bash">
ruby rails/railties/bin/rails my_app
cd my_app
</pre>
<p>now we have to edit our ./Gemfile with some required gems that have not been released yet.</p>
<pre class="brush: ruby">
git &quot;git://github.com/rails/arel.git&quot;
gem &quot;rails&quot;, :git =&gt; &quot;git://github.com/rails/rails.git&quot;
</pre>
<p>then use the new gem bundler to bundle additional required gems:</p>
<pre class="brush: bash">
gem bundle
</pre>
<p>now script/server, script/console, script/generate, etc.. should be available as normal</p>
<h2>Configuration</h2>
<p>I have chosen to replace some of the default configurations with my own such as changing fixtures to factories, there is a great lightweight version of factory_girl by Stephen Celis written in about <a title="Miniskirt: factory_girl, relaxed" href="http://www.stephencelis.com/2010/01/11/miniskirt.html">30 LOC</a>. So we will use one of the new configurations available to us to prevent the default generators from producing fixtures automatically, also prevent the scaffold generator from creating controller layouts as I remove them anyway.</p>
<p>place within config/application.rb</p>
<pre class="brush: ruby">
config.generators do |g|
g.template_engine :erb, :layout =&gt; false
g.test_framework  :test_unit, :fixture =&gt; false
end
</pre>
<p>to be continued ..</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stevestmartin.com/2010/01/11/getting-started-with-rails-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Behavior Driven Development</title>
		<link>http://www.stevestmartin.com/2010/01/10/behavior-driven-development/</link>
		<comments>http://www.stevestmartin.com/2010/01/10/behavior-driven-development/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 01:22:13 +0000</pubDate>
		<dc:creator>stevestmartin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bdd]]></category>
		<category><![CDATA[cucumber]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rspec]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.stevestmartin.com/?p=95</guid>
		<description><![CDATA[Recently I have been trying to get more involved with agile process and BDD, while lots of documentation exists on some of the preferred frameworks such as Rspec and Cucumber, it can be very difficult to determine what may be &#8230; <a href="http://www.stevestmartin.com/2010/01/10/behavior-driven-development/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recently I have been trying to get more involved with agile process and BDD, while lots of documentation exists on some of the preferred frameworks such as Rspec and Cucumber, it can be very difficult to determine what may be the right or wrong way of going about it.</p>
<p>In my attempt at progressing my knowledge around the topic I decided to document my discoveries here so that others may benefit.</p>
<h2>What is it?</h2>
<p>Behavior driven development attempts to take the traditional approach we take to doing things and turn it on its head. Rather then thinking from the bottom we think from the top down. Who does this unit of functionality benefit? why does it benefit them? and how do they interact with it?</p>
<p>Answering these questions will help us to determine if a feature is needed and at what point in time.</p>
<h2>How do I get started?</h2>
<p>While lots of articles exist on setting up <a href="http://wiki.github.com/aslakhellesoy/cucumber/install">Cucumber </a>and and <a href="http://wiki.github.com/dchelimsky/rspec/install">Rspec</a> and many examples exist for the cucumber feature syntax, none really guide you in the direction of where to begin. Ive found myself hung up running in circles, asking questions until I&#8217;m blue in the face with not one line of code written.</p>
<ul>
<li>What feature do I start first? possibly authentication?</li>
<li>What constitutes a feature? &#8220;Manage users&#8221;? or just &#8220;Creating a user&#8221;?</li>
</ul>
<p>lets try to answer some of these with the opinions I have developed.</p>
<h2>What feature do I start first?</h2>
<p>The answer to this question is almost so incredibly easy that you bypass it completely. Think about the problem BDD is meant to solve, we want to create &#8220;software that matters&#8221;.  We want to spend our time working on the features that matter most, those that will ultimately make you money. So lets answer this question what is the primary goal of your product?</p>
<p>Lets take a hypothetical project, an issue tracker for example. Its primary purpose is to organize tickets. There is our answer the tickets.</p>
<h3>Wait a minute</h3>
<p>Now I bet your saying wait, hold on just a minute but I need users and possibly roles. My question to you is do you? is that really pertinent now? I don&#8217;t think it is, I used to be in same boat trying set up all this ground work authentication and authorization systems, but is it really needed? In the future maybe,  with a different stakeholder. But for now can we organize tickets as a single user? sure we can yeah it may be a little hectic who created what ticket and who its assigned to, but that is exactly what this iterative development process is meant to solve. Lets worry about those details when we get to them and allow our features to drive the implementation.</p>
<h2>What constitutes a feature</h2>
<p>I&#8217;m sure there is a lot of debate on this topic, however I prefer to take the approach of thinking each individual task that a user wishes to perform as a feature.  Rather then having a features/ directory containing a users.feature , projects.feature, etc.. I tend to think of those  as a module and not really a feature so i prefer to break up my features by module then by feature features/projects/create_project.feature , features/users/destroy_user.feature. while this approach seems to generate more feature files with some being relatively small, I feel it gives me the proper organization and separation of features.</p>
<p>to be continued&#8230; I hope to do a follow up post with some demo code as I build out one of my projects.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.stevestmartin.com/2010/01/10/behavior-driven-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Autotest on OSX</title>
		<link>http://www.stevestmartin.com/2010/01/10/autotest-on-osx/</link>
		<comments>http://www.stevestmartin.com/2010/01/10/autotest-on-osx/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 01:06:23 +0000</pubDate>
		<dc:creator>stevestmartin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.stevestmartin.com/?p=109</guid>
		<description><![CDATA[Download the required gems # required for autotest and rails sudo gem install autotest autotest-rails # use osx 10.5 fsevent library instead of traversing the filesystem for changes (lowers CPU usage) sudo gem install autotest-fsevent # gives us pretty red, &#8230; <a href="http://www.stevestmartin.com/2010/01/10/autotest-on-osx/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Download the required gems</p>
<pre class="brush: bash">
# required for autotest and rails
sudo gem install autotest autotest-rails

# use osx 10.5 fsevent library instead of traversing the filesystem for changes (lowers CPU usage)
sudo gem install autotest-fsevent

# gives us pretty red, green messages upon failure and succes
sudo gem install redgreen

# provide growl notifications upon success and failures
sudo gem install autotest-growl
</pre>
<p>now we just include the gems we just installed in our ~/.autotest file</p>
<pre class="brush: ruby">
# require gems
require &#039;autotest/fsevent&#039;
require &#039;autotest/growl&#039;
require &#039;redgreen/autotest&#039;

# tell autotest to ignore directories
Autotest.add_hook :initialize do |autotest|
%w{.git .svn .hg .DS_Store ._* vendor}.each {|exception| autotest.add_exception(exception) }
false
end
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stevestmartin.com/2010/01/10/autotest-on-osx/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex datagrid double click</title>
		<link>http://www.stevestmartin.com/2009/10/27/flex-datagrid-double-click/</link>
		<comments>http://www.stevestmartin.com/2009/10/27/flex-datagrid-double-click/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 20:58:09 +0000</pubDate>
		<dc:creator>stevestmartin</dc:creator>
				<category><![CDATA[Flex]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.stevestmartin.com/?p=90</guid>
		<description><![CDATA[The flex datagrid supports an event handler called itemDoubleClick , however one little gotcha is you also need to set doubleClickEnabled to true in order for this event to be properly fired. &#60;mx :Script&#62; &#60; ![CDATA[ protected var dp:ArrayCollection = &#8230; <a href="http://www.stevestmartin.com/2009/10/27/flex-datagrid-double-click/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The flex datagrid supports an event handler called itemDoubleClick , however one little gotcha is you also need to set doubleClickEnabled to true in order for this event to be properly fired.</p>
<pre class="brush: xml">
&lt;mx :Script&gt;
&lt; ![CDATA[
protected var dp:ArrayCollection = new ArrayCollection();
protected function trackGrid_itemDoubleClickHandler(event:ListEvent):void {
var data:Object = dp.getItemAt(event.currentTarget.selectedIndex);
// TODO: what you want to do with the data here
}
]]&gt;
&lt;/mx&gt;

&lt;mx :DataGrid dataProvider=&quot;{dp}&quot; doubleClickEnabled=&quot;true&quot; itemDoubleClick=&quot;myGrid_itemDoubleClickHandler(event)&quot; id=&quot;myGrid&quot;&gt;

&lt;/mx&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stevestmartin.com/2009/10/27/flex-datagrid-double-click/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby 1.9.2 on Snow Leopard</title>
		<link>http://www.stevestmartin.com/2009/09/11/ruby-1-9-2-on-snow-leopard/</link>
		<comments>http://www.stevestmartin.com/2009/09/11/ruby-1-9-2-on-snow-leopard/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 13:33:31 +0000</pubDate>
		<dc:creator>stevestmartin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Ruby 1.9]]></category>
		<category><![CDATA[RVM]]></category>
		<category><![CDATA[Snow Leopard]]></category>

		<guid isPermaLink="false">http://stevestmartin.com/?p=5</guid>
		<description><![CDATA[A quick howto on setting up 64bit Ruby w/ MySQL gem under RVM (Ruby Version Manager) <a href="http://www.stevestmartin.com/2009/09/11/ruby-1-9-2-on-snow-leopard/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>In an attempt to start some playing around with ruby 1.9 and rails/master (3.0) on Snow Leopard (note: I am configured to boot the 64bit kernel) I wanted to document my steps at getting a working ruby 1.9.2 install, as along the way i&#8217;ve encountered various issues (crashing interpreters, etc..)</p>
<p><strong>Install latest readline </strong></p>
<pre class="brush: bash">
ftp://ftp.cwru.edu/pub/bash/readline-6.0.tar.gz
tar -xvzf readline-6.0.tar.gz
cd readline-6.0
./configure
make
sudo make install
</pre>
<p><strong>Install Ruby Version Manager</strong></p>
<pre class="brush: bash">
sudo gem install rvm
rvm-install
</pre>
<p><strong>Install Ruby 1.9.2 with RVM</strong></p>
<p>making sure to set as x86_64 and point to our readline</p>
<pre class="brush: bash">
rvm install 1.9.2 -C --enable-shared,--with-readline-dir=/usr/local,--build=x86_64-apple-darwin10
rvm use 1.9.2
</pre>
<p><strong>Install MySQL gem</strong></p>
<p>also making sure to build with x86_64</p>
<pre class="brush: bash">
env ARCHFLAGS=&quot;-arch x86_64&quot; gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.stevestmartin.com/2009/09/11/ruby-1-9-2-on-snow-leopard/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
