SlideShare une entreprise Scribd logo
1  sur  171
Télécharger pour lire hors ligne
Beneath the Surface
Regular Expressions in Ruby
@nellshamrell

Photo By Mr. Christopher Thomas
Creative Commons Attribution-ShareALike 2.0 Generic License
^4[0-9]{12}(?:[0-9]{3})?$

Source: regular-expressions.info
We fear what we
do not understand
Regular
Expressions
+
Ruby
Photo By Shayan
Creative Commons Attribution-ShareALike 2.0 Generic License
Regex Matching in Ruby
Ruby
Methods

Onigmo
Onigmo
Oniguruma
Fork

Onigmo
Onigmo
Reads
Regex
Onigmo
Reads
Regex
Parses
Into

Abstract
Syntax
Tree
Onigmo
Series of
Instructions

Reads
Regex
Parses
Into

Compiles
Into

Abstract
Syntax
Tree
Finite State Machines
Photo By Felipe Skroski
Creative Commons Attribution Generic 2.0
A Finite State Machine
Shows How
Something Works
Annie the Dog
In the
House

Out of
House

Annie the Dog
Door
In the
House

Out of
House

Annie the Dog
Door
In the
House

Door

Out of
House

Annie the Dog
Finite
State
Machine
Finite
State
Machine
Finite
State
Machine
Multiple States
/force/
re = /force/
string = “Use the force”
re.match(string)
“Use the force”
f

o

r

Path
Doesn’t
Match

/force/

c

e
“Use the force”
f

o

r

Still
Doesn’t
Match

/force/

c

e
“Use the force”
f

o

(Fast Forward)

r

Path
Matches!

/force/

c

e
“Use the force”
f

o

r

/force/

c

e
“Use the force”
f

o

r

/force/

c

e
“Use the force”
f

o

r

/force/

c

e
“Use the force”
f

o

r

/force/

c

e
“Use the force”
f

o

r

c
We Have
A Match!

/force/

e
re = /force/
string = “Use the force”
re.match(string)
=> #<MatchData “force”>
Alternation

Photo By Shayan
Creative Commons Attribution Generic 2.0
Pipe

/Y(olk|oda)/
re = /Y(olk|oda)/
string = “Yoda”
re.match(string)
“Yoda”
o
Y
o

l

k

d

a

/Y(olk|oda)/
Which To
Choose?

“Yoda”

o
Y
o

l

k

d

a

/Y(olk|oda)/
Saves To
Backtrack
Stack

“Yoda”

o
Y
o

l

k

d

a

/Y(olk|oda)/
Uh Oh,
No Match

“Yoda”

o
Y
o

l

k

d

a

/Y(olk|oda)/
Backtracks
To Here

“Yoda”

o
Y
o

l

k

d

a

/Y(olk|oda)/
“Yoda”
o
Y
o

l

k

d

a

/Y(olk|oda)/
“Yoda”
o
Y
o

l

k

d

a

/Y(olk|oda)/
“Yoda”
o
Y
o

l

k

d

a

We Have
A Match!

/Y(olk|oda)/
re = /Y(olk|oda)/
string = “Yoda”
re.match(string)
=> #<MatchData “Yoda”>
Quantifiers

Photo By Fancy Horse
Creative Commons Attribution Generic 2.0
Plus
Quantifier

/No+/
re = /No+/
string = “Noooo”
re.match(string)
“Noooo”

o

N

o

/No+/
“Noooo”

o

N

o

/No+/
“Noooo”

o

N

o
Return
Match?
Or Keep
Looping?

/No+/
“Noooo”

o

N

o

Greedy
Quantifier

/No+/

Keeps
Looping
Greedy quantifiers match
as much as possible
Greedy quantifiers use
maximum effort for
maximum return
“Noooo”

o

N

o

/No+/
“Noooo”

o

N

o

/No+/
“Noooo”

o

N

o
We Have
A Match!

/No+/
re = /No+/
string = “Noooo”
re.match(string)
=> #<MatchData “Noooo”>
Lazy Quantifiers
Lazy quantifiers match
as little as possible
Lazy quantifiers use
minimum effort for
minimum return
Makes
Quantifier
Lazy

/No+?/
re = /No+?/
string = “Noooo”
re.match(string)
“Noooo”

o

N

o

/No+?/
“Noooo”

o

N

o

/No+?/
“Noooo”

o

N

o
Return
Match?
Or Keep
Looping?

/No+?/
“Noooo”

o

N

o
We Have
A Match!

/No+?/
re = /No+?/
string = “Noooo”
re.match(string)
=> #<MatchData “No”>
Greedy quantifiers are
greedy but reasonable
Star
Quantifier

/.*moon/
re = /.*moon/
string = “That’s no moon”
re.match(string)
“That’s no moon”

.

m

o

o

.
/.*moon/

