<?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>Self As Team &#187; rails</title>
	<atom:link href="http://blog.intraspectivecorp.com/tag/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.intraspectivecorp.com</link>
	<description>Dallas based Ruby on Rails and Java Consulting</description>
	<lastBuildDate>Mon, 21 Sep 2009 02:06:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>rails + emacs + windoze = less fail</title>
		<link>http://blog.intraspectivecorp.com/2009/08/10/rails-emacs-windoze-less-fail/</link>
		<comments>http://blog.intraspectivecorp.com/2009/08/10/rails-emacs-windoze-less-fail/#comments</comments>
		<pubDate>Mon, 10 Aug 2009 22:55:07 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[emacs]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/2009/08/10/rails-emacs-windoze-less-fail/</guid>
		<description><![CDATA[Have spent the last few days working in Vista rather than OS X and it was looking fairly bleak until I spent some time updating my favorite editor.  I have never liked full blown IDE&#8217;s (like Eclipse) for rails work.  My first editor and still favorite is emacs.  Textmate keeps my fingers [...]]]></description>
			<content:encoded><![CDATA[<p>Have spent the last few days working in Vista rather than OS X and it was looking fairly bleak until I spent some time updating my favorite editor.  I have never liked full blown IDE&#8217;s (like Eclipse) for rails work.  My first editor and still favorite is emacs.  Textmate keeps my fingers humming on OS X but emacs is also running somewhere too.  On windows, emacs is the main tool but I never really invested the time to update it (was running 21.x and 22.x versions which is quite old).  So I spent some time this weekend to update it to 23.1.50 and add the ruby and rails modes.  After some missteps, I finally have a fairly nice environment with pretty nice rails support.  It even has snippets and quick navigation and refactoring (quickly create partials or helpers for example).   I even have the &#8216;railscast&#8217; theme so it looks pretty nice (at least what I&#8217;m used to on my Mac). </p>
<p>I can&#8217;t wait to go back to the Mac but at least I can be more productive while I&#8217;m slumming in Vista.  The LONG delay on starting ruby processes (like tests, console, etc&#8230;) is sapping my will to live tho&#8230;  </p>
<p>The info on rails and emacs on the web was pretty good but if someone wants my formula, I&#8217;ll be glad to post it.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2009/08/10/rails-emacs-windoze-less-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bitten by HABTM Again</title>
		<link>http://blog.intraspectivecorp.com/2009/07/23/bitten_by_habtm_again/</link>
		<comments>http://blog.intraspectivecorp.com/2009/07/23/bitten_by_habtm_again/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 18:10:45 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[associations]]></category>
		<category><![CDATA[audit]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/?p=34</guid>
		<description><![CDATA[I while back needed to add an audit trail to an older project.  I found the acts as audited plugin and put it into play and it is great.  I added my models to it and added a way to review the audit trail online  &#8211; all good &#8211; until&#8230;
I started added [...]]]></description>
			<content:encoded><![CDATA[<p>I while back needed to add an audit trail to an older project.  I found the <a href="http://opensoul.org/2006/7/21/acts_as_audited">acts as audited plugin</a> and put it into play and it is great.  I added my models to it and added a way to review the audit trail online  &#8211; all good &#8211; until&#8230;</p>
<p>I started added audits for my model <strong>associations</strong>. This went well until I wanted to audit a has and belongs to many (HABTM) association which as you know, doesn&#8217;t have to have a backing model (it simply relies on a join table that is named a particular way).  Sigh.  On a few HABTM as sociations, I actually had a model but our smarted myself (and followed an older web recipe) and created the model without id&#8217;s.  These associations do not work with this plugin.</p>
<p>No way to get there from here exept to convert HABTM to has many through.  Further evidence why HABTM is shortcut that only leads to pain later if you need to extend the associations (like adding audit trails). </p>
<p>Avoid HABTM and your life will be better&#8230;. just imagine having to convert 10 or more association tables to models on a production system that has 1000&#8217;s of parent objects.  You see any fun in that? The <a href="http://gilesbowkett.blogspot.com/2009/07/do-you-believe-in-magic.html">superstitious</a> would call how HABTM handles join objects as &#8216;magic&#8217; which isn&#8217;t really very accurate.  It is simply a conventional shortcut.  My big problem with it is the lack of flexibility it gives you &#8211; it is one of those box-canyon paradigms that is hard to get out of.</p>
<p>Oh and another note, if you add acts_as_audited to your project late in the game, you may run into problems with migrations if any migrations load data. The reason is a fresh checkout will bring the audit code which will perform audits even on migrated data and since early migrations don&#8217;t have the audit table loaded yet (it is a later migration), you can&#8217;t migrate data. Sure you can just do a rake db:schema:load but that will leave you without some of your migration data.</p>
<p>An easy solution is to simply rename the acts as audited migration to be your first migration (mung the date in the file name). This tricks  the migration to run first and all should be fine&#8230; Note, this even works if you have previously migrated and then do an update to get this new &#8216;old&#8217; migration &#8211;  the migration still runs even though it is out of sequence thanks to the schema_migrations table which keeps up with what migrations have been run.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2009/07/23/bitten_by_habtm_again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Silly Simple Git Initialization for your Rails Projects</title>
		<link>http://blog.intraspectivecorp.com/2009/07/06/silly-simple-git-initialization-for-your-rails-projects/</link>
		<comments>http://blog.intraspectivecorp.com/2009/07/06/silly-simple-git-initialization-for-your-rails-projects/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 16:44:03 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/?p=19</guid>
		<description><![CDATA[Simple script to 'git' your rails going.]]></description>
			<content:encoded><![CDATA[<p>It is such a joy to have such great technologies at our fingertips.  Ruby on Rails can be a fantastic productivity booster for projects but I often find I get huge benefits from it for simply exploring ideas or working up a quick functional prototype.  By adding on things like <a href="http://blog.intraspectivecorp.com/2008/03/01/boost-team-productivity-and-consistency-by-developing-and-using-rails-generators/">customized generators that suit your client&#8217;s configuration</a> and customizable menus, you can get to a workable prototype in record time (minutes to hours).  </p>
<p>Part of the benefit of working with rails projects is the speed with which you can refactor and scaffold your way into different configurations.  This can sometimes get you into trouble if an experiment or plugin doesn&#8217;t work.  The best solution I&#8217;ve found for this is to <strong>ALWAYS</strong> initialized your fresh rails project into a <a href="http://git-scm.com/">git</a> repository.  This is like having infinite  idea or skill mulligan&#8217;s for your project &#8211; a great safety net that let&#8217;s you go fast without fear.</p>
<p><a href="http://railscasts.com">Ryan Bates&#8217;s</a> excellent screen cast series had a nice review of using <a href="http://railscasts.com/episodes/96-git-on-rails">git with rails</a> and one of the commenters (<a href="http://notahat.com/">Pete Yandell</a>) offered a script to simplify life.  This script sets up a standard rails project into git with the proper ignores.  I modified the original script slightly to avoid placing .gitignore files into the empty directories within the .git directory.  This is a harmless change but it seems cleaner to me. Here is my version of it:</p>
<p><code><br />
#!/bin/sh<br />
cat <<EOF > .gitignore<br />
log/*.log<br />
tmp/**/*<br />
db/*.sqlite3<br />
coverage<br />
doc/app/*<br />
EOF<br />
find . -type d -empty -exec touch {}/.gitignore \;<br />
git init<br />
echo "TODO - provide project README" > README<br />
git add .<br />
git commit -a -m "Initial import."<br />
</code><br />
(here&#8217;s the <a href="http://gist.github.com/141509">gist</a>)</p>
<p>This script works great (on OS X anyway) for setting up a project in git. This allows me to extend the &#8216;prototype&#8217; from hours to multiple days if I need to without losing control or risking breaking the whole thing with a laps of concentration.  I can create branches for experimental ideas and quickly switch back and forth.  As long as my migrations are current and especially if I&#8217;m using data generators like <a href="http://populator.rubyforge.org/">populator</a>, I can switch between branches to show my client a few different ideas or behaviors within seconds.  </p>
<p>It is so great to have a (revisable) history of what I&#8217;ve done on a project.  I can also quickly stash an idea away to work on it later.  No matter what I do on the prototype, I can always recover back to some previous spot without much fuss or concern. </p>
<p>This technique works so well because it is all self contained within your rails directory and because it is such a low-overhead and fast approach. </p>
<p>The approach works like this:</p>
<ol>
<li>rails some_new_project</li>
<li>cd some_new_project</li>
<li>git-rails</li>
<li>work on project for minutes or weeks with frequent checkins</li>
<li>create branches, rebase, squash commits, what ever &#8211; repeat previous steps
<li>if want to keep it, move it to a public repo, if not simply rm -rf the entire directory&#8230;</li>
</ol>
<p>Rails and git are really two powerful tools that have greatly revolutionized my personal work flow.  I get to move quickly and with the assurance that I can undo any bad ideas.  Infinite idea mulligans.  I also get to practice using git even if my client is stuck on subversion (or worse).  I highly recommend ALWAYS setting up your rails projects this way.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2009/07/06/silly-simple-git-initialization-for-your-rails-projects/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Powerful Results with Google Charts</title>
		<link>http://blog.intraspectivecorp.com/2008/07/15/powerful-results-with-google-charts/</link>
		<comments>http://blog.intraspectivecorp.com/2008/07/15/powerful-results-with-google-charts/#comments</comments>
		<pubDate>Tue, 15 Jul 2008 22:03:00 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[agile]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[burn down]]></category>
		<category><![CDATA[google charts]]></category>
		<category><![CDATA[information radiator]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/2008/07/15/powerful-results-with-google-charts/</guid>
		<description><![CDATA[I was working on a scrum team that wanted to make our burn down charts available on our wiki.  We tried the movable type chart plugins and they worked ok but we lacked the control we needed.  I had heard about google charts and after looking into them I realized that we might [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on a scrum team that wanted to make our burn down charts available on our wiki.  We tried the movable type chart plugins and they worked ok but we lacked the control we needed.  I had heard about google charts and after looking into them I realized that we might be able to coax these to produce the charts we were missing.  To my surprise this was quite easy to prototype but a little harder to do in practice.   The nice thing about the google charts, is they are essentially image tags with specifically built URL&#8217;s.  Constructing the URL can be a challenge but in general the performance we observed was great and the price (free) can&#8217;t be beat. You can read more about it <a href="http://code.google.com/apis/chart/" title="Google Chart API" target="_blank">here</a>.</p>
<p><span id="more-11"></span></p>
<p>Before I get into how this could be used, take a look at some examples in this sample gallery.</p>
<table>
<tr>
<td><img src="http://chart.apis.google.com/chart?cht=bvs&amp;chco=4d89f9&amp;chd=t:120,100,90,95,70,40,30&amp;chs=100x100" /></td>
<td><img src="http://chart.apis.google.com/chart?cht=lxy&amp;chs=200x125&amp;chd=t:0,30,60,70,90,95,100|20,30,40,50,60,70,80|10,30,40,45,52|100,90,40,20,10|-1|5,33,50,55,7&amp;chco=3072F3,ff0000,00aaaa&amp;chls=2,4,1&amp;chm=s,FF0000,0,-1,5|s,0000ff,1,-1,5|s,00aa00,2,-1,5" /></td>
</tr>
<tr>
<td><img src="http://chart.apis.google.com/chart?cht=p3&amp;chd=s:Uf9a&amp;chs=250x100&amp;chl=January|February|March|April" /></td>
<td><img src="http://chart.apis.google.com/chart?cht=t&amp;chs=200x100&amp;chd=s:TEXAS&amp;chco=ffffff,2020ff&amp;chld=TX&amp;chtm=usa&amp;chf=bg,s,EAF7FE" /></td>
</tr>
<tr>
<td><img src="http://chart.apis.google.com/chart?cht=lc&amp;chd=s:99,cefhjkqwrlgYcfgc,QSSVXXdkfZUMRTUQ,HJJMOOUbVPKDHKLH,AA&amp;chco=000000,000000,000000,000000,000000&amp;chls=1,1,0|1,1,0|1,1,0|1,4,0&amp;chs=200x125&amp;chxt=x,y&amp;chxl=0:|Sep|Oct|Nov|Dec|1:||50|100&amp;chg=25,25&amp;chm=b,76A4FB,0,1,0|b,224499,1,2,0|b,FF0000,2,3,0|b,80C65A,3,4,0" /></td>
<td><img src="http://chart.apis.google.com/chart?cht=lc&amp;chd=s:pqokeYONOMEBAKPOQVTXZdecaZcglprqxuux393ztpoonkeggjp&amp;chco=676767&amp;chls=4.0,3.0,0.0&amp;chs=200x125&amp;chxt=x,y&amp;chxl=0:|1|2|3|4|5|1:|0|50|100&amp;chf=c,lg,90,76A4FB,0.5,ffffff,0|bg,s,EFEFEF" /></td>
</tr>
</table>
<h4>Ok, how does this help?</h4>
<p>First thing to note is the above samples are all generated on the fly using the google chart api.  If you look at the image url&#8217;s you&#8217;ll see that all of the chart parameters/colors/data/format etc&#8230; are provided on the url line to google.  This is simple but you obviously don&#8217;t want to do this by hand.  This is where you can get creative.  Say you have a web based data source (say one that stores project story points by sprint), you could coax that web service to produce json or xml data to your static page which could run some embedded javascript to produce a url to the Google charts API.  Not totally trivial but since there are no server side elements (other than your feed), you can do this with minimal infrastructure.</p>
<p>I experimented with a simple rails app that allowed us to record the story point progress and plans on a few sprints.  One of the side effects is it could produce nice looking burn down charts by generating the necessary url to feed to google charts.  I&#8217;ll try to post more about this later with some examples (sanitized).</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2008/07/15/powerful-results-with-google-charts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuous Integration Too Simple to Ignore</title>
		<link>http://blog.intraspectivecorp.com/2008/04/15/continuous-integration-too-simple-to-ignore/</link>
		<comments>http://blog.intraspectivecorp.com/2008/04/15/continuous-integration-too-simple-to-ignore/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 21:52:33 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[cruise control]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/2008/04/15/continuous-integration-too-simple-to-ignore/</guid>
		<description><![CDATA[I&#8217;ve always been a big fan of continuous integration.  There is something empowering about having a tireless little robot patiently waiting for you to check your code in. When it sees your latest commit, it quickly downloads it and then runs all your tests.  When that&#8217;s over, it prints a nice web summary [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve always been a big fan of <a href="http://en.wikipedia.org/wiki/Continuous_integration">continuous integration</a>.  There is something empowering about having a tireless little robot patiently waiting for you to check your code in. When it sees your latest commit, it quickly downloads it and then runs all your tests.  When that&#8217;s over, it prints a nice web summary of what it did.  It can even update your main team portal pages with updated content (javadocs, rdocs, test coverage, daily metrics, whatever). It is like having a groupie fanbot who loves your code.</p>
<p>Until you check in something that breaks (fails a test or worse yet, doesn&#8217;t compile). Then your little groupie is more like a stalker. Not only does it display a nasty web page (in shades of red) about the build YOU broke but it probably sent out a raft of emails about it.  Pretty embarrassing.</p>
<p><span id="more-10"></span></p>
<p>This is actually a  love hate thing. Every successful project I&#8217;ve worked (within the last 8 years) on has used continuous integration in one form or another. The pseuso standard in the industry has been Cruise Control.  It is a pretty simple java based process and it can handle very complex setups.  The big downside is it is a real big pain to setup.</p>
<p>Enter <a href="http://cruisecontrolrb.thoughtworks.com/"><strong>cruisecontrol rb</strong></a>.</p>
<h4>What is cruise rb</h4>
<p>This is essentially a cruise control written by the <a href="http://www.thoughtworks.com/">Thought Works</a> guys in Ruby/Rails.  The neato thing is this variant of cruise is a breeze to setup.  Literally took 5 minutes.  On our Redhat server it went something like this:</p>
<ol>
<li>wget http://rubyforge.org/frs/download.php/27495/cruisecontrolrb-1.2.1.tgz</li>
<li>tar zxvf cruisecontrolrb-1.2.1.tgz</li>
<li>cd cruisecontrolrb-1.2.1</li>
<li>./cruise add guide &#8211;url svn://some/repo/we/had/trunk</li>
<li>./cruise start &amp;</li>
<li>Add a redirector in apache to redirect  */cruise/* to  localhost:3333 (which is where cruise starts)</li>
<li>sudo /usr/sbin/httpd -k restart</li>
</ol>
<p>That&#8217;s it.  (almost&#8230; read about some of the slight config tweaks I needed to make below)</p>
<p>Too easy.</p>
<h4>Notes / Next Steps</h4>
<p>Note, this version of cruise is limited to svn only (other SCM&#8217;s are in the works, and there is a patch for at least git out there somewhere). This cruise can support java (or other) projects as well as long as you tell it how to build.</p>
<h4>Some Minor Hacks &#8211; cruise rb is RoR after all&#8230;</h4>
<p>I actually needed to do a simple set of changes to make cruise&#8217;s dashboard (it&#8217;s webapp) happy behind the apache redirector (the redirector is needed because 03 doesn&#8217;t have port 3333 open to the outside world).</p>
<ol>
<li> add ActionController::AbstractRequest.relative_url_root = &#8220;/cruise&#8221; to the config/environment.rb file</li>
<li>modify the public/stylesheets/*.css files so url(/images/&#8230;) were replaced with url(/cruise/images/&#8230;) throughout.</li>
</ol>
<p>Continous integration is like zentest for the entire team but can also do some really useful things like building team / project documentation.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2008/04/15/continuous-integration-too-simple-to-ignore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Boost Team Productivity and Consistency By Developing and Using Rails Generators</title>
		<link>http://blog.intraspectivecorp.com/2008/03/01/boost-team-productivity-and-consistency-by-developing-and-using-rails-generators/</link>
		<comments>http://blog.intraspectivecorp.com/2008/03/01/boost-team-productivity-and-consistency-by-developing-and-using-rails-generators/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 20:00:54 +0000</pubDate>
		<dc:creator>David Hainlin</dc:creator>
				<category><![CDATA[rails]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[generator]]></category>
		<category><![CDATA[intranet]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://blog.intraspectivecorp.com/rails/boost-team-productivity-and-consistency-by-developing-and-using-rails-generators/</guid>
		<description><![CDATA[If you have worked with Ruby on Rails for any time at all, you are very comfortable with the speed at which you can create an application or prototype. Using scaffold generators and by following the conventions of rails, you can easily get started on a prototype app in a few minutes.  As you start [...]]]></description>
			<content:encoded><![CDATA[<p>If you have worked with Ruby on Rails for any time at all, you are very comfortable with the speed at which you can create an application or prototype. Using scaffold generators and by following the conventions of rails, you can easily get started on a prototype app in a few minutes.  As you start to incorporate your client&#8217;s styling, menus or other markup/design aspects the power of generators and scaffolds seems to diminished.  If you find yourself in a position of creating the same menu or stylistic elements over and over for multiple sites, you should consider packaging them generically as a generator gem.</p>
<p>In some recent projects, we were creating sites with a consistent  &#8216;intranet&#8217; look and feel (mandated by the client&#8217;s web guidelines).  Doing this each time was a pain because of the need to rework the style sheets, layouts and copy in css images. Lots of  moving parts and hard for the some of the less experienced team members to get right without lots of help. I kept thinking, it would be great if there was some way to generate the boilerplate web menus for our apps so you can get up and running in minutes.  This is where taking a little time to create a generator and package it as an internal gem that each team member can install and use.</p>
<p><span id="more-9"></span> You have all used generators (scaffold, migration, model, etc&#8230;) in your rails projects. A generator is run from your project root directory and it builds or modifies your files to do something useful.  I&#8217;m a big fan of Ryan Bate&#8217;s nifty generators so I adopted that as the basis for incorporating the intranet styled menus I needed. This took some experimentation to get right but pretty soon I had a repeatable generator that mostly copied in images and tweaked the application.html.erb layout. To make this extendable, I developed a simplified menu approach driven from a single yml file.  In a future post, I&#8217;ll post more details about how this worked if there is interest.</p>
<p>The generator started life as a simple plugin to and was later converted easily into a gem.  The nice thing about rails is any gem that is a generator will automatically be available to you via script/generate.  I placed this gem on our team site with instructions and we all added it to our gem repositories.</p>
<p>Now if you wanted to quickly set up your new rails app to look like a real intranet page (for this client), you simply ran the generator in your new rails project and tweaked the config/menu.yml file.  This was great for prototyping or brainstorming in a meeting with customers.  From new rails app to internal app in seconds.</p>
<p>We used this gem to retrofit older apps into the desired look and feel and used it on several new apps and prototypes.  The team was digging it but a bigger buzz was created after I put together a screencast demonstrating how easy it was to use.  The rapid development ability of rails was lost on them until we added the ability to rapidly make stock apps look like their &#8216;client intranet&#8217; apps.  We adopted this approach to generate different layouts so we could evaluate a site in one of three different &#8216;themes&#8217;.  Note, these themes were quite different and involved much more than simple css changes.  The genetators made this very easy to experiment with.</p>
<p>There are quite a few limitations to what a generator can and cannot do but that is what make them so easy to work with for tasks like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.intraspectivecorp.com/2008/03/01/boost-team-productivity-and-consistency-by-developing-and-using-rails-generators/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
