SlideShare a Scribd company logo
Oleksandra Stolyar (Tomilina)
dry-validation vs dry-schema 1.*.*
Harry Potter and…
the Very Important Gem
Update
to the Major Version
“a set of gems that bring solutions
to common problems”
dry-struct
dry-logic
dry-container
dry-validation
dry-transaction
dry-schema
…
dry-rb
Backstory…
ME
dry-validation
Yeah, that feeling…
2017,
February
• Plans for dry-validation + dry-schema (a new gem!) by Piotr Solnica
2019,
January
• dry-schema introduced
2019,
May
• dry-schema v1.0.0 released
2019,
June
• dry-validation v1.0.0 released
gems update timeline
exceptionally about my experience
how I structured knowledge about these gems
features that were crucial for me
workarounds
successes and failures
conclusions, decisions and their consequences
What this talk will be about?
bugs that were fixed since dry-validation 0.13
all great features that dry-validation or dry-schema can provide
What I won’t cover?
The Challenge
Operations gem ‘trailblazer-operation’
Params schema and Validation Macro in operations gem ‘dry-validation’
Error normalization Macro for errors in operations gem ‘error_normalizer’
I had:
Trailblazer Operation v2.0 Contract documentation mentions the ability of validation using:
Dry::Schema (dry-validation < v0.13.3 Schema)
Reform
Trailblazer Macro Contract has dry-validation v0.11.1 dependency
Reform status:
Since September 2019 Emanuele Magliozzi started pushing commits for old and new API compatibility
which use dry-validation < v0.13.3 and dry-validation > v1.0.0 respectively.
In November 2019 he pushed into Trailblazer Reform v2.3.0 with new api which uses
Dry::Validation::Contract
Yet docs are still not updated and 🤔
Trailblazer usage
For same purposes you can use:
dry-transaction (active v0.13.0, release of v1.0.0 is planned but further development will be
stopped)
dry-monads
gem ‘interactor’
Other approaches
That is the question… 🤔
Reusing schemas
Rules
Custom Predicates
Custom Error Messages
Schema/Contract Configuration
Features to migrate:
dry-validation <
0.13
dry-validation > 1.0
(business
validations)
dry-schema > 1.0
(shape & type
validations)
Main changes
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Reusing Schemas
{
"sender": {
"first_name": "Draco",
"last_name": "Malfoy"
},
"receiver": {
"first_name": "Lord",
"last_name": "Voldemort"
},
"receiver_address": "Castle",
"text": "I'm scared",
"asap": true
}
it needs to be validated:
Reusing Schemas dry-validation 0.13
optional(:sender).schema(PersonalInfo::FormValidation)
required(:receiver).schema(PersonalInfo::FormValidation)
required(:receiver_address).filled(:str?)
required(:text).filled(:str?)
optional(:asap).filled(:bool?)
module PersonalInfo
FormValidation = Dry::Validation.Schema
required(:first_name).filled(:str?)
required(:last_name).filled(:str?)
end
end
Reusing Schemas dry-validation 1.3.1
params do
optional(:sender).hash(PersonalInfo::FormValidation)
required(:receiver).hash(PersonalInfo::FormValidation)
required(:receiver_address).filled(:string)
required(:text).filled(:string)
optional(:asap).filled(:bool)
end
module PersonalInfo
FormValidation = Dry::Schema.Params do
required(:first_name).filled(:string)
required(:last_name).filled(:string)
end
end
Reusing Schemas dry-schema 1.3.4
optional(:sender).hash(PersonalInfo::FormValidation)
required(:receiver).hash(PersonalInfo::FormValidation)
required(:receiver_address).filled(:string)
required(:text).filled(:string)
optional(:asap).filled(:bool)
module PersonalInfo
FormValidation = Dry::Schema.Params do
required(:first_name) { filled? > str? }
required(:last_name).filled(:string)
end
end
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Achieved with
defining Schema
Rules
{
"hogwarts_student": {
"name": "Sasha",
"age": 18,
"parents_owl_id": "hedwig_was_the_best@owail.com",
"has_owl": true,
"has_cat_or_toad": true
}
}
it needs to be validated:
required(:hogwarts_student).schema do
required(:name).filled(:str?)
required(:age).filled(:int?, gt?: 11, lteq?: 18)
required(:parents_owl_id).filled(:str?)
optional(:has_owl).filled(:bool?)
optional(:has_cat_or_toad).filled(:bool?)
rule(inadmissible_animal_quantity:
[:has_owl, :has_cat_or_toad]) do |owl, not_owl|
owl.true? ^ not_owl.true?
end
end
Rules dry-validation 0.13
params do
required(:hogwarts_student).schema do
required(:name).filled(:string)
required(:age).filled(:integer)
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
end
rule('hogwarts_student.age').validate(gteq?: 11)
rule('hogwarts_student.age').validate(lteq?: 18)
rule(hogwarts_student: [:has_owl, :has_cat_or_toad]) do
unless values[:hogwarts_student][:has_owl] ^ values[:hogwarts_student][:has_cat_or_toad]
key(:owl_errors).failure(:inadmissible_animal_quantity)
end
end
Rules dry-validation 1.3.1
required(:hogwarts_student).schema do
required(:name).filled(:string)
required(:age).filled(:integer, gt?: 11, lteq?: 18)
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
step :check_inadmissible_animal_quantity
fail AddError('inadmissible_animal_quantity', path: 'has_owl'),
fail_fast: true
def check_inadmissible_animal_quantity(opts, output:, **)
hogwarts_student = output[:hogwarts_student]
hogwarts_student[:has_owl] ^ hogwarts_student[:has_cat_or_toad]
end
Rules dry-schema 1.3.4
{
"hogwarts_house": {
"name": "Slotherin",
"head": "Snape",
"ghost": "Bloody Baron",
"immutable_info": {
"founder_name": "Salazar Slytherin",
"element": "Water",
"flag": "flag_img",
"animal": "Serpent",
"traits": [
"Resourcefulness",
...
"Lineage"
]
},
"common_room": {
"name": "Slytherin Dungeon",
"location": "hell"
}
}
}
it needs to be validated:
required(:hogwarts_house).schema do
# ...
required(:head).filled(:str?,
size?: 1..255,
format?: SOME_MAGIC_REGEX)
# ...
required(:common_room).schema do
required(:name).filled(:str?)
required(:location).filled(:str?, included_in?: %w[tower underground])
end
end
Rules dry-validation 0.13
params do
required(:hogwarts_house).schema do
# ...
required(:head).filled(:string)
# ...
required(:common_room).schema do
required(:name).filled(:string)
required(:location).filled(:string)
end
end
end
rule('hogwarts_house.head') do
key.failure(:invalid_format) unless SOME_MAGIC_REGEX.match?(value)
key.failure(:invalid_size, range: 1..255) unless (1..255).cover?(value.length)
end
rule('hogwarts_house.common_room.location') do
Rules dry-validation 1.3.1
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Custom predicates
it needs to be validated:
{
"hogwarts_student": {
"name": "Sasha",
"age": 18,
"parents_owl_id": "hedwig_was_the_best@owail.com",
"has_owl": true,
"has_cat_or_toad": true
}
}
required(:hogwarts_student).schema do
# ...
required(:parents_owl_id).filled(:str?, :owl_id?)
optional(:has_owl).filled(:bool?)
optional(:has_cat_or_toad).filled(:bool?)
end
class CommonSchema < Dry::Validation::Schema::Params
configure do
# ...
end
def owl_id?(value)
OwlLib.valid?(value)
end
end
Dry::Validation.Schema(CommonSchema, {}, &block)
Custom Predicates dry-validation 0.13
params do
required(:hogwarts_student).schema do
# ...
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
end
## 1
rule(hogwarts_student: :parents_owl_id) do
key.failure(:invalid_owl_id) unless OwlLib.valid?(value)
end
Custom Predicates dry-validation 1.3.0
params do
required(:hogwarts_student).schema do
# ...
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
end
## 2
rule('hogwarts_student.parents_owl_id') do
unless owl_validator.valid?(value)
key.failure('invalid_owl_id')
end
end
Custom Predicates dry-validation 1.3.0
## 2
class CommonContract < Dry::Validation::Contract
option :owl_validator
end
class OwlValidator
def self.valid?(value)
OwlLib.valid?(value)
end
end
MyContract.new(owl_validator: OwlValidator)
Custom Predicates dry-validation 1.3.0
params do
required(:hogwarts_student).schema do
# ...
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
end
## 3
rule(hogwarts_student: :parents_owl_id).validate(:owl_id_format)
Custom Predicates dry-validation 1.3.0
class CommonContract < Dry::Validation::Contract
register_macro(:owl_id_format) do
unless OwlLib.valid?(value)
key.failure('not a valid owl id format')
end
end
end
MyContract.new
Custom Predicates dry-validation 1.3.0
Custom Predicates dry-schema 1.3.4
required(:hogwarts_student).schema do
# ...
required(:parents_owl_id).filled(:string)
required(:has_owl).filled(:bool)
required(:has_cat_or_toad).filled(:bool)
end
step Validate()
fail NormalizeErrors(), fail_fast: true
step ValidateOwl(:hogwarts_student, :parents_owl_id)
fail AddError('invalid_parents_owl_id', path: 'parents_owl_id'), fail_fast: true
def ValidateOwl(*args)
step = lambda do |_input, options|
value = options[:output].dig(*args)
OwlLib.valid?(value)
end
end
Custom Predicates dry-schema 1.3.4
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Rules
Achieved with
Macro
Custom Error Messages
Custom Error Messages dry-validation 0.13
class CommonSchema < Dry::Validation::Schema::Params
configure do
I18n.config.backend.load_translations('somewhere/custom_error_messages.yml')
config.messages = :i18n
end
end
en:
errors:
bool?: "must be bla bla bla"
owl_number?: "must be in owl number international format"
rules:
inadmissible_animal_quantity: "either owl or something else"
Custom Error Messages dry-validation 1.3.1
class CommonContract < Dry::Validation::Contract
config.messages.load_paths << 'somewhere/custom_error_messages.yml'
end
en:
dry_validation:
errors:
bool?: "must be bla bla bla"
rules:
hogwarts_house:
common_room:
location:
invalid: "must be somewhere in: %{list}"
head:
invalid_format: "must not contain magic"
invalid_size: "length must be within %{range}"
hogwarts_student:
parents_owl_number:
invalid_owl_number: "must be in owl number international format"
owl_errors:
inadmissible_animal_quantity: "either owl or something else"
Custom Error Messages dry-schema 1.3.4
en:
dry_schema:
errors:
bool?: "must be bla bla bla"
CommonConfig = Dry::Schema.Params do
config.messages.load_paths << 'somewhere/custom_error_messages.yml'
end
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Configuration parameters
class CommonSchema < Dry::Validation::Schema::Params
configure do
# custom errors files and I18n configs
end
# predicates
# custom validation blocks
end
Dry::Validation.Schema(CommonSchema, {}, &block)
Configuration parameters dry-validation 0.13
Configuration parameters dry-validation 1.3.1
class CommonContract < Dry::Validation::Contract
# custom errors files and I18n configs
# external dependencies
# predicates as macros
end
MyContract.new(
# list of validators
)
Configuration parameters dry-schema 1.3.4
CommonConfig = Dry::Schema.Params do
# custom errors files and I18n configs
# custom types
end
Dry::Schema.Params(
processor: 'Params',
config: CommonConfig.config,
&block
)
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Totals
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Reusing
schemas
Rules
Custom
predicates
Custom
Error
Messages
Configuration
Parameters
dry-validation
(Contract)
dry-schema
Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar | Ruby Meditation 29
This separation will not only make dry-v much simpler internally, but also allow us to have schemas for
processing/validating input at the HTTP boundary, and then having domain validators that can be called
in the application layer. Schemas and validators can be composed, it means that you’ll be able to specify
schemas and reuse them in validators. This way your application’s domain validation will live in the app
layer, and hairy HTTP processing/validation will be in the HTTP layer (ie controllers, roda routes, etc.)
and this will be possible with 0 code duplication (ie you won’t have to define same attributes in two
places).
The main idea behind dry-schema is to be a fast type checker and a coercion mechanism. It does
support lots of predicates OOTB through dry-logic but it’s important to understand that for “domain
validation” it is not a good fit. Good use cases for dry-schema with additional predicates (as in, other than
type checks) may include things like processing and validating application configuration or HTTP params
pre-processing (before it is passed down to domain layer where further processing may take place).
Proving the idea by Piotr Solnica
How can we draw a line between dry-validation
and dry-schema?
Use dry-validation or use both.
dry-schema for high-level http params
validation
dry-validation for specific and complex
validations, business logic
Ex.:
dry-schema in Controllers
dry-validation in Operations or whatever you
use to process data
Figuring it out
About dry-rb gems
https://www.rubyguides.com/2019/01/what-is-dry-rb/
Piotr Solnica about dry-schema 1.0 release
https://solnic.codes/2019/01/31/introducing-dry-schema/
Piotr Solnica about dry-validation 1.0 release
https://dry-rb.org/news/2019/06/10/dry-validation-1-0-0-released/
Tim Riley “A tour of dry-schema and dry-validation 1.0”
https://speakerdeck.com/timriley/a-tour-of-dry-schema-and-dry-validation-1-dot-0
Igor Morozov upgrading dry-gems
https://www.morozov.is/2019/05/31/upgrading-dry-gems.html
Helpful links:
Questions?
Thanks for listening 🎉🐱

