<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Jason's Weblog</title>
  <id>tag:www.jasongarber.com,2005:Typo</id>
  <generator uri="http://www.typosphere.org" version="4.0">Typo</generator>
  <link href="http://www.jasongarber.com/xml/atom/feed.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.jasongarber.com/" rel="alternate" type="text/html"/>
  <updated>2007-07-24T04:55:27-07:00</updated>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:b5577e7d-613f-41e7-9adc-9d4d547341fb</id>
    <published>2007-07-23T11:22:00-07:00</published>
    <updated>2007-07-24T04:55:27-07:00</updated>
    <title type="html">Stay away from Toyota Financial Services</title>
    <link href="http://www.jasongarber.com/articles/2007/07/23/stay-away-from-toyota-financial-services" rel="alternate" type="text/html"/>
    <summary type="html">&lt;p&gt;Fourteen weeks after Toyota Financial repossessed my car, the whole mess is completely sorted out.  They had applied a bad check to the wrong account–mine.  They discovered and reversed their error, but had stopped my automatic payments and didn&amp;#8217;t bother to restart them or send me a letter telling me about the goof.  We only found out when my roommate and landlord were gotten out of bed in the middle of the night by the noise of a tow truck.&lt;/p&gt;


	&lt;p&gt;The representative I first spoke with said they tried calling after they realized the error but didn&amp;#8217;t have a phone number for me (guess that makes it easy to &amp;#8220;try&amp;#8221;).  I gave that person my phone number, and again when I talked with a manager a few days later.  In May I sent them a letter saying I still wasn&amp;#8217;t sure they had my phone number and I provided it in writing.  Then I called in June to make sure they were going to make my automatic payment happen and the representative said, &amp;#8220;Mr. Garber, I&amp;#8217;m not showing a phone number on file.  Would you mind giving that to me?&amp;#8221;&lt;/p&gt;


	&lt;p&gt;They didn&amp;#8217;t send me a letter telling me of the problem, either.  The manager, Darien, with whom we argued for a long while to get this resolved said, &amp;#8220;Sir, we tried calling and we sent you a letter.&amp;#8221;  I said, &amp;#8220;Darien, I didn&amp;#8217;t receive any letter.  My girlfriend&amp;#8217;s mother has been checking every two weeks and she says nothing&amp;#8217;s come.  Did you send me a letter?&amp;#8221;  He responded, &amp;#8220;No, sir, we didn&amp;#8217;t send a letter.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Toyota eventually did the right thing, but they sure weren&amp;#8217;t nice about it.  It took them a long time to see that they had made a mistake and then get all the parts of this huge corporation to work together to return the car and clean up my credit history.  One division could clean up one credit flag.  They had a phone number, but no mailing address.  The credit dispute group had to handle the rest of it.  They have an address but won&amp;#8217;t give their phone number.  I still haven&amp;#8217;t heard back on my request for a written apology to the five people who were up half the night on Friday, April 13 when the car was towed.&lt;/p&gt;


	&lt;p&gt;As of today that loan account is closed and it and all my bank accounts have moved to a friendly local bank.  The rate is better than Toyota&amp;#8217;s, they know me by name, and I know if they were to make a mistake, I&amp;#8217;d get a personal visit if I couldn&amp;#8217;t be reached.  I couldn&amp;#8217;t be happier with them.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Fourteen weeks after Toyota Financial repossessed my car, the whole mess is completely sorted out.  They had applied a bad check to the wrong account–mine.  They discovered and reversed their error, but had stopped my automatic payments and didn&amp;#8217;t bother to restart them or send me a letter telling me about the goof.  We only found out when my roommate and landlord were gotten out of bed in the middle of the night by the noise of a tow truck.&lt;/p&gt;


	&lt;p&gt;The representative I first spoke with said they tried calling after they realized the error but didn&amp;#8217;t have a phone number for me (guess that makes it easy to &amp;#8220;try&amp;#8221;).  I gave that person my phone number, and again when I talked with a manager a few days later.  In May I sent them a letter saying I still wasn&amp;#8217;t sure they had my phone number and I provided it in writing.  Then I called in June to make sure they were going to make my automatic payment happen and the representative said, &amp;#8220;Mr. Garber, I&amp;#8217;m not showing a phone number on file.  Would you mind giving that to me?&amp;#8221;&lt;/p&gt;


	&lt;p&gt;They didn&amp;#8217;t send me a letter telling me of the problem, either.  The manager, Darien, with whom we argued for a long while to get this resolved said, &amp;#8220;Sir, we tried calling and we sent you a letter.&amp;#8221;  I said, &amp;#8220;Darien, I didn&amp;#8217;t receive any letter.  My girlfriend&amp;#8217;s mother has been checking every two weeks and she says nothing&amp;#8217;s come.  Did you send me a letter?&amp;#8221;  He responded, &amp;#8220;No, sir, we didn&amp;#8217;t send a letter.&amp;#8221;&lt;/p&gt;


	&lt;p&gt;Toyota eventually did the right thing, but they sure weren&amp;#8217;t nice about it.  It took them a long time to see that they had made a mistake and then get all the parts of this huge corporation to work together to return the car and clean up my credit history.  One division could clean up one credit flag.  They had a phone number, but no mailing address.  The credit dispute group had to handle the rest of it.  They have an address but won&amp;#8217;t give their phone number.  I still haven&amp;#8217;t heard back on my request for a written apology to the five people who were up half the night on Friday, April 13 when the car was towed.&lt;/p&gt;


	&lt;p&gt;As of today that loan account is closed and it and all my bank accounts have moved to a friendly local bank.  The rate is better than Toyota&amp;#8217;s, they know me by name, and I know if they were to make a mistake, I&amp;#8217;d get a personal visit if I couldn&amp;#8217;t be reached.  I couldn&amp;#8217;t be happier with them.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:1bd38868-858e-45c3-a497-c5d17c42717b</id>
    <published>2007-06-23T06:19:00-07:00</published>
    <updated>2007-06-23T06:20:40-07:00</updated>
    <title type="html">Convert Excel to CSV</title>
    <link href="http://www.jasongarber.com/articles/2007/06/23/convert-excel-to-csv" rel="alternate" type="text/html"/>
    <category term="os-x" scheme="http://www.jasongarber.com/articles/category/os-x" label="OS X"/>
    <summary type="html">&lt;p&gt;A little Applescript to batch convert xls files to csv:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
