<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" xml:lang="en-US">
  <title>Beginning Ruby on Rails E-Commerce - Home</title>
  <id>tag:www.railsecommerce.com,2008:mephisto/</id>
  <generator uri="http://mephistoblog.com" version="0.8.0">Mephisto Drax</generator>
  
  <link href="http://www.railsecommerce.com/" rel="alternate" type="text/html" />
  <updated>2007-07-24T17:59:28Z</updated>
  <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/railsecommerce" /><feedburner:info uri="railsecommerce" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2007-07-24:59</id>
    <published>2007-07-24T17:50:00Z</published>
    <updated>2007-07-24T17:59:28Z</updated>
    <category term="release apress book" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/fRavH1fbUj4/new-ruby-and-rails-releases-from-apress" rel="alternate" type="text/html" />
    <title>New Ruby and Rails releases from Apress</title>
<content type="html">
            &lt;p&gt;Apress has just come out with two interesting releases in the Ruby and Rails spectrum. &lt;a href="http://amazon.com/dp/1590596862"&gt;Beginning Ruby on Rails&lt;/a&gt; is a truly beginner-level book so if you felt other books were a bit overwhelming, it might be an excellent tome to start with. If you take the &lt;a href="http://podcast.rubyonrails.org/programs/1/episodes/hampton_catlin"&gt;word of Hampton&lt;/a&gt; for it, the book should be a really excellent intro.&lt;/p&gt;


	&lt;p&gt;Another interesting new title is &lt;a href="http://www.amazon.com/Practical-System-Administration-Andr%C3%A9-Hamou/dp/1590598210/"&gt;Practical Ruby for System Administration&lt;/a&gt;. One of the most obvious use cases for Ruby is as an “enterprise glue”, and that’s exactly what &lt;a href="http://www.bluetheta.com/"&gt;André Ben Hamou&lt;/a&gt; will teach you in his book.&lt;/p&gt;


	&lt;p&gt;(via &lt;a href="http://www.rubyinside.com/"&gt;Ruby Inside&lt;/a&gt;)&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2007/7/24/new-ruby-and-rails-releases-from-apress</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2007-07-24:58</id>
    <published>2007-07-24T17:48:00Z</published>
    <updated>2007-07-24T17:48:40Z</updated>
    <category term="Announcements" />
    <category term="ruby-prof profiler" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/-veBTmuluMk/ruby-prof-0-5-0-is-out" rel="alternate" type="text/html" />
    <title>ruby-prof 0.5.0 is out</title>
<content type="html">
            &lt;p&gt;We briefly mentioned &lt;a href="http://rubyforge.org/projects/ruby-prof"&gt;ruby-prof&lt;/a&gt; in the performance optimization chapter of the book. At the time there were some compatibility issues between ActionProfiler and ruby-prof, however. Now  &lt;a href="http://cfis.savagexi.com/articles/2007/07/09/announcing-ruby-prof-0-5-0"&gt;Charlie Savage has come out with an all-new version of his profiler, ruby-prof 0.5.0&lt;/a&gt;. According to &lt;a href="http://www.rubyinside.com/new-ruby-profiler-released-supports-rails-threads-irb-and-more-564.html"&gt;Peter Cooper&lt;/a&gt;, the new version “is a &lt;em&gt;major&lt;/em&gt; leap forward”, which seems to indeed be true.&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2007/7/24/ruby-prof-0-5-0-is-out</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2007-02-18:25</id>
    <published>2007-02-18T15:23:00Z</published>
    <updated>2007-02-18T15:23:58Z</updated>
    <category term="review" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/1iPY2nsRadA/reviews" rel="alternate" type="text/html" />
    <title>Reviews pouring in</title>
