SlideShare a Scribd company logo
Photo By Mr. Christopher Thomas
Creative Commons Attribution-ShareALike 2.0 Generic License
Beneath the
Surface
Embracing the True Power of
Regular Expressions in Ruby
@nellshamrell
^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
Onigmo
Fork
Onigmo
Reads
Regex
Onigmo
Reads
Regex
Abstract
Syntax
Tree
Parses
Into
Onigmo
Reads
Regex
Abstract
Syntax
Tree
Series of
Instructions
Parses
Into
Compiles
Into
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
In the
House
Out of
House
Annie the Dog
Door
In the
House
Out of
House
Annie the Dog
Door
Door
Finite
State
Machine
Finite
State
Machine
Finite
State
Machine
Multiple States
/force/
re = /force/
string = “Use the force”
re.match(string)
f o r c e
/force/
“Use the force”
Path
Doesn’t
Match
f o r c e
/force/
“Use the force”
Still
Doesn’t
Match
f o r c e
/force/
“Use the force”
Path
Matches!
(Fast Forward)
f o r c e
/force/
“Use the force”
f o r c e
/force/
“Use the force”
f o r c e
/force/
“Use the force”
f o r c e
/force/
“Use the force”
f o r c e
/force/
“Use the force”
We Have
A Match!
re = /force/
string = “Use the force”
re.match(string)
=> #<MatchData “force”>
Alternation
Photo By Shayan
Creative Commons Attribution Generic 2.0
/Y(olk|oda)/
Pipe
re = /Y(olk|oda)/
string = “Yoda”
re.match(string)
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”
Y o
o
l k
d a
/Y(olk|oda)/
Which To
Choose?
“Yoda”
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”Saves To
Backtrack
Stack
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”Uh Oh,
No Match
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”Backtracks
To Here
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”
Y o
o
l k
d a
/Y(olk|oda)/
“Yoda”
We Have
A Match!
re = /Y(olk|oda)/
string = “Yoda”
re.match(string)
=> #<MatchData “Yoda”>
Photo By Fancy Horse
Creative Commons Attribution Generic 2.0
Quantifiers
/No+/
Plus
Quantifier
re = /No+/
string = “Noooo”
re.match(string)
N o
o
/No+/
“Noooo”
N o
o
/No+/
“Noooo”
N o
o
/No+/
“Noooo”
Return
Match?
Or Keep
Looping?
N o
o
/No+/
“Noooo”
Greedy
Quantifier
Keeps
Looping
Greedy quantifiers match
as much as possible
Greedy quantifiers use
maximum effort for
maximum return
N o
o
/No+/
“Noooo”
N o
o
/No+/
“Noooo”
N o
o
/No+/
“Noooo”
We Have
A Match!
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
/No+?/
Makes
Quantifier
Lazy
re = /No+?/
string = “Noooo”
re.match(string)
N o
o
“Noooo”
/No+?/
N o
o
“Noooo”
/No+?/
N o
o
“Noooo”
/No+?/
Return
Match?
Or Keep
Looping?
N o
o
“Noooo”
/No+?/
We Have
A Match!
re = /No+?/
string = “Noooo”
re.match(string)
=> #<MatchData “No”>
Greedy quantifiers are
greedy but reasonable
/.*moon/
Star
Quantifier
re = /.*moon/
string = “That’s no moon”
re.match(string)
. m o o n
.
/.*moon/
“That’s no moon”
. m o o n
.
“That’s no moon”
/.*moon/
. m o o n
.
“That’s no moon”
Loops
/.*moon/
. m o o n
. Which To
Match?
(Fast Forward)
“That’s no moon”
/.*moon/
. m o o n
.
“That’s no moon”
Keeps
Looping
/.*moon/
. m o o n
.
“That’s no moon”
Keeps
Looping
/.*moon/
. m o o n
.
“That’s no moon”
Keeps
Looping
/.*moon/
. m o o n
“That’s no moon”
No More
Characters?
.
/.*moon/
. m o o n
“That’s no moon”
Backtrack or Fail?
.
/.*moon/
. m o o n
“That’s no moon”
Backtracks
.
/.*moon/
. m o o n
“That’s no moon”
Backtracks
.
/.*moon/
. m o o n
“That’s no moon”
Backtracks
.
/.*moon/
. m o o n
“That’s no moon”
Backtracks
Huzzah!
.
/.*moon/
. m o o n
“That’s no moon”
.
/.*moon/
. m o o n
“That’s no moon”
.
/.*moon/
. m o o n
“That’s no moon”
.
/.*moon/
. m o o n
“That’s no moon”
. 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)
N o
o
“Noooo”
/No+w+/
w
w
N o
o
“Noooo”
/No+w+/
w
w
N o
o
“Noooo”
/No+w+/
w
wLoops
N o
o
“Noooo”
/No+w+/
w
wLoops
N o
o
“Noooo”
/No+w+/
w
wLoops
N o
o
“Noooo”
/No+w+/
w
w
Uh Oh
N o
o
“Noooo”
/No+w+/
w
w
Uh Oh
Backtrack or Fail?
N o
o
“Noooo”
/No+w+/
w
wBacktracks
N o
o
“Noooo”
/No+w+/
w
wBacktracks
N o
o
“Noooo”
/No+w+/
w
wBacktracks
N o
o
“Noooo”
/No+w+/
w
w
Match FAILS
Possessive Quantifers
Possessive quantifiers
do not backtrack
Makes
Quantifier
Possessive
/No++w+/
N o
o
“Noooo”
w
w
/No++w+/
N o
o
“Noooo”
w
w
/No++w+/
N o
o
“Noooo”
w
wLoops
/No++w+/
N o
o
“Noooo”
w
wLoops
/No++w+/
N o
o
“Noooo”
w
wLoops
/No++w+/
N o
o
“Noooo”
w
w
/No++w+/
N o
o
“Noooo”
w
wLoops
Uh Oh
Backtrack or Fail?
/No++w+/
N o
o
“Noooo”
w
w
Match FAILS
/No++w+/
Possessive quantifiers
fail faster by
controlling backtracking
Tying It All Together
Photo By Keith Ramos
Creative Commons Attribution 2.0 Generic
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
snake_case to CamelCase
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
case_converter_spec.rb
before(:each) do
end
@case_converter = CaseConverter.new
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
case_converter_spec.rb
before(:each) do
end
@case_converter = CaseConverter.new
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
.upcase_chars(ʺ″methodʺ″)
result.should == ʺ″Methodʺ″
case_converter_spec.rb
before(:each) do
end
@case_converter = CaseConverter.new
/ /^
Anchors
Match To
Beginning Of
String
/ / w^
Matches Any
Word
Character
case_converter.rb
def upcase_chars(string)
end
re = / /w^
string.gsub(re){|char| char.upcase}
case_converter.rb
def upcase_chars(string)
end
re = / /w^
string.gsub(re){|char| char.upcase}
case_converter.rb
def upcase_chars(string)
end
re = / /w^
string.gsub(re){|char| char.upcase}
Spec Passes!
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
result.should == ʺ″_Methodʺ″
case_converter_spec.rb
.upcase_chars(ʺ″_methodʺ″)
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
result.should == ʺ″_Methodʺ″
case_converter_spec.rb
.upcase_chars(ʺ″_methodʺ″)
it ʺ″capitalizes the first letterʺ″ do
end
result = @case_converter
result.should == ʺ″_Methodʺ″
case_converter_spec.rb
.upcase_chars(ʺ″_methodʺ″)
Spec Fails!
Expected: ʺ″_Methodʺ″
Got: ʺ″_methodʺ″
Spec Failure:
Problem:
Matches Letters
AND Underscores
 w^/ /