set theFolder to choose folder with prompt "Choose the folder that contains your Excel files" 
tell application "Finder" to set theFiles to (files of theFolder)
set fileCount to count theFiles
repeat with i from 1 to fileCount
    set fName to text 1 thru -5 of ((name of item i of theFiles) as text)
    if ((name of item i of theFiles) as text) ends with ".xls" then
        set tName to (theFolder as text) &amp;#38; fName &amp;#38; ".csv" 
        tell application "Microsoft Excel" 
            activate
            open (item i of theFiles) as text
            save fName in tName as CSV
            close active workbook without saving
        end tell
    end if
end repeat
&lt;/code&gt;
&lt;/pre&gt;</summary>
    <content type="html">&lt;p&gt;A little Applescript to batch convert xls files to csv:&lt;/p&gt;


&lt;pre&gt;
&lt;code&gt;
set theFolder to choose folder with prompt "Choose the folder that contains your Excel files" 
tell application "Finder" to set theFiles to (files of theFolder)
set fileCount to count theFiles
repeat with i from 1 to fileCount
    set fName to text 1 thru -5 of ((name of item i of theFiles) as text)
    if ((name of item i of theFiles) as text) ends with ".xls" then
        set tName to (theFolder as text) &amp;#38; fName &amp;#38; ".csv" 
        tell application "Microsoft Excel" 
            activate
            open (item i of theFiles) as text
            save fName in tName as CSV
            close active workbook without saving
        end tell
    end if
end repeat
&lt;/code&gt;
&lt;/pre&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:73d14a49-9ed4-4534-9a81-bb4b6a8a50ee</id>
    <published>2007-06-01T11:56:00-07:00</published>
    <updated>2007-06-01T12:11:37-07:00</updated>
    <title type="html">Compiling ht://Check on OS X</title>
    <link href="http://www.jasongarber.com/articles/2007/06/01/compiling-ht-check-on-os-x" rel="alternate" type="text/html"/>
    <category term="os-x" scheme="http://www.jasongarber.com/articles/category/os-x" label="OS X"/>
    <summary type="html">In case you&amp;#8217;re trying to configure ht://Check on &lt;span class="caps"&gt;OS X&lt;/span&gt; and running into 
&lt;pre&gt;
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /usr/local/htcheck/lib/htcheck/libhtmysql-1.2.4.dylib
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /usr/local/htcheck/lib/htcheck/libhtmysql-1.2.4.dylib
  Expected in: flat namespace

Trace/BPT trap
&lt;/pre&gt;

or you&amp;#8217;re getting this when you try to &lt;code&gt;make&lt;/code&gt;
&lt;pre&gt;
/usr/bin/ld: Undefined symbols:
_compress
_uncompress
collect2: ld returned 1 exit status
&lt;/pre&gt;

Then compile like this:
&lt;pre&gt;
export EXTRA_LIBS='-lz'
./configure --prefix=/usr/local/htcheck --with-mysql=/usr/local/mysql --enable-static --disable-shared
make
sudo make install
&lt;/pre&gt;
..and you&amp;#8217;ll save yourself a few hours&amp;#8217; frustration.</summary>
    <content type="html">In case you&amp;#8217;re trying to configure ht://Check on &lt;span class="caps"&gt;OS X&lt;/span&gt; and running into 
&lt;pre&gt;
dyld: lazy symbol binding failed: Symbol not found: _mysql_init
  Referenced from: /usr/local/htcheck/lib/htcheck/libhtmysql-1.2.4.dylib
  Expected in: flat namespace

dyld: Symbol not found: _mysql_init
  Referenced from: /usr/local/htcheck/lib/htcheck/libhtmysql-1.2.4.dylib
  Expected in: flat namespace

Trace/BPT trap
&lt;/pre&gt;

or you&amp;#8217;re getting this when you try to &lt;code&gt;make&lt;/code&gt;
&lt;pre&gt;
/usr/bin/ld: Undefined symbols:
_compress
_uncompress
collect2: ld returned 1 exit status
&lt;/pre&gt;

Then compile like this:
&lt;pre&gt;
export EXTRA_LIBS='-lz'
./configure --prefix=/usr/local/htcheck --with-mysql=/usr/local/mysql --enable-static --disable-shared
make
sudo make install
&lt;/pre&gt;
..and you&amp;#8217;ll save yourself a few hours&amp;#8217; frustration.</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:e51a761d-5582-4569-86cd-17742928af59</id>
    <published>2006-10-24T16:59:00-07:00</published>
    <updated>2006-10-31T11:26:49-08:00</updated>
    <title type="html">Easier testing of forms: form_test_helper</title>
    <link href="http://www.jasongarber.com/articles/2006/10/24/easier-testing-of-forms-form_test_helper" rel="alternate" type="text/html"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <summary type="html">With the &lt;a href="http://code.google.com/p/form-test-helper/"&gt;form_test_helper&lt;/a&gt; Rails plugin, your functional and integration tests can work more like the browser.  No longer do you need to feed params to an action:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="symbol"&gt;:create&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:category&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:out_of_print&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
