SlideShare a Scribd company logo
1 of 160
Searching ORM
Sam Farmer
Me
Me
Senior Applications Architect at FirstComp
Me
Senior Applications Architect at FirstComp
ColdFusion, JavaScript, yada, yada...
Me
Senior Applications Architect at FirstComp
ColdFusion, JavaScript, yada, yada...
Hobbies:
Me
Senior Applications Architect at FirstComp
ColdFusion, JavaScript, yada, yada...
Hobbies:
  Soccer. Play and Arsenal fan.
Me
Senior Applications Architect at FirstComp
ColdFusion, JavaScript, yada, yada...
Hobbies:
  Soccer. Play and Arsenal fan.
  Code. oldjam.com
Me
Senior Applications Architect at FirstComp
ColdFusion, JavaScript, yada, yada...
Hobbies:
  Soccer. Play and Arsenal fan.
  Code. oldjam.com
Live in Washington, DC with my wife and two
daughters
Agenda
Agenda
Why search
Agenda
Why search
Pre-CF10 Enterprise
Agenda
Why search
Pre-CF10 Enterprise
With CF10 Enterprise
Other Sessions
A/B Testing with Squabble (Mark Mandel)
Creating ColdFusion Builder Extensions (Simon Free)
Authentication made Easy using Twitter, Facebook,
Google, and more (Billy Cravens)
Node.js and You - Server Side Javascript (Simon
Bateman)
Who likes Objects?
Who likes Objects?
Who likes cf.Objective()?
Who likes ORM?
Using or planning to use
CF10?
Retrieving Objects
Based on criteria
entityLoad( "user", 1 );

ormExecuteQuery( "FROM user
  WHERE state = 'DC' or state='NE' ");
Why Searching
Get what you are looking for
1998
flickr.com/photos/crystaleagle/
flickr.com/photos/crystaleagle/
That star looking
     shape




                    flickr.com/photos/crystaleagle/
That star looking
     shape




                    flickr.com/photos/crystaleagle/
That star looking
     shape




                    flickr.com/photos/crystaleagle/
That star looking
     shape




                    flickr.com/photos/crystaleagle/
What we used to have
Now we have
Search
Lets look at the options
Artist and Art


              one-to-many
     artist                 art
Looking for




 Michael      Mychael    Face of
              by Night   Mikael
Like
Everything has its place
LIKE
LIKE
Don't snicker
LIKE
Don't snicker
Premature optimization
With HQL
With HQL
Similar to SQL
<cfquery dbtype="hql" name="getArt">
FROM ART
WHERE name like
        <cfqueryparam value="Mi%">
</cfquery>
With Hibernate Criteria API
With Hibernate Criteria API
 More "object-ey"
order = createObject( 'java',
"org.hibernate.criterion.Order" );
Restrictions = createObject( 'java',
"org.hibernate.criterion.Restrictions" );
order = createObject( 'java',
"org.hibernate.criterion.Order" );
Restrictions = createObject( 'java',
"org.hibernate.criterion.Restrictions" );
artSearch = ormGetSession().createCriteria( "art" );
artSearch.add( Restrictions.like( "name", "Mi%" ) );
artSearch.addOrder( order.asc( "name" ) );

getArt = artSearch.list();

writeDump( getArt );
order = createObject( 'java',
"org.hibernate.criterion.Order" );
Restrictions = createObject( 'java',
"org.hibernate.criterion.Restrictions" );
artSearch = ormGetSession().createCriteria( "art" );
artSearch.add( Restrictions.like( "name", "Mi%" ) );
artSearch.addOrder( order.asc( "name" ) );

getArt = artSearch.list();

writeDump( getArt );
(If you like
look at
ColdBox)
coldbox.org
Search Engines
Lets look at the options
Database (Full Text Search)
Options
Database (Full Text Search)
Options
 I couldn't make work
Database (Full Text Search)
Options
 I couldn't make work
 Smarter people may have
Database (Full Text Search)
Options
 I couldn't make work
 Smarter people may have
 Or, double query to
Database (Full Text Search)
Options
 I couldn't make work
 Smarter people may have
 Or, double query to
   get Ids
Database (Full Text Search)
Options
 I couldn't make work
 Smarter people may have
 Or, double query to
   get Ids
   get entities
Apache Lucene
A "flagship sub-project"
"Our core algorithms along
with the Solr search server
power applications the world
over, ranging from mobile
devices to sites like Twitter,
Apple and Wikipedia."
"Our core algorithms along
with the Solr search server
power applications the world
over, ranging from mobile
devices to sites like Twitter,
Apple and Wikipedia."
               And soon your apps! :)
