<?xml version="1.0" encoding="UTF-8"?>
<speaker>
  <biography></biography>
  <company>Viget Labs</company>
  <company-website>http://www.viget.com/</company-website>
  <id type="integer">44</id>
  <linkedin-url>http://www.linkedin.com/in/bscofield</linkedin-url>
  <location>Durham, NC</location>
  <name>Ben Scofield</name>
  <personal-website>http://www.culann.com/</personal-website>
  <title>Technology Director</title>
  <twitter-username>bscofield</twitter-username>
  <average-rating type="decimal">4.06</average-rating>
  <avatar-url>/avatars/44/thumb/marmalade.png</avatar-url>
  <talks type="array">
    <talk>
      <created-at type="datetime">2010-01-30T16:01:19+00:00</created-at>
      <event-id type="integer">299</event-id>
      <id type="integer">2068</id>
      <info>Lightning talk on the motivations behind NoSQL databases, and a quick example of Neo4J</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>Motivating NoSQL</title>
      <updated-at type="datetime">2010-01-30T16:01:19+00:00</updated-at>
      <when type="datetime">2010-01-30T10:15:00+00:00</when>
      <average-rating type="decimal">3.75</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2010-01-14T14:15:58+00:00</created-at>
      <event-id type="integer">285</event-id>
      <id type="integer">1954</id>
      <info>There&#8217;s a storm brewing. You may have felt the increased pressure when you last typed &#8220;CREATE DATABASE latest_project;&#8221; into your MySQL console - or you might have been seeding the clouds in an attempt to bring the thunder on faster. 

The name of that storm? NoSQL. </info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>NoSQL: Death to Relational Databases(?)</title>
      <updated-at type="datetime">2010-01-14T14:15:58+00:00</updated-at>
      <when type="datetime">2010-01-14T13:45:00+00:00</when>
      <average-rating type="decimal">4.5</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-11-13T18:51:40+00:00</created-at>
      <event-id type="integer">231</event-id>
      <id type="integer">1806</id>
      <info>There's a storm brewing. You may have felt the increased pressure when you last typed 'CREATE DATABASE latest_project;'* into your MySQL console - or you might have been seeding the clouds in an attempt to start the storm sooner. 

The name of that storm? NoSQL. 