/ /[a-z]^
Matches
Only
Lowercase
Letters
/ /[a-z]^[^a-z]
Matches
everything
BUT
lowercase
letters
/ /[a-z]^[^a-z]?
Makes
Character
Class
Optional
case_converter.rb
def upcase_chars(string)
end
re =
string.gsub(re){|char| char.upcase}
/ /[a-z]^[^a-z]?
case_converter.rb
def upcase_chars(string)
end
string.gsub(re){|char| char.upcase}
Spec Passes!
re = / /[a-z]^[^a-z]?
Find any character that follows an
underscore and capitalize it
snake_case to CamelCase
it ʺ″capitalizes letters after an underscoreʺ″ do
end
result = @case_converter
result.should == ʺ″Some_Methodʺ″
case_converter_spec.rb
.upcase_chars(ʺ″some_methodʺ″)
it ʺ″capitalizes letters after an underscoreʺ″ do
end
result = @case_converter
result.should == ʺ″Some_Methodʺ″
case_converter_spec.rb
.upcase_chars(ʺ″some_methodʺ″)
/ /[a-z]^[^a-z]?
Pipe For
Alternation
| [a-z]/ /[a-z]^[^a-z]?
Look Behind
(?<=_)| [a-z]/ /[a-z]^[^a-z]?
case_converter.rb
def upcase_chars(string)
end
re =
string.gsub(re){|char| char.upcase}
| [a-z](?<=_)/ /[a-z]^[^a-z]?
case_converter.rb
def upcase_chars(string)
end
re =
string.gsub(re){|char| char.upcase}
| [a-z](?<=_)/ /[a-z]^[^a-z]?
Spec Passes!
Remove underscores
snake_case to CamelCase
it ʺ″removes underscoresʺ″ do
end
result = @case_converter
result.should == ʺ″somemethodʺ″
case_converter_spec.rb
.rmv_underscores(ʺ″some_methodʺ″)
it ʺ″removes underscoresʺ″ do
end
result = @case_converter
result.should == ʺ″somemethodʺ″
case_converter_spec.rb
.rmv_underscores(ʺ″some_methodʺ″)
it ʺ″removes underscoresʺ″ do
end
result = @case_converter
result.should == ʺ″somemethodʺ″
case_converter_spec.rb
.rmv_underscores(ʺ″some_methodʺ″)
Matches
An
Underscore
/ /_
case_converter.rb
def rmv_underscores(string)
end
re =
string.gsub(re, “”)
/ /_
case_converter.rb
def rmv_underscores(string)
end
string.gsub(re, “”)
re = / /_
case_converter.rb
def rmv_underscores(string)
end
string.gsub(re, “”)
Spec Passes!
re = / /_
Combine results of two methods
snake_case to CamelCase
it ʺ″converts snake_case to CamelCaseʺ″ do
end
result = @case_converter
result.should == ʺ″SomeMethodʺ″
case_converter_spec.rb
.snake_to_camel(ʺ″some_methodʺ″)
it ʺ″converts snake_case to CamelCaseʺ″ do
end
result = @case_converter
result.should == ʺ″SomeMethodʺ″
case_converter_spec.rb
.snake_to_camel(ʺ″some_methodʺ″)
it ʺ″converts snake_case to CamelCaseʺ″ do
end
result = @case_converter
result.should == ʺ″SomeMethodʺ″
case_converter_spec.rb
.snake_to_camel(ʺ″some_methodʺ″)
case_converter.rb
def snake_to_camel(string)
end
upcase_chars(string)
case_converter.rb
def snake_to_camel(string)
end
upcase_chars(string)rmv_underscores( )
case_converter.rb
def snake_to_camel(string)
end
upcase_chars(string)rmv_underscores( )
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
Photo By Leonardo Pallotta
Creative Commons Attribution Generic 2.0
Nell Shamrell
Software Development Engineer
Blue Box Inc
@nellshamrell
https://gist.github.com/
nellshamrell/6031738
Resources:

More Related Content

Similar to Beneath the Surface: Regular Expressions in Ruby

Regular expressions
Regular expressionsRegular expressions
Regular expressions
James Gray
 
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
sana mateen
 
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
sana mateen
 
Threequals - Case Equality in Ruby
Threequals - Case Equality in RubyThreequals - Case Equality in Ruby
Threequals - Case Equality in Ruby
Louis Scoras
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8
Wilson Su
 
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdfDOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
archanaemporium
 
Scala Language Intro - Inspired by the Love Game
Scala Language Intro - Inspired by the Love GameScala Language Intro - Inspired by the Love Game
Scala Language Intro - Inspired by the Love Game
Antony Stubbs
 
Perl Presentation
Perl PresentationPerl Presentation
Perl Presentation
Sopan Shewale
 
Cleancode
CleancodeCleancode
Cleancode
hendrikvb
 
Regular expressions in Python
Regular expressions in PythonRegular expressions in Python
Regular expressions in Python
Sujith Kumar
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
HamletDRC
 
js_class_notes_for_ institute it is very useful for your study.pdf
js_class_notes_for_ institute  it is very useful for your study.pdfjs_class_notes_for_ institute  it is very useful for your study.pdf
js_class_notes_for_ institute it is very useful for your study.pdf
Well82
 
Macros and reflection in scala 2.10
Macros and reflection in scala 2.10Macros and reflection in scala 2.10
Macros and reflection in scala 2.10
Johan Andrén
 
And Now You Have Two Problems
And Now You Have Two ProblemsAnd Now You Have Two Problems
And Now You Have Two Problems
Luca Mearelli
 
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 🎸
 
16 Java Regex
16 Java Regex16 Java Regex
16 Java Regex
wayn
 
Adv. python regular expression by Rj
Adv. python regular expression by RjAdv. python regular expression by Rj
Adv. python regular expression by Rj
Shree M.L.Kakadiya MCA mahila college, Amreli
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
Dave Cross
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
Christopher Spring
 
Javascript the New Parts
Javascript the New PartsJavascript the New Parts
Javascript the New Parts
Federico Galassi
 

Similar to Beneath the Surface: Regular Expressions in Ruby (20)