<content type="html">
            &lt;p&gt;We’ve got some nice reviews even outside the standard Amazon.com page. Rails superhero &lt;a href="http://weblog.jamisbuck.org/2007/1/25/review-beginning-ruby-on-rails-e-commerce"&gt;Jamis Buck wrote a very positive detailed review&lt;/a&gt;, as did &lt;a href="http://web2withrubyonrails.gauldong.net/2007/01/31/beginning-ruby-on-rails-e-commerce-from-novice-to-professional-apress/"&gt;Hendy Irawan&lt;/a&gt;.  Even &lt;a href="http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&amp;amp;#38;f=49&amp;amp;#38;t=000720"&gt;Java cowboys seem to love the book&lt;/a&gt; :-)&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2007/2/18/reviews</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2007-01-20:22</id>
    <published>2007-01-20T06:12:00Z</published>
    <updated>2007-01-20T06:13:16Z</updated>
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/UDka6Ek0tXU/errata" rel="alternate" type="text/html" />
    <title>Errata</title>
<content type="html">
            &lt;p&gt;We spent a good part of the holidays working through all the great errata requests we have received, and the &lt;a href="http://www.railsecommerce.com/errata"&gt;list is finally ready for publishing&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;Thanks to everybody who have taken the time to point out corrections, we really appreciate it. Keep’em &lt;a&gt;coming&lt;/a&gt;!&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2007/1/20/errata</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2007-01-04:19</id>
    <published>2007-01-04T18:09:00Z</published>
    <updated>2007-01-04T18:10:04Z</updated>
    <category term="interview contest" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/3XX_ViYiAXI/christian-interviewed-and-a-rails-blogging-contest-at-on-ruby" rel="alternate" type="text/html" />
    <title>Christian interviewed and a Rails blogging contest at On Ruby</title>
<content type="html">
            &lt;p&gt;Pat Eyler over at &lt;a href="http://on-ruby.blogspot.com/"&gt;On Ruby&lt;/a&gt; just published an &lt;a href="http://on-ruby.blogspot.com/2007/01/author-interview-christian-hellsten.html"&gt;interview with Christian&lt;/a&gt;. If you want to get a closer look at Christian’s thoughts about Rails, Ruby, Python, Java and all things related, go have a look. I was the “victim” of a &lt;a href="http://on-ruby.blogspot.com/2006/11/author-interview-jarkko-laine.html"&gt;similar interview&lt;/a&gt; in November.&lt;/p&gt;


	&lt;p&gt;On Ruby also sports a &lt;a href="http://on-ruby.blogspot.com/2006/12/apresson-ruby-blogging-contest.html"&gt;blogging contest&lt;/a&gt; for all who are interested in learning and teaching Ruby and Rails by writing. I had the honour to come up with the theme for the &lt;a href="http://on-ruby.blogspot.com/2007/01/win-books-by-blogging.html"&gt;January 2007 edition&lt;/a&gt; and am also sitting in the the grand jury picking up the winners this month. I wrote a &lt;a href="http://jlaine.net/2007/1/2/apress-blogging-contest-on-ruby"&gt;longer article about this month’s theme&lt;/a&gt; in my &lt;a href="http://jlaine.net"&gt;weblog&lt;/a&gt;.&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2007/1/4/christian-interviewed-and-a-rails-blogging-contest-at-on-ruby</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2006-12-12:17</id>
    <published>2006-12-12T13:25:00Z</published>
    <updated>2006-12-12T13:28:26Z</updated>
    <category term="Announcements" />
    <category term="list discussion" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/9K8bzMhmPAI/discussion-group-is-alive" rel="alternate" type="text/html" />
    <title>Discussion Group is alive!</title>
<content type="html">
            &lt;p&gt;The discussion about the book seems to be very lively on the &lt;a href="http://groups.google.com/group/rubyonrails-talk"&gt;Rails mailing list&lt;/a&gt;. Unfortunately the amount of traffic on the list is huge so it’s really hard to spot the posts related to the book from there. Therefore, I created a new list just for discussion about our book.&lt;/p&gt;


	&lt;p&gt;The list can be found at &lt;a href="http://groups.google.com/group/railsecommerce"&gt;groups.google.com/group/railsecommerce&lt;/a&gt; and works exactly as the Rails lists do. So go ahead and post your enquiries and questions  there.&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2006/12/12/discussion-group-is-alive</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2006-11-16:8</id>
    <published>2006-11-16T20:28:00Z</published>
    <updated>2006-11-16T20:28:59Z</updated>
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/APsnUztjMJE/call-for-article-proposals" rel="alternate" type="text/html" />
    <title>Call for article proposals</title>