In this session, we'll explore the NoSQL movement: the general alternatives to relational databases (key-value stores, document-oriented databases, and graph databases) and some of the domains in which they provide the best fit. We'll also look at ways to resolve the tension between relational databases and the alternatives, with examples of hybrid applications.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/nosql-death-to-relational-databases</slides-url>
      <slideshare-key>200911-rubyconf-091121083739-phpapp02</slideshare-key>
      <talk-url>http://rubyconf.org/talks/54-no-sql-death-to-relational-databases-</talk-url>
      <title>NoSQL: Death to Relational Databases(?)</title>
      <updated-at type="datetime">2009-11-21T14:38:54+00:00</updated-at>
      <when type="datetime">2009-11-20T09:30:00+00:00</when>
      <average-rating type="decimal">3.94</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-10-15T02:39:57+00:00</created-at>
      <event-id type="integer" nil="true"></event-id>
      <id type="integer">1581</id>
      <info>Presentation given to Charlotte.rb, on domains that don't map easily to relational databases and some of the options for dealing with them.</info>
      <location>Enventys</location>
      <series-id type="integer">66</series-id>
      <slides-url>http://www.slideshare.net/bscofield/charlotterb-comics-is-hard</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>Charlotte.rb - &quot;Comics&quot; Is Hard</title>
      <updated-at type="datetime">2009-10-15T09:33:12+00:00</updated-at>
      <when type="datetime">2009-10-14T18:30:00+00:00</when>
      <average-rating nil="true"></average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-10-10T20:21:10+00:00</created-at>
      <event-id type="integer">199</event-id>
      <id type="integer">1562</id>
      <info>Lightning talk at Developer Day Boulder</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>Comics and Difficult Domains</title>
      <updated-at type="datetime">2009-10-10T20:21:10+00:00</updated-at>
      <when type="datetime">2009-10-10T13:30:00+00:00</when>
      <average-rating type="decimal">3.86</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-09-24T16:59:44+00:00</created-at>
      <event-id type="integer" nil="true"></event-id>
      <id type="integer">1476</id>
      <info>The future of data is more uncertain than ever &#8211; traditional, server-based relational databases are being assaulted from all sides, by document-oriented databases and other forces, and by HTML5 and client-side storage. Come and learn about these attacks on the status quo, and maybe we can all bring peace to the database landscape, together.</info>
      <location>Durham, NC</location>
      <series-id type="integer">5</series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://refreshthetriangle.org/posts/refresh_021_the_future_of_data/</talk-url>
      <title>Refresh 021 &#8212; The Future of Data</title>
      <updated-at type="datetime">2009-09-24T16:59:44+00:00</updated-at>
      <when type="datetime">2009-09-24T19:00:00+00:00</when>
      <average-rating type="decimal">4.48</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-09-08T17:08:31+00:00</created-at>
      <event-id type="integer">183</event-id>
      <id type="integer">1447</id>
      <info>It sometimes seems like all domains easily map onto relational database like MySQL and Postgres &#8212; that we live in a happy land where all Employees are People, and all People are Mammals. Unfortunately, however, there are many domains that just don't map so easily onto a standard relational schema. In this session, we'll look at three general alternatives to the familiar model, as illustrated by some specific examples. We'll also see how some alternative databases provide a better fit for specific domains.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/windycityrails-comics-is-hard</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>&#8220;Comics&#8221; Is Hard: On Domains and Databases</title>
      <updated-at type="datetime">2009-09-12T17:36:49+00:00</updated-at>
      <when type="datetime">2009-09-12T11:00:00+00:00</when>
      <average-rating type="decimal">4.01</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-08-12T18:40:05+00:00</created-at>
      <event-id type="integer">157</event-id>
      <id type="integer">1314</id>
      <info>It sometimes seems like all domains easily map onto relational database like MySQL and Postgres &#8212; that we live in a happy land where all Employees are People, and all People are Mammals. Unfortunately, however, there are many domains that just don't map so easily onto a standard relational schema. In this session, we'll look at three general alternatives to the familiar model, as illustrated by some specific examples. We'll also see how some alternative databases provide a better fit for specific domains.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/comics-is-hard-alternative-databases</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>&quot;Comics&quot; Is Hard: Alternative Databases</title>
      <updated-at type="datetime">2009-08-17T14:14:12+00:00</updated-at>
      <when type="datetime">2009-08-15T10:45:00+00:00</when>
      <average-rating type="decimal">4.36</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-07-22T17:27:26+00:00</created-at>
      <event-id type="integer">143</event-id>
      <id type="integer">1260</id>
      <info>The benefits of Rack support in Rails have become increasingly obvious; Rails Metal and integrating multiple Rack applications have made possible architectures that were impractical before, and some long-held opinions are ripe for change. In this session, we'll see how to set up this integration and explore real examples of how it can be used&#8212;including the rehabilitation of page caching.
</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>And the Greatest of These Is ... Rack Support</title>
      <updated-at type="datetime">2009-07-22T17:27:26+00:00</updated-at>
      <when type="datetime">2009-07-25T10:05:00+00:00</when>
      <average-rating type="decimal">3.85</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-06-12T03:26:36+00:00</created-at>
      <event-id type="integer">130</event-id>
      <id type="integer">1169</id>
      <info>It sometimes seems like all domains easily map onto relational database like MySQL and Postgres &#8212; that we live in a happy land where all Employees are People, and all People are Mammals. Unfortunately, however, there are many domains that just don't map so easily onto a standard relational schema. In this session, we'll look at three general alternatives to the familiar model, as illustrated by some specific examples.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/comics-is-hard-domain-modeling-challenges</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>&quot;Comics&quot; Is Hard: Domain Modeling Challenges</title>
      <updated-at type="datetime">2009-06-12T21:11:54+00:00</updated-at>
      <when type="datetime">2009-06-12T11:30:00+00:00</when>
      <average-rating type="decimal">3.82</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-04-27T18:28:52+00:00</created-at>
      <event-id type="integer">39</event-id>
      <id type="integer">751</id>
      <info>Over the past year, Rails has gradually become a better, more connected citizen within the Ruby web space. The Merb merger is one part of that, but one of the biggest steps came much earlier, when Rails added Rack support. In addition to the obvious benefits, Rack support in Rails has made possible some new application architectures that were either impossible or ill-advised previously. Specifically, it is now possible to build a complex Rails application that can still respond extremely quickly and directly to a specific set of requests, such as those an AJAX service might experience.