n
“That’s no moon”

.

m

o

o

.
/.*moon/

n
“That’s no moon”

.

m

.

o

o

Loops

/.*moon/

n
“That’s no moon”

.

m

.

(Fast Forward)

o

o

Which To
Match?

/.*moon/

n
“That’s no moon”

.

m

.

o

o

Keeps
Looping

/.*moon/

n
“That’s no moon”

.

m

.

o

o

Keeps
Looping

/.*moon/

n
“That’s no moon”

.

m

.

o

o

Keeps
Looping

/.*moon/

n
“That’s no moon”

.

m

o

No More
Characters?

o

.
/.*moon/

n
“That’s no moon”

.

m

.

o

o

n

Backtrack or Fail?

/.*moon/
“That’s no moon”

.

m

Backtracks

o

o

.
/.*moon/

n
“That’s no moon”

.

m

Backtracks

o

o

.
/.*moon/

n
“That’s no moon”

.

m

Backtracks

o

o

.
/.*moon/

n
“That’s no moon”

.

Backtracks

m

.

o

o

Huzzah!

/.*moon/

n
“That’s no moon”

.

m

o

o

.
/.*moon/

n
“That’s no moon”

.

m

o

o

.
/.*moon/

n
“That’s no moon”

.

m

o

o

.
/.*moon/

n
“That’s no moon”

.

m

o

o

.

n
We Have
A Match!

/.*moon/
re = /.*moon/
string = “That’s no moon”
re.match(string)
=> #<MatchData “That’s
no moon”>
Backtracking = Slow
/No+w+/
re = /No+w+/
string = “Noooo”
re.match(string)
“Noooo”
o

N

o

w

/No+w+/

w
“Noooo”
o

N

o

w

/No+w+/

w
“Noooo”
o

Loops

N

o

w

/No+w+/

w
“Noooo”
o

Loops

N

o

w

/No+w+/

w
“Noooo”
o

Loops

N

o

w

/No+w+/

w
“Noooo”
o

N

o

w

/No+w+/

Uh Oh

w
“Noooo”
o

N

o

Uh Oh

w

w

Backtrack or Fail?

/No+w+/
“Noooo”
Backtracks

N

o

o

w

/No+w+/

w
“Noooo”
o

Backtracks

N

o

w

/No+w+/

w
“Noooo”
o

Backtracks

N

o

w

/No+w+/

w
“Noooo”
o

N

o

w

Match FAILS

/No+w+/

w
Possessive Quantifers
Possessive quantifiers
do not backtrack
Makes
Quantifier
Possessive

/No++w+/
“Noooo”
o

N

o

w

/No++w+/

w
“Noooo”
o

N

o

w

/No++w+/

w
“Noooo”
o

Loops

N

o

w

/No++w+/

w
“Noooo”
o

Loops

N

o

w

/No++w+/

w
“Noooo”
o

Loops

N

o

w

/No++w+/

w
“Noooo”
o

N

o

w

/No++w+/

w
“Noooo”
o

Loops

N

o

Uh Oh

w

w

Backtrack or Fail?

/No++w+/
“Noooo”
o

N

o

w

Match FAILS

/No++w+/

w
Possessive quantifiers
fail faster by
controlling backtracking
Use possessive quantifers
with caution
Tying It All Together
Photo By Keith Ramos
Creative Commons Attribution 2.0 Generic
snake_case to CamelCase
snake_case to CamelCase
Find first letter of string and
capitalize it
snake_case to CamelCase
Find first letter of string and
capitalize it
Find any character that follows
an underscore and capitalize it
snake_case to CamelCase
Find first letter of string and
capitalize it
Find any character that follows an
underscore and capitalize it
Remove underscores
snake_case to CamelCase
Find first letter of string and
capitalize it
case_converter_spec.rb
before(:each) do
@case_converter = CaseConverter.new
end
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
end
case_converter_spec.rb
before(:each) do
@case_converter = CaseConverter.new
end
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
end
case_converter_spec.rb
before(:each) do
@case_converter = CaseConverter.new
end
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
end
Anchors
Match To
Beginning Of
String

/ A /
Matches Any
Word
Character

/ Aw/
case_converter.rb
def upcase_chars(string)
re = / A w/
string.gsub(re){|char| char.upcase}
end
case_converter.rb
def upcase_chars(string)
re = / A w/
string.gsub(re){|char| char.upcase}
end
case_converter.rb
def upcase_chars(string)
re = / A w/
string.gsub(re){|char| char.upcase}
end

Spec Passes!
case_converter_spec.rb
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″_methodʺ″)
result.should == ʺ″_Methodʺ″
end
case_converter_spec.rb
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″_methodʺ″)
result.should == ʺ″_Methodʺ″
end
case_converter_spec.rb
it ʺ″capitalizes the first letterʺ″ do
result = @case_converter
.upcase_chars(ʺ″_methodʺ″)
result.should == ʺ″_Methodʺ″
end

