SlideShare ist ein Scribd-Unternehmen logo
1 von 99
Downloaden Sie, um offline zu lesen
datamapper
the persistence framework
who am I?
(Booth 501)
DataMapper
datamapper
object relational
     mapper
like activerecord
like activerecord
★ DB adapters     ★ many-to-many

★ migrations      ★ -through

★ associations    ★ polymorphic

 ★ one-to-one    ★ lifecycle   events
 ★ one-to-many   ★ sti

 ★ many-to-one   ★ etc.
drops into Rails
       1.0
(or merb)
   0.9
architecture
Application    Merb        Rails

                 DataMapper

  Adapters    DO.rb YAML   IMAP

Data Stores
some caveats
work in progress
    0.9   1.0
be prepared for code
why did we build it?
identity map
Foo[1]   Foo

         id = 1



Foo[1]     ...
foo[1] == foo[1]
     #=> true
loadedset
foo.all

Foo      Foo      Foo       Foo     Foo      Foo
id = 1   id = 2   id = 3   id = 4   id = 5   id = 6

  ...      ...      ...      ...      ...      ...

                     LoadedSet
composite keys
belongs_to :project,
  :child_key => [:name, :tag]
legacy data
naming conventions
       (yours)
naming conventions
          underscored
   foo::barBaz => foo/bar_baz
naming conventions
   underscoredandpluralized
   foo::barBaz => foo_bar_bazs
naming conventions
underscoredandpluralizedwithoutmodule
          foo::barBaz => bazs
naming conventions
               yaml
    foo::Bar => foo/bars.yaml
support for multiple
     databases
     (even in the same model)
Post.all(:repository => :legacy)
Post.all
  # :repository => :default
prepared statements
        1.0
custom types
embedded values
      1.0
Employments          Employment

      id: int         id<Integer>
  person_id: int
                    person<Person>
   start: date

    end: date        start<Date>
 salary_amt: dec
                      end<Date>
 salary_cur: char

                    salary<Money>
declared properties
    property :id, :key => true
robust queries
Child.all(
  “mother.last_name.like” =>
    “Jane%”,
  :name.like => “Jim”
)
dirty tracking
modularity
uniïŹed interface for
      drivers
‱connections
‱ commands
‱ readers
‱ cursors (forward-only)
‱ quoting
‱ transactions
Connection     Connection      Connection     Connection      Connection

                              Connection Pool


create_command   “select * from foos where id = ?”

  Command



execute_reader        Reader          next      values       next        ...

    execute_reader(12) =>
      select * from foos where id = 12
works today on:
mysql, sqlite, postgres
fast, written in C
simple interface for
     adapters
‱read by key
‱ read by query
‱ update by key
‱ update set
‱ delete
‱ (optional: transactions)
salesforce adapter in
       200 LOC
Errors

Operators

Naming
Conventions

~/.salesforce

Build Query

Load Result Set

Similar CRUD

Demo
what does it look like?
Zoo.all(
  :age.gt => 30,
  :name.not =>
    [“bob”, “jones”]
)
SELECT
  “age”, “name”, “description”
FROM “zoos”
WHERE
  (“age” > 30) AND
  (“name” NOT IN
    (“bob”, “jones”))
Zoo.first.eql? Zoo.first
          #=> true
Zoo.all.map {|x| x.animals }
        how many queries?
                2
we call this
strategic eager loading.
lazy loading
class Post
  include DataMapper::Resource
  property :id, Fixnum,
    :serial => true
  property :title, String
  property :body, Text,
    :lazy => true
end
posts = Post.all
SELECT “id”, “title”
FROM “posts”
return two objects
    ids 1 and 2
posts.first.body
SELECT “body”
FROM “posts”
WHERE (“id” IN (1,2))
posts.map{|x| x.body}
SELECT “body”
FROM “posts”
WHERE (“id” IN (1,2))
lazy loaded grouping
class Post
  include DataMapper::Resource
  property :id, Fixnum,
    :serial => true
  property :title, String,
    :lazy => [:details]
  property :body, Text,
    :lazy => [:details]
end
you can go off the
   golden path