Lucene & Solr
Lucene & Solr
Both from Apache
Lucene & Solr
Both from Apache
Solr is a servlet
Lucene & Solr
Both from Apache
Solr is a servlet
Lucene is an index
Lucene & Solr
Both from Apache
Solr is a servlet
Lucene is an index
Lucene & Solr
Both from Apache
Solr is a servlet
Lucene is an index


Solr needs Lucene but Lucene does not need Solr
What can Lucene do?
What can Lucene do?
Fuzzy
What can Lucene do?
Fuzzy
Words near each other
What can Lucene do?
Fuzzy
Words near each other
Boost
What can Lucene do?
Fuzzy
Words near each other
Boost
Range
SolrEntity
SolrEntity
 Nathan Mische proof of concept
SolrEntity
 Nathan Mische proof of concept
‣ http://cfml.us/z3
How it works
How it works
Base cfc
How it works
Base cfc
Metadata defines configuration
How it works
Base cfc
Metadata defines configuration
Event Handlers
How it works
Base cfc
Metadata defines configuration
Event Handlers
  postUpdate(), postInsert(), postDelete()
How it works
Base cfc
Metadata defines configuration
Event Handlers
  postUpdate(), postInsert(), postDelete()
    update Solr
Entry.cfc
component persistent="true" table="entry"
extends="SolrEntity" solrcollection="blog" {

property name="entryid" fieldtype="id"
generator="native" solrfield="key";
property name="author" fieldtype="many-to-one"
fkcolumn="authorid" cfc="Author";
property name="title" solrfield="title";
property name="content" solrfield="body";

}
ColdFusion 10 ORM Search
Putting the pieces together
searchArt = ormSearch("name:Mi*", "art" );
searchArt = ormSearch("name:Mi*", "art" );
writeDump( var=searchArt, top=3, showudfs=false );
searchArt = ormSearch("name:Mi*", "art" );
writeDump( var=searchArt, top=3, showudfs=false );
searchArt = ormSearch("name:Michael~", "art" );
searchArt = ormSearch("name:Michael~", "art" );
Lucene Query Syntax
Lucene Query Syntax
This is the "magic"
Lucene Query Syntax
This is the "magic"
http://cfml.us/Ax
Wildcard Searches
Wildcard Searches
? = one character
Wildcard Searches
? = one character
      Arsen?l (finds Arsenal)
Wildcard Searches
? = one character
      Arsen?l (finds Arsenal)
* = many characters
Wildcard Searches
? = one character
      Arsen?l (finds Arsenal)
* = many characters
      Can't be first
Wildcard Searches
? = one character
      Arsen?l (finds Arsenal)
* = many characters
      Can't be first
      Arse*
Wildcard Searches
? = one character
      Arsen?l (finds Arsenal)
* = many characters
      Can't be first
      Arse*
      Ar*al
Fuzzy Searches ~
Fuzzy Searches ~
~ will find similar spellings
Fuzzy Searches ~
~ will find similar spellings
       Arsenal~ (finds Arsenal)
Fuzzy Searches ~
~ will find similar spellings
       Arsenal~ (finds Arsenal)
~0-1 indicates how similar
Fuzzy Searches ~
~ will find similar spellings
       Arsenal~ (finds Arsenal)