&lt;span class="ident"&gt;assert_response&lt;/span&gt; &lt;span class="symbol"&gt;:success&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
... and then watch it silently break when you change your form but forget to change the test.  With  &lt;a href="http://code.google.com/p/form-test-helper/"&gt;form_test_helper&lt;/a&gt;, you just call up the form, change the fields you want, and submit it.
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;get&lt;/span&gt; &lt;span class="symbol"&gt;:new&lt;/span&gt;
&lt;span class="ident"&gt;submit_form&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Programming&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;out_of_print&lt;/span&gt;&lt;span class="punct"&gt;'].&lt;/span&gt;&lt;span class="ident"&gt;uncheck&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="ident"&gt;assert_response&lt;/span&gt; &lt;span class="symbol"&gt;:success&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  
...or simply:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;submit_form&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:category&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Programming&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:out_of_print&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This is advantageous because it uses the action  and method of the form, verifies that the form and the fields you specify are present and not misspelled, and it preserves any hidden or default values that may be in the form, like in &lt;a href="http://code.google.com/p/form-spam-protection/"&gt;form_spam_protection&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Features&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;Can select_form by dom_id or url&amp;#8212;or call without arguments if there&amp;#8217;s only one form&lt;/li&gt;
		&lt;li&gt;Specifying a field name that doesn&amp;#8217;t exist raises an exception&lt;/li&gt;
		&lt;li&gt;Fields that are selects (dropdowns) won&amp;#8217;t let you set a value that&amp;#8217;s not in its options&lt;/li&gt;
		&lt;li&gt;Selects can set using the option label or the option value&lt;/li&gt;
		&lt;li&gt;Inspect/verify the options for selects and radio buttons&lt;/li&gt;
		&lt;li&gt;Works with RESTful links and forms &amp;#8211; :method =&amp;gt; :put, :delete&amp;#8230;&lt;/li&gt;
		&lt;li&gt;Checks for the presence of a submit button when you submit the form&lt;/li&gt;
		&lt;li&gt;Works in functional and integration tests&lt;/li&gt;
		&lt;li&gt;You can pass #submit a hash and it will update the form accordingly.  Submitting a form with new values can be as simple as: &lt;code&gt;select_form.submit {:username =&amp;gt; 'bob', :password =&amp;gt; 'opensesame'}&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Assert presence of and follow links&lt;/li&gt;
		&lt;li&gt;See tests for more goodies!&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Installing&lt;/h3&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;./script/plugin install -x http://form-test-helper.googlecode.com/svn/form_test_helper/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Requires &lt;a href="http://wiki.rubyonrails.com/rails/pages/EdgeRails"&gt;EdgeRails&lt;/a&gt; or the &lt;a href="http://www.agilewebdevelopment.com/plugins/assert_select"&gt;assert_select&lt;/a&gt; plugin&lt;/p&gt;


	&lt;h3&gt;Bugs/Suggestions&lt;/h3&gt;


	&lt;p&gt;You can e-mail me with my first and last initials at this domain or post &amp;#8220;issues&amp;#8221; on &lt;a href="http://code.google.com/p/form-test-helper"&gt;http://code.google.com/p/form-test-helper&lt;/a&gt;&lt;/p&gt;</summary>
    <content type="html">With the &lt;a href="http://code.google.com/p/form-test-helper/"&gt;form_test_helper&lt;/a&gt; Rails plugin, your functional and integration tests can work more like the browser.  No longer do you need to feed params to an action:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;post&lt;/span&gt; &lt;span class="symbol"&gt;:create&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:category&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;1&lt;/span&gt;&lt;span class="punct"&gt;,&lt;/span&gt; &lt;span class="symbol"&gt;:out_of_print&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="number"&gt;0&lt;/span&gt;
&lt;span class="ident"&gt;assert_response&lt;/span&gt; &lt;span class="symbol"&gt;:success&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
... and then watch it silently break when you change your form but forget to change the test.  With  &lt;a href="http://code.google.com/p/form-test-helper/"&gt;form_test_helper&lt;/a&gt;, you just call up the form, change the fields you want, and submit it.
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;get&lt;/span&gt; &lt;span class="symbol"&gt;:new&lt;/span&gt;
&lt;span class="ident"&gt;submit_form&lt;/span&gt; &lt;span class="keyword"&gt;do&lt;/span&gt; &lt;span class="punct"&gt;|&lt;/span&gt;&lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;|&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;name&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;'&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;category&lt;/span&gt;&lt;span class="punct"&gt;']&lt;/span&gt; &lt;span class="punct"&gt;=&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;Programming&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;
  &lt;span class="ident"&gt;form&lt;/span&gt;&lt;span class="punct"&gt;['&lt;/span&gt;&lt;span class="string"&gt;out_of_print&lt;/span&gt;&lt;span class="punct"&gt;'].&lt;/span&gt;&lt;span class="ident"&gt;uncheck&lt;/span&gt;
