SlideShare ist ein Scribd-Unternehmen logo
1 von 105
Downloaden Sie, um offline zu lesen
@skwp @reverbdotcom #wcr14
Yan Pritzker
CTO, Reverb.com

@skwp @reverbdotcom
Domain Driven Rails
https://speakerdeck.com/skwp
@skwp @reverbdotcom #wcr14
Are you happy with the 

SIZE and COMPLEXITY 

of your models?
@skwp @reverbdotcom #wcr14
Are you happy with the 

SCALABILITY

of your team?
@skwp @reverbdotcom #wcr14
Are you happy with the 

ADAPTABILITY

of your business?
@skwp @reverbdotcom #wcr14
What are you
building?
@skwp @reverbdotcom #wcr14
Rails is a
detail!"
Decouple
all things"
Is the code
better?"
Keep it
Railsy"
@skwp @reverbdotcom #wcr14
Somewhere
in between
Simple

CRUD"
Apps"
Complex

Enterprise

Logic"
@skwp @reverbdotcom #wcr14
I want to discover 

relevant compromises 

rather than defend ideals
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Over
115

Model
Classes
@skwp @reverbdotcom #wcr14
Over
1000

Total
Classes
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Not great, but we have only
three chubby models
@skwp @reverbdotcom #wcr14
Are monoliths
bad for business?
@skwp @reverbdotcom #wcr14
Quick Iterations
Low Operational 

Complexity
Refactoring
Monolith
ServiceService
Service
Service
Service
Early 2013 - Startup / Proof of Concept
Monolith
ServiceService
Service
Service
Service
2014 - Growth Phase
@skwp @reverbdotcom #wcr14
http://martinfowler.com/articles/distributed-objects-
microservices.html
“I'm wary of distribution and 

my default inclination is to prefer
a monolithic design”
“While small microservices are certainly simpler to reason
about, I worry that this pushes complexity into the
interconnections between services”
“Refactoring becomes much harder when you have to do it
across remote boundaries.”
@skwp @reverbdotcom #wcr14
Quick Iterations
Low Operational 

Complexity
May lead to a BBOM
@skwp @reverbdotcom #wcr14
Maintainable
Monoliths
Can Be
Achieved
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Product

400 LOC

~150 LOC non-ActiveRecord
Churn: 49 changes this year"
Order

333 LOC

~200 LOC non-ActiveRecord
Churn: 36 changes this year
User

338 LOC

~200 LOC non-ActiveRecord
Churn: 29 changes this year
CHURN
Product
Order
User
@skwp @reverbdotcom #wcr14
Commonly used
classes are hard
to refactor
@skwp @reverbdotcom #wcr14
Stop 

modifying 

code!
(Open/Closed Principle)
@skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
(see also: Single Responsibility Principle)
@skwp @reverbdotcom #wcr14
Don’t put
different rates
of change
together"
Kent Beck - Smalltalk Best Practice Patterns
Data Model
Business Logic
@skwp @reverbdotcom #wcr14
Separate 

what the system is "
from what the
system does"
James Copelien & Trygve Reenskaug
(Data, Context, Interaction)
@skwp @reverbdotcom #wcr14
Where does business
logic go?
@skwp @reverbdotcom #wcr14
Controller
2005
ActiveRecord
Mailers
Services
User
@skwp @reverbdotcom #wcr14
Console?"
Rake task?"
Background jobs?"
API layer?"
Testing?
What about…
@skwp @reverbdotcom #wcr14
Order
Fat models?
@skwp @reverbdotcom #wcr14
Order
Refund
@skwp @reverbdotcom #wcr14
Order
Refund
Ship
@skwp @reverbdotcom #wcr14
Order
Refund
Ship
Check Fraud Risk
@skwp @reverbdotcom #wcr14
“Active Record is a good choice
for domain logic that isn't too
complex, such as creates, reads,
updates, and deletes”
Martin Fowler
@skwp @reverbdotcom #wcr14
If Controller and Model
are all you have then 

one has to be skinny and
one has to be fat
@skwp @reverbdotcom #wcr14
Domain Layer
skinny framework, 

healthy business logic,"
no fat anywhere
http://joncairns.com/2013/04/fat-model-
skinny-controller-is-a-load-of-rubbish/
Model
Controller
View
The Rails Way
The
Way
Active
Record
Use Cases
Grape
API
ControllersCron
Redis
Rake
HTTP
Services
Workers
R
Entities
Roles
DB
Listeners
Events
@skwp @reverbdotcom #wcr14
app/reverb
for app specific
@skwp @reverbdotcom #wcr14
lib/reverb
for Open Source / Generic
@skwp @reverbdotcom #wcr14
Reverb::
Namespace to avoid
collisions with gems
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
This is a

