SlideShare a Scribd company logo
1 of 59
Download to read offline
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
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

What's hot

MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...Edureka!
 
Query optimization
Query optimizationQuery optimization
Query optimizationdixitdavey
 
RoR (Ruby on Rails)
RoR (Ruby on Rails)RoR (Ruby on Rails)
RoR (Ruby on Rails)scandiweb
 
N-tier Application Developement
N-tier Application DevelopementN-tier Application Developement
N-tier Application DevelopementDetectivee Mirza
 
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdf
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdfOCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdf
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdfpepillo14361
 
Advanced Sql Injection ENG
Advanced Sql Injection ENGAdvanced Sql Injection ENG
Advanced Sql Injection ENGDmitry Evteev
 
DBMS information in detail || Dbms (lab) ppt
DBMS information in detail || Dbms (lab) pptDBMS information in detail || Dbms (lab) ppt
DBMS information in detail || Dbms (lab) pptgourav kottawar
 
Les01 (retrieving data using the sql select statement)
Les01 (retrieving data using the sql select statement)Les01 (retrieving data using the sql select statement)
Les01 (retrieving data using the sql select statement)Achmad Solichin
 
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdf
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdfFUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdf
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdfBryan Alejos
 
SQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate TableSQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate Table1keydata
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101Raj Rajandran
 
15 practical grep command examples in linux
15 practical grep command examples in linux15 practical grep command examples in linux
15 practical grep command examples in linuxTeja Bheemanapally
 

What's hot (20)

MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
MySQL Tutorial For Beginners | Relational Database Management System | MySQL ...
 
Sql commands
Sql commandsSql commands
Sql commands
 
Query optimization
Query optimizationQuery optimization
Query optimization
 
RoR (Ruby on Rails)
RoR (Ruby on Rails)RoR (Ruby on Rails)
RoR (Ruby on Rails)
 
N-tier Application Developement
N-tier Application DevelopementN-tier Application Developement
N-tier Application Developement
 
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdf
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdfOCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdf
OCA Oracle Certified Associate Java SE 8 Programmer I Study Guide.pdf
 
Advanced Sql Injection ENG
Advanced Sql Injection ENGAdvanced Sql Injection ENG
Advanced Sql Injection ENG
 
DBMS information in detail || Dbms (lab) ppt
DBMS information in detail || Dbms (lab) pptDBMS information in detail || Dbms (lab) ppt
DBMS information in detail || Dbms (lab) ppt
 
Les01 (retrieving data using the sql select statement)
Les01 (retrieving data using the sql select statement)Les01 (retrieving data using the sql select statement)
Les01 (retrieving data using the sql select statement)
 
DML Commands
DML CommandsDML Commands
DML Commands
 
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdf
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdfFUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdf
FUNDAMENTALS OF REGULAR EXPRESSION (RegEX).pdf
 
Sql subquery
Sql  subquerySql  subquery
Sql subquery
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
SQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate TableSQL Tutorial - How To Create, Drop, and Truncate Table
SQL Tutorial - How To Create, Drop, and Truncate Table
 
Regular Expressions 101
Regular Expressions 101Regular Expressions 101
Regular Expressions 101
 
Ch 7 data binding
Ch 7 data bindingCh 7 data binding
Ch 7 data binding
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
Types of keys dbms
Types of keys dbmsTypes of keys dbms
Types of keys dbms
 
Coding standard
Coding standardCoding standard
Coding standard
 
15 practical grep command examples in linux
15 practical grep command examples in linux15 practical grep command examples in linux
15 practical grep command examples in linux
 

Similar to Validate Hogwarts Student Data

Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at LargeDanilo Sato
 
BarcelonaJUG2016: walkmod: how to run and design code transformations
BarcelonaJUG2016: walkmod: how to run and design code transformationsBarcelonaJUG2016: walkmod: how to run and design code transformations
BarcelonaJUG2016: walkmod: how to run and design code transformationswalkmod
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaKonrad Malawski
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in GolangDan Tran
 
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210Mahmoud Samir Fayed
 
Finding bugs that matter with Findbugs
Finding bugs that matter with FindbugsFinding bugs that matter with Findbugs
Finding bugs that matter with FindbugsCarol McDonald
 
The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31Mahmoud Samir Fayed
 
Kamil witecki asynchronous, yet readable, code
Kamil witecki asynchronous, yet readable, codeKamil witecki asynchronous, yet readable, code
Kamil witecki asynchronous, yet readable, codeKamil Witecki
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptSeok-joon Yun
 
