<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>images/elmo.jpg</filename>
    </added>
    <added>
      <filename>images/mrrogers.jpg</filename>
    </added>
    <added>
      <filename>images/screw-unit-runner.png</filename>
    </added>
    <added>
      <filename>images/turtle.jpg</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -44,6 +44,7 @@
           &lt;li&gt;Technical hurdles to a friendly solution.&lt;/li&gt;
           &lt;li&gt;Existing solutions&lt;/li&gt;
           &lt;li&gt;The future&lt;/li&gt;
+          &lt;li&gt;Community forum&lt;/li&gt;
         &lt;/ul&gt;
 
       &lt;/div&gt;
@@ -75,15 +76,18 @@
       &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;jSpec&lt;/h1&gt;
 
-        &lt;br/&gt;
-        &lt;br/&gt;
-        &lt;br/&gt;
-        &lt;br/&gt;
-
         &lt;div class=&quot;center&quot;&gt;
           &lt;img src=&quot;images/jspec.png&quot;/&gt;
         &lt;/div&gt;
 
+        &lt;h2&gt;Features!&lt;/h2&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;Message expectations with quantifiers like RSpec&lt;/li&gt;
+          &lt;li&gt;RSpec-like 'should(Not)' predicate syntax&lt;/li&gt;
+          &lt;li&gt;Nested describe blocks (a la RSpec)&lt;/li&gt;
+          &lt;li&gt;No originality whatsoever&lt;/li&gt;
+        &lt;/ul&gt;
       &lt;/div&gt; 
 
       &lt;div class=&quot;slide&quot;&gt;