This capability has only been improved by the introduction of Rails Metal, and by the ability to integrate distinct Rack applications (for instance, Sinatra apps) with Rails projects. In this session, we&amp;#8217;ll briefly review how to get this integration running, but the majority of the time will be spent exploring real examples of how this approach changes how applications can be built. We&amp;#8217;ll see how this technique rehabilitates page caching, turning it from a narrowly-applied strategy to a general-purpose performance booster. We&amp;#8217;ll also see how this approach can save an application from incredibly frequent but tiny requests that could otherwise bring it to its knees. Finally, we&amp;#8217;ll address some general problems that may arise as this technique becomes more popular.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://en.oreilly.com/rails2009/public/schedule/detail/7717</talk-url>
      <title>And the Greatest of These Is ... Rack Support</title>
      <updated-at type="datetime">2009-04-27T18:36:45+00:00</updated-at>
      <when type="datetime">2009-05-07T10:45:00+00:00</when>
      <average-rating nil="true"></average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-04-27T18:28:47+00:00</created-at>
      <event-id type="integer">39</event-id>
      <id type="integer">744</id>
      <info>The Rails Rumble is a 48-hour innovation competition in which teams of up to four developers embrace their environmental constraints to create a number of compelling microapps with Ruby and Rails. In this panel we&amp;#8217;ll talk to a number of Rumble participants and discover the tips, tricks, and techniques they used to successfully launch innovative web properties in an extremely short time frame.

Panelists will include a number of winners and other developers (and designers) who performed impressive feats during both the 2007 and 2008 contests. Attendees should come prepared with lots of questions for the panelists, such as:

  - How they leveraged Rails, various Gems, and plugins authored by the community to help them succeed.
  - How they scoped their projects and structured their Rails applications to enable them to launch early and iterate often.
  - How they embraced the mantra of &amp;#8220;simplest thing that could possibly work&amp;#8221;, removing extraneous features and setting reasonable goals for themselves.
  - How they found partners whose skills complemented their own, and how they organized their team.
  - General productivity tips and work habit recommendations.

Their advice will be applicable to both future innovation competitions (such as the upcoming 2009 Rails Rumble) as well as to any project that attendees may hope to bootstrap in their own copious spare time. We&amp;#8217;ll also discuss how to get involved with innovation competitions and why their condensed nature and marketing opportunities can be a great motivator.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url></slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://en.oreilly.com/rails2009/public/schedule/detail/7765</talk-url>
      <title>Starting Up Fast: Lessons from the Rails Rumble</title>
      <updated-at type="datetime">2009-04-27T18:36:45+00:00</updated-at>
      <when type="datetime">2009-05-06T16:25:01+00:00</when>
      <average-rating nil="true"></average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-04-07T15:20:22+00:00</created-at>
      <event-id type="integer" nil="true"></event-id>
      <id type="integer">633</id>
      <info>Over the past year, Rails has gradually (and sometimes quietly) introduced some dramatic new changes. The most obvious of these is the Merb merger, but one of the most important steps on the path to Rails 3.0 was the introduction of Rack support. The effects of that change are wide-ranging, and are often surprising &#8212; and include the possibility for new architectures that were impractical or impossible before. Specifically, it is now feasible to build a complex Rails application that can still respond extremely quickly and directly to a specific set of requests, such as those an AJAX service might experience.</info>
      <location>Strategy Cafe, Richmond, VA</location>
      <series-id type="integer">40</series-id>
      <slides-url>http://www.slideshare.net/bscofield/page-caching-resurrected</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>Page Caching Resurrected: A Fairy Tale</title>
      <updated-at type="datetime">2009-04-15T20:18:59+00:00</updated-at>
      <when type="datetime">2009-04-14T18:00:01+00:00</when>
      <average-rating type="decimal">4.0</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-02-27T12:59:20+00:00</created-at>
      <event-id type="integer">64</event-id>
      <id type="integer">283</id>
      <info>We&#8217;ve seen a number of dramatic changes in Rails over the past year, with the most surprising probably being the announcement of the Rails-Merb merger. No less important, however, is the addition of Rack support, which can have a revolutionary effect on the way we build applications today, much less how we do it when Rails 3 is released. In this session, we&#8217;ll explore how Rails on Rack revitalizes page caching as a performance strategy.</info>
      <location></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/page-caching-resurrected-a-fairy-tale</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url></talk-url>
      <title>Page Caching Resurrected: A Fairy Tale</title>
      <updated-at type="datetime">2009-03-23T19:14:16+00:00</updated-at>
      <when type="datetime">2009-03-21T16:40:01+00:00</when>
      <average-rating type="decimal">4.29</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2008-12-09T14:05:03+00:00</created-at>
      <event-id type="integer">15</event-id>
      <id type="integer">34</id>
      <info>The first program most people write in a new language is, of course, &quot;Hello world.&quot; The first two web applications most people build in a new framework are a to-do list manager and a blog. These are cliched actions, but they work for a reason; writing Hello World gives you a feel for a language's syntax, and simple web applications allow you to get a handle on how a framework deals with the standard tasks (interacting with a database, templating views, etc.).

