lots of little tweaks
[dbsrgits/dbix-class-introduction-presentation.git] / slideshow.html
index f751727..4213975 100644 (file)
    </div>
 
    <div class="slide">
-      <h1>books table</h1>
-<pre>CREATE TABLE books(
-   id        int(8) primary key auto_increment,
-   title     varchar(255),
-   author_id <strong>int(8)</strong>,<strong>foreign key (<em>author</em>)</strong>
-      <strong>references <em>authors(id)</em></strong>
-) engine = InnoDB DEFAULT CHARSET=utf8;</pre>
-   </div>
-
-   <div class="slide">
       <h1>CRUD compared</h1>
       <ul>
          <li><strong>C</strong> - Create</li>
       <h1>SQL: Create</h1>
 <pre>my $sth = $dbh-&gt;prepare('
    INSERT INTO books
-   (title, author)
+   (title, author_id)
    values (?,?)
 ');
 
@@ -260,16 +250,16 @@ $delete-&gt;execute(<strong>$book_id</strong>);</pre>
 
    <div class="slide">
       <h1>DBIC: Create</h1>
-<pre>my $book = $book_model-&gt;create({
-   title  =&gt; 'A book title',
-   author =&gt; $author_id,
+<pre>my $book = $book_rs-&gt;create({
+   title     =&gt; 'A book title',
+   author_id =&gt; $author_id,
 });</pre>
       <p>Look ma, no SQL!</p>
    </div>
 
    <div class="slide">
       <h1>DBIC: Create</h1>
-<pre>my $pratchett = $author_model-&gt;create({
+<pre>my $pratchett = $author_rs-&gt;create({
    name =&gt; 'Terry Pratchett',
 });</pre>
    </div>
@@ -288,19 +278,18 @@ $delete-&gt;execute(<strong>$book_id</strong>);</pre>
 
    <div class="slide">
       <h1>DBIC: Read</h1>
-      <p>DBIx::Class - Lots of ways to do the same thing...</p>
-      <p><em>"There is more than one way to do it (TIMTOWTDI, usually pronounced "Tim Toady") is a Perl motto"</em></p>
+      <p>DBIx::Class - TIMTOWTDI</p>
    </div>
 
    <div class="slide">
       <h1>DBIC: Read</h1>
-<pre>my $book = $book_model-&gt;find($book_id);
+<pre>my $book = $book_rs-&gt;find($book_id);
 
-my $book = $book_model-&gt;search({
+my $book = $book_rs-&gt;search({
    title =&gt; 'A book title',
 }, { rows =&gt; 1 })-&gt;single;
 
-my @books = $book_model-&gt;search({
+my @books = $book_rs-&gt;search({
    author =&gt; $author_id,
 })-&gt;all;</pre>
    </div>
@@ -318,7 +307,7 @@ my @books = $book_model-&gt;search({
 
    <div class="slide">
       <h1>DBIC: Read</h1>
-<pre>my $books_rs = $book_rs-&gt;search({
+<pre>my $resultset = $book_rs-&gt;search({
    author =&gt; $author_id,
 });</pre>
       <p>Search takes SQL::Abstract formatted queries</p>
@@ -342,91 +331,109 @@ my @books = $book_model-&gt;search({
    </div>
 
    <div class="slide">
-      <pre>Example of a DBIC Result</pre>
+<pre>package Foo::Schema::Result::Author;
+__PACKAGE__-&gt;table('authors');
+__PACKAGE__-&gt;add_columns(
+  id =&gt; {
+    data_type         =&gt; 'int',
+    is_auto_increment =&gt; 1
+  },
+  title =&gt; {
+    data_type   =&gt; 'varchar',
+    is_nullable =&gt; 1,
+    size        =&gt; 255,
+  },
+);
+__PACKAGE__-&gt;set_primary_key('id');
+__PACKAGE__-&gt;has_many( books =&gt;
+   'Foo::Schema::Result::Book', 'author_id'
+);
+1;
+</pre>
    </div>
 
    <div class="slide">
-      <pre>Example of a DBIC Result</pre>
+<pre style="float: left; font-size: 80%;">package Foo::Schema::Result::Book;
+use strict; use warnings;
+__PACKAGE__-&gt;table('books');
+__PACKAGE__-&gt;add_columns(
+  id =&gt; {
+    data_type         =&gt; 'int',
+    is_auto_increment =&gt; 1
+  },
+  name =&gt; {
+    data_type   =&gt; 'varchar',
+    is_nullable =&gt; 1,
+    size        =&gt; 255,
+  },
+</pre>
+<pre style="float: left; font-size: 80%;">
+  author_id =&gt; {
+    data_type   =&gt; 'int',
+    size        =&gt; 8,
+  },
+);
+__PACKAGE__-&gt;set_primary_key('id');
+__PACKAGE__-&gt;belongs_to( author =&gt;
+   'Foo::Schema::Result::Author', 'author_id'
+);
+1;
+</pre>
    </div>
 
    <div class="slide">
-      <p>too much typing!  too much maintenance!</p>
+      <h1>-&gt;deploy</h1>
+      <p>Perl -&gt; DB</p>
+<pre>my $schema = Foo::Schema-&gt;connect($dsn, $user, $pass);
+$schema-&gt;deploy
+</pre>
+<p>See also: <a href="http://search.cpan.org/perldoc?DBIx::Class::DeploymentHandler">DBIx::Class::DeploymentHandler</a></p>
    </div>
 
    <div class="slide">
       <h1>Schema::Loader</h1>
-      <pre>code for S::L here</pre>
-   </div>
+      <p>DB -&gt; Perl</p>
+<pre>package Foo::Schema;
+use strict; use warnings;
+use base 'DBIx::Class::Schema::Loader';
+__PACKAGE__-&gt;loader_options({
+   naming =&gt; 'v7',
+   debug  =&gt; $ENV{DBIC_TRACE},
+});
+1;
 
-   <div class="slide">
-      <h1>splitting logic cleanly</h1>
-      <p>Foo::Schema::Result::Foo = an individual row</p>
-      <p>Foo::Schema::ResultSet::Foo = searches / results</p>
-   </div>
+# elsewhere...
 
-   <div class="slide">
-      <h1>using your Schema</h1>
-      <pre>example usage code goes here</pre>
+my $schema = Foo::Schema-&gt;connect($dsn, $user, $pass);
+</pre>
    </div>
 
    <div class="slide">
-      <h1>DEBUGGING</h1>
-      <pre>DBIC_TRACE=1 ./your_script.pl</pre>
+      <h1>Splitting Logic Cleanly</h1>
+      <p>Foo::Schema::Result::Bar = individual row</p>
+      <p>Foo::Schema::ResultSet::Bar = searches / table </p>
    </div>
 
    <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Authors-&gt;table("authors");
-Foo::Schema::Result::Authors-&gt;add_columns(
-   id =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 0,
-      size          =&gt; 8
-   },
-   title =&gt; {
-      data_type     =&gt; "VARCHAR",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 255,
-   },
-);
-Foo::Schema::Result::Authors-&gt;set_primary_key("id");</pre>
-   </div>
-
-   <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Books->table("books");
-Foo::Schema::Result::Books->add_columns(
-   id =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 0,
-      size          =&gt; 8
-   },
-   name =&gt; {
-      data_type     =&gt; "VARCHAR",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 255,
-   },
-   author =&gt; {
-      data_type     =&gt; "INT",
-      default_value =&gt; undef,
-      is_nullable   =&gt; 1,
-      size          =&gt; 8
-   },
-);
-Foo::Schema::Result::Books-&gt;set_primary_key("id");</pre>
+      <h1>Using your Schema</h1>
+<pre>#!perl
+use strict; use warnings;
+use lib 'lib';
+use Foo::Schema;
+my $schema = Foo::Schema-&gt;connect($dns, $user, $pass);
+my $author_rs = $schema-&gt;resultset('Author');
+my $author    = $author_rs-&gt;create({
+   name =&gt; 'Douglas Adams',
+});
+my $book = $author-&gt;add_to_books({
+   title =&gt; '42',
+});
+</pre>
    </div>
 
    <div class="slide">
-      <h1>Schema::Loader</h1>
-<pre>Foo::Schema::Result::Authors-&gt;has_many(books =&gt; "Foo::Schema::Books",
-   { "foreign.author" =&gt; "self.id" });
-
-Foo::Schema::Result::Books-&gt;belongs_to(author =&gt; "Foo::Schema::Authors",
-   { id =&gt; "author" });</pre>
+      <h1>DEBUGGING</h1>
+      <pre>DBIC_TRACE=1 ./your_script.pl</pre>
    </div>
 
    <div class="slide">
@@ -440,19 +447,21 @@ INSERT INTO books (author, title)
 
    <div class="slide">
       <h1>overloading</h1>
-<pre>Foo::Schema::Result::Books
-Foo::Schema::ResultSet::Books
-Foo::Schema::Result::Authors
-Foo::Schema::ResultSet::Books</pre>
+<pre>Foo::Schema::Result::Book
+Foo::Schema::ResultSet::Book
+Foo::Schema::Result::Author
+Foo::Schema::ResultSet::Book</pre>
    </div>
 
    <div class="slide">
       <h1>Result::</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
+<pre>package Foo::Schema::Result::Book;
+use base 'DBIx::Class::Core';
 use strict;
 use warnings;
 
+# Result code here
+
 sub isbn {
    my $self = shift;
 
@@ -474,39 +483,22 @@ sub isbn {
 
    <div class="slide">
       <h1>Result:: (inflating)</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
+<pre>package Foo::Schema::Result::Book;
+use base 'DBIx::Class::Core';
 use strict;
 use warnings;
 
+# Result code here
+
+__PACKAGE__-&gt;load_components('InflateColumn');
 use DateTime::Format::MySQL;
 
 __PACKAGE__-&gt;<strong>inflate_column</strong>(
    <strong>date_published</strong> =&gt; {
       inflate =&gt; sub { DateTime::Format::MySQL-&gt;parse_date(shift) },
       deflate =&gt; sub { shift-&gt;ymd},
-   }
-);
-# Automatic see: DBIx::Class::InflateColumn::DateTime</pre>
-   </div>
-
-   <div class="slide">
-      <h1>Result:: (inflating)</h1>
-<pre>package Foo::Schema::Result::Books;
-use base 'DBIx::Class';
-use strict;
-use warnings;
-
-use DateTime::Format::MySQL;
-
-__PACKAGE__-&gt;inflate_column(
-   date_published =&gt; {
-      <strong>inflate =&gt; sub { DateTime::Format::MySQL-&gt;parse_date(shift) },
-      deflate =&gt; sub { shift-&gt;ymd},</strong>
-   }
+   },
 );
-# Automatic see: DBIx::Class::InflateColumn::DateTime
-# Automatic see: DBIx::Class::InflateColumn::DateTime
 # Automatic see: DBIx::Class::InflateColumn::DateTime</pre>
    </div>
 
@@ -542,63 +534,32 @@ sub by_author {
 
    <div class="slide">
       <h1>ResultSets::</h1>
-<pre>package Foo::Schema::<strong>ResultSet::Books</strong>;
-use base '<strong>DBIx::Class::ResultSet</strong>';
-sub the_ultimate_books {
-   my $self = shift;
-   <strong>return $self-&gt;search({ title =&gt; { -like =&gt; '%42%' } })</strong>
-}
-sub by_author {
-   my ( $self, $author ) = @_;
-   return $self-&gt;search({ author =&gt; $author-&gt;id })
-}
-
-1;</pre>
-   </div>
-
-   <div class="slide">
-      <h1>ResultSets::</h1>
-<pre>package Foo::Schema::ResultSet::Books;
-use base 'DBIx::Class::ResultSet';
-sub the_ultimate_books {
-   my $self = shift;
-   return $self-&gt;search({ title =&gt; { -like =&gt; '%42%' } });
-}
-sub by_author {
-   my ( $self, $author ) = @_;
-   <strong>return $self-&gt;search({ author =&gt; $author-&gt;id })</strong>
-}
-
-1;</pre>
-   </div>
-
-   <div class="slide">
-      <h1>ResultSets::</h1>
 <pre>use Foo::Schema;
-my $book_model = Foo::Schema-&gt;resultset('Books');
-my $book_rs    = $book_model-&gt;the_ultimate_books;
-my @books      = $book_rs-&gt;all;</pre>
+my $schema = Foo::Schema-&gt;connect(...);
+my $book_rs     = Foo::Schema-&gt;resultset('Book');
+my $book_search = $book_rs-&gt;the_ultimate_books;
+my @books       = $book_search-&gt;all;</pre>
    </div>
 
    <div class="slide">
-      <h1>ResultSets::chaining</h1>
-<pre>use Foo::Schema;
-my $book_model   = Foo::Schema-&gt;resultset('Books');
-my $author_model = Foo::Schema-&gt;resultset('Authors');
-my $author       = $author_model-&gt;search({ name =&gt; 'Douglas Adams' })-&gt;single;
-my $book_rs      = $book_model-&gt;the_ultimate_books-&gt;by_author($author);
-my @books        = $book_rs-&gt;all;</pre>
+      <h1>ResultSets: Chaining</h1>
+<pre>
+my $book_rs   = $schema-&gt;resultset('Book');
+my $author_rs = $schema-&gt;resultset('Author');
+my $author    = $author_rs-&gt;search({ name =&gt; 'Douglas Adams' })-&gt;single;
+$book_rs      = $book_rs-&gt;the_ultimate_books-&gt;by_author($author);
+my @books     = $book_rs-&gt;all;</pre>
    </div>
 
    <div class="slide">
-      <h1>ResultSets::chaining</h1>
-<pre>my $book_rs = $book_model
+      <h1>ResultSets: Chaining</h1>
+<pre>$book_rs = $schema-&gt;resultset('Book')
   -&gt;the_ultimate_books
   -&gt;by_author($author);</pre>
 or
 
-<pre>my $book_rs = $book_model
-  -&gt;the_ultimate_books();
+<pre>my $book_rs = $schema-&gt;resultset('Book')
+  -&gt;the_ultimate_books;
 $book_rs = $book_rs-&gt;by_author($author);</pre>
 <pre># Debug (SQL):
 
@@ -609,8 +570,8 @@ $book_rs = $book_rs-&gt;by_author($author);</pre>
    </div>
 
    <div class="slide">
-      <h1>ResultSets::chaining</h1>
-<pre>my $rs = $book_model
+      <h1>ResultSets: Chaining</h1>
+<pre>my $rs = $book_rs
   -&gt;category('childrens')
   -&gt;by_author($author)
   -&gt;published_after('1812')
@@ -622,12 +583,8 @@ my @books = $rs-&gt;all;</pre>
 
    <div class="slide">
       <h1>overloading before new record</h1>
-   </div>
-
-   <div class="slide">
-      <h1>overloading before new record</h1>
-      <pre>package Foo::Schema::Result::Authors;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::Result::Author;
+use base 'DBIx::Class::Core';
 
 sub new {
    my ( $class, $attrs ) = @_;
@@ -639,123 +596,88 @@ sub new {
 1;</pre>
 
    <div class="slide">
-      <h1>relationships</h1>
+      <h1>Relationships</h1>
    </div>
 
    <div class="slide">
-      <h1>multiple authors</h1>
-   </div>
-
-   <div class="slide">
-      <h1>a few relationships</h1>
-      (authors -- author_link_to_book -- books)
+      <h1>Multiple Authors</h1>
+      <p>We want to allow a book to be by more than one author</p>
    </div>
 
    <div class="slide">
       <h1>a few relationships</h1>
-      !
+      <img src="img/afewrels.png" />
    </div>
 
    <div class="slide">
-      <h1>new join table</h1>
+      <h1>Join Table</h1>
 <pre>CREATE TABLE author_and_books(
-  id      int(8)    primary key auto_increment,
-  book    int(8),
-  author  int(8),
-  foreign key (book)     references books(id),
-  foreign key (author)   references authors(id)
+  book_id    int(8),
+  author_id  int(8),
+  foreign key (book_id)     references books(id),
+  foreign key (author_id)   references authors(id)
 ) engine = InnoDB DEFAULT CHARSET=utf8;
 
-ALTER TABLE `books` DROP `author`</pre>
-   </div>
-
-   <div class="slide">
-      <h1>new join table</h1>
-<pre>CREATE TABLE author_and_books(
-  id      int(8)    primary key auto_increment,
-  book    int(8),
-  author  int(8),
-  <strong>foreign key (book)     references books(id),
-  foreign key (author)   references authors(id)</strong>
-) engine = InnoDB DEFAULT CHARSET=utf8;
-
-ALTER TABLE `books` DROP `author`</pre>
-   </div>
-
-   <div class="slide">
-      <h1>has_many</h1>
+ALTER TABLE `books` DROP `author_id`;</pre>
    </div>
 
    <div class="slide">
       <h1>has_many</h1>
-<pre>package Foo::Schema::<strong>Result::Books</strong>;
-
-__PACKAGE__-&gt;has_many( author_and_books =&gt; "Foo::Schema::Result::AuthorAndBooks",
-    { "foreign.book" =&gt; "self.id" },
-);
-
-<strong># This is auto generated by Schema::Loader</strong></pre>
+      <img src="img/hasmany1.png" />
    </div>
 
    <div class="slide">
       <h1>has_many</h1>
-<pre>package Foo::Schema::<strong>Result::Books</strong>;
+<pre>package Foo::Schema::<strong>Result::Book</strong>;
 
-__PACKAGE__-&gt;has_many(
-author_and_books =&gt; <strong># name of accessor</strong>
-"Foo::Schema::Result::AuthorAndBooks", <strong># related class</strong>
-    { "foreign.book" =&gt; "self.id" } <strong># Relationship (magic often works if not
-                                        # specified, but avoid!)</strong>
+__PACKAGE__-&gt;has_many( author_and_books =&gt;
+   'Foo::Schema::Result::Author_Book', 'book_id'
 );
-</pre>
    </div>
 
    <div class="slide">
       <h1>belongs_to</h1>
+      <img src="img/belongsto1.png" />
    </div>
 
    <div class="slide">
       <h1>belongs_to</h1>
-<pre>package Foo::Schema::<strong>Result::AuthorAndBooks</strong>;
+<pre>package Foo::Schema::<strong>Result::Author_Book</strong>;
 
 __PACKAGE__-&gt;belongs_to(
-   book =&gt; <strong># Accessor name</strong>
-   "Foo::Schema::Result::Books", <strong># Related class</strong>
-   { id =&gt; "book" } <strong># relationship</strong>
+   book =&gt;
+   'Foo::Schema::Result::Book', 'book_id'
 );
 </pre>
    </div>
 
    <div class="slide">
       <h1>same for Authors</h1>
-   </div>
-
-   <div class="slide">
-      <h1>with no coding...</h1>
+      <img src="img/authors.png" />
    </div>
 
    <div class="slide">
       <h1>many_to_many</h1>
+      <img src="img/m2m.png" />
    </div>
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::<strong>Result::Books</strong>;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::<strong>Result::Book</strong>;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
-   authors =&gt; "author_and_books", 'author'
+   authors =&gt; 'author_and_books', 'author'
 );
 
 1;
-
-<strong> # This is <em>NOT</em> auto generated by Schema::Loader </strong></pre>
+</pre>
    </div>
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::<strong>Result::Books</strong>;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::<strong>Result::Book</strong>;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
    authors <strong># Accessor name</strong>
@@ -768,8 +690,8 @@ __PACKAGE__-&gt;many_to_many(
 
    <div class="slide">
       <h1>many_to_many</h1>
-      <pre>package Foo::Schema::Result::Authors;
-use base 'DBIx::Class';
+      <pre>package Foo::Schema::Result::Author;
+use base 'DBIx::Class::Core';
 
 __PACKAGE__-&gt;many_to_many(
    "books" <strong># Accessor Name</strong>
@@ -778,18 +700,16 @@ __PACKAGE__-&gt;many_to_many(
 );
 
 1;
-
-<strong># This is <em>NOT</em> auto generated by Schema::Loader</strong></pre>
+</pre>
    </div>
 
    <div class="slide">
-      <h1>using many_to_many</h1>
-      <pre>#!/usr/bin/perl
-
+      <h1>Using many_to_many</h1>
+      <pre>#!perl
 use Foo::Schema;
-
-my $author_model = Foo::Schema-&gt;resultset('Authors');
-my $author       = $author_model-&gt;search({
+my $schema    = Foo::Schema-&gt;connect(...);
+my $author_rs = $schema-&gt;resultset('Authors');
+my $author    = $author_rs-&gt;search({
    name =&gt; 'Douglas Adams',
 })-&gt;single;
 $author-&gt;add_to_books({
@@ -799,7 +719,7 @@ $author-&gt;add_to_books({
 
    <div class="slide">
       <h1>using many_to_many</h1>
-      <pre>my $author = $author_model-&gt;search({
+      <pre>my $author = $author_rs-&gt;search({
    name =&gt; 'Douglas Adams',
 })-&gt;single;
 <strong>$author-&gt;add_to_books({
@@ -822,22 +742,26 @@ $book-&gt;add_to_authors($author_2);</pre>
    </div>
 
    <div class="slide">
-      <h1>in 16 lines of code</h1>
-   </div>
-
-   <div class="slide">
       <h1>errors</h1>
       <p>Read them closely!</p>
    </div>
 
    <div class="slide">
       <h1>error messages</h1>
-      <pre>DBIx::Class::Schema::Loader::connection(): Failed to load external class definition for 'Foo::Schema::Result::Authors': Can't locate object method "many_to_many" via package "Foo::Schema::Result::Author" at lib/Foo/Schema/Result/Authors.pm line 9.Compilation failed in require at /Library/Perl/5.8.8/DBIx/Class/Schema/Loader/Base.pm line 292.</pre>
+<pre>DBIx::Class::Schema::Loader::connection(): Failed to load external
+class definition for 'Foo::Schema::Result::Authors': Can't locate object
+method "many_to_many" via package "Foo::Schema::Result::Author" at
+lib/Foo/Schema/Result/Authors.pm line 9.Compilation failed in require at
+/Library/Perl/5.8.8/DBIx/Class/Schema/Loader/Base.pm line 292.</pre>
    </div>
 
    <div class="slide">
       <h1>error messages</h1>
-   <pre>DBIx::Class::Schema::Loader::connection(): Failed to load external class definition for 'Foo::Schema::Result::Authors': Can't locate object method "many_to_many" via package "Foo::Schema::<strong>Result::Author</strong>" at lib/Foo/Schema/<strong>Result/Authors.pm</strong> line 9.Compilation failed in require at /Library/Perl/5.8.8/DBIx/Class/Schema/Loader/Base.pm line 292.</pre>
+<pre>DBIx::Class::Schema::Loader::connection(): Failed to load external
+class definition for 'Foo::Schema::Result::Authors': Can't locate object
+method "many_to_many" via package "Foo::Schema::<strong>Result::Author</strong>" at
+lib/Foo/Schema/<strong>Result/Authors.pm</strong> line 9.Compilation failed in require at
+/Library/Perl/5.8.8/DBIx/Class/Schema/Loader/Base.pm line 292.</pre>
    </div>
 
    <div class="slide">
@@ -852,6 +776,18 @@ $book-&gt;add_to_authors($author_2);</pre>
    </div>
 
    <div class="slide">
+      <h1>LOTS more Features</h1>
+      <ul>
+         <li>FilterColumn</li>
+         <li>Transactions</li>
+         <li>HashRefInflator</li>
+         <li>Subqueries</li>
+         <li>ResultSetColumn</li>
+         <li>Aggregate Queries</li>
+      </ul>
+   </div>
+
+   <div class="slide">
       <h1>bonus slides!</h1>
    </div>
 
@@ -878,7 +814,7 @@ __PACKAGE__-&gt;config(
 );
 
 1;</pre>
-   <p>Keep your Schema in a <em>separate</em> package to your Catalyst application</p>
+   <p>Keep your Schema in a <em>separate</em> package from your Catalyst application</p>
    </div>
 
    <div class="slide">
@@ -886,8 +822,8 @@ __PACKAGE__-&gt;config(
 <pre>sub action_name : Local {
   my ($self, $c) = @_;
 
-  my $model = $c-&gt;model('Schema::Foo');
-  my $author_model = $model-&gt;resultset('Authors');
+  my $schema = $c-&gt;model('Schema::Foo');
+  my $author_rs = $schema-&gt;resultset('Authors');
 
 }