More Related Content

PPTX
TypeScript
Udaiappa Ramachandran
 
PDF
Railway Oriented Programming
Scott Wlaschin
 
PDF
angular fundamentals.pdf
NuttavutThongjor1
 
PPTX
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
PPT
sets and maps
Rajkattamuri
 
PDF
Domain Modeling in a Functional World
Debasish Ghosh
 
PDF
The Functional Programmer's Toolkit (NDC London 2019)
Scott Wlaschin
 
PDF
Python 테스트 시작하기
Hosung Lee
 
Railway Oriented Programming
Scott Wlaschin
 
angular fundamentals.pdf
NuttavutThongjor1
 
로그 기깔나게 잘 디자인하는 법
Jeongsang Baek
 
sets and maps
Rajkattamuri
 
Domain Modeling in a Functional World
Debasish Ghosh
 
The Functional Programmer's Toolkit (NDC London 2019)
Scott Wlaschin
 
Python 테스트 시작하기
Hosung Lee
 

What's hot (20)

PDF
Monadic Java
Mario Fusco
 
PDF
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
Yongho Ha
 
PDF
Let's discover React and Redux with TypeScript
Mathieu Savy
 
PDF
Begin with Python
Narong Intiruk
 
PDF
Functional Domain Modeling - The ZIO 2 Way
Debasish Ghosh
 