@@ -179,7 +183,30 @@ jSpec.describe('this presentation', function($)
       &lt;/div&gt;
 
       &lt;div class=&quot;slide&quot;&gt;
-        &lt;h1&gt;jSpec&lt;/h1&gt;
+        &lt;h1&gt;jSpec:  Message Expectations&lt;/h1&gt;
+
+        &lt;h2&gt;Example&lt;/h2&gt;
+        
+        &lt;pre&gt;
+jSpec.describe('this presentation', function($)
+{
+  var presentation;
+  $.beforeEach(function() {
+    presentation = { 
+      begin   : function() { alert(this.applause); },
+      applause: 'woooo!'
+    };
+  });
+  $.it(&quot;should receive applause&quot;, function() {
+    $.$(presentation).shouldReceive('applause');
+    presentation.begin();
+  });
+});
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;RTFG!&lt;/h1&gt;
 
         &lt;div class=&quot;center&quot;&gt;
           &lt;img src=&quot;images/ninja-kitten-defeats-dog-with-google-search-skills-always.jpg&quot;/&gt;
@@ -190,15 +217,25 @@ jSpec.describe('this presentation', function($)
         &lt;h1&gt;Other packages&lt;/h1&gt;
 
         &lt;ul&gt;
+          &lt;li&gt;Firebug (JavaScript assertions, http://getfirebug.com)&lt;/li&gt;
           &lt;li&gt;JsUnit (http://www.jsunit.net/)&lt;/li&gt;
-          &lt;li&gt;QUnit&lt;/li&gt;
+          &lt;li&gt;QUnit (http://docs.jquery.com/QUnit)&lt;/li&gt;
           &lt;li&gt;JSSpec (http://code.google.com/p/jsspec/)&lt;/li&gt;
-          &lt;li&gt;Firebug (JavaScript assertions, http://getfirebug.com)&lt;/li&gt;
           &lt;li&gt;Screw.Unit (http://github.com/nkallen/screw-unit/tree/master)&lt;/li&gt;
         &lt;/ul&gt;
       &lt;/div&gt;
 
       &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Firebug&lt;/h1&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;Provides a console API for simple assertions&lt;/li&gt;
+          &lt;li&gt;Does &lt;em&gt;not&lt;/em&gt; provide a test harness for automation&lt;/li&gt;
+          &lt;li&gt;One platform only (Firefox)&lt;/li&gt;
+        &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;JsUnit&lt;/h1&gt;
 
         &lt;h2&gt;From the JsUnit documentation:&lt;/h2&gt;
@@ -254,16 +291,6 @@ describe('Plus operator', {
       &lt;/div&gt;
 
       &lt;div class=&quot;slide&quot;&gt;
-        &lt;h1&gt;Firebug&lt;/h1&gt;
-
-        &lt;ul&gt;
-          &lt;li&gt;Provides a console API for simple assertions&lt;/li&gt;
-          &lt;li&gt;Does &lt;em&gt;not&lt;/em&gt; provide a test harness for automation&lt;/li&gt;
-          &lt;li&gt;One platform only (Firefox)&lt;/li&gt;
-        &lt;/ul&gt;
-      &lt;/div&gt;
-
-      &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;Screw.Unit&lt;/h1&gt;
 
         &lt;h2&gt;From the Screw.Unit README:&lt;/h2&gt;
@@ -281,7 +308,16 @@ describe('Plus operator', {
         &lt;h1&gt;Screw.Unit&lt;/h1&gt;
 
         &lt;div class=&quot;center&quot;&gt;
-          &lt;img src=&quot;images/awesome.jpg&quot;/&gt;
+          &lt;img src=&quot;images/turtle.jpg&quot;/&gt;
+          &lt;h2&gt;RADICAL!&lt;/h2&gt;
+        &lt;/div&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Screw.Unit&lt;/h1&gt;
+
+        &lt;div align=&quot;center&quot;&gt;
+          &lt;img src=&quot;images/screw-unit-runner.png&quot;/&gt;
         &lt;/div&gt;
       &lt;/div&gt;
 
@@ -325,20 +361,181 @@ describe(&quot;jquery.slideshow&quot;, function() {
 
         &lt;pre&gt;
 describe('nextSlide()', function() {
-  it('hides the current slide', function() {});
   it('increments the slide index', function() {});
-  it('shows the current slide', function() {});
+  it('hides the previous slide', function() {});
+  it('shows the next slide', function() {});
+});
+        &lt;/pre&gt;
+
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Screw.Unit:  Time to get meta up in here.&lt;/h1&gt;
+
+        &lt;pre&gt;
+...
+it('increments the slide index', function() {
+  expect(slideshow.slideIndex()).to(equal, 0);
+  slideshow.nextSlide();
+  expect(slideshow.slideIndex()).to(equal, 1);
 });
+...
         &lt;/pre&gt;
 
       &lt;/div&gt;
 
       &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Screw.Unit:  Time to get meta up in here.&lt;/h1&gt;
+
+        &lt;pre&gt;
+it('hides the current slide', function() {
+});
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Screw.Unit.shouldReceive('messageExpectations')&lt;/h1&gt;
+
+        &lt;h2&gt;In an ideal world:&lt;/h2&gt;
+
+        &lt;pre&gt;
+it('hides the current slide', function() {
+  expect(slides[0]).to(receive, 'hide'); // ideal...
+  slideshow.nextSlide();
+});
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Screw.Unit.shouldReceive('messageExpectations')&lt;/h1&gt;
+
+        &lt;h2&gt;In the real world:&lt;/h2&gt;
+
+        &lt;pre&gt;
+...
+it('increments the slide index', function() {
+  expect(slideshow.slideIndex()).to(equal, 0);
+  slideshow.nextSlide();
+  expect(slideshow.slideIndex()).to(equal, 1);
+});
+...
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Let's look under the hood...&lt;/h1&gt;
+
+        &lt;pre&gt;
+be_true: {
+  match: function(expected, actual) {
+    return actual;
+  },
+
+  failure_message: function(expected, actual, not) {
+    return 'expected ' + $.print(actual) + (not ? ' to not be true' : ' to be true');
+  }
+},
+...
+        &lt;/pre&gt;
+
+        &lt;div class=&quot;notes&quot;&gt;
+          In order to create a 'receive' matcher, the architecture would need to be changed
+          to accommodate for post-test callbacks such that we could reconcile the expectations
+          at the end of the test execution.
+        &lt;/div&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Stubs and Mocks?&lt;/h1&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;JSMock&lt;/li&gt;
+          &lt;li&gt;Roll your own&lt;/li&gt;
+        &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;JSMock&lt;/h1&gt;
+
+        &lt;pre&gt;
+function Presentation() {
+  this.boring   = function() { /* ... */ };
+  this.audience = function() { /* ... */ };
+}
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;JSMock&lt;/h1&gt;
+
+        &lt;pre&gt;
+function test_PresentationIsTotallyStellar() {
+  var mockControl = new MockControl();
+  presentationMock = mockControl.createMock(Presentation);
+
+  var soManyPeople = [ 'all', 'of', 'you', 'wonderful', 'beautiful', 'rails', 'enthusiasts' ];
+
+  presentationMock.expects().boring().andReturn(false);
+  presentationMock.expects().audience().andReturn(soManyPeople);
+}
+        &lt;/pre&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;JSMock:  Yay/Nay&lt;/h1&gt;
+
+        &lt;h2&gt;Yay!&lt;/h2&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;Expectation recording/matching!&lt;/li&gt;
+        &lt;/ul&gt;
+
+        &lt;h2&gt;Nay!&lt;/h2&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;Mildly cumbersome syntax&lt;/li&gt;
+        &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Mock schnell!&lt;/h1&gt;
+
+        &lt;h2&gt;Or:  One Reason To Love Prototype-Based Languages&lt;/h2&gt;
+
+        &lt;pre&gt;
+// A la RSpec mock()
+var mock_schnell = {
+  field: 'value',
+  another: 123,
+  method: function() { return 'some mocked value'; }
+};
+        &lt;/pre&gt;
+
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;Roll your own:  Yay/Nay&lt;/h1&gt;
+
+        &lt;h2&gt;Yay!&lt;/h2&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;No external libraries and no setup beyond a plain ol' JavaScript object.&lt;/li&gt;
+        &lt;/ul&gt;
+
+        &lt;h2&gt;Nay!&lt;/h2&gt;
+
+        &lt;ul&gt;
+          &lt;li&gt;No expectation recording/matching&lt;/li&gt;
+        &lt;/ul&gt;
+      &lt;/div&gt;
+
+      &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;Technical hurdles to be solved&lt;/h1&gt;
 
         &lt;ul&gt;
           &lt;li&gt;No automated cross-browser support&lt;/li&gt;
           &lt;li&gt;No integration into Rails development workflow (i.e., rake spec)&lt;/li&gt;
+          &lt;li&gt;No mature message expectation engine&lt;/li&gt;
           &lt;li&gt;No mature mocking/stubbing library&lt;/li&gt;
         &lt;/ul&gt;
       &lt;/div&gt;
@@ -393,7 +590,6 @@ dom_function :slideshow do |element|
 end
         &lt;/pre&gt;
       &lt;/div&gt;
-          
 
       &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;HotRuby&lt;/h1&gt;
@@ -455,9 +651,23 @@ end
       &lt;div class=&quot;slide&quot;&gt;
         &lt;h1&gt;Your turn!&lt;/h1&gt;
 
+        &lt;div class=&quot;center&quot;&gt;
+          &lt;img src=&quot;images/elmo.jpg&quot;/&gt;
+        &lt;/div&gt;
+
         &lt;h2&gt;What are &lt;em&gt;you&lt;/em&gt; using to test your JavaScript?&lt;/h2&gt;
       &lt;/div&gt;
 
+      &lt;div class=&quot;slide&quot;&gt;
+        &lt;h1&gt;FIN.&lt;/h1&gt;
+
+        &lt;div class=&quot;center&quot;&gt;
+          &lt;img src=&quot;images/mrrogers.jpg&quot;/&gt;
+        &lt;/div&gt;
+
+        &lt;h2&gt;github.com/teejayvanslyke/railsconfeurope2008&lt;/h2&gt;
+      &lt;/div&gt;
+
     &lt;/div&gt;
 
   &lt;/body&gt;</diff>
      <filename>index.html</filename>
    </modified>
    <modified>
      <diff>@@ -10,6 +10,12 @@ $.fn.slideshow = function(options) {
     _slideIndex:  0,
     slideIndex: function() { return this._slideIndex; },
     slides: [],
+    resize: function() {
+      $(this).children('.'+opts.slideClass).each(function() {
+        $(this).width($(window).width()); 
+        $(this).height($(window).height()); 
+      });
+    },
     init: function() {
       this.addClass('presentation');
       var slideshow = this;
@@ -21,6 +27,8 @@ $.fn.slideshow = function(options) {
         // Push each slide onto the queue.
         slideshow.slides.push($(this));
       });
+      // Resize to the window's dimensions.
+      slideshow.resize();
     },
 
     current: function() { return this.slides[this.slideIndex()]; },
@@ -57,6 +65,9 @@ $.fn.slideshow = function(options) {
         slideshow.nextSlide();
       }
     });
+    $(window).resize(function(e) {
+      slideshow.resize();
+    });
   }
   else if (opts.format == 'outline') {
     slideshow.addClass('outline');</diff>
      <filename>javascripts/jquery.slideshow/lib/jquery.slideshow.js</filename>
    </modified>
    <modified>
      <diff>@@ -19,6 +19,7 @@
 body {
   font-family: Georgia, Sans-serif;
   font-size: 20px;
+  margin: 0; padding: 0;
 }
 
 h1, h2, h3, h4, h5, h6 {
@@ -40,7 +41,6 @@ h1, h2, h3, h4, h5, h6 {
   width: 53.3em;
   height: 30em;
   color: #C8C8FF;
-  border: 0.2em solid #1919B3;
   background-color: #12127D;
 }
 
@@ -56,6 +56,10 @@ h1, h2, h3, h4, h5, h6 {
   border-bottom: 0.5em solid #2D006B;
 }
 
+.presentation p {
+  font-size: 1.5em;
+}
+
 
 .presentation pre {
   margin: 0;</diff>
      <filename>stylesheets/main.css</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>a8aaa2d9e9991b4fcfc9b556a79143ed410de47e</id>
    </parent>
  </parents>
  <author>
    <name>T.J. VanSlyke</name>
    <email>tj@elctech.com</email>
  </author>
  <url>http://github.com/teejayvanslyke/railsconfeurope2008/commit/c6db7584cdc75d686a621452f7f58c6394722075</url>
  <id>c6db7584cdc75d686a621452f7f58c6394722075</id>
  <committed-date>2008-09-04T00:11:48-07:00</committed-date>
  <authored-date>2008-09-04T00:11:48-07:00</authored-date>
  <message>added a bunch of slides, changed some images</message>
  <tree>0cba4f8536d89228fe359c3a46ebdedcb45e2c2d</tree>
  <committer>
    <name>T.J. VanSlyke</name>
    <email>tj@elctech.com</email>
  </committer>
</commit>
