SlideShare a Scribd company logo
alberto@graphenedb.com | @albertoperdomo
Leveraging relations at
scale with Neo4j
Madrid.rb - July 2013
Alberto Perdomo
GrapheneDB
alberto@graphenedb.com | @albertoperdomo
About me
๏Co-founder of Aentos
๏Ruby developer
๏GrapheneDB: Neo4j as a Service
alberto@graphenedb.com | @albertoperdomo
Origin of Graphs
alberto@graphenedb.com | @albertoperdomo
Leonhard Euler, 1736
alberto@graphenedb.com | @albertoperdomo
Königsberg Bridge
Problem
alberto@graphenedb.com | @albertoperdomo
Euler’s Technique
alberto@graphenedb.com | @albertoperdomo
Euler’s Technique
alberto@graphenedb.com | @albertoperdomo
Königsberg Problem
Graph
A little Graph Theory
alberto@graphenedb.com | @albertoperdomo
The Math
G=( V, E )
alberto@graphenedb.com | @albertoperdomo
Types of Graphs
alberto@graphenedb.com | @albertoperdomo
Undirected Graph
A
B
C
Adam
Michael
John
Example: Facebook Friendships
alberto@graphenedb.com | @albertoperdomo
Directed Graph
A
B
C
Adam
Michael
John
Example: Twitter follows
alberto@graphenedb.com | @albertoperdomo
Weighted Graph
A
B
C
0.6 0.8
Adam John
Star Wars: Episode IV
Example: Movie Ratings
alberto@graphenedb.com | @albertoperdomo
Labeled Graph
A C
friend_of fan_of
Adam LA Lakers
Michael
fan_pagefriend_of
B
user
user
Example: Facebook friendships
+ fan pages
alberto@graphenedb.com | @albertoperdomo
Property Graph
A
B
C
rated: 0.6
directed
Type: Cast Member
Name: George Lucas
Born_At: 1944-05-14
Type: Movie
Title: Star Wars Episode IV - A New Hope
Release: 1977
Type: User
Name: Adam
Age: 34
Country: USA
wrote
Example: IMDB
alberto@graphenedb.com | @albertoperdomo
Graph Databases
alberto@graphenedb.com | @albertoperdomo
Graph DB: Definition
๏Uses graph as primary data structure
๏Property graph: store data as nodes,
relations and properties
alberto@graphenedb.com | @albertoperdomo
Graph DBs
vs
other DBs
alberto@graphenedb.com | @albertoperdomo
A graph can be modeled
with almost any technology
alberto@graphenedb.com | @albertoperdomo
Mysql vs Neo4j
๏1M users
๏Friends of friends for 1K users
Depth Execution Time – MySQL Execution Time – Neo4j
2 0. 016 0. 010
3 30. 267 168
4 1, 543. 505 1. 359
5 Not Finished in 1 Hour 2. 132
http://www.neotechnology.com/how-much-faster-is-a-graph-database-really/,
http://www.manning.com/partner/
alberto@graphenedb.com | @albertoperdomo
Conventional DBs
๏Index lookup to find out adjacent nodes
๏Depends on total number of vertices
and edges in DB (global)
alberto@graphenedb.com | @albertoperdomo
Graph DB: Definition
๏Any system that provides index-free
adjacency[1]
๏Linear cost to retrieve adjacent nodes:
depends on the number of local neighbours
[1] http://www.slideshare.net/slidarko/problemsolving-using-graph-traversals-searching-scoring-ranking-and-recommendation
alberto@graphenedb.com | @albertoperdomo
While DB grows, cost of
local step remains the same
alberto@graphenedb.com | @albertoperdomo
Modeling connected
data is natural
alberto@graphenedb.com | @albertoperdomo
When use a graph?
alberto@graphenedb.com | @albertoperdomo
High density of
relations
alberto@graphenedb.com | @albertoperdomo
A search engine for
relations
alberto@graphenedb.com | @albertoperdomo
Graph analysis
๏Recommend vertices to user x
๏Search for y given x
๏Score x given its local neighbourhood
๏Rank x relative to y
alberto@graphenedb.com | @albertoperdomo
Recommendations
alberto@graphenedb.com | @albertoperdomo
Social Graph
A representation of the
relationship between people and
other people
alberto@graphenedb.com | @albertoperdomo
Social Graph
๏Facebook
๏Twitter
๏LinkedIn
“Since you have
many friends in
common, you might
know fellow X.”
alberto@graphenedb.com | @albertoperdomo
Interest Graph
A representation of the
relationship between people
and things
alberto@graphenedb.com | @albertoperdomo
Interest Graph
๏Pinterest
๏Instagram
๏Quora
๏Spotify
“A lot of people who
like x like you, also
like y, too.”
alberto@graphenedb.com | @albertoperdomo
Pinterest Interest Graph
http://engineering.pinterest.com/post/55272557617/building-a-follower-model-from-scratch
alberto@graphenedb.com | @albertoperdomo
e-commerce
alberto@graphenedb.com | @albertoperdomo
e-commerce
Upselling
alberto@graphenedb.com | @albertoperdomo
Recommendations
bought
Many users
Star Wars I DVD
bought
C
A
B
looking at
A user
Star Wars Trilogy
DVD Pack
“Customers who bought a, also bought b”
alberto@graphenedb.com | @albertoperdomo
Rank x
๏Rank nodes based on their
neighbourhood/network
๏Klout, PageRank
alberto@graphenedb.com | @albertoperdomo
Geospatial problems
๏Travelling Salesman
๏Route for delivery of parcels
๏Optimize route for duration, distance,
traffic flow, etc.
๏Must not be physical path, example:
connecting people
alberto@graphenedb.com | @albertoperdomo
Recognize patterns
๏Fraud detection
๏Debt compensation systems
๏Text analysis
๏Chain of exchanges
alberto@graphenedb.com | @albertoperdomo
Visualize connected
data
alberto@graphenedb.com | @albertoperdomo
Your domain model
determines what you
can do
alberto@graphenedb.com | @albertoperdomo
High chances your
data is a graph
alberto@graphenedb.com | @albertoperdomo
The Neo4j
Graph Database
alberto@graphenedb.com | @albertoperdomo
Data modeling
alberto@graphenedb.com | @albertoperdomo
White board
alberto@graphenedb.com | @albertoperdomo
Then Add Complexity
alberto@graphenedb.com | @albertoperdomo
Process, Tips
๏Model facts as nodes
๏Use relations to model relations
between facts
๏Refactor - schema-less !
alberto@graphenedb.com | @albertoperdomo
Neo4j
๏Graph DB written in Java
๏Java API + HTTP/REST + Embedded
๏Full ACID
๏Built-in indexing (or roll your own)
๏Scale: 32B nodes, 32B relations
alberto@graphenedb.com | @albertoperdomo
The Cypher Query
Language
alberto@graphenedb.com | @albertoperdomo
Cypher
๏Neo4j’s graph query language
๏Declarative pattern matching
๏“SQL for graphs”
๏ASCII art
alberto@graphenedb.com | @albertoperdomo
Pattern matching
alberto@graphenedb.com | @albertoperdomo
Pattern matching
alberto@graphenedb.com | @albertoperdomo
Basic Syntax
A B
(a) --> (b)
alberto@graphenedb.com | @albertoperdomo
Basic Syntax
START a=node(*)
MATCH (a)-->(b)
RETURN a,b;
alberto@graphenedb.com | @albertoperdomo
(a) --> (b)
alberto@graphenedb.com | @albertoperdomo
Relations
(a) -[:ACTED_IN]-> (b)
A B
ACTED IN
alberto@graphenedb.com | @albertoperdomo
Syntax
START a=node(*)
MATCH (a)-[:ACTED_IN]->(b)
RETURN a.name, b.title;
alberto@graphenedb.com | @albertoperdomo
Syntax
START a=node(*)
MATCH (a)-[r:ACTED_IN]->(b)
RETURN a.name, r.roles, b.title;
alberto@graphenedb.com | @albertoperdomo
Syntax
(a) --> (b) <-- (c)
A B C
alberto@graphenedb.com | @albertoperdomo
Syntax
START a=node(*)
MATCH (a) -[:ACTED_IN]->(m)<-[:DIRECTED]- (d)
RETURN a.name, m.title, d.name;
alberto@graphenedb.com | @albertoperdomo
Sort & Limit
START a=node(*)
MATCH (a) -[:ACTED_IN]->(m)<-[:DIRECTED]- (d)
RETURN a.name, m.title, d.name
ORDER BY(count) DESC
LIMIT 5;
alberto@graphenedb.com | @albertoperdomo
Starting point: All nodes
START n=node(*)
RETURN n;
alberto@graphenedb.com | @albertoperdomo
Starting point: Where
START n=node(*)
WHERE has (n.name) AND n.name = “George Lucas”
RETURN n;
alberto@graphenedb.com | @albertoperdomo
Starting point: Auto
Index
START n=node:node_auto_index(name=“George Lucas”)
RETURN n;
alberto@graphenedb.com | @albertoperdomo
Starting point: multiple
nodes
START lucas=node:node_auto_index(name=“George Lucas”),
ford=node:node_auto_index(name=”Harrison Ford”)
MATCH (lucas) -[:DIRECTED]-> (m) <-[:ACTED_IN]- (ford)
RETURN m.title;
alberto@graphenedb.com | @albertoperdomo
Multiple relations
MATCH (a)-[:ACTED_IN|DIRECTED]->()
alberto@graphenedb.com | @albertoperdomo
Constraints with
comparison
START a=node:node_auto_index(name=“Alberto Perdomo”)
MATCH (a) -[:KNOWS]-> (b)
WHERE b.born < a.born
RETURN a.name;
alberto@graphenedb.com | @albertoperdomo
Contraints with
patterns
MATCH (alberto)-[:KNOWS*2]->(fof)
WHERE NOT((ferblape)-[:KNOWS]-(fof))
alberto@graphenedb.com | @albertoperdomo
Variable length paths
MATCH (alberto)-[:KNOWS*2]->(fof)
alberto@graphenedb.com | @albertoperdomo
Agreggation
๏count(x)
๏min(x)
๏max(x)
๏avg(x)
๏collect(x)
๏filter(x)
alberto@graphenedb.com | @albertoperdomo
Updating the graph
๏Create, Set, Delete nodes
๏Create, Set, Delete relations
alberto@graphenedb.com | @albertoperdomo
Neo4j: More features
alberto@graphenedb.com | @albertoperdomo
Built-in Graph Algos
๏shortest path
๏allSimplePaths
๏allPaths
๏dijkstra
alberto@graphenedb.com | @albertoperdomo
Extending Neo4j: Plugins
๏Provides extra API endpoints to run
external code. JAR files.
๏Neo4j-Spatial
๏Neo4j-Sparql
alberto@graphenedb.com | @albertoperdomo
Neo4j from Ruby
๏ Neography
๏ Wrapper around REST API
๏ Neo4j.rb:
๏ Language binding for JRuby
๏ ActiveModel, Mixins
๏ Embedded Neo4j w/ GPL license (not only?)
๏ Other?
alberto@graphenedb.com | @albertoperdomo
Neography
# Node creation:
node1 = @neo.create_node("age" => 31, "name" => "Max")
node2 = @neo.create_node("age" => 33, "name" => "Roel")
# Node properties:
@neo.set_node_properties(node1, {"weight" => 200})
# Relationships between nodes:
@neo.create_relationship("coding_buddies", node1, node2)
# Get node relationships:
@neo.get_node_relationships(node2, "in",
"coding_buddies")
# Use indexes:
@neo.add_node_to_index("people", "name", "max", node1)
@neo.get_node_index("people", "name", "max")
# Cypher queries:
@neo.execute_query("start n=node(0) return n")
alberto@graphenedb.com | @albertoperdomo
Neo4j.rb ActiveModel
class User < Neo4j::Rails::Model
attr_accessor :password
attr_accessible :email, :password, :password_confirmation
after_save :encrypt_password
email_regex = /A[w+-.]+@[a-zd-.]+.[a-z]+z/i
# add an exact lucene index on the email property
property :email, index: :exact
has_one(:avatar).to(Avator)
accepts_nested_attributes_for :avatar, allow_destroy: true
end
alberto@graphenedb.com | @albertoperdomo
Neo4j.rb Mixin
class Person
include Neo4j::NodeMixin
property :name, index: :exact
property :city
has_n :friends
has_one :address
end
alberto@graphenedb.com | @albertoperdomo
Neo4j Licensing
๏ Community: GPL
๏ Advanced: Commercial + AGPL
๏ Monitoring
๏ Support
๏ Enterprise: Commercial + AGPL
๏ Monitoring + HA clustering + Online backups
๏ Support
alberto@graphenedb.com | @albertoperdomo
Getting Started
๏www.neo4j.org/learn/try
๏www.neo4j.org/download
๏download -> unpack -> start
๏http://localhost:7474
alberto@graphenedb.com | @albertoperdomo
Built in Web Admin
๏Stats
๏Console & browser
๏Indexes
alberto@graphenedb.com | @albertoperdomo
Neo4j Resources
๏ Code & Issues: github.com/neo4j/neo4j
๏ Resources: www.neo4j.org/learn
๏ Mailing List: groups.google.com/forum/#!forum/neo4j
๏ Questions: stackoverflow.com/questions/tagged/neo4j
๏ Meetups: www.neo4j.org/participate/events/meetups
Free download:
http://graphdatabases.com/
alberto@graphenedb.com | @albertoperdomo
GrapheneDB:
Neo4j as a Service
@albertoperdomo
alberto@graphenedb.com
Thanks!