<content type="html">
            &lt;p&gt;We’re going to write articles on this site about topics that are related to Rails and e-commerce but that didn’t make the cut for the actual book. What would you like to read tutorials about? We’ve already been suggested writing about discount packages (real discounts, not the standard amazon packages where you pay as much as the two would cost separately) and hooking the JS auto-completion with &lt;span class="caps"&gt;AJAX&lt;/span&gt;. Anything else? The floor is yours.&lt;/p&gt;


	&lt;p&gt;Write your proposals in the comment form or – if you’re shy – directly to me (&lt;a href="mailto:jarkko@jlaine.net"&gt;jarkko@jlaine.net&lt;/a&gt;).&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2006/11/16/call-for-article-proposals</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2006-11-10:6</id>
    <published>2006-11-10T13:36:00Z</published>
    <updated>2006-11-10T13:44:14Z</updated>
    <category term="Table of Contents" />
    <category term="toc contents table" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/NXa5KRF_eZI/table-of-contents" rel="alternate" type="text/html" />
    <title>Table of Contents</title>
<content type="html">
            &lt;table&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 1&lt;/span&gt; Project Setup and Proof of Concept&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Introducing the Emporium Project       &lt;/td&gt;
			&lt;td&gt;1&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the Software   &lt;/td&gt;
			&lt;td&gt;2&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing Ruby    &lt;/td&gt;
			&lt;td&gt;4&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing RubyGems  &lt;/td&gt;
			&lt;td&gt;5&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing Ruby on Rails &lt;/td&gt;
			&lt;td&gt;6&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing MySQL    &lt;/td&gt;
			&lt;td&gt;8&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the MySQL Driver       &lt;/td&gt;
			&lt;td&gt;9&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Introducing Scrum     &lt;/td&gt;
			&lt;td&gt;10&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Emporium Application      &lt;/td&gt;
			&lt;td&gt;12&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Skeleton Application     &lt;/td&gt;
			&lt;td&gt;12&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Emporium Database     &lt;/td&gt;
			&lt;td&gt;14&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Starting Emporium for the First Time   &lt;/td&gt;
			&lt;td&gt;18&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;How Does Ruby on Rails Work?       &lt;/td&gt;
			&lt;td&gt;20&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the About Emporium User Story &lt;/td&gt;
			&lt;td&gt;20&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Running the Generate Script      &lt;/td&gt;
			&lt;td&gt;21&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Modifying the Generated View      &lt;/td&gt;
			&lt;td&gt;22&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Layout  &lt;/td&gt;
			&lt;td&gt;23&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Modifying the Generated Controller   &lt;/td&gt;
			&lt;td&gt;27&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;28&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 2&lt;/span&gt; Author Management&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using Test-Driven Development       &lt;/td&gt;
			&lt;td&gt;29&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Testing in Rails       &lt;/td&gt;
			&lt;td&gt;30&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unit Testing      &lt;/td&gt;
			&lt;td&gt;30&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Functional Testing  &lt;/td&gt;
			&lt;td&gt;31&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Integration Testing   &lt;/td&gt;
			&lt;td&gt;31&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the ActiveRecord Model       &lt;/td&gt;
			&lt;td&gt;31&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using ActiveRecord Migrations     &lt;/td&gt;
			&lt;td&gt;32&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Running Unit Tests   &lt;/td&gt;
			&lt;td&gt;36&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Controller   &lt;/td&gt;
			&lt;td&gt;37&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories        &lt;/td&gt;
			&lt;td&gt;39&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Adding an Author   &lt;/td&gt;
			&lt;td&gt;39&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Listing Authors    &lt;/td&gt;
			&lt;td&gt;48&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Viewing an Author  &lt;/td&gt;
			&lt;td&gt;50&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Editing an Author   &lt;/td&gt;
			&lt;td&gt;52&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Deleting an Author   &lt;/td&gt;
			&lt;td&gt;54&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Adjusting the Flash Notifications     &lt;/td&gt;
			&lt;td&gt;55&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;57&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 3&lt;/span&gt; Book Inventory Management&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Requirements  &lt;/td&gt;
			&lt;td&gt;59&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using Scaffolding      &lt;/td&gt;
			&lt;td&gt;60&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Publisher Administration Interface       &lt;/td&gt;
			&lt;td&gt;61&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Updating the Schema with the Publishers Table      &lt;/td&gt;
			&lt;td&gt;61&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Generating Publisher Code with the Scaffolding Script    &lt;/td&gt;
			&lt;td&gt;62&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the Add Publisher User Story  &lt;/td&gt;
			&lt;td&gt;64&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the View Publisher User Story  &lt;/td&gt;
			&lt;td&gt;66&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the Edit Publisher User Story   &lt;/td&gt;
			&lt;td&gt;68&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Book Administration Interface &lt;/td&gt;
			&lt;td&gt;69&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Updating the Schema with the Books Table&lt;/td&gt;
			&lt;td&gt;69&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Book Model         &lt;/td&gt;
			&lt;td&gt;73&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;ActiveRecord Mapping&lt;/td&gt;
			&lt;td&gt;73&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Modifying the Generated Models     &lt;/td&gt;
			&lt;td&gt;77&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Cloning the Database &lt;/td&gt;
			&lt;td&gt;80&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unit Testing Validations         &lt;/td&gt;
			&lt;td&gt;81&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unit Testing the ActiveRecord Mappings  &lt;/td&gt;
			&lt;td&gt;82&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Generating Book Administration Code with the Scaffolding Script      &lt;/td&gt;
			&lt;td&gt;88&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Integration Testing   &lt;/td&gt;
			&lt;td&gt;90&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the Add Book User Story   &lt;/td&gt;
			&lt;td&gt;91&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the Upload Book Cover User Story       &lt;/td&gt;
			&lt;td&gt;102&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the List Books User Story  &lt;/td&gt;
			&lt;td&gt;104&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the View Book User Story  &lt;/td&gt;
			&lt;td&gt;107&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Completing the Edit Book User Story  &lt;/td&gt;
			&lt;td&gt;110&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Testing the Delete Book User Story   &lt;/td&gt;
			&lt;td&gt;112&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;112&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 4&lt;/span&gt; Book Catalog Browsing&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Book Catalog Requirements   &lt;/td&gt;
			&lt;td&gt;113&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Book Catalog Interface   &lt;/td&gt;
			&lt;td&gt;114&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Browse Books User Story        &lt;/td&gt;
			&lt;td&gt;116&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the View Book Details User Story       &lt;/td&gt;
			&lt;td&gt;120&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Search Books User Story &lt;/td&gt;
			&lt;td&gt;125&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Get Latest Books User Story      &lt;/td&gt;
			&lt;td&gt;133&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating an &lt;span class="caps"&gt;RSS&lt;/span&gt; Feed&lt;/td&gt;
			&lt;td&gt;136&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary           &lt;/td&gt;
			&lt;td&gt;139&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 5&lt;/span&gt; Shopping Cart Implementation&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Shopping Cart Requirements   &lt;/td&gt;
			&lt;td&gt;141&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Up the Shopping Cart        &lt;/td&gt;
			&lt;td&gt;142&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Controller        &lt;/td&gt;
			&lt;td&gt;142&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Adding a Functional Test       &lt;/td&gt;
			&lt;td&gt;142&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Models  &lt;/td&gt;
			&lt;td&gt;143&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Modifying the Controller        &lt;/td&gt;
			&lt;td&gt;145&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Views  &lt;/td&gt;
			&lt;td&gt;147&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories       &lt;/td&gt;
			&lt;td&gt;152&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Add Items to the Cart User Story     &lt;/td&gt;
			&lt;td&gt;152&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Remove Items from the Cart User Story &lt;/td&gt;
			&lt;td&gt;161&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Clear the Cart User Story &lt;/td&gt;
			&lt;td&gt;166&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;168&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 6&lt;/span&gt; Forum Implementation&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Forum Requirements      &lt;/td&gt;
			&lt;td&gt;169&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Threaded Forum Plugin      &lt;/td&gt;
			&lt;td&gt;170&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Up the Forum   &lt;/td&gt;
			&lt;td&gt;171&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Updating the Database Schema    &lt;/td&gt;
			&lt;td&gt;171&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Modifying the Model &lt;/td&gt;
			&lt;td&gt;175&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unit Testing the Model        &lt;/td&gt;
			&lt;td&gt;176&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Generating the Controller and View   &lt;/td&gt;
			&lt;td&gt;177&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories       &lt;/td&gt;
			&lt;td&gt;179&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Post to Forum User Story &lt;/td&gt;
			&lt;td&gt;179&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the View Forum User Story &lt;/td&gt;
			&lt;td&gt;185&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the View Post User Story  &lt;/td&gt;
			&lt;td&gt;190&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Reply to Post User Story&lt;/td&gt;
			&lt;td&gt;192&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;195&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 7&lt;/span&gt; Tagging Support&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Tagging Requirements      &lt;/td&gt;
			&lt;td&gt;197&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Tagging RubyGem         &lt;/td&gt;
			&lt;td&gt;198&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Up for Tagging  &lt;/td&gt;
			&lt;td&gt;201&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Updating the Database Schema    &lt;/td&gt;
			&lt;td&gt;201&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Preparing the Models&lt;/td&gt;
			&lt;td&gt;203&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Unit Testing the Model        &lt;/td&gt;
			&lt;td&gt;204&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Console to Test the Model    &lt;/td&gt;
			&lt;td&gt;205&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories       &lt;/td&gt;
			&lt;td&gt;207&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Assign Tags User Story &lt;/td&gt;
			&lt;td&gt;207&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Edit Tags User Story &lt;/td&gt;
			&lt;td&gt;211&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the List Tags and Show Tag User Stories   &lt;/td&gt;
			&lt;td&gt;215&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Recommend Books User Story     &lt;/td&gt;
			&lt;td&gt;218&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;221&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 8&lt;/span&gt; Security&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Authentication Requirements   &lt;/td&gt;
			&lt;td&gt;223&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Authentication Plugin       &lt;/td&gt;
			&lt;td&gt;224&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories       &lt;/td&gt;
			&lt;td&gt;227&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Log In User Story   &lt;/td&gt;
			&lt;td&gt;227&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Fail Log In User Story &lt;/td&gt;
			&lt;td&gt;233&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Reset Password User Story       &lt;/td&gt;
			&lt;td&gt;238&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Protecting Your Application&lt;/td&gt;
			&lt;td&gt;248&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Cross-Site Scripting  &lt;/td&gt;
			&lt;td&gt;248&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span class="caps"&gt;URL&lt;/span&gt; and Form Manipulation       &lt;/td&gt;
			&lt;td&gt;248&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;span class="caps"&gt;SQL&lt;/span&gt; Injection     &lt;/td&gt;
			&lt;td&gt;249&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Cross-Site Request Forgery      &lt;/td&gt;
			&lt;td&gt;250&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;250&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 9&lt;/span&gt; Checkout and Order Processing&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Checkout and Order-Processing Requirements    &lt;/td&gt;
			&lt;td&gt;252&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Check Out User Story   &lt;/td&gt;
			&lt;td&gt;252&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Models  &lt;/td&gt;
			&lt;td&gt;252&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Adding Validations to the Model    &lt;/td&gt;
			&lt;td&gt;257&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Controller and Integration Test &lt;/td&gt;
			&lt;td&gt;259&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the View   &lt;/td&gt;
			&lt;td&gt;262&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Saving the Order Information      &lt;/td&gt;
			&lt;td&gt;268&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Integrating with Payment Gateways      &lt;/td&gt;
			&lt;td&gt;271&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the Active Merchant Plugin   &lt;/td&gt;
			&lt;td&gt;271&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Integrating with PayPal          &lt;/td&gt;
			&lt;td&gt;272&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Integrating with AuthorizeNet      &lt;/td&gt;
			&lt;td&gt;280&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Payment Gem        &lt;/td&gt;
			&lt;td&gt;284&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Administrator User Stories  &lt;/td&gt;
			&lt;td&gt;286&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the View Orders User Story &lt;/td&gt;
			&lt;td&gt;286&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the View Order User Story &lt;/td&gt;
			&lt;td&gt;290&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Close Order User Story  &lt;/td&gt;
			&lt;td&gt;292&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Calculating Shipping Costs and Taxes     &lt;/td&gt;
			&lt;td&gt;294&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Shipping Gem        &lt;/td&gt;
			&lt;td&gt;294&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Calculating Taxes   &lt;/td&gt;
			&lt;td&gt;296&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;296&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 10&lt;/span&gt; Multiple Language Support&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Getting the Localization Requirements    &lt;/td&gt;
			&lt;td&gt;297&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Globalize Plugin &lt;/td&gt;
			&lt;td&gt;298&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Localizing with Globalize        &lt;/td&gt;
			&lt;td&gt;300&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Up Globalize  &lt;/td&gt;
			&lt;td&gt;303&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the User Stories       &lt;/td&gt;
			&lt;td&gt;304&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Change Locale User Story       &lt;/td&gt;
			&lt;td&gt;304&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Implementing the Translation User Stories&lt;/td&gt;
			&lt;td&gt;306&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Translating the View and the Book Model   &lt;/td&gt;
			&lt;td&gt;313&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Translating the View &lt;/td&gt;
			&lt;td&gt;313&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Translating the Model&lt;/td&gt;
			&lt;td&gt;317&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Localizing Dates, Numbers, and Currency  &lt;/td&gt;
			&lt;td&gt;319&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Localizing Dates   &lt;/td&gt;
			&lt;td&gt;319&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Localizing Numbers and Currencies   &lt;/td&gt;
			&lt;td&gt;320&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Adding Unicode (UTF-8) Support       &lt;/td&gt;
			&lt;td&gt;322&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Character Encoding in &lt;span class="caps"&gt;HTML&lt;/span&gt;  &lt;/td&gt;
			&lt;td&gt;323&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Character Encoding for the &lt;span class="caps"&gt;HTTP&lt;/span&gt; Response    &lt;/td&gt;
			&lt;td&gt;324&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Changing the Database to Use &lt;span class="caps"&gt;UTF&lt;/span&gt;-8   &lt;/td&gt;
			&lt;td&gt;324&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;326&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 11&lt;/span&gt; Acceptance Testing&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using Selenium     &lt;/td&gt;
			&lt;td&gt;327&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Writing Selenium Tests   &lt;/td&gt;
			&lt;td&gt;330&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Selenium Commands&lt;/td&gt;
			&lt;td&gt;330&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Selenium Test Formats         &lt;/td&gt;
			&lt;td&gt;334&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;The First Acceptance Test       &lt;/td&gt;
			&lt;td&gt;335&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Recording Selenium Tests &lt;/td&gt;
			&lt;td&gt;337&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using the Selenium &lt;span class="caps"&gt;IDE&lt;/span&gt;         &lt;/td&gt;
			&lt;td&gt;337&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Recording the View Forum Acceptance Test        &lt;/td&gt;
			&lt;td&gt;340&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Recording the Post to Forum Acceptance Test       &lt;/td&gt;
			&lt;td&gt;345&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Recording the Show Post Acceptance Test&lt;/td&gt;
			&lt;td&gt;347&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Recording the Reply to Post Acceptance Test        &lt;/td&gt;
			&lt;td&gt;348&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary           &lt;/td&gt;
			&lt;td&gt;350&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 12&lt;/span&gt; Application Deployment&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Setting Up the Production Environment    &lt;/td&gt;
			&lt;td&gt;351&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Connecting to the Production Server: &lt;span class="caps"&gt;SSH&lt;/span&gt;&lt;/td&gt;
			&lt;td&gt;352&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the Web Server: LightTPD   &lt;/td&gt;
			&lt;td&gt;353&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the Application Server: Ruby on Rails and FastCGI &lt;/td&gt;
			&lt;td&gt;356&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing the Database Server (MySQL)  &lt;/td&gt;
			&lt;td&gt;358&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Configuring LightTPD &lt;/td&gt;
			&lt;td&gt;358&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Production Database    &lt;/td&gt;
			&lt;td&gt;365&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Deploying the Application Manually      &lt;/td&gt;
			&lt;td&gt;366&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Copying the Application         &lt;/td&gt;
			&lt;td&gt;367&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating Users and Groups       &lt;/td&gt;
			&lt;td&gt;367&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Starting LightTPD   &lt;/td&gt;
			&lt;td&gt;368&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Starting FastCGI Processes      &lt;/td&gt;
			&lt;td&gt;369&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Automating Deployment  &lt;/td&gt;
			&lt;td&gt;371&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Installing Capistrano &lt;/td&gt;
			&lt;td&gt;371&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Creating the Capistrano Deployment Recipe        &lt;/td&gt;
			&lt;td&gt;371&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Running the Setup Task        &lt;/td&gt;
			&lt;td&gt;375&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Deploying to Production        &lt;/td&gt;
			&lt;td&gt;376&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Starting LightTPD   &lt;/td&gt;
			&lt;td&gt;379&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;380&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;&lt;em&gt;&lt;span class="caps"&gt;CHAPTER 13&lt;/span&gt; Performance Optimization&lt;/em&gt;&lt;/th&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Performance and Scaling  &lt;/td&gt;
			&lt;td&gt;381&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Measuring Performance  &lt;/td&gt;
			&lt;td&gt;382&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Checking the Log File&lt;/td&gt;
			&lt;td&gt;382&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Using Rails Analyzer &lt;/td&gt;
			&lt;td&gt;383&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Caching         &lt;/td&gt;
			&lt;td&gt;388&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Page Caching    &lt;/td&gt;
			&lt;td&gt;388&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Action Caching   &lt;/td&gt;
			&lt;td&gt;390&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Fragment Caching  &lt;/td&gt;
			&lt;td&gt;390&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Fragment Stores   &lt;/td&gt;
			&lt;td&gt;392&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Caching ActiveRecord Objects      &lt;/td&gt;
			&lt;td&gt;395&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Common Performance Problems in Rails   &lt;/td&gt;
			&lt;td&gt;397&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Rendering Speed  &lt;/td&gt;
			&lt;td&gt;397&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Database Access  &lt;/td&gt;
			&lt;td&gt;399&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;Summary         &lt;/td&gt;
			&lt;td&gt;401&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2006/11/10/table-of-contents</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2006-11-08:1</id>
    <published>2006-11-08T12:17:00Z</published>
    <updated>2006-11-08T15:10:13Z</updated>
    <category term="Announcements" />
    <category term="book ship announcement" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/RA7ObPK50MU/beginning-ruby-on-rails-e-commerce-is-shipping" rel="alternate" type="text/html" />
    <title>Beginning Ruby on Rails E-Commerce is Shipping!</title>