class Post
  include DataMapper::Resource
  property :title, String

  repository(:legacy) do
    property :title, String,
      :field => “T1tLz”
  end
end
Post.all(:repository => :legacy)

repository(:legacy) do
  Post.all
end
Post.all

Post.all(:repository =>
  :default)

repository(:default) do
  Post.all
end
naming conventions
repository(:legacy).adapter.
  resource_naming_convention =
    DM::
    NamingConventions::
    Underscored AndPluralized
naming conventions
repository(:legacy).adapter.
  resource_naming_convention =
    lambda do |klass|
      “tbl#{klass.camel_case}”
    end
default repository
class Post
  include DataMapper::Resource
  def self.default_repository_name
    :legacy
  end
end
import data
Post.copy(:legacy, :default)

Post.copy(:legacy, :default,
  :created_at.gt =>
    Date.today - 365)
                               1.0
import data
class Post
  property :title, String

  repository(:legacy) do
    property :title, String,
      :field => “TIT13”
  end
end
custom types
primitives
 Trueclass, string, text, ïŹ‚oat, ïŹxnum,
bigdecimal, datetime, date, object, class
custom types
class Post
  include DataMapper::Resource
  property :title, String
  property :author, FullName
  property :details, Csv
end
class FullName < DM::Type
  primitive String
  size 100

  def self.load(str)
    str.split(“, ”).reverse
  end

  def self.dump(ary)
    ary.reverse.join(“, ”)
  end
end
class Csv < DM::Type
  primitive String
  size 65355

  def self.load(str)
    FasterCSV.parse(value)
  end

  def self.dump(ary)
    FasterCSV.generate do |csv|
      ary.each {|line| csv << line}
    end
  end
end
Post.create!(
  :title => “New Post”,
  :author => [“Yehuda”, “Katz”],
  :metadata => [
    [“Some”, “Sample”, “Data”],
    [“More”, “Sample”, “Data”]
  ]
)
in the database
  Title        “New Post”



Author       “Katz, Yehuda”


           “Some,Sample,Datan
Metadata
           More,Sample,Datan”
and it’s lazy-parsed
custom stores
stores are uris
mysql://user@localhost
setting up
DataMapper.setup(
  :default,
  “mysql://user@localhost”
)
database.yml
development:
  default:
    adapter: mysql
    database: app_dev
    user: person
    password: sekrit
database.yml
legacy:
  adapter: sqlite3
  database: config/l3g.db
yaml:///ïŹxtures


                  1.0
ssh+yaml://
ïŹxtures.engineyard.com/
       ïŹxtures
                          1+
database.yml
test:
  default:
    adapter: yaml
    database: app_test.db
  legacy:
    adapter: yaml
    database: l3g_test.db
making ïŹxtures
Post.copy(:default, :fixtures)

rake db:copy_fixtures
validations
class Product
  include DataMapper::Resource
  property :title, String
  property :price, String,
            validates_length_of


    :nullable => false,
    :validation_context =>
           validates_presence_of

      :purchase
end         valid_for_purchase?
class Product
  include DataMapper::Resource
  property :title, String
  property :number, String,
    :format =>
      /d{3}-[a-zA-Z]{9}-0/
end        validates_format_of
class Product
  include DataMapper::Resource
  property :title, String
  property :number, String,
    :format => proc {|n|
      n.split(“-”).size == 2}
           validates_format_of


end
class Product
  include DataMapper::Resource
  property :title, String
  property :number, String,
    :length => 2..10,
    :validation_context =>
           validates_length_of

      :import
           valid_for_import?
             save(:import)
end
class Product
  include DataMapper::Resource
  property :title, String
  property :number, String,
  validates_length_of :number,
    :in => (2..10),
    :when => :import
end         valid_for_import?
thank you.
any questions?
</railsconf>

Weitere Àhnliche Inhalte

Was ist angesagt?

And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...Codemotion
 
Bioinformatics p1-perl-introduction v2013
Bioinformatics p1-perl-introduction v2013Bioinformatics p1-perl-introduction v2013
Bioinformatics p1-perl-introduction v2013Prof. Wim Van Criekinge
 