PPT
TypeScript Presentation
Patrick John Pacaña
 
PDF
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
Curt Park
 
PDF
Let's make a contract: the art of designing a Java API
Mario Fusco
 
PDF
Idiomatic Kotlin
intelliyole
 
PPT
Advanced Programming C++
guestf0562b
 
PPTX
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
NAVER D2
 
PPTX
Intro GraphQL
Simona Cotin
 
PDF
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
Edureka!
 
PPTX
Regular expressions in Python
Sujith Kumar
 
PPTX
Asynchronous programming in C#
Bohdan Pashkovskyi
 
PPTX
JavaScript Engines and Event Loop
Tapan B.K.
 
PPTX
JavaScript Promises
L&T Technology Services Limited
 
PDF
Clean code
Alvaro García Loaisa
 
PDF
Graphql
Niv Ben David
 
PDF
Asynchronous javascript
Eman Mohamed
 
Monadic Java
Mario Fusco
 
스타트업은 데이터를 어떻게 바라봐야 할까? (개정판)
Yongho Ha
 
Let's discover React and Redux with TypeScript
Mathieu Savy
 
Begin with Python
Narong Intiruk
 
Functional Domain Modeling - The ZIO 2 Way
Debasish Ghosh
 
TypeScript Presentation
Patrick John Pacaña
 