marketplace!
http://blog.
8thlight.com/uncle-
bob/2011/09/30/
Screaming-
Architecture.html
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-
architecture.html
@skwp @reverbdotcom #wcr14
see also Hexagonal, Ports & Adapters, DCI
@skwp @reverbdotcom #wcr14
Clean 

Enough 

Architecture"
@skwp @reverbdotcom #wcr14
Choosing the
right fight
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/mike-ebert/2013/03/23/the-
repository-pattern.html
@skwp @reverbdotcom #wcr14
http://blog.8thlight.com/mike-ebert/2013/03/23/the-
repository-pattern.html
(but you should still read this)
@skwp @reverbdotcom #wcr14
User.where(…)
User.active
User.find(1)
This is easy to replace with

something other than AR. 

Repository not required.
Don’t leak SQL outside of AR
@skwp @reverbdotcom #wcr14
Domain Logic in
ActiveRecord and
Controllers

leads to Churn
@skwp @reverbdotcom #wcr14
Use Cases
Reify complex business logic

into classes
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
This is not"
Rails
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Explicitly Require Dependency
http://myronmars.to/n/dev-blog/2012/12/5-reasons-to-avoid-
bundler-require
Invoke It
@skwp @reverbdotcom #wcr14
Code Reuse!
Thin Shell
@skwp @reverbdotcom #wcr14
Stubby
Happy Path
@skwp @reverbdotcom #wcr14
Testing conditionals and side
effects has nothing to do with Rails
@skwp @reverbdotcom #wcr14
Naming
The hardest problem in computer science
@skwp @reverbdotcom #wcr14
OrderService
@skwp @reverbdotcom #wcr14
Order

Service
@skwp @reverbdotcom #wcr14
Order

Service
NounService Grows Unbounded
@skwp @reverbdotcom #wcr14
Use verbs to
narrow your scope
@skwp @reverbdotcom #wcr14
Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
Refund

Order
@skwp @reverbdotcom #wcr14
Order
ShipOrder
Cancel

Order
Refund

Order
Does not

grow over time
@skwp @reverbdotcom #wcr14
ShipOrder
Cancel

Order
Refund

Order
Don’t change"
once you write them
@skwp @reverbdotcom #wcr14
Ubiquitous Language
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
What is this?
@skwp @reverbdotcom #wcr14
Roles
Add methods to objects on demand
in the context of a Use Case
@skwp @reverbdotcom #wcr14
Decorator
@skwp @reverbdotcom #wcr14
We added these methods
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Methods related to each"
other but loosely related"
to the parent concept"
and used only in a few"
Use Cases
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Events
Add behavior with listeners
without modifying code
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
Call External Service
@skwp @reverbdotcom #wcr14
Order
ActiveRecord Callbacks
Send Email
Call External Service
Conditional

Callbacks
@skwp @reverbdotcom #wcr14
AR callbacks become
more complex as the
system supports more
use cases
@skwp @reverbdotcom #wcr14
Different use cases may
trigger different events
even when working with
the same model
Instead
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
@skwp @reverbdotcom #wcr14
Add another listener to add behavior

The core class doesn’t change
@skwp @reverbdotcom #wcr14
Global listeners for cross-cutting concerns

without littering code
Wisper::GlobalListeners.add(Reverb::Listeners::AnalyticsListener.new)"
@skwp @reverbdotcom #wcr14
Controller is a listener too
@skwp @reverbdotcom #wcr14
Policy Objects
Reify complex business rules
into objects
@skwp @reverbdotcom #wcr14
Likely to change
Unlikely to change
@skwp @reverbdotcom #wcr14
refactored for readability
@skwp @reverbdotcom #wcr14
Injectable, but has a default
Simple code, only need to test one path

for the imperative side effect"
(sending an email)
@skwp @reverbdotcom #wcr14
Distillation Time
@skwp @reverbdotcom #wcr14
Language of codebase 

reflects language of business
@skwp @reverbdotcom #wcr14
Separate behaviors (what the system
does) from models (what the system is)
@skwp @reverbdotcom #wcr14
Rates of Change
@skwp @reverbdotcom #wcr14
Is this all Unicorns
and Rainbows?
@skwp @reverbdotcom #wcr14
Sprawl?"
Onboarding?"
Naming?"
Documentation?"
@skwp @reverbdotcom #wcr14
http://blog.mattwynne.net/category/hexagonal-rails/
http://clean-ruby.com/
Resources
http://confreaks.com/videos/759-rubymidwest2011-keynote-
architecture-the-lost-years
http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-
Architecture.html
http://www.artima.com/articles/dci_vision.html
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-
architecture.html
https://speakerdeck.com/skwp
@skwp @reverbdotcom #wcr14
We Are Hiring Always"
jobs.reverb.com
Ruby, ElasticSearch, DevOps,
Designers, Android, and more!
jobs@reverb.com