&lt;span class="keyword"&gt;end&lt;/span&gt;
&lt;span class="ident"&gt;assert_response&lt;/span&gt; &lt;span class="symbol"&gt;:success&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;  
...or simply:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;submit_form&lt;/span&gt; &lt;span class="symbol"&gt;:name&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Pickaxe&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:category&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="punct"&gt;'&lt;/span&gt;&lt;span class="string"&gt;Programming&lt;/span&gt;&lt;span class="punct"&gt;',&lt;/span&gt; &lt;span class="symbol"&gt;:out_of_print&lt;/span&gt; &lt;span class="punct"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="constant"&gt;false&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;This is advantageous because it uses the action  and method of the form, verifies that the form and the fields you specify are present and not misspelled, and it preserves any hidden or default values that may be in the form, like in &lt;a href="http://code.google.com/p/form-spam-protection/"&gt;form_spam_protection&lt;/a&gt;.&lt;/p&gt;


	&lt;h3&gt;Features&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;Can select_form by dom_id or url&amp;#8212;or call without arguments if there&amp;#8217;s only one form&lt;/li&gt;
		&lt;li&gt;Specifying a field name that doesn&amp;#8217;t exist raises an exception&lt;/li&gt;
		&lt;li&gt;Fields that are selects (dropdowns) won&amp;#8217;t let you set a value that&amp;#8217;s not in its options&lt;/li&gt;
		&lt;li&gt;Selects can set using the option label or the option value&lt;/li&gt;
		&lt;li&gt;Inspect/verify the options for selects and radio buttons&lt;/li&gt;
		&lt;li&gt;Works with RESTful links and forms &amp;#8211; :method =&amp;gt; :put, :delete&amp;#8230;&lt;/li&gt;
		&lt;li&gt;Checks for the presence of a submit button when you submit the form&lt;/li&gt;
		&lt;li&gt;Works in functional and integration tests&lt;/li&gt;
		&lt;li&gt;You can pass #submit a hash and it will update the form accordingly.  Submitting a form with new values can be as simple as: &lt;code&gt;select_form.submit {:username =&amp;gt; 'bob', :password =&amp;gt; 'opensesame'}&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Assert presence of and follow links&lt;/li&gt;
		&lt;li&gt;See tests for more goodies!&lt;/li&gt;
	&lt;/ul&gt;


	&lt;h3&gt;Installing&lt;/h3&gt;


&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;./script/plugin install -x http://form-test-helper.googlecode.com/svn/form_test_helper/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Requires &lt;a href="http://wiki.rubyonrails.com/rails/pages/EdgeRails"&gt;EdgeRails&lt;/a&gt; or the &lt;a href="http://www.agilewebdevelopment.com/plugins/assert_select"&gt;assert_select&lt;/a&gt; plugin&lt;/p&gt;


	&lt;h3&gt;Bugs/Suggestions&lt;/h3&gt;


	&lt;p&gt;You can e-mail me with my first and last initials at this domain or post &amp;#8220;issues&amp;#8221; on &lt;a href="http://code.google.com/p/form-test-helper"&gt;http://code.google.com/p/form-test-helper&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:39bed384-1918-47d8-8fe1-fff509c4f9b1</id>
    <published>2006-09-17T04:16:00-07:00</published>
    <updated>2006-09-17T04:57:42-07:00</updated>
    <title type="html">#Unixshell server dies: good riddance to bad rubbish</title>
    <link href="http://www.jasongarber.com/articles/2006/09/17/unixshell-server-dies-i-can-finally-take-my-money-elsewhere" rel="alternate" type="text/html"/>
    <category term="hosting" scheme="http://www.jasongarber.com/articles/tag/hosting"/>
    <category term="unixshell" scheme="http://www.jasongarber.com/articles/tag/unixshell"/>
    <summary type="html">&lt;h3&gt;Posted to the #unixshell forums:&lt;/h3&gt;


	&lt;p&gt;Thankfully, &lt;a href="http://www.unixshell.com/forum/search.php?searchid=72691"&gt;&lt;span class="caps"&gt;VM3&lt;/span&gt; died&lt;/a&gt; just after I&amp;#8217;d moved all my clients to different hosting, so I didn&amp;#8217;t lose anything&amp;#8212;except &lt;strong&gt;the thorn in my side #unixshell has been these last six months&lt;/strong&gt;.  The first six were fine except for some occasional downtime, but starting earlier this year (2006), there were long and sometimes unexplained downtimes.  Tickets went days without being answered and I couldn&amp;#8217;t do anything for my annoyed customers but wait for #Unixshell technicians to fix the problem.&lt;/p&gt;


	&lt;p&gt;Not that the server performed much better when it was up.  &lt;strong&gt;IOwait was a killer&lt;/strong&gt;.  I don&amp;#8217;t know if it was just my configuration or what, but the box was slow to respond even though I was on the 128 plan.  Even when I did a fresh install of Ubuntu (I&amp;#8217;d run CentOS before), just typing at the console would sometimes lag.&lt;/p&gt;


	&lt;p&gt;I have no such problems with my new host.  Uptime is excellent, support is responsive, and the server performs beautifully.  If only #Unixshell had been the same, I would still be their customer.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;I fully expect this post to be deleted&lt;/strong&gt; [from the #unixshell forums].  Matt, a.k.a. TheWiseOne, is very good about responding to criticism in forums all across the &amp;#8216;Net.  Oh that he (who seems to be the only living techie soul there) were able to be more responsive to customer issues, not trying to salvage a sinking ship.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;#unixshell sucks&lt;/strong&gt;.  If you&amp;#8217;re not a customer, don&amp;#8217;t become one.  If you are, I recommend leaving before your VM (and all the data you should have backed up yourself if you read the &lt;span class="caps"&gt;TOS&lt;/span&gt;) dies too.&lt;/p&gt;


	&lt;h3&gt;The e-mail from support:&lt;/h3&gt;


	&lt;p&gt;On Sep 14, 2006, at 6:51 PM, support@unixshell.com wrote:&lt;/p&gt;


	&lt;p&gt;Dear Valued Customer,&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;NOTE&lt;/span&gt;: This affects users on vm3.unixshell.com &lt;span class="caps"&gt;ONLY&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Today our &lt;span class="caps"&gt;RAID&lt;/span&gt; controller in &lt;span class="caps"&gt;VM3&lt;/span&gt; went bad.  We have tried 2 other