8 Minutes On Rack
8 Minutes On Rack8 Minutes On Rack
8 Minutes On Rackdanwrong
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Developmentjsmith92
 
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„Hisateru Tanaka
 
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Puppet
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Gary Larizza
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Prxibbar
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack MiddlewareLittleBIGRuby
 
Perl Introduction
Perl IntroductionPerl Introduction
Perl IntroductionMarcos Rebelo
 
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐Yasuko Ohba
 
Getting started with Rails (2), Season 2
Getting started with Rails (2), Season 2Getting started with Rails (2), Season 2
Getting started with Rails (2), Season 2RORLAB
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to heroDiego Lemos
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web ProgrammingMuthuselvam RS
 

Was ist angesagt? (20)

And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...And now you have two problems. Ruby regular expressions for fun and profit by...
And now you have two problems. Ruby regular expressions for fun and profit by...
 
Bioinformatics p1-perl-introduction v2013
Bioinformatics p1-perl-introduction v2013Bioinformatics p1-perl-introduction v2013
Bioinformatics p1-perl-introduction v2013
 
8 Minutes On Rack
8 Minutes On Rack8 Minutes On Rack
8 Minutes On Rack
 
Introduction to Perl and BioPerl
Introduction to Perl and BioPerlIntroduction to Perl and BioPerl
Introduction to Perl and BioPerl
 
Php
PhpPhp
Php
 
Php
PhpPhp
Php
 
SPL: The Missing Link in Development
SPL: The Missing Link in DevelopmentSPL: The Missing Link in Development
SPL: The Missing Link in Development
 
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„
é–ąè„żPHPć‹‰ćŒ·äŒš php5.4ă€ăŸăżăă„
 
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
Doing the Refactor Dance - Making Your Puppet Modules More Modular - PuppetCo...
 
Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'Refactor Dance - Puppet Labs 'Best Practices'
Refactor Dance - Puppet Labs 'Best Practices'
 
PHP - Introduction to PHP Functions
PHP -  Introduction to PHP FunctionsPHP -  Introduction to PHP Functions
PHP - Introduction to PHP Functions
 
Rails2 Pr
Rails2 PrRails2 Pr
Rails2 Pr
 
Apache Velocity 1.6
Apache Velocity 1.6Apache Velocity 1.6
Apache Velocity 1.6
 
Rack Middleware
Rack MiddlewareRack Middleware
Rack Middleware
 
Perl Introduction
Perl IntroductionPerl Introduction
Perl Introduction
 
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐
Ruby on Rails äž­çŽšè€…ă‚’ç›źæŒ‡ă—ăŠ - 性栎毧歐
 
Getting started with Rails (2), Season 2
Getting started with Rails (2), Season 2Getting started with Rails (2), Season 2
Getting started with Rails (2), Season 2
 
Ruby from zero to hero
Ruby from zero to heroRuby from zero to hero
Ruby from zero to hero
 
PHP Web Programming
PHP Web ProgrammingPHP Web Programming
PHP Web Programming
 
Coffee Script
Coffee ScriptCoffee Script
Coffee Script
 

Andere mochten auch

IoT Toulouse : introduction Ă  mqtt
IoT Toulouse : introduction Ă  mqttIoT Toulouse : introduction Ă  mqtt
IoT Toulouse : introduction Ă  mqttJulien Vermillard
 
MQTT - The Internet of Things Protocol
MQTT - The Internet of Things ProtocolMQTT - The Internet of Things Protocol
MQTT - The Internet of Things ProtocolBen Hardill
 
Introducing MQTT
Introducing MQTTIntroducing MQTT
Introducing MQTTAndy Piper
 
Splunk Overview
Splunk OverviewSplunk Overview
Splunk OverviewSplunk
 
Intro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite AppsIntro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite Appsdreamforce2006
 

Andere mochten auch (6)

IoT Toulouse : introduction Ă  mqtt
IoT Toulouse : introduction Ă  mqttIoT Toulouse : introduction Ă  mqtt
IoT Toulouse : introduction Ă  mqtt
 
MQTT - The Internet of Things Protocol
MQTT - The Internet of Things ProtocolMQTT - The Internet of Things Protocol
MQTT - The Internet of Things Protocol
 
Introducing MQTT
Introducing MQTTIntroducing MQTT
Introducing MQTT
 