<content type="html">
            &lt;p&gt;Dear Rails Enthusiast,&lt;/p&gt;


	&lt;p&gt;We just got email from our editor Keir where he said he’d got his 
hands on our new book, Beginning Rails E-Commerce. His mail didn’t
include the words “&lt;a href="http://headrush.typepad.com/creating_passionate_users/2006/11/two_simple_word.html"&gt;f*cking awesome&lt;/a&gt;”, but instead “superb” and
“a work of art”, which we think are almost as good.&lt;/p&gt;


	&lt;p&gt;This means that the book will hit the shelves before you can say
“Heinemeier”, so be sure to get yours while it’s still hot.&lt;/p&gt;


	&lt;p&gt;We wanted to make our book such that you can “read” it while you’re
sitting in front of your computer. It’s completely project-driven,
meaning the content is divided by task, and that you can build
the sample application in small iterations, learning the
background details on the fly.&lt;/p&gt;


	&lt;p&gt;As one of the core philosophies of Rails is to support best
practices, we decided to do that as well. Most of the tasks are
written test-driven, giving you a glimpse of the ease with which
&lt;span class="caps"&gt;TDD&lt;/span&gt; can be used in Rails and the power it brings compared to a
traditional, ad-hoc web application development process.&lt;/p&gt;


	&lt;p&gt;We hope you enjoy the book as much as we enjoyed the journey of