~0-1 indicates how similar
       0=least similar, 0.5=default, 1=most similar
Fuzzy Searches ~
~ will find similar spellings
       Arsenal~ (finds Arsenal)
~0-1 indicates how similar
       0=least similar, 0.5=default, 1=most similar
       Arsenal~0.1
Fuzzy Searches ~
~ will find similar spellings
       Arsenal~ (finds Arsenal)
~0-1 indicates how similar
       0=least similar, 0.5=default, 1=most similar
       Arsenal~0.1
       Arsenal~1
Boost ^
Boost ^
^ boost makes one term more important/relevant
Boost ^
^ boost makes one term more important/relevant
      Arsenal^6 Chelsea (makes Arsenal more
      relevant)
Boost ^
^ boost makes one term more important/relevant
      Arsenal^6 Chelsea (makes Arsenal more
      relevant)
^0.1-99 indicates how much more relevant
Boost ^
^ boost makes one term more important/relevant
      Arsenal^6 Chelsea (makes Arsenal more
      relevant)
^0.1-99 indicates how much more relevant
      1 = default
Boost ^
^ boost makes one term more important/relevant
      Arsenal^6 Chelsea (makes Arsenal more
      relevant)
^0.1-99 indicates how much more relevant
      1 = default
      Normally whole numbers
Proximity Searches ~9
Proximity Searches ~9
Find two words close to each other
Proximity Searches ~9
Find two words close to each other
"one two"~NUM where NUM is how close
Proximity Searches ~9
Find two words close to each other
"one two"~NUM where NUM is how close
      "Arsenal Champions"~6 (finds Arsenal)
Proximity Searches ~9
Find two words close to each other
"one two"~NUM where NUM is how close
      "Arsenal Champions"~6 (finds Arsenal)
How it works
ColdFusion / JVM




                   Database
ColdFusion / JVM
Hey Lucene can you look this up?



                                   Database
ColdFusion / JVM
Hey Lucene can you look this up?

   Sure, here are matching Ids

                                   Database
ColdFusion / JVM
Hey Lucene can you look this up?

   Sure, here are matching Ids

Thanks! Hibernate entities please   Database
ColdFusion / JVM
Hey Lucene can you look this up?

   Sure, here are matching Ids

Thanks! Hibernate entities please    Database
Sure, hey database can I get data?
ColdFusion / JVM
Hey Lucene can you look this up?

   Sure, here are matching Ids

Thanks! Hibernate entities please    Database
Sure, hey database can I get data?
                                     Most def.
                                     SELECT blah
                                     FROM table
                                     WHERE Id
                                        = 999
ColdFusion / JVM
Hey Lucene can you look this up?

   Sure, here are matching Ids

Thanks! Hibernate entities please    Database
Sure, hey database can I get data?
                                     Most def.
          Here you go                SELECT blah
                                     FROM table
                                     WHERE Id
                                        = 999
Let's see that...
Is it slow?
Is it slow?
 Two fast operations
Is it slow?
 Two fast operations
   Lucene search
Is it slow?
 Two fast operations
   Lucene search
   Look up by Ids
Is it slow?
 Two fast operations
   Lucene search
   Look up by Ids
 Load Testing
Skip the database
Skip the database
ormSearchOffline()
Skip the database
ormSearchOffline()
Returns only fields specified by indexStore
searchArt = ormSearchOffline("name:Michael~", "ART",
["id","name"] );
searchArt = ormSearchOffline("name:Michael~", "ART",
["id","name"] );
writeDump( var=searchArt, top=3, showudfs=false );
searchArt = ormSearchOffline("name:Michael~", "ART",
["id","name"] );
writeDump( var=searchArt, top=3, showudfs=false );
Setup
Application.cfc
component {
this.name = "ormSearchCriteria";
this.datasource = "cfartgallery";
this.ormEnabled = true;
this.ormSettings = {
          searchEnabled = true | false,

 
 
 
 
 search = { [autoIndex = true],
               [indexDir = filepath],
               [language = "english"] }

 
 
 };
}
MP LES
Application.cfc                 IN SA
                         USED