controllers and neither will recognize the array.  The array was
setup using &lt;span class="caps"&gt;RAID&lt;/span&gt;-10, but when the card died it seems to have
overwritten the &lt;span class="caps"&gt;RAID&lt;/span&gt; metadata on the drives.&lt;/p&gt;


	&lt;p&gt;We have enough room to re-setup all users on &lt;span class="caps"&gt;VM3&lt;/span&gt; across different
host nodes. You will have the same IP address as you previously
had. We do not carry backups of customer data (as is shown in our
&lt;span class="caps"&gt;TOS&lt;/span&gt; / sticky post in Main Forum) so this should be warning for all
other users that a situation like this can and will eventually
happen (whether it be 1 year or 100 years).&lt;/p&gt;


	&lt;p&gt;Full information on the outage, including more technical details,
can be found at &lt;a href="http://www.unixshell.com/forum/showthread.php?p=6749"&gt;http://www.unixshell.com/forum/showthread.php?p=6749&lt;/a&gt;&lt;/p&gt;


Thank you,
unixshell# Support
&lt;hr /&gt;

	&lt;ul&gt;
	&lt;li&gt;Maybe &lt;span class="caps"&gt;RAID&lt;/span&gt; failures are inevitable, but shouldn&amp;#8217;t you save &amp;#8220;snapshots&amp;#8221; to a different server?&lt;/li&gt;
		&lt;li&gt;Shouldn&amp;#8217;t Matt Ayres &lt;a href="http://www.unixshell.com/forum/showpost.php?p=6769&amp;#38;postcount=2"&gt;(owner)&lt;/a&gt; run the company and hire other people to administer servers?&lt;/li&gt;
	&lt;/ul&gt;</summary>
    <content type="html">&lt;h3&gt;Posted to the #unixshell forums:&lt;/h3&gt;


	&lt;p&gt;Thankfully, &lt;a href="http://www.unixshell.com/forum/search.php?searchid=72691"&gt;&lt;span class="caps"&gt;VM3&lt;/span&gt; died&lt;/a&gt; just after I&amp;#8217;d moved all my clients to different hosting, so I didn&amp;#8217;t lose anything&amp;#8212;except &lt;strong&gt;the thorn in my side #unixshell has been these last six months&lt;/strong&gt;.  The first six were fine except for some occasional downtime, but starting earlier this year (2006), there were long and sometimes unexplained downtimes.  Tickets went days without being answered and I couldn&amp;#8217;t do anything for my annoyed customers but wait for #Unixshell technicians to fix the problem.&lt;/p&gt;


	&lt;p&gt;Not that the server performed much better when it was up.  &lt;strong&gt;IOwait was a killer&lt;/strong&gt;.  I don&amp;#8217;t know if it was just my configuration or what, but the box was slow to respond even though I was on the 128 plan.  Even when I did a fresh install of Ubuntu (I&amp;#8217;d run CentOS before), just typing at the console would sometimes lag.&lt;/p&gt;


	&lt;p&gt;I have no such problems with my new host.  Uptime is excellent, support is responsive, and the server performs beautifully.  If only #Unixshell had been the same, I would still be their customer.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;I fully expect this post to be deleted&lt;/strong&gt; [from the #unixshell forums].  Matt, a.k.a. TheWiseOne, is very good about responding to criticism in forums all across the &amp;#8216;Net.  Oh that he (who seems to be the only living techie soul there) were able to be more responsive to customer issues, not trying to salvage a sinking ship.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;#unixshell sucks&lt;/strong&gt;.  If you&amp;#8217;re not a customer, don&amp;#8217;t become one.  If you are, I recommend leaving before your VM (and all the data you should have backed up yourself if you read the &lt;span class="caps"&gt;TOS&lt;/span&gt;) dies too.&lt;/p&gt;


	&lt;h3&gt;The e-mail from support:&lt;/h3&gt;


	&lt;p&gt;On Sep 14, 2006, at 6:51 PM, support@unixshell.com wrote:&lt;/p&gt;


	&lt;p&gt;Dear Valued Customer,&lt;/p&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;span class="caps"&gt;NOTE&lt;/span&gt;: This affects users on vm3.unixshell.com &lt;span class="caps"&gt;ONLY&lt;/span&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Today our &lt;span class="caps"&gt;RAID&lt;/span&gt; controller in &lt;span class="caps"&gt;VM3&lt;/span&gt; went bad.  We have tried 2 other
controllers and neither will recognize the array.  The array was
setup using &lt;span class="caps"&gt;RAID&lt;/span&gt;-10, but when the card died it seems to have
overwritten the &lt;span class="caps"&gt;RAID&lt;/span&gt; metadata on the drives.&lt;/p&gt;


	&lt;p&gt;We have enough room to re-setup all users on &lt;span class="caps"&gt;VM3&lt;/span&gt; across different