writing it.&lt;/p&gt;


Buy the book
	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.apress.com/book/bookDisplay.html?bID=10178"&gt;Directly from Apress&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;or &lt;a href="http://www.amazon.com/gp/redirect.html?ie=UTF8&amp;amp;#38;location=http%3A%2F%2Fwww.amazon.com%2FBeginning-Ruby-Rails-E-Commerce-Professional%2Fdp%2F1590597362%2F&amp;amp;#38;tag=jlainenet-20&amp;amp;#38;linkCode=ur2&amp;amp;#38;camp=1789&amp;amp;#38;creative=9325"&gt;from Amazon.com&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;


	&lt;p&gt;Best,&lt;/p&gt;


	&lt;p&gt;Christian Hellsten and Jarkko Laine&lt;/p&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2006/11/8/beginning-ruby-on-rails-e-commerce-is-shipping</feedburner:origLink></entry>
  <entry xml:base="http://www.railsecommerce.com/">
    <author>
      <name>jarkko</name>
    </author>
    <id>tag:www.railsecommerce.com,2006-11-07:2</id>
    <published>2006-11-07T09:45:00Z</published>
    <updated>2006-11-10T14:25:49Z</updated>
    <category term="Sample Code" />
    <link href="http://feedproxy.google.com/~r/railsecommerce/~3/wF5RpgYUqsE/sample-code" rel="alternate" type="text/html" />
    <title>Sample Code</title>
<content type="html">
            &lt;p&gt;On this page you can find the sample code for the book.&lt;/p&gt;


	&lt;h3&gt;By Chapter:&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter1.zip"&gt;Chapter 1&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter2.zip"&gt;Chapter 2&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter3.zip"&gt;Chapter 3&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter4.zip"&gt;Chapter 4&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter5.zip"&gt;Chapter 5&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter6.zip"&gt;Chapter 6&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter07.zip"&gt;Chapter 7&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter08.zip"&gt;Chapter 8&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter09.zip"&gt;Chapter 9&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter10.zip"&gt;Chapter 10&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter11.zip"&gt;Chapter 11&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter12.zip"&gt;Chapter 12&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/chapter13.zip"&gt;Chapter 13&lt;/a&gt;&lt;/li&gt;
	&lt;/ol&gt;


	&lt;h3&gt;All chapters at once (4.8MB)&lt;/h3&gt;


	&lt;ul&gt;
	&lt;li&gt;&lt;a href="http://www.railsecommerce.com/assets/2006/11/8/all-chapters.zip"&gt;Download&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;
          </content>  <feedburner:origLink>http://www.railsecommerce.com/2006/11/7/sample-code</feedburner:origLink></entry>
</feed>