More Related Content

Viewers also liked

Document Classification with Neo4j
Document Classification with Neo4jDocument Classification with Neo4j
Document Classification with Neo4j
Kenny Bastani
 
Neo4j - graph database for recommendations
Neo4j - graph database for recommendationsNeo4j - graph database for recommendations
Neo4j - graph database for recommendations
proksik
 
An Introduction to Graph Databases
An Introduction to Graph DatabasesAn Introduction to Graph Databases
An Introduction to Graph Databases
InfiniteGraph
 
Natural Language Processing with Graph Databases and Neo4j
Natural Language Processing with Graph Databases and Neo4jNatural Language Processing with Graph Databases and Neo4j
Natural Language Processing with Graph Databases and Neo4j
William Lyon
 
Natural Language Processing with Neo4j
Natural Language Processing with Neo4jNatural Language Processing with Neo4j
Natural Language Processing with Neo4j
Kenny Bastani
 
Importing Data into Neo4j quickly and easily - StackOverflow
Importing Data into Neo4j quickly and easily - StackOverflowImporting Data into Neo4j quickly and easily - StackOverflow
Importing Data into Neo4j quickly and easily - StackOverflow
Neo4j
 
An overview of Neo4j Internals
An overview of Neo4j InternalsAn overview of Neo4j Internals
An overview of Neo4j InternalsTobias Lindaaker
 