Taller evento TestingUY 2017 - API Testing utilizando Chakram
Taller evento TestingUY 2017 - API Testing utilizando ChakramTaller evento TestingUY 2017 - API Testing utilizando Chakram
Taller evento TestingUY 2017 - API Testing utilizando ChakramTestingUy
 
Visual sedimentation - IEEE VIS 2013 Atlanta
Visual sedimentation - IEEE VIS 2013 AtlantaVisual sedimentation - IEEE VIS 2013 Atlanta
Visual sedimentation - IEEE VIS 2013 AtlantaSamuel Huron
 
Machine Learning and Go. Go!
Machine Learning and Go. Go!Machine Learning and Go. Go!
Machine Learning and Go. Go!Diana Ortega
 
The Ring programming language version 1.10 book - Part 17 of 212
The Ring programming language version 1.10 book - Part 17 of 212The Ring programming language version 1.10 book - Part 17 of 212
The Ring programming language version 1.10 book - Part 17 of 212Mahmoud Samir Fayed
 
20.1 Java working with abstraction
20.1 Java working with abstraction20.1 Java working with abstraction
20.1 Java working with abstractionIntro C# Book
 
Static Analysis in IDEA
Static Analysis in IDEAStatic Analysis in IDEA
Static Analysis in IDEAHamletDRC
 
The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185Mahmoud Samir Fayed
 

Similar to Validate Hogwarts Student Data (20)

Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
 
BarcelonaJUG2016: walkmod: how to run and design code transformations
BarcelonaJUG2016: walkmod: how to run and design code transformationsBarcelonaJUG2016: walkmod: how to run and design code transformations
BarcelonaJUG2016: walkmod: how to run and design code transformations
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
 
How to not write a boring test in Golang
How to not write a boring test in GolangHow to not write a boring test in Golang
How to not write a boring test in Golang
 
Anti patterns
Anti patternsAnti patterns
Anti patterns
 
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.9 book - Part 53 of 210
 
Finding bugs that matter with Findbugs
Finding bugs that matter with FindbugsFinding bugs that matter with Findbugs
Finding bugs that matter with Findbugs
 
The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31The Ring programming language version 1.4.1 book - Part 13 of 31
The Ring programming language version 1.4.1 book - Part 13 of 31
 
Kamil witecki asynchronous, yet readable, code
Kamil witecki asynchronous, yet readable, codeKamil witecki asynchronous, yet readable, code
Kamil witecki asynchronous, yet readable, code
 
Pro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScriptPro typescript.ch03.Object Orientation in TypeScript
Pro typescript.ch03.Object Orientation in TypeScript
 
Taller evento TestingUY 2017 - API Testing utilizando Chakram
Taller evento TestingUY 2017 - API Testing utilizando ChakramTaller evento TestingUY 2017 - API Testing utilizando Chakram
Taller evento TestingUY 2017 - API Testing utilizando Chakram
 
Visual sedimentation - IEEE VIS 2013 Atlanta
Visual sedimentation - IEEE VIS 2013 AtlantaVisual sedimentation - IEEE VIS 2013 Atlanta
Visual sedimentation - IEEE VIS 2013 Atlanta
 
Machine Learning and Go. Go!
Machine Learning and Go. Go!Machine Learning and Go. Go!
Machine Learning and Go. Go!
 
Quality Python Homework Help
Quality Python Homework HelpQuality Python Homework Help
Quality Python Homework Help
 
The Ring programming language version 1.10 book - Part 17 of 212
The Ring programming language version 1.10 book - Part 17 of 212The Ring programming language version 1.10 book - Part 17 of 212
The Ring programming language version 1.10 book - Part 17 of 212
 
Oct27
Oct27Oct27
Oct27
 
20.1 Java working with abstraction
20.1 Java working with abstraction20.1 Java working with abstraction
20.1 Java working with abstraction
 
Static Analysis in IDEA
Static Analysis in IDEAStatic Analysis in IDEA
Static Analysis in IDEA
 
The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185The Ring programming language version 1.5.4 book - Part 10 of 185
The Ring programming language version 1.5.4 book - Part 10 of 185
 
FalcorJS
FalcorJSFalcorJS
FalcorJS
 

More from Ruby Meditation

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

More from Ruby Meditation (20)

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

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 

Recently uploaded (20)

Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Pigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food ManufacturingPigging Solutions in Pet Food Manufacturing
Pigging Solutions in Pet Food Manufacturing
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 

Validate Hogwarts Student Data