강화학습 기초부터 DQN까지 (Reinforcement Learning from Basics to DQN)
Curt Park
 
Let's make a contract: the art of designing a Java API
Mario Fusco
 
Idiomatic Kotlin
intelliyole
 
Advanced Programming C++
guestf0562b
 
딥러닝과 강화 학습으로 나보다 잘하는 쿠키런 AI 구현하기
NAVER D2
 
Intro GraphQL
Simona Cotin
 
What are Data structures in Python? | List, Dictionary, Tuple Explained | Edu...
Edureka!
 
Regular expressions in Python
Sujith Kumar
 
Asynchronous programming in C#
Bohdan Pashkovskyi
 
JavaScript Engines and Event Loop
Tapan B.K.
 
JavaScript Promises
L&T Technology Services Limited
 
Graphql
Niv Ben David
 
Asynchronous javascript
Eman Mohamed
 
Ad

Similar to Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar | Ruby Meditation 29 (20)

KEY
Refactoring at Large
Danilo Sato
 
PDF
BarcelonaJUG2016: walkmod: how to run and design code transformations
walkmod
 
PDF
The things we don't see – stories of Software, Scala and Akka
Konrad Malawski
 
PDF
How to not write a boring test in Golang
Dan Tran
 
PPTX
Anti patterns
Alex Tumanoff
 