Spec Fails!
Spec Failure:
Expected: ʺ″_Methodʺ″
Got: ʺ″_methodʺ″
Problem:
Matches Letters
AND Underscores

/ Aw/
Matches
Only
Lowercase
Letters

/ A[a-z]/
Matches an
underscore

/ A _ [a-z]/
Makes
underscore
optional

/ A _ ?[a-z] /
case_converter.rb
def upcase_chars(string)
re = / A _? [a-z] /
string.gsub(re){|char| char.upcase}
end
case_converter.rb
def upcase_chars(string)
re = / A _? [a-z] /
string.gsub(re){|char| char.upcase}
end

Spec Passes!
snake_case to CamelCase
Find any character that follows an
underscore and capitalize it
case_converter_spec.rb
it ʺ″capitalizes letters after an underscoreʺ″ do
result = @case_converter
.upcase_chars(ʺ″some_methodʺ″)
result.should == ʺ″Some_Methodʺ″
end
case_converter_spec.rb
it ʺ″capitalizes letters after an underscoreʺ″ do
result = @case_converter
.upcase_chars(ʺ″some_methodʺ″)
result.should == ʺ″Some_Methodʺ″
end
/ A _ ?[a-z] /
Pipe For
Alternation

/ A _ ?[a-z]|[a-z] /
Look Behind

/ A _ ?[a-z]|(?<=_)[a-z] /
case_converter.rb
def upcase_chars(string)
re = / A _ ?[a-z] | (?<=_)[a-z] /
string.gsub(re){|char| char.upcase}
end
case_converter.rb
def upcase_chars(string)
re = / A _ ?[a-z] | (?<=_)[a-z] /
string.gsub(re){|char| char.upcase}
end

Spec Passes!
snake_case to CamelCase

Remove underscores
case_converter_spec.rb
it ʺ″removes underscoresʺ″ do
result = @case_converter
.rmv_underscores(ʺ″some_methodʺ″)
result.should == ʺ″somemethodʺ″
end
case_converter_spec.rb
it ʺ″removes underscoresʺ″ do
result = @case_converter
.rmv_underscores(ʺ″some_methodʺ″)
result.should == ʺ″somemethodʺ″
end
case_converter_spec.rb
it ʺ″removes underscoresʺ″ do
result = @case_converter
.rmv_underscores(ʺ″some_methodʺ″)
result.should == ʺ″somemethodʺ″
end
Matches
An
Underscore

/_ /
case_converter.rb
def rmv_underscores(string)
re = / _ /
string.gsub(re, “”)
end
case_converter.rb
def rmv_underscores(string)
re = / _ /
string.gsub(re, “”)
end
case_converter.rb
def rmv_underscores(string)
re = / _ /
string.gsub(re, “”)
end

Spec Passes!
snake_case to CamelCase

Combine results of two methods
case_converter_spec.rb
it ʺ″converts snake_case to CamelCaseʺ″ do
result = @case_converter
.snake_to_camel(ʺ″some_methodʺ″)
result.should == ʺ″SomeMethodʺ″
end
case_converter_spec.rb
it ʺ″converts snake_case to CamelCaseʺ″ do
result = @case_converter
.snake_to_camel(ʺ″some_methodʺ″)
result.should == ʺ″SomeMethodʺ″
end
case_converter_spec.rb
it ʺ″converts snake_case to CamelCaseʺ″ do
result = @case_converter
.snake_to_camel(ʺ″some_methodʺ″)
result.should == ʺ″SomeMethodʺ″
end
case_converter.rb
def snake_to_camel(string)
upcase_chars(string)
end
case_converter.rb
def snake_to_camel(string)
rmv_underscores( upcase_chars(string)
)
end
case_converter.rb
def snake_to_camel(string)
rmv_underscores( upcase_chars(string)
)
end

Spec Passes!
Code is available here:
https://github.com/nellshamrell/
snake_to_camel_case
Conclusion

Photo By Steve Jurvetson
Creative Commons Attribution Generic 2.0
Develop regular expressions
in small pieces
If you write code, you can
write regular expressions
Move beyond the fear
Nell Shamrell
Software Development Engineer
Blue Box
@nellshamrell
Resources: https://gist.github.com/
nellshamrell/6031738
Photo By Leonardo Pallotta
Creative Commons Attribution Generic 2.0

Contenu connexe

Similaire à Beneath the Surface - Rubyconf 2013

PERL Unit 6 regular expression
PERL Unit 6 regular expressionPERL Unit 6 regular expression
PERL Unit 6 regular expressionBinsent Ribera
 
Strings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlStrings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlsana mateen
 