Weitere ähnliche Inhalte

Was ist angesagt?

Scalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBERScalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBERShuyi Chen
 
Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Ontotext
 
Best practices for highly available and large scale SolrCloud
Best practices for highly available and large scale SolrCloudBest practices for highly available and large scale SolrCloud
Best practices for highly available and large scale SolrCloudAnshum Gupta
 
Intro to Neo4j presentation
Intro to Neo4j presentationIntro to Neo4j presentation
Intro to Neo4j presentationjexp
 
Domain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with RailsDomain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with RailsDeclan Whelan
 
HBase in Practice
HBase in PracticeHBase in Practice
HBase in Practicelarsgeorge
 
Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15Bobby Curtis
 
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringHadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringErik Krogen
 
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big Data
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big DataCombine Apache Hadoop and Elasticsearch to Get the Most of Your Big Data
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big DataHortonworks
 
Scaling MongoDB with Horizontal and Vertical Sharding
Scaling MongoDB with Horizontal and Vertical Sharding Scaling MongoDB with Horizontal and Vertical Sharding
Scaling MongoDB with Horizontal and Vertical Sharding Mydbops
 
Hadoop Query Performance Smackdown
Hadoop Query Performance SmackdownHadoop Query Performance Smackdown
Hadoop Query Performance SmackdownDataWorks Summit
 

Was ist angesagt? (12)

Scalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBERScalable complex event processing on samza @UBER
Scalable complex event processing on samza @UBER
 
Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020Property graph vs. RDF Triplestore comparison in 2020
Property graph vs. RDF Triplestore comparison in 2020
 
Best practices for highly available and large scale SolrCloud
Best practices for highly available and large scale SolrCloudBest practices for highly available and large scale SolrCloud
Best practices for highly available and large scale SolrCloud
 
Intro to Neo4j presentation
Intro to Neo4j presentationIntro to Neo4j presentation
Intro to Neo4j presentation
 
Domain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with RailsDomain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with Rails
 
HBase in Practice
HBase in PracticeHBase in Practice
HBase in Practice
 
Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15Extreme replication at IOUG Collaborate 15
Extreme replication at IOUG Collaborate 15
 
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage TieringHadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
Hadoop Meetup Jan 2019 - Router-Based Federation and Storage Tiering
 
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big Data
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big DataCombine Apache Hadoop and Elasticsearch to Get the Most of Your Big Data
Combine Apache Hadoop and Elasticsearch to Get the Most of Your Big Data
 
Using the GSMA OneAPI Gateway
Using the GSMA OneAPI GatewayUsing the GSMA OneAPI Gateway
Using the GSMA OneAPI Gateway
 
Scaling MongoDB with Horizontal and Vertical Sharding
Scaling MongoDB with Horizontal and Vertical Sharding Scaling MongoDB with Horizontal and Vertical Sharding
Scaling MongoDB with Horizontal and Vertical Sharding
 
Hadoop Query Performance Smackdown
Hadoop Query Performance SmackdownHadoop Query Performance Smackdown
Hadoop Query Performance Smackdown
 

Ähnlich wie Domain Driven Rails

JS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesJS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesNick Dreckshage
 
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Quentin Adam
 
The Twelve Factor Container
The Twelve Factor ContainerThe Twelve Factor Container
The Twelve Factor ContainerVMware Tanzu
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowAndreas Grabner
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The FutureTracy Lee
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the StackSteve Pember
 
The Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularThe Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularTracy Lee
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentChris Holland
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?Robert Munteanu
 
From Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivFrom Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivAndrzej Krzywda
 
What is quality code? From cruft to craft
What is quality code? From cruft to craftWhat is quality code? From cruft to craft
What is quality code? From cruft to craftNick DeNardis
 
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"Daniel Bryant
 
Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Dane Weber
 
Git Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementGit Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementRaquel Pau
 
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays
 
"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIsMarkus Decke
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeOdessaJS Conf
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Chris Tankersley
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...Alexander Dean
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisQAware GmbH
 

Ähnlich wie Domain Driven Rails (20)