PDF
The Ring programming language version 1.9 book - Part 53 of 210
Mahmoud Samir Fayed
 
PPTX
Finding bugs that matter with Findbugs
Carol McDonald
 
PDF
The Ring programming language version 1.4.1 book - Part 13 of 31
Mahmoud Samir Fayed
 
PDF
Kamil witecki asynchronous, yet readable, code
Kamil Witecki
 
PPTX
Pro typescript.ch03.Object Orientation in TypeScript
Seok-joon Yun
 
PPSX
Taller evento TestingUY 2017 - API Testing utilizando Chakram
TestingUy
 
PDF
Visual sedimentation - IEEE VIS 2013 Atlanta
Samuel Huron
 
PDF
Machine Learning and Go. Go!
Diana Ortega
 
PPTX
Quality Python Homework Help
Python Homework Help
 
PDF
The Ring programming language version 1.10 book - Part 17 of 212
Mahmoud Samir Fayed
 
PPTX
Oct27
Tak Lee
 
PPTX
20.1 Java working with abstraction
Intro C# Book
 
ODP
Static Analysis in IDEA
HamletDRC
 
PDF
The Ring programming language version 1.5.4 book - Part 10 of 185
Mahmoud Samir Fayed
 
PDF
FalcorJS
Mathieu Breton
 
Refactoring at Large
Danilo Sato
 
BarcelonaJUG2016: walkmod: how to run and design code transformations
walkmod
 
The things we don't see – stories of Software, Scala and Akka
Konrad Malawski
 
How to not write a boring test in Golang
Dan Tran
 
Anti patterns
Alex Tumanoff
 
