SlideShare a Scribd company logo
Ruby
The Language of Devops
Who am I?
● Rob Kinyon
o @rkinyon
o rob.kinyon@gmail.com
● Devops lead for many years
What is Devops?
● The Cloud?
● Jenkins Automation?
● Continuous integration & deployment?
● A new title?
o with no extra pay . . .
● Developers doing Operations??
o And fire all the sysadmins? (NO-OPS!)
● Automating away your coworkers??!
The
Programming
of
Operations
The Programming of Operations
● Operations is:
o Build servers
o Packaging
o Monitoring
o Provisioning
o Virtualization
o Environment/Stack Management
o Many many many more things
The Programming of Operations
The Programming of Operations
● Lots of helpers
o Build this
o Package that
o Move things from here to there
The Programming of Operations
● Lots of helpers
o Build this
o Package that
o Move things from here to there
● Templating
o Homegrown templates for Nagios
The Programming of Operations
● Lots of helpers
o Build this
o Package that
o Move things from here to there
● Templating
o Homegrown templates for Nagios
● Lots of manual activities
The Programming of Operations
Manual
===
Broken
TARGET=${1:-"monitor-prod"}
for rule in /nagios/rules/*.tmpl; do
process_template.pl $rule $TARGET
mv ${rule##tmpl#cfg} /nagios/final
done
scp /nagios/final/*.cfg $TARGET.company.com:/var/nagios/
ssh $TARGET.company.com -c "sudo service nagios3 restart”
The Programming of Operations
The Programming of Operations
● As a single script, it's okay.
o Concise, clear - what else do you need?
The Programming of Operations
● As a single script, it's okay.
o Concise, clear - what else do you need?
● Problems:
o No tests (untestable!)
o No reusability or extensibility
o Inscrutable code
The Programming of Operations
● As a single script, it's okay.
o Concise, clear - what else do you need?
● Problems:
o No tests (untestable!)
o No reusability or extensibility
o Inscrutable code
● Bugs:
o Assumes the contents of $PWD and $PATH
o Assumes a human will know if it worked
The Programming of Operations
● Operations staff are not developers
The Programming of Operations
● Operations staff are not developers
● Operational focus is about maintenance
o Keep it on
o Keep it up
o Keep it responding
The Programming of Operations
The Programming of Operations
● Operations staff are not developers
● Operational focus is about maintenance
o Keep it on
o Keep it up
o Keep it responding
● Operations has to manage changes by those
pesky developers
o Right now. While something is on fire. (Really!)
The Programming of Operations
What is the perfect language?
● Multi-system
● Quick to boot
● Easy to learn
● Easy to maintain
● Large community / Lots of modules
● Easy to find good staff
Languages we won't discuss
● C/C++
● .NET (C#, F#, etc)
● JVM languages
● Functional languages
o Especially Erlang
● Node.JS
Bash/Shell scripts (Good and Bad)
● Easy to write
● Everyone has written Bash scripts
● Horrible control structures
● Horrible variable structures
● Non-existent code structuring
● “Libraries” don’t exist
● Only really works on *nix
o Git-Bash doesn't count
Perl (the Good)
● What most sysadmins use other than Bash
● Great variable structures
● Great control structures
● Excellent reusability
o CPAN is the largest single-language repository
● Works everywhere (literally)
● Good programmers can manage 500kLOC
Perl (the Bad)
● Everyone thinks they know Perl
o Bad Perl is really really bad.
Perl (the Bad)
● Everyone thinks they know Perl
o Bad Perl is really really bad.
● Standard language facilities require
libraries
o Exceptions, objects, case statements
Perl (the Bad)
● Everyone thinks they know Perl
o Bad Perl is really really bad.
● Standard language facilities require
libraries
o Exceptions, objects, case statements
● CPAN is 80%+ useless
Perl (the Bad)
● Everyone thinks they know Perl
o Bad Perl is really really bad.
● Standard language facilities require
libraries
o Exceptions, objects, case statements
● CPAN is 80%+ useless
● Really old Perls are installed everywhere
o 5.005_003 (March, 1998)
Perl (the Ugly)
● Solving a problem with regular expressions
means you have two problems.
Perl (the Ugly)
● Solving a problem with regular expressions
means you have two problems.
● Sigils ($, @, %, etc) make code hard to read
o Ironically, the idea was to make code easier to
read
Perl (the Ugly)
● Solving a problem with regular expressions
means you have two problems.
● Sigils ($, @, %, etc) make code hard to read
o Ironically, the idea was to make code easier to
read
● Too many places where hidden globals
make you cry.
o E.g., namespaces aren't namespaced.
Python (Strengths)
● Great variable structures
Python (Strengths)
● Great variable structures
● Great control structures
Python (Strengths)
● Great variable structures
● Great control structures
● All the advanced features
o Exceptions
o Objects
o Case statements
Python (Strengths)
● Great variable structures
● Great control structures
● All the advanced features
o Exceptions
o Objects
o Case statements
● Runs everywhere that we care about
Python (Weaknesses)
● Significant whitespace is difficult for non-
developers.
Python (Weaknesses)
● Significant whitespace is difficult for non-
developers.
● System programming libraries aren't mature
Python (Weaknesses)
● Significant whitespace is difficult for non-
developers.
● System programming libraries aren't mature
● Writing libraries isn't self-evident
o Tutorials and scaffolding also immature
Ruby (Strengths)
● Great variable structures
Ruby (Strengths)
● Great variable structures
● Great control structures
Ruby (Strengths)
● Great variable structures
● Great control structures
● All the advanced features
o Exceptions
o Objects
o Case statements
Ruby (Strengths)
● Great variable structures
● Great control structures
● All the advanced features
o Exceptions
o Objects
o Case statements
● Runs everywhere that we care about
Ruby (Strengths)
● Great variable structures
● Great control structures
● All the advanced features
o Exceptions
o Objects
o Case statements
● Runs everywhere that we care about
● Already used as a sysadmin language
Ruby (Weaknesses)
● Minor versions changing syntax
o 1.8.7 vs. 1.9.3 vs 2.x
Ruby (Weaknesses)
● Minor versions changing syntax
o 1.8.7 vs. 1.9.3 vs 2.x
● Ruby is not Rails
o Really!
Ruby (Superpowers)
1. Install multiple versions of same library
2. Newbies are a way of life
3. Blocks
Multiple library versions
● Sysadmins are pessimistic
o Foo-bar 1.3.9 works, so don't change it!!
Multiple library versions
● Sysadmins are pessimistic
o Foo-bar 1.3.9 works, so don't change it!!
● Not everyone can use the same version
o Something needs a feature in Foo-bar 2.1.5
Multiple library versions
● Sysadmins are pessimistic
o Foo-bar 1.3.9 works, so don't change it!!
● Not everyone can use the same version
o Something needs a feature in Foo-bar 2.1.5
● So install both and specify at runtime
gem 'Foo-bar', '=1.3.9'
require 'foobar'
Newbie friendly
● Rails is how many new web-developers start
Newbie friendly
● Rails is how many new web-developers start
● Rails is Ruby (plus, but still)
Newbie friendly
● Rails is how many new web-developers start
● Rails is Ruby (plus, but still)
● Thousands of great tutorials, skeletons, and
communities.
o Google "ruby tutorial XYZ" for all values of XYZ)
Newbie friendly
● Rails is how many new web-developers start
● Rails is Ruby (plus, but still)
● Thousands of great tutorials, skeletons, and
communities.
o Google "ruby tutorial XYZ" for all values of XYZ
● Syntax is very easy to read and write
o Reading code is very hard
o Anything that makes it easier is a "Good Thing"(tm)
Blocks (Temporary File)
require 'tempfile'
Tempfile.open('some-prefix') do |tmp|
tmp.write "Some text"
# Do something with tmp here
end
Blocks (Reading from a file)
File.foreach('/some/file') do |line|
puts “Line read: #{line}”
do_something(line)
end
Blocks (Writing to a file)
File.open('/some/file') do |file|
file.puts 'first line'
file.puts 'second line'
end
Blocks (Writing to a file)
File.open '/some/file' { |file|
file.puts 'first line'
file.puts 'second line'
}
Blocks (Changing Directory)
Dir.chdir('/some/place') do |dir|
do_something_in_some_place(dir)
end
do_something_in_original_dir()
Blocks (Nested blocks)
Dir.chdir('/some/dir') do
%w{sub1 sub2}.each do |subdir|
Dir.chdir(subdir) do
# In /some/dir/sub[12]
end
end
end
Why blocks?
● Same construct for iteration and closures
o A logical new lexical scope
Why blocks?
● Same construct for iteration and closures
o A logical new lexical scope
● Automatic cleanup
o (Not necessarily guaranteed in all cases)
Why blocks?
● Same construct for iteration and closures
o A logical new lexical scope
● Automatic cleanup
o (Not necessarily guaranteed in all cases)
● Clean delination of concerns
o Relevant code is in one place
Why blocks? (as a sysadmin)
Because my job isn't where I can faff about
until everything is perfectly just-so and my
HammerFactoryFactoryFactory has 103% test
coverage in Jenkins.
I need to be done yesterday and I need to be
sure it works by looking at it.
Why blocks? (as a devops)
Because it's the easiest way to convert a
sysadmin into a developer.
Tooling
● Vagrant
● Chef / Puppet
● Logstash
● fpm
● Cucumber
● AWS / Rackspace clients
● Rake / Capistrano
Tooling (why do I care it's in Ruby?)
Three reasons:
1. Plugins
Tooling (why do I care it's in Ruby?)
Three reasons:
1. Plugins
2. Plugins
Tooling (why do I care it's in Ruby?)
Three reasons:
1. Plugins
2. Plugins
3. Plugins
Tooling (why do I care it's in Ruby?)
Three reasons:
1. Plugins
2. Plugins
3. Plugins
4. Some of them require Ruby (Vagrant)
Questions?

More Related Content

What's hot (20)

PDF
Making CLI app in ruby
Huy Do
 
PPTX
Automating JavaScript testing with Jasmine and Perl
nohuhu
 
PPTX
Developing Rich Internet Applications with Perl and JavaScript
nohuhu
 
PPTX
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
PDF
Jslab rssh: JS as language platform
Ruslan Shevchenko
 
PDF
Why don't you Groovy?
Orest Ivasiv
 
PPTX
Ruby and Security
Carl Sampson, CSSLP
 
PDF
PharoDAYS 2015: On Relational Databases by Guille Polito
Pharo
 
PPTX
Ruby programming
Kartik Kalpande Patil
 
PDF
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
 
PDF
Functional Programming in Clojure
Troy Miles
 
PPTX
Go: What's Different ?
Tarun Vashisth
 
PPTX
Typescript Fundamentals
Sunny Sharma
 
PPT
Ruby eventmachine pres at rubybdx
Mathieu Elie
 
PPTX
PSR-7 - Middleware - Zend Expressive
Milad Arabi
 
PDF
Power Leveling your TypeScript
Offirmo
 
PPT
Web development basics (Part-7)
Rajat Pratap Singh
 
PDF
Introduction to Kotlin coroutines
Roman Elizarov
 
PDF
Scaling up development of a modular code base
Robert Munteanu
 
PDF
Pengantar Ruby on Rails
Ashari Juang
 
Making CLI app in ruby
Huy Do
 
Automating JavaScript testing with Jasmine and Perl
nohuhu
 
Developing Rich Internet Applications with Perl and JavaScript
nohuhu
 
Exploring Ruby on Rails and PostgreSQL
Barry Jones
 
Jslab rssh: JS as language platform
Ruslan Shevchenko
 
Why don't you Groovy?
Orest Ivasiv
 
Ruby and Security
Carl Sampson, CSSLP
 
PharoDAYS 2015: On Relational Databases by Guille Polito
Pharo
 
Ruby programming
Kartik Kalpande Patil
 
A Static Type Analyzer of Untyped Ruby Code for Ruby 3
mametter
 
Functional Programming in Clojure
Troy Miles
 
Go: What's Different ?
Tarun Vashisth
 
Typescript Fundamentals
Sunny Sharma
 
Ruby eventmachine pres at rubybdx
Mathieu Elie
 
PSR-7 - Middleware - Zend Expressive
Milad Arabi
 
Power Leveling your TypeScript
Offirmo
 
Web development basics (Part-7)
Rajat Pratap Singh
 
Introduction to Kotlin coroutines
Roman Elizarov
 
Scaling up development of a modular code base
Robert Munteanu
 
Pengantar Ruby on Rails
Ashari Juang
 

Similar to Ruby, the language of devops (20)

PPT
Ruby on Rails (RoR) as a back-end processor for Apex
Espen Brækken
 
PPTX
sl slides-unit-1.pptx
SRAVANTHISALLARAM1
 
PDF
rubyonrails
tutorialsruby
 
PDF
rubyonrails
tutorialsruby
 
PDF
Writing Well-Behaved Unix Utilities
Rob Miller
 
PDF
Care and feeding notes
Perrin Harkins
 
PDF
ruby_vs_perl_and_python
tutorialsruby
 
PDF
ruby_vs_perl_and_python
tutorialsruby
 
KEY
Introduction to Ruby
Mark Menard
 
ODP
Ruby
Aizat Faiz
 
KEY
Ruby on Rails Training - Module 1
Mark Menard
 
PDF
Perl Myths 200909
Tim Bunce
 
PPTX
Day 1 - Intro to Ruby
Barry Jones
 
PDF
Workin On The Rails Road
RubyOnRails_dude
 
PDF
Ruby tutorial
knoppix
 
PDF
ruby pentest
testgmailnormal
 
PPTX
Rubyonrails 120409061835-phpapp02
sagaroceanic11
 
PDF
Modern web dev_taxonomy
kevin_donovan
 
PPTX
Ruby for PHP developers
Max Titov
 
PPTX
Adventures of java developer in ruby world
Orest Ivasiv
 
Ruby on Rails (RoR) as a back-end processor for Apex
Espen Brækken
 
sl slides-unit-1.pptx
SRAVANTHISALLARAM1
 
rubyonrails
tutorialsruby
 
rubyonrails
tutorialsruby
 
Writing Well-Behaved Unix Utilities
Rob Miller
 
Care and feeding notes
Perrin Harkins
 
ruby_vs_perl_and_python
tutorialsruby
 
ruby_vs_perl_and_python
tutorialsruby
 
Introduction to Ruby
Mark Menard
 
Ruby on Rails Training - Module 1
Mark Menard
 
Perl Myths 200909
Tim Bunce
 
Day 1 - Intro to Ruby
Barry Jones
 
Workin On The Rails Road
RubyOnRails_dude
 
Ruby tutorial
knoppix
 
ruby pentest
testgmailnormal
 
Rubyonrails 120409061835-phpapp02
sagaroceanic11
 
Modern web dev_taxonomy
kevin_donovan
 
Ruby for PHP developers
Max Titov
 
Adventures of java developer in ruby world
Orest Ivasiv
 
Ad

Recently uploaded (20)

PDF
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
PPTX
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
PPTX
Human Resources Information System (HRIS)
Amity University, Patna
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PPTX
Engineering the Java Web Application (MVC)
abhishekoza1981
 
PPTX
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
PPTX
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
PPT
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
PDF
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
PDF
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
PPTX
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
PDF
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
PDF
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PPTX
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
Salesforce CRM Services.VALiNTRY360
VALiNTRY360
 
Equipment Management Software BIS Safety UK.pptx
BIS Safety Software
 
Human Resources Information System (HRIS)
Amity University, Patna
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
Engineering the Java Web Application (MVC)
abhishekoza1981
 
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
Revolutionizing Code Modernization with AI
KrzysztofKkol1
 
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Streamline Contractor Lifecycle- TECH EHS Solution
TECH EHS Solution
 
Digger Solo: Semantic search and maps for your local files
seanpedersen96
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
Platform for Enterprise Solution - Java EE5
abhishekoza1981
 
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
MiniTool Partition Wizard 12.8 Crack License Key LATEST
hashhshs786
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
3uTools Full Crack Free Version Download [Latest] 2025
muhammadgurbazkhan
 
Ad

Ruby, the language of devops

  • 2. Who am I? ● Rob Kinyon o @rkinyon o [email protected] ● Devops lead for many years
  • 3. What is Devops? ● The Cloud? ● Jenkins Automation? ● Continuous integration & deployment? ● A new title? o with no extra pay . . . ● Developers doing Operations?? o And fire all the sysadmins? (NO-OPS!) ● Automating away your coworkers??!
  • 5. The Programming of Operations ● Operations is: o Build servers o Packaging o Monitoring o Provisioning o Virtualization o Environment/Stack Management o Many many many more things
  • 6. The Programming of Operations
  • 7. The Programming of Operations ● Lots of helpers o Build this o Package that o Move things from here to there
  • 8. The Programming of Operations ● Lots of helpers o Build this o Package that o Move things from here to there ● Templating o Homegrown templates for Nagios
  • 9. The Programming of Operations ● Lots of helpers o Build this o Package that o Move things from here to there ● Templating o Homegrown templates for Nagios ● Lots of manual activities
  • 10. The Programming of Operations Manual === Broken
  • 11. TARGET=${1:-"monitor-prod"} for rule in /nagios/rules/*.tmpl; do process_template.pl $rule $TARGET mv ${rule##tmpl#cfg} /nagios/final done scp /nagios/final/*.cfg $TARGET.company.com:/var/nagios/ ssh $TARGET.company.com -c "sudo service nagios3 restart” The Programming of Operations
  • 12. The Programming of Operations ● As a single script, it's okay. o Concise, clear - what else do you need?
  • 13. The Programming of Operations ● As a single script, it's okay. o Concise, clear - what else do you need? ● Problems: o No tests (untestable!) o No reusability or extensibility o Inscrutable code
  • 14. The Programming of Operations ● As a single script, it's okay. o Concise, clear - what else do you need? ● Problems: o No tests (untestable!) o No reusability or extensibility o Inscrutable code ● Bugs: o Assumes the contents of $PWD and $PATH o Assumes a human will know if it worked
  • 15. The Programming of Operations ● Operations staff are not developers
  • 16. The Programming of Operations ● Operations staff are not developers ● Operational focus is about maintenance o Keep it on o Keep it up o Keep it responding
  • 17. The Programming of Operations
  • 18. The Programming of Operations ● Operations staff are not developers ● Operational focus is about maintenance o Keep it on o Keep it up o Keep it responding ● Operations has to manage changes by those pesky developers o Right now. While something is on fire. (Really!)
  • 19. The Programming of Operations What is the perfect language? ● Multi-system ● Quick to boot ● Easy to learn ● Easy to maintain ● Large community / Lots of modules ● Easy to find good staff
  • 20. Languages we won't discuss ● C/C++ ● .NET (C#, F#, etc) ● JVM languages ● Functional languages o Especially Erlang ● Node.JS
  • 21. Bash/Shell scripts (Good and Bad) ● Easy to write ● Everyone has written Bash scripts ● Horrible control structures ● Horrible variable structures ● Non-existent code structuring ● “Libraries” don’t exist ● Only really works on *nix o Git-Bash doesn't count
  • 22. Perl (the Good) ● What most sysadmins use other than Bash ● Great variable structures ● Great control structures ● Excellent reusability o CPAN is the largest single-language repository ● Works everywhere (literally) ● Good programmers can manage 500kLOC
  • 23. Perl (the Bad) ● Everyone thinks they know Perl o Bad Perl is really really bad.
  • 24. Perl (the Bad) ● Everyone thinks they know Perl o Bad Perl is really really bad. ● Standard language facilities require libraries o Exceptions, objects, case statements
  • 25. Perl (the Bad) ● Everyone thinks they know Perl o Bad Perl is really really bad. ● Standard language facilities require libraries o Exceptions, objects, case statements ● CPAN is 80%+ useless
  • 26. Perl (the Bad) ● Everyone thinks they know Perl o Bad Perl is really really bad. ● Standard language facilities require libraries o Exceptions, objects, case statements ● CPAN is 80%+ useless ● Really old Perls are installed everywhere o 5.005_003 (March, 1998)
  • 27. Perl (the Ugly) ● Solving a problem with regular expressions means you have two problems.
  • 28. Perl (the Ugly) ● Solving a problem with regular expressions means you have two problems. ● Sigils ($, @, %, etc) make code hard to read o Ironically, the idea was to make code easier to read
  • 29. Perl (the Ugly) ● Solving a problem with regular expressions means you have two problems. ● Sigils ($, @, %, etc) make code hard to read o Ironically, the idea was to make code easier to read ● Too many places where hidden globals make you cry. o E.g., namespaces aren't namespaced.
  • 30. Python (Strengths) ● Great variable structures
  • 31. Python (Strengths) ● Great variable structures ● Great control structures
  • 32. Python (Strengths) ● Great variable structures ● Great control structures ● All the advanced features o Exceptions o Objects o Case statements
  • 33. Python (Strengths) ● Great variable structures ● Great control structures ● All the advanced features o Exceptions o Objects o Case statements ● Runs everywhere that we care about
  • 34. Python (Weaknesses) ● Significant whitespace is difficult for non- developers.
  • 35. Python (Weaknesses) ● Significant whitespace is difficult for non- developers. ● System programming libraries aren't mature
  • 36. Python (Weaknesses) ● Significant whitespace is difficult for non- developers. ● System programming libraries aren't mature ● Writing libraries isn't self-evident o Tutorials and scaffolding also immature
  • 37. Ruby (Strengths) ● Great variable structures
  • 38. Ruby (Strengths) ● Great variable structures ● Great control structures
  • 39. Ruby (Strengths) ● Great variable structures ● Great control structures ● All the advanced features o Exceptions o Objects o Case statements
  • 40. Ruby (Strengths) ● Great variable structures ● Great control structures ● All the advanced features o Exceptions o Objects o Case statements ● Runs everywhere that we care about
  • 41. Ruby (Strengths) ● Great variable structures ● Great control structures ● All the advanced features o Exceptions o Objects o Case statements ● Runs everywhere that we care about ● Already used as a sysadmin language
  • 42. Ruby (Weaknesses) ● Minor versions changing syntax o 1.8.7 vs. 1.9.3 vs 2.x
  • 43. Ruby (Weaknesses) ● Minor versions changing syntax o 1.8.7 vs. 1.9.3 vs 2.x ● Ruby is not Rails o Really!
  • 44. Ruby (Superpowers) 1. Install multiple versions of same library 2. Newbies are a way of life 3. Blocks
  • 45. Multiple library versions ● Sysadmins are pessimistic o Foo-bar 1.3.9 works, so don't change it!!
  • 46. Multiple library versions ● Sysadmins are pessimistic o Foo-bar 1.3.9 works, so don't change it!! ● Not everyone can use the same version o Something needs a feature in Foo-bar 2.1.5
  • 47. Multiple library versions ● Sysadmins are pessimistic o Foo-bar 1.3.9 works, so don't change it!! ● Not everyone can use the same version o Something needs a feature in Foo-bar 2.1.5 ● So install both and specify at runtime gem 'Foo-bar', '=1.3.9' require 'foobar'
  • 48. Newbie friendly ● Rails is how many new web-developers start
  • 49. Newbie friendly ● Rails is how many new web-developers start ● Rails is Ruby (plus, but still)
  • 50. Newbie friendly ● Rails is how many new web-developers start ● Rails is Ruby (plus, but still) ● Thousands of great tutorials, skeletons, and communities. o Google "ruby tutorial XYZ" for all values of XYZ)
  • 51. Newbie friendly ● Rails is how many new web-developers start ● Rails is Ruby (plus, but still) ● Thousands of great tutorials, skeletons, and communities. o Google "ruby tutorial XYZ" for all values of XYZ ● Syntax is very easy to read and write o Reading code is very hard o Anything that makes it easier is a "Good Thing"(tm)
  • 52. Blocks (Temporary File) require 'tempfile' Tempfile.open('some-prefix') do |tmp| tmp.write "Some text" # Do something with tmp here end
  • 53. Blocks (Reading from a file) File.foreach('/some/file') do |line| puts “Line read: #{line}” do_something(line) end
  • 54. Blocks (Writing to a file) File.open('/some/file') do |file| file.puts 'first line' file.puts 'second line' end
  • 55. Blocks (Writing to a file) File.open '/some/file' { |file| file.puts 'first line' file.puts 'second line' }
  • 56. Blocks (Changing Directory) Dir.chdir('/some/place') do |dir| do_something_in_some_place(dir) end do_something_in_original_dir()
  • 57. Blocks (Nested blocks) Dir.chdir('/some/dir') do %w{sub1 sub2}.each do |subdir| Dir.chdir(subdir) do # In /some/dir/sub[12] end end end
  • 58. Why blocks? ● Same construct for iteration and closures o A logical new lexical scope
  • 59. Why blocks? ● Same construct for iteration and closures o A logical new lexical scope ● Automatic cleanup o (Not necessarily guaranteed in all cases)
  • 60. Why blocks? ● Same construct for iteration and closures o A logical new lexical scope ● Automatic cleanup o (Not necessarily guaranteed in all cases) ● Clean delination of concerns o Relevant code is in one place
  • 61. Why blocks? (as a sysadmin) Because my job isn't where I can faff about until everything is perfectly just-so and my HammerFactoryFactoryFactory has 103% test coverage in Jenkins. I need to be done yesterday and I need to be sure it works by looking at it.
  • 62. Why blocks? (as a devops) Because it's the easiest way to convert a sysadmin into a developer.
  • 63. Tooling ● Vagrant ● Chef / Puppet ● Logstash ● fpm ● Cucumber ● AWS / Rackspace clients ● Rake / Capistrano
  • 64. Tooling (why do I care it's in Ruby?) Three reasons: 1. Plugins
  • 65. Tooling (why do I care it's in Ruby?) Three reasons: 1. Plugins 2. Plugins
  • 66. Tooling (why do I care it's in Ruby?) Three reasons: 1. Plugins 2. Plugins 3. Plugins
  • 67. Tooling (why do I care it's in Ruby?) Three reasons: 1. Plugins 2. Plugins 3. Plugins 4. Some of them require Ruby (Vagrant)