JS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & RoutesJS Chicago Meetup 2/23/16 - Redux & Routes
JS Chicago Meetup 2/23/16 - Redux & Routes
 
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
Monitorer l'inconnu, 1000 * 100 series par jour - talk avec @clementd à #devo...
 
The Twelve Factor Container
The Twelve Factor ContainerThe Twelve Factor Container
The Twelve Factor Container
 
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and HowBoston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
Boston DevOps Days 2016: Implementing Metrics Driven DevOps - Why and How
 
RxJS - The Basics & The Future
RxJS - The Basics & The FutureRxJS - The Basics & The Future
RxJS - The Basics & The Future
 
Reactive All the Way Down the Stack
Reactive All the Way Down the StackReactive All the Way Down the Stack
Reactive All the Way Down the Stack
 
The Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + AngularThe Power of RxJS in Nativescript + Angular
The Power of RxJS in Nativescript + Angular
 
Better and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and EnjoymentBetter and Faster: A Journey Toward Clean Code and Enjoyment
Better and Faster: A Journey Toward Clean Code and Enjoyment
 
Do you really want to go fully micro?
Do you really want to go fully micro?Do you really want to go fully micro?
Do you really want to go fully micro?
 
From Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, LvivFrom Rails legacy to DDD - Pivorak, Lviv
From Rails legacy to DDD - Pivorak, Lviv
 
What is quality code? From cruft to craft
What is quality code? From cruft to craftWhat is quality code? From cruft to craft
What is quality code? From cruft to craft
 
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
PlatformCon 23: "The Busy Platform Engineers Guide to API Gateways"
 
Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019Undercover Scrum Master - Agile2019
Undercover Scrum Master - Agile2019
 
Git Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt ManagementGit Workflow Strategies for Technical Debt Management
Git Workflow Strategies for Technical Debt Management
 
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheimapidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
apidays LIVE Paris - GraphQL: the AppSec perspective by Vladimir de Turckheim
 
"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs"Design and Test First"-Workflow für REST APIs
"Design and Test First"-Workflow für REST APIs
 
Rowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on nativeRowdy Rabouw - Unleash your web skills on native
Rowdy Rabouw - Unleash your web skills on native
 
Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)Using PHP Functions! (Not those functions, Google Cloud Functions)
Using PHP Functions! (Not those functions, Google Cloud Functions)
 
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
From Zero to Hadoop: a tutorial for getting started writing Hadoop jobs on Am...
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 

Mehr von Yan Pritzker

Bitcoin not Blockchain
Bitcoin not BlockchainBitcoin not Blockchain
Bitcoin not BlockchainYan Pritzker
 
CTO - Startup to Growth
CTO - Startup to GrowthCTO - Startup to Growth
CTO - Startup to GrowthYan Pritzker
 
Outsource Everything
Outsource EverythingOutsource Everything
Outsource EverythingYan Pritzker
 
Building Self Documenting REST APIs
Building Self Documenting REST APIsBuilding Self Documenting REST APIs
Building Self Documenting REST APIsYan Pritzker
 
Building Services on and off Rails
Building Services on and off RailsBuilding Services on and off Rails
Building Services on and off RailsYan Pritzker
 
Virtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandVirtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandYan Pritzker
 

Mehr von Yan Pritzker (11)

Bitcoin not Blockchain
Bitcoin not BlockchainBitcoin not Blockchain
Bitcoin not Blockchain
 
CTO - Startup to Growth
CTO - Startup to GrowthCTO - Startup to Growth
CTO - Startup to Growth
 
Outsource Everything
Outsource EverythingOutsource Everything
Outsource Everything
 
Building Self Documenting REST APIs
Building Self Documenting REST APIsBuilding Self Documenting REST APIs
Building Self Documenting REST APIs
 
Pasted image-3237
Pasted image-3237Pasted image-3237
Pasted image-3237
 
Pasted image-1795
Pasted image-1795Pasted image-1795
Pasted image-1795
 
Pasted image-3237
Pasted image-3237Pasted image-3237
Pasted image-3237
 
Pasted image-1795
Pasted image-1795Pasted image-1795
Pasted image-1795
 
Pasted image-1706
Pasted image-1706Pasted image-1706
Pasted image-1706
 
Building Services on and off Rails
Building Services on and off RailsBuilding Services on and off Rails
Building Services on and off Rails
 
Virtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On DemandVirtualization and Cloud Computing with Elastic Server On Demand
Virtualization and Cloud Computing with Elastic Server On Demand
 

Kürzlich hochgeladen

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
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
 
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
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
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
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
[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
 

Kürzlich hochgeladen (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
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...
 
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
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
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
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
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
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
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
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
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
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
[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
 

Domain Driven Rails