Regular expressions
Regular expressionsRegular expressions
Regular expressions
 
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
 
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
 
Threequals - Case Equality in Ruby
Threequals - Case Equality in RubyThreequals - Case Equality in Ruby
Threequals - Case Equality in Ruby
 
Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8Practical JavaScript Programming - Session 6/8
Practical JavaScript Programming - Session 6/8
 
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdfDOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
DOES NOT NEED TO BE ANSWERED UNTIL NOV 13thWords AssignmentRober.pdf
 
Scala Language Intro - Inspired by the Love Game
Scala Language Intro - Inspired by the Love GameScala Language Intro - Inspired by the Love Game
Scala Language Intro - Inspired by the Love Game
 
Perl Presentation
Perl PresentationPerl Presentation
Perl Presentation
 
Cleancode
CleancodeCleancode
Cleancode
 
Regular expressions in Python
Regular expressions in PythonRegular expressions in Python
Regular expressions in Python
 
AST Transformations
AST TransformationsAST Transformations
AST Transformations
 
js_class_notes_for_ institute it is very useful for your study.pdf
js_class_notes_for_ institute  it is very useful for your study.pdfjs_class_notes_for_ institute  it is very useful for your study.pdf
js_class_notes_for_ institute it is very useful for your study.pdf
 
Macros and reflection in scala 2.10
Macros and reflection in scala 2.10Macros and reflection in scala 2.10
Macros and reflection in scala 2.10
 
And Now You Have Two Problems
And Now You Have Two ProblemsAnd Now You Have Two Problems
And Now You Have Two Problems
 
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...
 
16 Java Regex
16 Java Regex16 Java Regex
16 Java Regex
 
Adv. python regular expression by Rj
Adv. python regular expression by RjAdv. python regular expression by Rj
Adv. python regular expression by Rj
 
Advanced Perl Techniques
Advanced Perl TechniquesAdvanced Perl Techniques
Advanced Perl Techniques
 
jRuby: The best of both worlds
jRuby: The best of both worldsjRuby: The best of both worlds
jRuby: The best of both worlds
 
Javascript the New Parts
Javascript the New PartsJavascript the New Parts
Javascript the New Parts
 

More from 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
 
The Rust Borrow Checker
The Rust Borrow CheckerThe Rust Borrow Checker
The Rust Borrow Checker
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 Habitat
Nell Shamrell-Harrington
 
Habitat Service Discovery
Habitat Service DiscoveryHabitat Service Discovery
Habitat Service Discovery
Nell Shamrell-Harrington
 
Web Operations101
Web Operations101Web Operations101
Web Operations101
Nell Shamrell-Harrington
 
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
Nell Shamrell-Harrington
 
Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!Rust, Redis, and Protobuf - Oh My!
Rust, Redis, and Protobuf - Oh My!
Nell 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
 
Chef Vault: A Deep Dive
Chef Vault: A Deep DiveChef Vault: A Deep Dive
Chef Vault: A Deep Dive
Nell Shamrell-Harrington
 
Open Source Governance 101
Open Source Governance 101Open Source Governance 101
Open Source Governance 101
Nell Shamrell-Harrington
 
DevOps in Politics
DevOps in PoliticsDevOps in Politics
DevOps in Politics
Nell Shamrell-Harrington
 
Open Source Governance - The Hard Parts
Open Source Governance - The Hard PartsOpen Source Governance - The Hard Parts
Open Source Governance - The Hard Parts
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 Habitat
Nell Shamrell-Harrington
 
Refactoring terraform
Refactoring terraformRefactoring terraform
Refactoring terraform
Nell Shamrell-Harrington
 
Refactoring Infrastructure Code
Refactoring Infrastructure CodeRefactoring Infrastructure Code
Refactoring Infrastructure Code
Nell Shamrell-Harrington
 
Devops: A History
Devops: A HistoryDevops: A History
Devops: A History
Nell 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
 
First Do No Harm: Surgical Refactoring
First Do No Harm: Surgical RefactoringFirst Do No Harm: Surgical Refactoring
First Do No Harm: Surgical Refactoring
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 Supermarket
Nell Shamrell-Harrington
 
Public Supermarket: The Insider's Tour
Public Supermarket: The Insider's TourPublic Supermarket: The Insider's Tour
Public Supermarket: The Insider's Tour
Nell Shamrell-Harrington
 

More from 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
 

Recently uploaded

Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
SOFTTECHHUB
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 

Recently uploaded (20)

Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
Goodbye Windows 11: Make Way for Nitrux Linux 3.5.0!
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 

Beneath the Surface: Regular Expressions in Ruby