Splunk Overview
Splunk OverviewSplunk Overview
Splunk Overview
 
Intro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite AppsIntro to AppExchange - Building Composite Apps
Intro to AppExchange - Building Composite Apps
 
Projet MQTT
Projet MQTTProjet MQTT
Projet MQTT
 

Ähnlich wie DataMapper

From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰
From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰
From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰Night Sailer
 
All I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkAll I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkBen Scofield
 
Dm adapter RubyConf.TW
Dm adapter RubyConf.TWDm adapter RubyConf.TW
Dm adapter RubyConf.TWcodingforrent
 
mongodb-introduction
mongodb-introductionmongodb-introduction
mongodb-introductionTse-Ching Ho
 
Marrow: A Meta-Framework for Python 2.6+ and 3.1+
Marrow: A Meta-Framework for Python 2.6+ and 3.1+Marrow: A Meta-Framework for Python 2.6+ and 3.1+
Marrow: A Meta-Framework for Python 2.6+ and 3.1+ConFoo
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data ObjectsWez Furlong
 
MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptCaridy Patino
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applicationschartjes
 
Tools for Making Machine Learning more Reactive
Tools for Making Machine Learning more ReactiveTools for Making Machine Learning more Reactive
Tools for Making Machine Learning more ReactiveJeff Smith
 
Latinoware
LatinowareLatinoware
Latinowarekchodorow
 
Damn Fine CoffeeScript
Damn Fine CoffeeScriptDamn Fine CoffeeScript
Damn Fine CoffeeScriptniklal
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1Jano Suchal
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosEdgar Suarez
 
Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Rabble .
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with ClojureDmitry Buzdin
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011Nick Sieger
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11Michelangelo van Dam
 

Ähnlich wie DataMapper (20)

From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰
From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰
From mysql to MongoDBMongoDB2011挗äșŹäș€æ”äŒšïŒ‰
 
All I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web FrameworkAll I Need to Know I Learned by Writing My Own Web Framework
All I Need to Know I Learned by Writing My Own Web Framework
 
Dm adapter RubyConf.TW
Dm adapter RubyConf.TWDm adapter RubyConf.TW
Dm adapter RubyConf.TW
 
Dm adapter
Dm adapterDm adapter
Dm adapter
 
mongodb-introduction
mongodb-introductionmongodb-introduction
mongodb-introduction
 
Marrow: A Meta-Framework for Python 2.6+ and 3.1+
Marrow: A Meta-Framework for Python 2.6+ and 3.1+Marrow: A Meta-Framework for Python 2.6+ and 3.1+
Marrow: A Meta-Framework for Python 2.6+ and 3.1+
 
PHP Data Objects
PHP Data ObjectsPHP Data Objects
PHP Data Objects
 
MiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScriptMiamiJS - The Future of JavaScript
MiamiJS - The Future of JavaScript
 
Building Testable PHP Applications
Building Testable PHP ApplicationsBuilding Testable PHP Applications
Building Testable PHP Applications
 
Tools for Making Machine Learning more Reactive
Tools for Making Machine Learning more ReactiveTools for Making Machine Learning more Reactive
Tools for Making Machine Learning more Reactive
 
Latinoware
LatinowareLatinoware
Latinoware
 
Damn Fine CoffeeScript
Damn Fine CoffeeScriptDamn Fine CoffeeScript
Damn Fine CoffeeScript
 
Metaprogramovanie #1
Metaprogramovanie #1Metaprogramovanie #1
Metaprogramovanie #1
 
Desarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutosDesarrollando aplicaciones web en minutos
Desarrollando aplicaciones web en minutos
 
Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007Introduction to Active Record at MySQL Conference 2007
Introduction to Active Record at MySQL Conference 2007
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Quebec pdo
Quebec pdoQuebec pdo
Quebec pdo
 
Couchdb
CouchdbCouchdb
Couchdb
 
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
JRuby + Rails = Awesome Java Web Framework at Jfokus 2011
 
Unit testing with zend framework tek11
Unit testing with zend framework tek11Unit testing with zend framework tek11
Unit testing with zend framework tek11
 