Recently, I've set out on the next stage of that journey by writing my own web framework. In the process, I'm learning more about how Ruby works, how the web is put together, and even more about the existing frameworks that I use. In this session, I'll review the tools that make building a custom framework easier than ever, and pass along the interesting things I've learned along the way.</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/all-i-need-to-know-i-learned-by-writing-my-own-web-framework-presentation/</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://rubyconf.org/talks/25</talk-url>
      <title>All I Really Need to Know* I Learned by Writing My Own Web Framework </title>
      <updated-at type="datetime">2008-12-09T14:05:03+00:00</updated-at>
      <when type="datetime">2008-11-07T10:25:00+00:00</when>
      <average-rating type="decimal">4.5</average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-01-27T13:48:20+00:00</created-at>
      <event-id type="integer">26</event-id>
      <id type="integer">64</id>
      <info>

One of the big benefits of Rails is that it standardizes application development in a way you don&#8217;t see with many of the alternatives. That has made Rails applications easier and faster to develop, and much easier to maintain, than competing frameworks. This isn&#8217;t just a one-time benefit, however; with the integration of RESTful principles over the last two years, Rails applications have become even more standardized. Developers of RESTful applications can see as much of an improvement over other Rails applications as they originally saw over their old (say, PHP) sites.

This benefit, however, is not without a downside. While REST is easy to follow in the most common cases, it can be difficult to apply to some scenarios &#8211; the classic question being how to represent search RESTfully. This new approach to domain modeling can get complicated, as even one of the paradigmatic examples of RESTful Rails, the restful_authentication plugin, shows &#8211; it abandons the principles when it comes to activation.

The difficulties of RESTful Rails don&#8217;t end with domain modeling, however; problems also arise from the implementation of REST in Rails. For instance, the standard approach to deleting a resource (link_to with method delete) is wholly inaccessible to anyone with JavaScript disabled.

In this session, we&#8217;ll take a look at these (and other) issues that you may encounter when you start building things outside the standard examples. From modeling complicated domains (authentication, search, and beyond), to working around the implementation of REST in Rails, we&#8217;ll discuss and apply techniques that you&#8217;ll find useful for every RESTful application you develop in the future.</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/advanced-restful-rails-europe-presentation</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://en.oreilly.com/railseurope2008/public/schedule/detail/2553</talk-url>
      <title>Advanced RESTful Rails</title>
      <updated-at type="datetime">2009-01-27T13:48:20+00:00</updated-at>
      <when type="datetime">2008-09-04T11:35:00+00:00</when>
      <average-rating nil="true"></average-rating>
    </talk>
    <talk>
      <created-at type="datetime">2009-01-27T13:50:00+00:00</created-at>
      <event-id type="integer">26</event-id>
      <id type="integer">65</id>
      <info>

Rails makes it spectacularly easy to develop an application that does everything &#8211; as long as you&#8217;re happy with rolling everything yourself. For those of us who like to take advantage of the efforts of the community, however, when it comes to common functionality (say, blogging), Rails makes things a little harder. As it turns out, it&#8217;s a challenge to integrate two or more Rails applications, as those of us who&#8217;ve tried to bolt a Mephisto or Radiant installation onto a custom project have discovered. It seems like you&#8217;re faced with two options: proceed without the benefit of third-party development by building even more custom functionality, or making do with a half-hearted (at best) integration between two distinct applications.

We&#8217;ve faced this issue, too, and we&#8217;ve found a solution that works. Resourceful plugins (so named because they provide you with fully-realized resources) allow you to create and distribute reusable functionality that easily ties into your custom application, while still allowing you to profit from continued development on the plugin itself. These plugins integrate with your project through one or two well-defined points, and allow extensive customization once they&#8217;re installed. What&#8217;s even more impressive is that you can then upgrade the plugins when new releases come out, and your customizations are preserved.

In this tutorial, we&#8217;ll show you how to use some of the resourceful plugins we&#8217;ve been working on (for CMS, blogging, and other functionality). We&#8217;ll also show you how to customize them for your particular applications, and how to upgrade them painlessly. Finally, we&#8217;ll show you how to build such plugins on your own, making it even easier to develop the next killer Rails app.</info>
      <location nil="true"></location>
      <series-id type="integer" nil="true"></series-id>
      <slides-url>http://www.slideshare.net/bscofield/resourceful-plugins-presentation</slides-url>
      <slideshare-key nil="true"></slideshare-key>
      <talk-url>http://en.oreilly.com/railseurope2008/public/schedule/detail/2556</talk-url>
      <title>Better Living Through Resourceful Plugins</title>
      <updated-at type="datetime">2009-01-27T13:50:00+00:00</updated-at>
      <when type="datetime">2008-09-02T08:30:00+00:00</when>
      <average-rating nil="true"></average-rating>
    </talk>
  </talks>
</speaker>