host nodes. You will have the same IP address as you previously
had. We do not carry backups of customer data (as is shown in our
&lt;span class="caps"&gt;TOS&lt;/span&gt; / sticky post in Main Forum) so this should be warning for all
other users that a situation like this can and will eventually
happen (whether it be 1 year or 100 years).&lt;/p&gt;


	&lt;p&gt;Full information on the outage, including more technical details,
can be found at &lt;a href="http://www.unixshell.com/forum/showthread.php?p=6749"&gt;http://www.unixshell.com/forum/showthread.php?p=6749&lt;/a&gt;&lt;/p&gt;


Thank you,
unixshell# Support
&lt;hr /&gt;

	&lt;ul&gt;
	&lt;li&gt;Maybe &lt;span class="caps"&gt;RAID&lt;/span&gt; failures are inevitable, but shouldn&amp;#8217;t you save &amp;#8220;snapshots&amp;#8221; to a different server?&lt;/li&gt;
		&lt;li&gt;Shouldn&amp;#8217;t Matt Ayres &lt;a href="http://www.unixshell.com/forum/showpost.php?p=6769&amp;#38;postcount=2"&gt;(owner)&lt;/a&gt; run the company and hire other people to administer servers?&lt;/li&gt;
	&lt;/ul&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:845e553d-f3fb-4cab-9db5-dc6b2d1cf08d</id>
    <published>2006-08-24T17:08:00-07:00</published>
    <updated>2006-08-24T21:24:19-07:00</updated>
    <title type="html">Installing Ruby + Rails + SWIG + SVN on OS X from scratch</title>
    <link href="http://www.jasongarber.com/articles/2006/08/24/runing-rails-collaboa-on-os-x-from-scratch" rel="alternate" type="text/html"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <category term="os-x" scheme="http://www.jasongarber.com/articles/category/os-x" label="OS X"/>
    <summary type="html">&lt;p&gt;I just moved up from a PowerBook to a MacBook and had to rebuild my environment so I could work on &lt;a href="http://www.collaboa.org/"&gt;Collaboa&lt;/a&gt;.  For posterity&amp;#8217;s sake, here&amp;#8217;s what you have to do:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Install Xcode&lt;/li&gt;
		&lt;li&gt;Download Roll_Ruby_On_Rails.zip from &lt;a href="http://sg.validcode.at/articles/2006/03/31/the-best-way-to-install-rails-on-os-x"&gt;http://sg.validcode.at/articles/2006/03/31/the-best-way-to-install-rails-on-os-x&lt;/a&gt;
	&lt;ul&gt;
	&lt;li&gt;Modify your ~/.bash_login as directed.  Or .bash_profile or .bashrc or .profile or whatever you call yours.&lt;/li&gt;
		&lt;li&gt;Source that file&lt;/li&gt;
		&lt;li&gt;Run the script with &lt;code&gt;sudo sh roll_ruby_on_rails.sh&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Probably do a &lt;code&gt;gem up -y&lt;/code&gt; to make sure you&amp;#8217;re running the latest.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;Download and install swig (not really necessary for svn-ruby bindings, but &lt;em&gt;is&lt;/em&gt; necessary for sqlite3 on &lt;span class="caps"&gt;OS X&lt;/span&gt;)&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ swig -version # Verify it's installed and the correct version&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
		&lt;li&gt;Download and install Subversion&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;$ ./configure --prefix=/usr/local --with-openssl --with-ssl --with-zlib
$ make
$ sudo make install
$ svn --version # Verify it's installed and the correct version
$ make swig-rb
$ sudo make install-swig-rb
$ make check-swig-rb # Optional.  Expect errors for FS type 'bdb'&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;sudo gem install&lt;/code&gt; prereqs for Collaboa: xhtmldiff, syntax, and whatever else you need (like sqlite3-ruby or mongrel, perhaps).&lt;/li&gt;
	&lt;/ol&gt;</summary>
    <content type="html">&lt;p&gt;I just moved up from a PowerBook to a MacBook and had to rebuild my environment so I could work on &lt;a href="http://www.collaboa.org/"&gt;Collaboa&lt;/a&gt;.  For posterity&amp;#8217;s sake, here&amp;#8217;s what you have to do:&lt;/p&gt;


	&lt;ol&gt;
	&lt;li&gt;Install Xcode&lt;/li&gt;
		&lt;li&gt;Download Roll_Ruby_On_Rails.zip from &lt;a href="http://sg.validcode.at/articles/2006/03/31/the-best-way-to-install-rails-on-os-x"&gt;http://sg.validcode.at/articles/2006/03/31/the-best-way-to-install-rails-on-os-x&lt;/a&gt;
	&lt;ul&gt;
	&lt;li&gt;Modify your ~/.bash_login as directed.  Or .bash_profile or .bashrc or .profile or whatever you call yours.&lt;/li&gt;
		&lt;li&gt;Source that file&lt;/li&gt;
		&lt;li&gt;Run the script with &lt;code&gt;sudo sh roll_ruby_on_rails.sh&lt;/code&gt;&lt;/li&gt;
		&lt;li&gt;Probably do a &lt;code&gt;gem up -y&lt;/code&gt; to make sure you&amp;#8217;re running the latest.&lt;/li&gt;
	&lt;/ul&gt;
	&lt;/li&gt;
		&lt;li&gt;Download and install swig (not really necessary for svn-ruby bindings, but &lt;em&gt;is&lt;/em&gt; necessary for sqlite3 on &lt;span class="caps"&gt;OS X&lt;/span&gt;)&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;$ ./configure --prefix=/usr/local