Mehr von Yehuda Katz

Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performanceYehuda Katz
 
Writing Fast Client-Side Code: Lessons Learned from SproutCore
Writing Fast Client-Side Code: Lessons Learned from SproutCoreWriting Fast Client-Side Code: Lessons Learned from SproutCore
Writing Fast Client-Side Code: Lessons Learned from SproutCoreYehuda Katz
 
SproutCore: Amber
SproutCore: AmberSproutCore: Amber
SproutCore: AmberYehuda Katz
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the FinishYehuda Katz
 
Organizing jQuery Projects Without OO
Organizing jQuery Projects Without OOOrganizing jQuery Projects Without OO
Organizing jQuery Projects Without OOYehuda Katz
 
Why You Shouldn't Write OO
Why You Shouldn't Write OO Why You Shouldn't Write OO
Why You Shouldn't Write OO Yehuda Katz
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overviewYehuda Katz
 
Making your oss project more like rails
Making your oss project more like railsMaking your oss project more like rails
Making your oss project more like railsYehuda Katz
 
Vaporware To Awesome
Vaporware To AwesomeVaporware To Awesome
Vaporware To AwesomeYehuda Katz
 
Merb Day Keynote
Merb Day KeynoteMerb Day Keynote
Merb Day KeynoteYehuda Katz
 
Testing Merb
Testing MerbTesting Merb
Testing MerbYehuda Katz
 
Merb jQuery
Merb jQueryMerb jQuery
Merb jQueryYehuda Katz
 
Merb Camp Keynote
Merb Camp KeynoteMerb Camp Keynote
Merb Camp KeynoteYehuda Katz
 
jQuery and Ruby Web Frameworks
jQuery and Ruby Web FrameworksjQuery and Ruby Web Frameworks
jQuery and Ruby Web FrameworksYehuda Katz
 
jQuery Presentation to Rails Developers
jQuery Presentation to Rails DevelopersjQuery Presentation to Rails Developers
jQuery Presentation to Rails DevelopersYehuda Katz
 

Mehr von Yehuda Katz (15)

Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performance
 
Writing Fast Client-Side Code: Lessons Learned from SproutCore
Writing Fast Client-Side Code: Lessons Learned from SproutCoreWriting Fast Client-Side Code: Lessons Learned from SproutCore
Writing Fast Client-Side Code: Lessons Learned from SproutCore
 
SproutCore: Amber
SproutCore: AmberSproutCore: Amber
SproutCore: Amber
 
Rails 3: Dashing to the Finish
Rails 3: Dashing to the FinishRails 3: Dashing to the Finish
Rails 3: Dashing to the Finish
 
Organizing jQuery Projects Without OO
Organizing jQuery Projects Without OOOrganizing jQuery Projects Without OO
Organizing jQuery Projects Without OO
 
Why You Shouldn't Write OO
Why You Shouldn't Write OO Why You Shouldn't Write OO
Why You Shouldn't Write OO
 
Rails 3 overview
Rails 3 overviewRails 3 overview
Rails 3 overview
 
Making your oss project more like rails
Making your oss project more like railsMaking your oss project more like rails
Making your oss project more like rails
 
Vaporware To Awesome
Vaporware To AwesomeVaporware To Awesome
Vaporware To Awesome
 
Merb Day Keynote
Merb Day KeynoteMerb Day Keynote
Merb Day Keynote
 
Testing Merb
Testing MerbTesting Merb
Testing Merb
 
Merb jQuery
Merb jQueryMerb jQuery
Merb jQuery
 
Merb Camp Keynote
Merb Camp KeynoteMerb Camp Keynote
Merb Camp Keynote
 
jQuery and Ruby Web Frameworks
jQuery and Ruby Web FrameworksjQuery and Ruby Web Frameworks
jQuery and Ruby Web Frameworks
 
jQuery Presentation to Rails Developers
jQuery Presentation to Rails DevelopersjQuery Presentation to Rails Developers
jQuery Presentation to Rails Developers
 

KĂŒrzlich hochgeladen

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...gurkirankumar98700
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel AraĂșjo
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 

KĂŒrzlich hochgeladen (20)

Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍾 8923113531 🎰 Avail...
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 

DataMapper