Intro to Neo4j and Graph Databases
Intro to Neo4j and Graph DatabasesIntro to Neo4j and Graph Databases
Intro to Neo4j and Graph Databases
Neo4j
 
Intro to Neo4j presentation
Intro to Neo4j presentationIntro to Neo4j presentation
Intro to Neo4j presentation
jexp
 
Using MongoDB as a high performance graph database
Using MongoDB as a high performance graph databaseUsing MongoDB as a high performance graph database
Using MongoDB as a high performance graph databaseChris Clarke
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
Apaichon Punopas
 
The Importance of MDM - Eternal Management of the Data Mind
The Importance of MDM - Eternal Management of the Data MindThe Importance of MDM - Eternal Management of the Data Mind
The Importance of MDM - Eternal Management of the Data Mind
DATAVERSITY
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
AppDynamics
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph Databases
Max De Marzi
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
NodejsFoundation
 
Webinar: RDBMS to Graphs
Webinar: RDBMS to GraphsWebinar: RDBMS to Graphs
Webinar: RDBMS to Graphs
Neo4j
 

Viewers also liked (16)

Document Classification with Neo4j
Document Classification with Neo4jDocument Classification with Neo4j
Document Classification with Neo4j
 
Neo4j - graph database for recommendations
Neo4j - graph database for recommendationsNeo4j - graph database for recommendations
Neo4j - graph database for recommendations
 