$ make
$ sudo make install
$ swig -version # Verify it's installed and the correct version&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
		&lt;li&gt;Download and install Subversion&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;$ ./configure --prefix=/usr/local --with-openssl --with-ssl --with-zlib
$ make
$ sudo make install
$ svn --version # Verify it's installed and the correct version
$ make swig-rb
$ sudo make install-swig-rb
$ make check-swig-rb # Optional.  Expect errors for FS type 'bdb'&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
		&lt;li&gt;&lt;code&gt;sudo gem install&lt;/code&gt; prereqs for Collaboa: xhtmldiff, syntax, and whatever else you need (like sqlite3-ruby or mongrel, perhaps).&lt;/li&gt;
	&lt;/ol&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:7c06528a-d35f-4a18-aed0-f10a016b6e17</id>
    <published>2006-06-21T07:33:00-07:00</published>
    <updated>2006-07-25T21:44:53-07:00</updated>
    <title type="html">Personal DNA</title>
    <link href="http://www.jasongarber.com/articles/2006/06/21/personal-dna" rel="alternate" type="text/html"/>
    <category term="personality" scheme="http://www.jasongarber.com/articles/tag/personality"/>
    <category term="personality" scheme="http://www.jasongarber.com/articles/tag/personality"/>
    <summary type="html">&lt;p&gt;Here&amp;#8217;s an interesting &lt;a href="http://www.personaldna.com/"&gt;personality test&lt;/a&gt; that gives you your results both verbally and with some pretty neat graphics.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m an &lt;a href="http://personaldna.com/report.php?u=1071690ac909&amp;#38;k=SglRraPkMIFNTbb-GK-CDCCA-4ef1"&gt;animated inventor&lt;/a&gt;.  Seems to fit very well.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Here&amp;#8217;s an interesting &lt;a href="http://www.personaldna.com/"&gt;personality test&lt;/a&gt; that gives you your results both verbally and with some pretty neat graphics.&lt;/p&gt;


	&lt;p&gt;I&amp;#8217;m an &lt;a href="http://personaldna.com/report.php?u=1071690ac909&amp;#38;k=SglRraPkMIFNTbb-GK-CDCCA-4ef1"&gt;animated inventor&lt;/a&gt;.  Seems to fit very well.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:39820293-168d-4852-b901-de723b49177c</id>
    <published>2006-06-19T14:51:00-07:00</published>
    <updated>2006-07-25T21:44:53-07:00</updated>
    <title type="html">ri disambiguation page in TextMate</title>
    <link href="http://www.jasongarber.com/articles/2006/06/19/ri-disambiguation-page-in-textmate" rel="alternate" type="text/html"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <category term="os-x" scheme="http://www.jasongarber.com/articles/category/os-x" label="OS X"/>
    <category term="os-x" scheme="http://www.jasongarber.com/articles/category/os-x" label="OS X"/>
    <summary type="html">&lt;p&gt;TextMate is a beautiful little application, but one tiny corner of it wasn&amp;#8217;t working and I decided to track down a fix.  When I looked for documentation (^H) on an ambiguous Ruby method name (like &amp;#8216;sort&amp;#8217;), the links in the disambiguation page didn&amp;#8217;t work.&lt;/p&gt;


	&lt;p&gt;Allan, the developer, helped me out on his &lt;span class="caps"&gt;IRC&lt;/span&gt; channel.  He said the path to ri isn&amp;#8217;t in my &lt;span class="caps"&gt;PATH&lt;/span&gt;.  He meant that it&amp;#8217;s in my bash path, but for whatever reason, this path isn&amp;#8217;t read for ri.  He said I needed to put an entry in &lt;code&gt;~/.MacOSX/environment.plist&lt;/code&gt;.  I copied and pasted from &lt;a href="http://macromates.com/textmate/manual/shell_commands#search_path"&gt;this page&lt;/a&gt; and now it works like a charm.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;TextMate is a beautiful little application, but one tiny corner of it wasn&amp;#8217;t working and I decided to track down a fix.  When I looked for documentation (^H) on an ambiguous Ruby method name (like &amp;#8216;sort&amp;#8217;), the links in the disambiguation page didn&amp;#8217;t work.&lt;/p&gt;


	&lt;p&gt;Allan, the developer, helped me out on his &lt;span class="caps"&gt;IRC&lt;/span&gt; channel.  He said the path to ri isn&amp;#8217;t in my &lt;span class="caps"&gt;PATH&lt;/span&gt;.  He meant that it&amp;#8217;s in my bash path, but for whatever reason, this path isn&amp;#8217;t read for ri.  He said I needed to put an entry in &lt;code&gt;~/.MacOSX/environment.plist&lt;/code&gt;.  I copied and pasted from &lt;a href="http://macromates.com/textmate/manual/shell_commands#search_path"&gt;this page&lt;/a&gt; and now it works like a charm.&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:35ccc1ea-7baa-401f-bae2-936194d8296f</id>
    <published>2006-05-18T15:39:00-07:00</published>
    <updated>2006-07-25T21:44:53-07:00</updated>
    <title type="html">Reloadable mocked-out classes</title>
    <link href="http://www.jasongarber.com/articles/2006/05/18/reloadable-mocked-out-classes" rel="alternate" type="text/html"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <summary type="html">If you have a &amp;#8220;mock object&amp;#8221; in &lt;code&gt;test/mocks/development&lt;/code&gt; that requires the object you&amp;#8217;re mocking, it won&amp;#8217;t be reloaded each request like you&amp;#8217;d expect in the development environment.  That&amp;#8217;s because you&amp;#8217;re using &lt;code&gt;require&lt;/code&gt; instead of &lt;code&gt;load&lt;/code&gt;.  Try instead:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;load&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{RAILS_ROOT}&lt;/span&gt;/app/helpers/application_helper.rb&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