The Ring programming language version 1.9 book - Part 53 of 210
Mahmoud Samir Fayed
 
Finding bugs that matter with Findbugs
Carol McDonald
 
The Ring programming language version 1.4.1 book - Part 13 of 31
Mahmoud Samir Fayed
 
Kamil witecki asynchronous, yet readable, code
Kamil Witecki
 
Pro typescript.ch03.Object Orientation in TypeScript
Seok-joon Yun
 
Taller evento TestingUY 2017 - API Testing utilizando Chakram
TestingUy
 
Visual sedimentation - IEEE VIS 2013 Atlanta
Samuel Huron
 
Machine Learning and Go. Go!
Diana Ortega
 
Quality Python Homework Help
Python Homework Help
 
The Ring programming language version 1.10 book - Part 17 of 212
Mahmoud Samir Fayed
 
Oct27
Tak Lee
 
20.1 Java working with abstraction
Intro C# Book
 
Static Analysis in IDEA
HamletDRC
 
The Ring programming language version 1.5.4 book - Part 10 of 185
Mahmoud Samir Fayed
 
FalcorJS
Mathieu Breton
 
Ad

More from Ruby Meditation (20)

PDF
Is this Legacy or Revenant Code? - Sergey Sergyenko | Ruby Meditation 30
Ruby Meditation
 
PDF
Life with GraphQL API: good practices and unresolved issues - Roman Dubrovsky...
Ruby Meditation
 
PDF
Where is your license, dude? - Viacheslav Miroshnychenko | Ruby Meditation 29
Ruby Meditation
 
PDF
How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28
Ruby Meditation
 
PDF
How to cook Rabbit on Production - Serhiy Nazarov | Ruby Meditation 28
Ruby Meditation
 
PDF
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Ruby Meditation
 
PDF
Performance Optimization 101 for Ruby developers - Nihad Abbasov (ENG) | Ruby...
Ruby Meditation
 
PDF
Use cases for Serverless Technologies - Ruslan Tolstov (RUS) | Ruby Meditatio...
Ruby Meditation
 
PDF
The Trailblazer Ride from the If Jungle into a Civilised Railway Station - Or...
Ruby Meditation
 
PDF
What/How to do with GraphQL? - Valentyn Ostakh (ENG) | Ruby Meditation 27
Ruby Meditation
 
PDF
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
Ruby Meditation
 
PDF
Security Scanning Overview - Tetiana Chupryna (RUS) | Ruby Meditation 26
Ruby Meditation
 