Unit 1-strings,patterns and regular expressions
Unit 1-strings,patterns and regular expressionsUnit 1-strings,patterns and regular expressions
Unit 1-strings,patterns and regular expressionssana mateen
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottO'Reilly Media
 
Lecture 23
Lecture 23Lecture 23
Lecture 23rhshriva
 
Learning Perl 6
Learning Perl 6 Learning Perl 6
Learning Perl 6 brian d foy
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Wilson Su
 
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?Regular Expressions: Backtracking, and The Little Engine that Could(n't)?
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?daoswald
 
Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)FrescatiStory
 
WTFin Perl
WTFin PerlWTFin Perl
WTFin Perllechupl
 
Regular expressions
Regular expressionsRegular expressions
Regular expressionsJames Gray
 
Class 5 - PHP Strings
Class 5 - PHP StringsClass 5 - PHP Strings
Class 5 - PHP StringsAhmed Swilam
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java ProgrammersMike Bowler
 
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...🎤 Hanno Embregts 🎸
 

Similaire à Beneath the Surface - Rubyconf 2013 (20)

PERL Unit 6 regular expression
PERL Unit 6 regular expressionPERL Unit 6 regular expression
PERL Unit 6 regular expression
 
Perl Presentation
Perl PresentationPerl Presentation
Perl Presentation
 
Lf 2021 rates_vi
Lf 2021 rates_viLf 2021 rates_vi
Lf 2021 rates_vi
 
Strings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perlStrings,patterns and regular expressions in perl
Strings,patterns and regular expressions in perl
 
Unit 1-strings,patterns and regular expressions
Unit 1-strings,patterns and regular expressionsUnit 1-strings,patterns and regular expressions
Unit 1-strings,patterns and regular expressions
 
Noun Gender
Noun GenderNoun Gender
Noun Gender
 
Dealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter ScottDealing with Legacy Perl Code - Peter Scott
Dealing with Legacy Perl Code - Peter Scott
 
Lecture 23
Lecture 23Lecture 23
Lecture 23
 
Operator precedence
Operator precedenceOperator precedence
Operator precedence
 
Learning Perl 6
Learning Perl 6 Learning Perl 6
Learning Perl 6
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8
 
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?Regular Expressions: Backtracking, and The Little Engine that Could(n't)?
Regular Expressions: Backtracking, and The Little Engine that Could(n't)?
 
Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)Tutorial on Regular Expression in Perl (perldoc Perlretut)
Tutorial on Regular Expression in Perl (perldoc Perlretut)
 
WTFin Perl
WTFin PerlWTFin Perl
WTFin Perl
 
Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
Goodparts
GoodpartsGoodparts
Goodparts
 
Class 5 - PHP Strings
Class 5 - PHP StringsClass 5 - PHP Strings
Class 5 - PHP Strings
 
Ruby For Java Programmers
Ruby For Java ProgrammersRuby For Java Programmers
Ruby For Java Programmers
 
Cleancode
CleancodeCleancode
Cleancode
 
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...
Pattern Matching: From Small Enhancement to Major Feature (talk from JavaLand...
 

Plus de Nell Shamrell-Harrington

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!Nell Shamrell-Harrington
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatNell Shamrell-Harrington
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Nell Shamrell-Harrington
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatNell Shamrell-Harrington
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)Nell Shamrell-Harrington
 
A Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef SupermarketA Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef SupermarketNell Shamrell-Harrington
 

Plus de Nell Shamrell-Harrington (20)

This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!This Week in Rust: 400 Issues and Counting!
This Week in Rust: 400 Issues and Counting!
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
 
Higher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with HabitatHigher. Faster. Stronger. Your Applications with Habitat
Higher. Faster. Stronger. Your Applications with Habitat
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
 
Rust Traits And You: A Deep Dive
Rust Traits And You: A Deep DiveRust Traits And You: A Deep Dive
Rust Traits And You: A Deep Dive
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
 
Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!Containers, Virtual Machines, and Bare Metal, Oh My!
Containers, Virtual Machines, and Bare Metal, Oh My!
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
 
Creating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef HabitatCreating Packages that Run Anywhere with Chef Habitat
Creating Packages that Run Anywhere with Chef Habitat
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
 
First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)First Do No Harm: Surgical Refactoring (extended edition)
First Do No Harm: Surgical Refactoring (extended edition)
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
 
A Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef SupermarketA Supermarket of Your Own: Running a Private Chef Supermarket
A Supermarket of Your Own: Running a Private Chef Supermarket
 
Public Supermarket: The Insider's Tour
Public Supermarket: The Insider's TourPublic Supermarket: The Insider's Tour
Public Supermarket: The Insider's Tour
 

Dernier

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
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesBoston Institute of Analytics
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
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
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CVKhem
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Principled Technologies
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
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
 

Dernier (20)

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
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
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
 
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
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
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...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
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...
 

Beneath the Surface - Rubyconf 2013