Or if you really want to get fancy, use &lt;code&gt;require_or_load&lt;/code&gt;.</summary>
    <content type="html">If you have a &amp;#8220;mock object&amp;#8221; in &lt;code&gt;test/mocks/development&lt;/code&gt; that requires the object you&amp;#8217;re mocking, it won&amp;#8217;t be reloaded each request like you&amp;#8217;d expect in the development environment.  That&amp;#8217;s because you&amp;#8217;re using &lt;code&gt;require&lt;/code&gt; instead of &lt;code&gt;load&lt;/code&gt;.  Try instead:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_ruby "&gt;&lt;span class="ident"&gt;load&lt;/span&gt; &lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;span class="string"&gt;&lt;span class="expr"&gt;#{RAILS_ROOT}&lt;/span&gt;/app/helpers/application_helper.rb&lt;/span&gt;&lt;span class="punct"&gt;&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
Or if you really want to get fancy, use &lt;code&gt;require_or_load&lt;/code&gt;.</content>
  </entry>
  <entry>
    <author>
      <name>Jason Garber</name>
    </author>
    <id>urn:uuid:3c25b599-8351-464d-a86a-999ab20c225c</id>
    <published>2006-05-11T06:09:00-07:00</published>
    <updated>2006-07-25T21:44:53-07:00</updated>
    <title type="html">Asprin for Lighttpd+fcgi: Use spawner</title>
    <link href="http://www.jasongarber.com/articles/2006/05/11/asprin-for-lighttpd-fcgi-use-spawner" rel="alternate" type="text/html"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <category term="rails" scheme="http://www.jasongarber.com/articles/category/rails" label="Rails"/>
    <summary type="html">&lt;p&gt;I&amp;#8217;m late to the &lt;a href="http://wiki.rubyonrails.com/rails/pages/LighttpdWithProcessScripts"&gt;spawner&lt;/a&gt; party but finally made the move after lots of trouble with static fcgi processes.  Jamis &lt;a href="http://jamis.jamisbuck.org/articles/2006/02/11/tip-textdrive-and-lighttpd"&gt;blogged&lt;/a&gt; about the difference between the two.  My problem was that lightty couldn&amp;#8217;t find the socket and would fill my error log (and hard drive!) telling me so.  Fortunately, when this happened only my Rails app went down; the static sites stayed up.&lt;/p&gt;


	&lt;p&gt;I feared this spinner/spawner/reaper stuff, but fortunately in Rails 1.1 it&amp;#8217;s as simple as:&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;./script/process/spawner -i 2 -r 10&lt;/code&gt; (I only wanted two instances and wanted spawner to repeat spawn attempts every 10 seconds)&lt;/p&gt;


and changing my static fcgi conf (socket, bin-path, bin-environment, max-procs, min-procs, etc.) to this instead:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;fastcgi.server = ( &amp;quot;.fcgi&amp;quot; =&amp;gt;
    ( &amp;quot;localhost-8000&amp;quot; =&amp;gt; ( &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;127.0.0.1&amp;quot;, &amp;quot;port&amp;quot; =&amp;gt; 8000 ) ), 
    ( &amp;quot;localhost-8001&amp;quot; =&amp;gt; ( &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;127.0.0.1&amp;quot;, &amp;quot;port&amp;quot; =&amp;gt; 8001 ) )
)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Best of all, my rc.d script works once again!&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;I&amp;#8217;m late to the &lt;a href="http://wiki.rubyonrails.com/rails/pages/LighttpdWithProcessScripts"&gt;spawner&lt;/a&gt; party but finally made the move after lots of trouble with static fcgi processes.  Jamis &lt;a href="http://jamis.jamisbuck.org/articles/2006/02/11/tip-textdrive-and-lighttpd"&gt;blogged&lt;/a&gt; about the difference between the two.  My problem was that lightty couldn&amp;#8217;t find the socket and would fill my error log (and hard drive!) telling me so.  Fortunately, when this happened only my Rails app went down; the static sites stayed up.&lt;/p&gt;


	&lt;p&gt;I feared this spinner/spawner/reaper stuff, but fortunately in Rails 1.1 it&amp;#8217;s as simple as:&lt;/p&gt;


	&lt;p&gt;&lt;code&gt;./script/process/spawner -i 2 -r 10&lt;/code&gt; (I only wanted two instances and wanted spawner to repeat spawn attempts every 10 seconds)&lt;/p&gt;


and changing my static fcgi conf (socket, bin-path, bin-environment, max-procs, min-procs, etc.) to this instead:
&lt;div class="typocode"&gt;&lt;pre&gt;&lt;code class="typocode_default "&gt;fastcgi.server = ( &amp;quot;.fcgi&amp;quot; =&amp;gt;
    ( &amp;quot;localhost-8000&amp;quot; =&amp;gt; ( &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;127.0.0.1&amp;quot;, &amp;quot;port&amp;quot; =&amp;gt; 8000 ) ), 
    ( &amp;quot;localhost-8001&amp;quot; =&amp;gt; ( &amp;quot;host&amp;quot; =&amp;gt; &amp;quot;127.0.0.1&amp;quot;, &amp;quot;port&amp;quot; =&amp;gt; 8001 ) )
)&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

	&lt;p&gt;Best of all, my rc.d script works once again!&lt;/p&gt;</content>
  </entry>
</feed>