An Introduction to Graph Databases
An Introduction to Graph DatabasesAn Introduction to Graph Databases
An Introduction to Graph Databases
 
Natural Language Processing with Graph Databases and Neo4j
Natural Language Processing with Graph Databases and Neo4jNatural Language Processing with Graph Databases and Neo4j
Natural Language Processing with Graph Databases and Neo4j
 
Natural Language Processing with Neo4j
Natural Language Processing with Neo4jNatural Language Processing with Neo4j
Natural Language Processing with Neo4j
 
Importing Data into Neo4j quickly and easily - StackOverflow
Importing Data into Neo4j quickly and easily - StackOverflowImporting Data into Neo4j quickly and easily - StackOverflow
Importing Data into Neo4j quickly and easily - StackOverflow
 
An overview of Neo4j Internals
An overview of Neo4j InternalsAn overview of Neo4j Internals
An overview of Neo4j Internals
 
Intro to Neo4j and Graph Databases
Intro to Neo4j and Graph DatabasesIntro to Neo4j and Graph Databases
Intro to Neo4j and Graph Databases
 
Intro to Neo4j presentation
Intro to Neo4j presentationIntro to Neo4j presentation
Intro to Neo4j presentation
 
Using MongoDB as a high performance graph database
Using MongoDB as a high performance graph databaseUsing MongoDB as a high performance graph database
Using MongoDB as a high performance graph database
 
NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
The Importance of MDM - Eternal Management of the Data Mind
The Importance of MDM - Eternal Management of the Data MindThe Importance of MDM - Eternal Management of the Data Mind
The Importance of MDM - Eternal Management of the Data Mind
 
Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture Anatomy of a Modern Node.js Application Architecture
Anatomy of a Modern Node.js Application Architecture
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph Databases
 
Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907Node Foundation Membership Overview 20160907
Node Foundation Membership Overview 20160907
 
Webinar: RDBMS to Graphs
Webinar: RDBMS to GraphsWebinar: RDBMS to Graphs
Webinar: RDBMS to Graphs
 

More from Alberto Perdomo

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jAlberto Perdomo
 
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Alberto Perdomo
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011
Alberto Perdomo
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Alberto Perdomo
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Alberto Perdomo
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
Alberto Perdomo
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
Alberto Perdomo
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
Alberto Perdomo
 
Curso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaCurso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: Shoulda
Alberto Perdomo
 
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetosCurso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetos
Alberto Perdomo
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
Alberto Perdomo
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentCurso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
Alberto Perdomo
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
Alberto Perdomo
 
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Alberto Perdomo
 

More from Alberto Perdomo (14)

Primeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4jPrimeros pasos con la base de datos de grafos Neo4j
Primeros pasos con la base de datos de grafos Neo4j
 
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
Squire: A polyglot application combining Neo4j, MongoDB, Ruby and Scala @ FOS...
 
Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011Rails for Mobile Devices @ Conferencia Rails 2011
Rails for Mobile Devices @ Conferencia Rails 2011
 
Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...Boost your productivity!: Productivity tips for rails developers - Lightning ...
Boost your productivity!: Productivity tips for rails developers - Lightning ...
 
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
Strangers In The Night: Ruby, Rack y Sinatra - Herramientas potentes para con...
 
Curso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticasCurso TDD Ruby on Rails #08: Buenas prácticas
Curso TDD Ruby on Rails #08: Buenas prácticas
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD  Ruby on Rails #02: Test Driven DevelopmentCurso TDD  Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Curso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: ShouldaCurso TDD Ruby on Rails #05: Shoulda
Curso TDD Ruby on Rails #05: Shoulda
 
Curso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetosCurso TDD Ruby on Rails #04: Factorías de objetos
Curso TDD Ruby on Rails #04: Factorías de objetos
 
Curso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitariosCurso TDD Ruby on Rails #03: Tests unitarios
Curso TDD Ruby on Rails #03: Tests unitarios
 
Curso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven DevelopmentCurso TDD Ruby on Rails #02: Test Driven Development
Curso TDD Ruby on Rails #02: Test Driven Development
 
Curso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testingCurso TDD Ruby on Rails #01: Introducción al testing
Curso TDD Ruby on Rails #01: Introducción al testing
 
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
Plugins de autenticación en Rails - Lightning talk Las Palmas On Rails 09/02/...
 

Recently uploaded

By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
Prayukth K V
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 

Recently uploaded (20)

By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 previewState of ICS and IoT Cyber Threat Landscape Report 2024 preview
State of ICS and IoT Cyber Threat Landscape Report 2024 preview
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 

Leveraging relations at scale with Neo4j