PDF
Teach your application eloquence. Logs, metrics, traces - Dmytro Shapovalov (...
Ruby Meditation
 
PDF
Best practices. Exploring - Ike Kurghinyan (RUS) | Ruby Meditation 26
Ruby Meditation
 
PDF
Road to A/B testing - Alexey Vasiliev (ENG) | Ruby Meditation 25
Ruby Meditation
 
PDF
Concurrency in production. Real life example - Dmytro Herasymuk | Ruby Medita...
Ruby Meditation
 
PDF
Data encryption for Ruby web applications - Dmytro Shapovalov (RUS) | Ruby Me...
Ruby Meditation
 
PDF
Rails App performance at the limit - Bogdan Gusiev
Ruby Meditation
 
PDF
GDPR. Next Y2K in 2018? - Anton Tkachov | Ruby Meditation #23
Ruby Meditation
 
PDF
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Ruby Meditation
 
Is this Legacy or Revenant Code? - Sergey Sergyenko | Ruby Meditation 30
Ruby Meditation
 
Life with GraphQL API: good practices and unresolved issues - Roman Dubrovsky...
Ruby Meditation
 
Where is your license, dude? - Viacheslav Miroshnychenko | Ruby Meditation 29
Ruby Meditation
 
How to cook Rabbit on Production - Bohdan Parshentsev | Ruby Meditation 28
Ruby Meditation
 
How to cook Rabbit on Production - Serhiy Nazarov | Ruby Meditation 28
Ruby Meditation
 
Reinventing the wheel - why do it and how to feel good about it - Julik Tarkh...
Ruby Meditation
 
Performance Optimization 101 for Ruby developers - Nihad Abbasov (ENG) | Ruby...
Ruby Meditation
 
Use cases for Serverless Technologies - Ruslan Tolstov (RUS) | Ruby Meditatio...
Ruby Meditation
 
The Trailblazer Ride from the If Jungle into a Civilised Railway Station - Or...
Ruby Meditation
 
What/How to do with GraphQL? - Valentyn Ostakh (ENG) | Ruby Meditation 27
Ruby Meditation
 
New features in Rails 6 - Nihad Abbasov (RUS) | Ruby Meditation 26
Ruby Meditation
 
Security Scanning Overview - Tetiana Chupryna (RUS) | Ruby Meditation 26
Ruby Meditation
 
Teach your application eloquence. Logs, metrics, traces - Dmytro Shapovalov (...
Ruby Meditation
 
Best practices. Exploring - Ike Kurghinyan (RUS) | Ruby Meditation 26
Ruby Meditation
 
Road to A/B testing - Alexey Vasiliev (ENG) | Ruby Meditation 25
Ruby Meditation
 
Concurrency in production. Real life example - Dmytro Herasymuk | Ruby Medita...
Ruby Meditation
 
Data encryption for Ruby web applications - Dmytro Shapovalov (RUS) | Ruby Me...
Ruby Meditation
 
Rails App performance at the limit - Bogdan Gusiev
Ruby Meditation
 
GDPR. Next Y2K in 2018? - Anton Tkachov | Ruby Meditation #23
Ruby Meditation
 
Postgres vs Elasticsearch while enriching data - Vlad Somov | Ruby Meditaiton...
Ruby Meditation
 

Recently uploaded (20)

PPTX
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
PPTX
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
PDF
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
PDF
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
PDF
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
PDF
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
PDF
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
PPTX
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
PPTX
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PDF
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
PDF
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
PDF
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PDF
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 
AI in Daily Life: How Artificial Intelligence Helps Us Every Day
vanshrpatil7
 
Dev Dives: Automate, test, and deploy in one place—with Unified Developer Exp...
AndreeaTom
 
Google I/O Extended 2025 Baku - all ppts
HusseinMalikMammadli
 
Security features in Dell, HP, and Lenovo PC systems: A research-based compar...
Principled Technologies
 
NewMind AI Weekly Chronicles - July'25 - Week IV
NewMind AI
 
Using Anchore and DefectDojo to Stand Up Your DevSecOps Function
Anchore
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
Make GenAI investments go further with the Dell AI Factory
Principled Technologies
 
Unlocking the Future- AI Agents Meet Oracle Database 23ai - AIOUG Yatra 2025.pdf
Sandesh Rao
 
Applied-Statistics-Mastering-Data-Driven-Decisions.pptx
parmaryashparmaryash
 
AI and Robotics for Human Well-being.pptx
JAYMIN SUTHAR
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
Tea4chat - another LLM Project by Kerem Atam
a0m0rajab1
 
Peak of Data & AI Encore - Real-Time Insights & Scalable Editing with ArcGIS
Safe Software
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
Accelerating Oracle Database 23ai Troubleshooting with Oracle AHF Fleet Insig...
Sandesh Rao
 
Get More from Fiori Automation - What’s New, What Works, and What’s Next.pdf
Precisely
 
The Future of Artificial Intelligence (AI)
Mukul
 
AI-Cloud-Business-Management-Platforms-The-Key-to-Efficiency-Growth.pdf
Artjoker Software Development Company
 

Dry-validation update. Dry-validation vs Dry-schema 1.0 - Aleksandra Stolyar | Ruby Meditation 29