component {
this.name = "ormSearchCriteria";
this.datasource = "cfartgallery";
this.ormEnabled = true;
this.ormSettings = {
          searchEnabled = true,

 
 
 
 
 search = { autoIndex = true },
          logsql = true

 
 
 };
this.invokeImplicitAccessor = true;
}
Entity - Attributes
component persistent = true
        indexable = true | false
         indexLanguage = "english"
         autoIndex = true | false {
Entity - Properties
component persistent = true
       indexable = true {
property name="name"
  indexable = true | false
  indexTokenized = true | false
  indexFieldName = ""
  indexBoost = 0-1
  indexStore = true | false | compressed
  indexLanguage = "english"
MP LES
 Art.cfc                               IN SA
                                USED
component persistent="true" indexable="true" {
property name="id" column="ARTID" fieldtype="id";
property name="name" column="ARTNAME"
ormtype="string"

 
 
 indexable="true" indexStore="true";
property name="description" ormtype="text"

 
 
 indexable="true";
property name="price" ormtype="double"

 
 
 indexable="true";
property name="largeimage" ormtype="string";
property name="mediaid" ormtype="int";
property name="issold" ormtype="boolean";

property name="artist" fieldtype="many-to-one" cfc="artist";
Indexes
Creation and Update
Creation and Update
Automatic on all entity operations
Creation and Update
Automatic on all entity operations
Build
Creation and Update
Automatic on all entity operations
Build
  Lucene is fast
Maintenance
Maintenance
Changes to properties indexed
Maintenance
Changes to properties indexed
Functions provided act on:
Maintenance
Changes to properties indexed
Functions provided act on:
  whole index
Maintenance
Changes to properties indexed
Functions provided act on:
  whole index
  entities
Maintenance
Changes to properties indexed
Functions provided act on:
  whole index
  entities
  entity
Maintenance
Changes to properties indexed
Functions provided act on:
  whole index
  entities
  entity
ormIndex() and ormIndexPurge()
Pitfalls?
What are the downsides?
Pitfalls
 Enterprise only
 Single server (at the moment)
What can we do now?
Add intelligent search to our apps
Guess vs Guide
 Make your own search algorithm
 Use Boost, Fuzzy and others
 Refine
Thank you!

  Q&A

              @sam_farmer
        sam@samfarmer.com
        www.samfarmer.com

More Related Content

What's hot

Porting Java To Scala
Porting Java To Scala Porting Java To Scala
Porting Java To Scala guestbfe8bf
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelBlythe Dunham
 
Exploiting Php With Php
Exploiting Php With PhpExploiting Php With Php
Exploiting Php With PhpJeremy Coates
 
Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Mark Curphey
 
Code Fast, Die Young, Throw Structured Exceptions
Code Fast, Die Young, Throw Structured ExceptionsCode Fast, Die Young, Throw Structured Exceptions
Code Fast, Die Young, Throw Structured ExceptionsJohn Anderson
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practicesmanugoel2003
 
You don’t know query - WordCamp UK Edinburgh 2012
You don’t know query - WordCamp UK Edinburgh 2012You don’t know query - WordCamp UK Edinburgh 2012
You don’t know query - WordCamp UK Edinburgh 2012l3rady
 
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4NETWAYS
 
Drupal 8: A story of growing up and getting off the island
Drupal 8: A story of growing up and getting off the islandDrupal 8: A story of growing up and getting off the island
Drupal 8: A story of growing up and getting off the islandAngela Byron
 
NoSQL & MongoDB
NoSQL & MongoDBNoSQL & MongoDB
NoSQL & MongoDBShuai Liu
 
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...Puppet
 
Coffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptCoffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptBrian Mann
 
Behat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejBehat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejGrzegorz Skorupa
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScriptNone
 
Building Cloud Castles
Building Cloud CastlesBuilding Cloud Castles
Building Cloud CastlesBen Scofield
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Balázs Tatár
 
Corinna Status 2022.pptx
Corinna Status 2022.pptxCorinna Status 2022.pptx
Corinna Status 2022.pptxCurtis Poe
 

What's hot (19)

Moose
MooseMoose
Moose
 
Es.next
Es.nextEs.next
Es.next
 
Porting Java To Scala
Porting Java To Scala Porting Java To Scala
Porting Java To Scala
 
MySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next LevelMySQLConf2009: Taking ActiveRecord to the Next Level
MySQLConf2009: Taking ActiveRecord to the Next Level
 
Exploiting Php With Php
Exploiting Php With PhpExploiting Php With Php
Exploiting Php With Php
 
Hack in the Box Keynote 2006
Hack in the Box Keynote 2006Hack in the Box Keynote 2006
Hack in the Box Keynote 2006
 
Code Fast, Die Young, Throw Structured Exceptions
Code Fast, Die Young, Throw Structured ExceptionsCode Fast, Die Young, Throw Structured Exceptions
Code Fast, Die Young, Throw Structured Exceptions
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
You don’t know query - WordCamp UK Edinburgh 2012
You don’t know query - WordCamp UK Edinburgh 2012You don’t know query - WordCamp UK Edinburgh 2012
You don’t know query - WordCamp UK Edinburgh 2012
 
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
Puppet Camp Berlin 2015: Martin Alfke | The Power of Puppet 4
 
Drupal 8: A story of growing up and getting off the island
Drupal 8: A story of growing up and getting off the islandDrupal 8: A story of growing up and getting off the island
Drupal 8: A story of growing up and getting off the island
 
NoSQL & MongoDB
NoSQL & MongoDBNoSQL & MongoDB
NoSQL & MongoDB
 
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...
Puppet Camp DC 2015: Stop Writing Puppet Modules: A Guide to Best Practices i...
 
Coffeescript: No really, it's just Javascript
Coffeescript: No really, it's just JavascriptCoffeescript: No really, it's just Javascript
Coffeescript: No really, it's just Javascript
 
Behat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalejBehat - kilka scenariuszy co dalej
Behat - kilka scenariuszy co dalej
 
CoffeeScript
CoffeeScriptCoffeeScript
CoffeeScript
 
Building Cloud Castles
Building Cloud CastlesBuilding Cloud Castles
Building Cloud Castles
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019
 
Corinna Status 2022.pptx
Corinna Status 2022.pptxCorinna Status 2022.pptx
Corinna Status 2022.pptx
 

Viewers also liked

20121115 Slides
20121115 Slides20121115 Slides
20121115 SlidesTonyq Wang
 
2012 10-27 jscarnival2012-ant
2012 10-27 jscarnival2012-ant2012 10-27 jscarnival2012-ant
2012 10-27 jscarnival2012-antTonyq Wang
 
Book 3 e_thevampirediaries
Book 3 e_thevampirediariesBook 3 e_thevampirediaries
Book 3 e_thevampirediaries13mysteph
 
Lighting SOLED - products
Lighting SOLED - productsLighting SOLED - products
Lighting SOLED - productssoledpl
 
Kit-Zen Cookware Catalogue
Kit-Zen Cookware CatalogueKit-Zen Cookware Catalogue
Kit-Zen Cookware CatalogueKit-Zen
 
Gs powerpoint music !
Gs powerpoint music !Gs powerpoint music !
Gs powerpoint music !xoxo_Gabs
 
Lighting inspirations - SOLED
Lighting inspirations - SOLEDLighting inspirations - SOLED
Lighting inspirations - SOLEDsoledpl
 

Viewers also liked (8)

20121115 Slides
20121115 Slides20121115 Slides
20121115 Slides
 
2012 10-27 jscarnival2012-ant
2012 10-27 jscarnival2012-ant2012 10-27 jscarnival2012-ant
2012 10-27 jscarnival2012-ant
 
Book 3 e_thevampirediaries
Book 3 e_thevampirediariesBook 3 e_thevampirediaries
Book 3 e_thevampirediaries
 
Lighting SOLED - products
Lighting SOLED - productsLighting SOLED - products
Lighting SOLED - products
 
Kit-Zen Cookware Catalogue
Kit-Zen Cookware CatalogueKit-Zen Cookware Catalogue
Kit-Zen Cookware Catalogue
 
Gs powerpoint music !
Gs powerpoint music !Gs powerpoint music !
Gs powerpoint music !
 
Lighting inspirations - SOLED
Lighting inspirations - SOLEDLighting inspirations - SOLED
Lighting inspirations - SOLED
 
3 le soluzioni
3  le  soluzioni3  le  soluzioni
3 le soluzioni
 

Similar to Searching ORM: First Why, Then How

Intro to php
Intro to phpIntro to php
Intro to phpSp Singh
 
Powershell for Log Analysis and Data Crunching
 Powershell for Log Analysis and Data Crunching Powershell for Log Analysis and Data Crunching
Powershell for Log Analysis and Data CrunchingMichelle D'israeli
 
Streams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetupStreams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetupBrian Cardiff
 
Work Queues
Work QueuesWork Queues
Work Queuesciconf
 
Gearman and CodeIgniter
Gearman and CodeIgniterGearman and CodeIgniter
Gearman and CodeIgniterErik Giberti
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBJustin Smestad
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkDaniel Spector
 
Async. and Realtime Geo Applications with Node.js
Async. and Realtime Geo Applications with Node.jsAsync. and Realtime Geo Applications with Node.js
Async. and Realtime Geo Applications with Node.jsShoaib Burq
 
Questioning the status quo
Questioning the status quoQuestioning the status quo
Questioning the status quoIvano Pagano
 
Your code sucks, let's fix it! - php|tek13
Your code sucks, let's fix it! - php|tek13Your code sucks, let's fix it! - php|tek13
Your code sucks, let's fix it! - php|tek13Rafael Dohms
 
RESTful APIs: Promises & lies
RESTful APIs: Promises & liesRESTful APIs: Promises & lies
RESTful APIs: Promises & liesTareque Hossain
 
Perl DBI Scripting with the ILS
Perl DBI Scripting with the ILSPerl DBI Scripting with the ILS
Perl DBI Scripting with the ILSRoy Zimmer
 
Isomorphic App Development with Ruby and Volt - Rubyconf2014
Isomorphic App Development with Ruby and Volt - Rubyconf2014Isomorphic App Development with Ruby and Volt - Rubyconf2014
Isomorphic App Development with Ruby and Volt - Rubyconf2014ryanstout
 
Filesystems Lisbon 2018
Filesystems Lisbon 2018Filesystems Lisbon 2018
Filesystems Lisbon 2018Frank de Jonge
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to RubyRyan Cross
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalQA or the Highway
 
Building and Distributing PostgreSQL Extensions Without Learning C
Building and Distributing PostgreSQL Extensions Without Learning CBuilding and Distributing PostgreSQL Extensions Without Learning C
Building and Distributing PostgreSQL Extensions Without Learning CDavid Wheeler
 
Writing Apps the Google-y Way (Brisbane)
Writing Apps the Google-y Way (Brisbane)Writing Apps the Google-y Way (Brisbane)
Writing Apps the Google-y Way (Brisbane)Pamela Fox
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performanceYehuda Katz
 

Similar to Searching ORM: First Why, Then How (20)

Intro to php
Intro to phpIntro to php
Intro to php
 
Powershell for Log Analysis and Data Crunching
 Powershell for Log Analysis and Data Crunching Powershell for Log Analysis and Data Crunching
Powershell for Log Analysis and Data Crunching
 
Streams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetupStreams of information - Chicago crystal language monthly meetup
Streams of information - Chicago crystal language monthly meetup
 
Work Queues
Work QueuesWork Queues
Work Queues
 
Gearman and CodeIgniter
Gearman and CodeIgniterGearman and CodeIgniter
Gearman and CodeIgniter
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Async. and Realtime Geo Applications with Node.js
Async. and Realtime Geo Applications with Node.jsAsync. and Realtime Geo Applications with Node.js
Async. and Realtime Geo Applications with Node.js
 
Questioning the status quo
Questioning the status quoQuestioning the status quo
Questioning the status quo
 
Your code sucks, let's fix it! - php|tek13
Your code sucks, let's fix it! - php|tek13Your code sucks, let's fix it! - php|tek13
Your code sucks, let's fix it! - php|tek13
 
RESTful APIs: Promises & lies
RESTful APIs: Promises & liesRESTful APIs: Promises & lies
RESTful APIs: Promises & lies
 
Perl DBI Scripting with the ILS
Perl DBI Scripting with the ILSPerl DBI Scripting with the ILS
Perl DBI Scripting with the ILS
 
Volt 2015
Volt 2015Volt 2015
Volt 2015
 
Isomorphic App Development with Ruby and Volt - Rubyconf2014
Isomorphic App Development with Ruby and Volt - Rubyconf2014Isomorphic App Development with Ruby and Volt - Rubyconf2014
Isomorphic App Development with Ruby and Volt - Rubyconf2014
 
Filesystems Lisbon 2018
Filesystems Lisbon 2018Filesystems Lisbon 2018
Filesystems Lisbon 2018
 
Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
A Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert FornalA Lifecycle Of Code Under Test by Robert Fornal
A Lifecycle Of Code Under Test by Robert Fornal
 
Building and Distributing PostgreSQL Extensions Without Learning C
Building and Distributing PostgreSQL Extensions Without Learning CBuilding and Distributing PostgreSQL Extensions Without Learning C
Building and Distributing PostgreSQL Extensions Without Learning C
 
Writing Apps the Google-y Way (Brisbane)
Writing Apps the Google-y Way (Brisbane)Writing Apps the Google-y Way (Brisbane)
Writing Apps the Google-y Way (Brisbane)
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performance
 

Recently uploaded

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusZilliz
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfOverkill Security
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 

Recently uploaded (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
A Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source MilvusA Beginners Guide to Building a RAG App Using Open Source Milvus
A Beginners Guide to Building a RAG App Using Open Source Milvus
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdfRansomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Searching ORM: First Why, Then How

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n
  49. \n
  50. \n
  51. \n
  52. \n
  53. \n
  54. \n
  55. \n
  56. \n
  57. \n
  58. \n
  59. \n
  60. \n
  61. \n
  62. \n
  63. \n
  64. \n
  65. \n
  66. \n
  67. \n
  68. \n
  69. \n
  70. \n
  71. \n
  72. \n
  73. \n
  74. \n
  75. \n
  76. \n
  77. \n
  78. \n
  79. \n
  80. \n
  81. \n
  82. \n
  83. \n
  84. \n
  85. \n
  86. \n
  87. \n
  88. \n
  89. \n
  90. \n
  91. \n
  92. \n
  93. \n
  94. \n
  95. \n
  96. \n
  97. \n
  98. \n
  99. \n
  100. \n
  101. \n
  102. \n
  103. \n
  104. \n
  105. \n
  106. \n
  107. \n
  108. \n
  109. \n
  110. \n
  111. \n
  112. \n
  113. \n
  114. \n
  115. \n
  116. \n
  117. \n
  118. \n
  119. \n
  120. \n
  121. \n
  122. \n
  123. \n
  124. \n
  125. \n
  126. \n
  127. \n
  128. \n
  129. \n
  130. \n
  131. \n
  132. \n
  133. \n