SlideShare a Scribd company logo
How To Be Weird
The Idiomatic Ruby Ways
https://www.youtube.com/watch?v=5MgBikgcWnY
It takes 20 hours of deliberate practice to be reasonably good at something, anything.
The Algorithm of
Rapid Ruby Acquisition
1. Learn enough to self-correct
2. Practice at least 20 hours
Practice at least 20 hours
codeeval.com
The second step is easy. There are numerous online resources for you to practice. One example of them is codeeval.com
Learn enough to self-correct
listen to this talk
The first step, however, is easier. You only have to listen to this talk. 

That’s recursion right there
Learn enough to self-correct
• Assignment
• Naming
• Control Expressions
• Methods
Assignment
Weirdness #1
Parallel Assignment
a = 'foo'
b = 'bar'
c = 'baz'
d = 'foobar'
Instead of doing this:

You can do:
a, b, c, d = 'foo', 'bar', 'baz', 'foobar'
this:

but just because you can doesn’t mean you should: readability is bad
a = 'foo'
b = 'bar'
a, b = b, a
good 1: swap variable assignment
def multi_return
[1, 2]
end
a, b = multi_return
good 2: multiple return values from a method
Naming
Weirdness #2
Method names can end with ?s
they return a boolean
examples
• String#empty?
• String#include?
• String#start_with?
• String#end_with?
• Array#empty?
• Array#include?
• Range#include?
• Object#respond_to?
• Object#nil?
• Object#is_a?
Obejct#is_a? synonymous kind_of?/instance_of?
Control Expressions
Weirdness #3
everything has a Boolean value
Every expression in Ruby evaluates to an object, and every object has a Boolean value of either true or false? true and false are objects
if 0
puts “0 is true”
else
puts “0 is false”
end
what is the output?
Only two objects has a false
value, nil and false itself
Every expression in Ruby evaluates to an object, and every object has a Boolean value of either true or false? true and false are objects
Weirdness #4
if statements return a value
if(condition1) {
result = x;
} else if(condition2) {
result = y;
} else {
result = z;
}
In Java
if condition1:
result = x
elif condition2:
result = y
else:
result = z
In Python
In Ruby
if statements return a value
The evaluation of the last
executed statement.
result =
if condition1
x
elsif condition2
y
else:
z
end
In Ruby
Exercise
what is the value of result?
result =
if true
puts “hello”
“hello”
else
“world”
end
“hello”
what is the value of result?
result =
if false
“hello”
else
“world”
puts “world”
end
nil
The evaluation of the last
executed statement.
Weirdness #5
the unless keyword
if !condition
do_something
end
negative condition unless
unless condition
do_something
end
Observation:
Ruby cares about readability
so much so that
(Weirdness #6)
Ruby has modifier if/unless
so this is not good enough
if !condition
do_something
end
negative condition unless
unless condition
do_something
end
so this is not good enough
do_something if !condition
negative condition unless
do_something unless condition
this is

Question: which one is better? Choose unless over if with negative condition
Weirdness #7
iterators
iterators help you iterate
how to do an infinite loop?
iterators help you iterate
while(true) {
doSomething();
if(condition1) {
break;
}
if(condition2) {
continue;
}
}
In Java
while True:
do_something()
if condition1:
break
if condition2:
continue
In Python
loop do
do_something
break if condition1
next if condition2
end
In Ruby
loop is a method, not a keyword
loop do
do_something
break if condition1
next if condition2
end
Kernel#loop repeatedly executes the block.

We call this kind of ruby methods iterators. They take a block, and execute the block repeatedly.
how to do something a certain
number of times?
iterators help you iterate
for(int i = 0; i < 10; i++) {
doSomething();
}
In Java
for i in range(10):
do_something()
In Python
10.times do
something
end
In Ruby
10.times do |i|
puts i
end
5.upto(10) do |i|
puts i
end
10.downto(1) do |i|
puts i
end
Weirdness #8
iterators - Array and String
how to iterate an array?
iterators help you iterate
for(int i : a) {
doSomething(i);
}
In Java
for i in a:
do_something(i)
In Python
a.each do |i|
do_something(i)
end
In Ruby
demo

also demo each_with_index
how to iterate a String?
iterators help you iterate
In Java
String s = “hello";
for(int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i));
}
In Python
s = “hello"
for c in s:
print c
In Ruby
s = “hello"
s.each_char do |char|
puts char
end
demo

also demo: how to print index of each char
Methods
Weirdness #9
method calls
parenthesis are optional when
calling methods
puts “hello” puts(“hello”)
Omit parentheses when:

Omit parentheses around parameters for methods that are part of an internal DSL (e.g. Rake, Rails, RSpec), 

methods that have "keyword" status in Ruby (e.g. attr_reader, puts) and attribute access methods. Use parentheses around the arguments of all other method
invocations.
omit parentheses when:
• there are no arguments
• the method is part of internal DSL
• the method has “keyword status”
attr_reader, puts, print

Omit parentheses when:

Omit parentheses around parameters for methods that are part of an internal DSL (e.g. Rake, Rails, RSpec), 

methods that have "keyword" status in Ruby (e.g. attr_reader, puts) and attribute access methods. Use parentheses around the arguments of all other method
invocations.
Weirdness #10
methods can take blocks
a lot of ruby methods take blocks
add 1 to every element in an array
In Java
int[] a = {1, 2, 3};
for(int i = 0; i < a.length; i++) {
a[i]++;
}
In Python
a = [1, 2, 3]
for i in range(len(a)):
a[i] += 1
In Ruby
a = [1, 2, 3]
a = a.map { |i| i + 1 }
Demo

Array#collect = Array#map

Invokes the given block once for each element of self.

change every int to string
get the sum of all elements in an array
In Java
int[] a = {1, 2, 3};
int sum = 0;
for(int i = 0; i < a.length; i++) {
sum += a[i];
}
In Python
a = [1, 2, 3]
sum = sum(a)
In Ruby
a = [1, 2, 3]
sum = a.inject { |a, e| a + e }
Demo

Enumerable#reduce = Enumerable#inject

shortcut: inject(:+)
Rails flavoured Minitest cases
class SomeControllerTest < ActionController::TestCase
test “should do stuff” do
assert_equal 2, 1 + 1
end
def test_should_do_stuff
assert_equal 2, 1 + 1
end
end
Weirdness #11
implicit return in methods
a lot of ruby methods take blocks
the evaluated object of the last
executed expression in a method
is implicitly returned to the caller
Every expression in Ruby evaluates to an object,
def greet
puts “hello”
“hello”
end
what is returned?
def greet
“hello”
puts “hello”
end
def greet
return “hello”
puts “hello”
end
References:
The Well-Grounded Rubyist
by David A. Black
Ruby Style Guide
https://github.com/bbatsov/ruby-style-guide
Thanks
@ZhifuGe
codingdojo.io

More Related Content

What's hot

Ruby Basics
Ruby BasicsRuby Basics
Ruby Basics
SHC
 
Ruby.new @ VilniusRB
Ruby.new @ VilniusRBRuby.new @ VilniusRB
Ruby.new @ VilniusRB
Vidmantas Kabošis
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
it-people
 
Polymorphism in c++(ppt)
Polymorphism in c++(ppt)Polymorphism in c++(ppt)
Polymorphism in c++(ppt)
Sanjit Shaw
 
Guava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUGGuava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUG
Thierry Leriche-Dessirier
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospectivechenge2k
 
Ruby introduction part1
Ruby introduction part1Ruby introduction part1
Ruby introduction part1Brady Cheng
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java Developers
Kostas Saidis
 
The ruby programming language
The ruby programming languageThe ruby programming language
The ruby programming language
praveen0202
 
Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
Gonçalo Silva
 
Ruby
RubyRuby
From 0 to mine sweeper in pyside
From 0 to mine sweeper in pysideFrom 0 to mine sweeper in pyside
From 0 to mine sweeper in pyside
Dinesh Manajipet
 
Asakusa ruby
Asakusa rubyAsakusa ruby
Asakusa ruby
pragdave
 
Paulo Freire Pedagpogia 1
Paulo Freire Pedagpogia 1Paulo Freire Pedagpogia 1
Paulo Freire Pedagpogia 1Alejandra Perez
 
Washington Practitioners Significant Changes To Rpc 1.5
Washington Practitioners Significant Changes To Rpc 1.5Washington Practitioners Significant Changes To Rpc 1.5
Washington Practitioners Significant Changes To Rpc 1.5Oregon Law Practice Management
 
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi PetangMajlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
Imsamad
 
Agapornis Mansos - www.criadourosudica.blogspot.com
Agapornis Mansos - www.criadourosudica.blogspot.comAgapornis Mansos - www.criadourosudica.blogspot.com
Agapornis Mansos - www.criadourosudica.blogspot.com
Antonio Silva
 
MMBJ Shanzhai Culture
MMBJ Shanzhai CultureMMBJ Shanzhai Culture
MMBJ Shanzhai Culture
MobileMonday Beijing
 
Jerry Shea Resume And Addendum 5 2 09
Jerry  Shea Resume And Addendum 5 2 09Jerry  Shea Resume And Addendum 5 2 09
Jerry Shea Resume And Addendum 5 2 09gshea11
 

What's hot (20)

Ruby Basics
Ruby BasicsRuby Basics
Ruby Basics
 
Ruby.new @ VilniusRB
Ruby.new @ VilniusRBRuby.new @ VilniusRB
Ruby.new @ VilniusRB
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
Polymorphism in c++(ppt)
Polymorphism in c++(ppt)Polymorphism in c++(ppt)
Polymorphism in c++(ppt)
 
Guava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUGGuava et Lombok au Lyon JUG
Guava et Lombok au Lyon JUG
 
Haskell retrospective
Haskell retrospectiveHaskell retrospective
Haskell retrospective
 
Ruby introduction part1
Ruby introduction part1Ruby introduction part1
Ruby introduction part1
 
An Introduction to Groovy for Java Developers
An Introduction to Groovy for Java DevelopersAn Introduction to Groovy for Java Developers
An Introduction to Groovy for Java Developers
 
The ruby programming language
The ruby programming languageThe ruby programming language
The ruby programming language
 
Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
 
Ruby
RubyRuby
Ruby
 
From 0 to mine sweeper in pyside
From 0 to mine sweeper in pysideFrom 0 to mine sweeper in pyside
From 0 to mine sweeper in pyside
 
Asakusa ruby
Asakusa rubyAsakusa ruby
Asakusa ruby
 
Paulo Freire Pedagpogia 1
Paulo Freire Pedagpogia 1Paulo Freire Pedagpogia 1
Paulo Freire Pedagpogia 1
 
Washington Practitioners Significant Changes To Rpc 1.5
Washington Practitioners Significant Changes To Rpc 1.5Washington Practitioners Significant Changes To Rpc 1.5
Washington Practitioners Significant Changes To Rpc 1.5
 
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi PetangMajlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
Majlis Persaraan Pn.Hjh.Normah bersama guru-guru Sesi Petang
 
LoteríA Correcta
LoteríA CorrectaLoteríA Correcta
LoteríA Correcta
 
Agapornis Mansos - www.criadourosudica.blogspot.com
Agapornis Mansos - www.criadourosudica.blogspot.comAgapornis Mansos - www.criadourosudica.blogspot.com
Agapornis Mansos - www.criadourosudica.blogspot.com
 
MMBJ Shanzhai Culture
MMBJ Shanzhai CultureMMBJ Shanzhai Culture
MMBJ Shanzhai Culture
 
Jerry Shea Resume And Addendum 5 2 09
Jerry  Shea Resume And Addendum 5 2 09Jerry  Shea Resume And Addendum 5 2 09
Jerry Shea Resume And Addendum 5 2 09
 

Viewers also liked

TDD for Coding Practices - by Zhifu Ge
TDD for Coding Practices - by Zhifu GeTDD for Coding Practices - by Zhifu Ge
TDD for Coding Practices - by Zhifu Ge
ottawaruby
 
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
ottawaruby
 
Project Night Meta - Ruby Tuesday - Pitch
Project Night Meta - Ruby Tuesday - PitchProject Night Meta - Ruby Tuesday - Pitch
Project Night Meta - Ruby Tuesday - Pitch
ottawaruby
 
Hackfest mockups
Hackfest mockupsHackfest mockups
Hackfest mockups
ottawaruby
 
Curso formación humana
Curso formación humanaCurso formación humana
Curso formación humana
Jorge Alberto
 
Marissa Barnes Visual Communications Portfolio
Marissa Barnes Visual Communications PortfolioMarissa Barnes Visual Communications Portfolio
Marissa Barnes Visual Communications Portfolio
barne9
 
Sample traveler shut-off valve (sov travler)
Sample traveler  shut-off valve (sov travler)Sample traveler  shut-off valve (sov travler)
Sample traveler shut-off valve (sov travler)
Tom Jacyszyn
 
Resume - Shaikh Rabbani_2016
Resume - Shaikh Rabbani_2016Resume - Shaikh Rabbani_2016
Resume - Shaikh Rabbani_2016shaikh Rabbani
 
Saas aroundio-iimb
Saas aroundio-iimbSaas aroundio-iimb
Saas aroundio-iimb
Kesava Reddy
 
السيرة الذاتية - لغة عربية
السيرة الذاتية - لغة عربيةالسيرة الذاتية - لغة عربية
السيرة الذاتية - لغة عربيةTarik Dandan
 
Melastomataceae
MelastomataceaeMelastomataceae
Melastomataceae
Joaopaulo Goes
 
Flora y fauna de quintana roo
Flora y fauna de quintana rooFlora y fauna de quintana roo
Flora y fauna de quintana roo
Dafne Gomez
 
7ps
7ps7ps
Customer acquisition for SaaS
Customer acquisition for SaaSCustomer acquisition for SaaS
Customer acquisition for SaaS
Andrew Roberts
 
Virus informáticos y sus tipos paola negrete
Virus informáticos y sus tipos paola negreteVirus informáticos y sus tipos paola negrete
Virus informáticos y sus tipos paola negrete
paola negrete
 
Brickwork Bonding (basics)
Brickwork Bonding (basics)Brickwork Bonding (basics)
Brickwork Bonding (basics)
Steve Jarvis
 
Combined portfolio
Combined portfolioCombined portfolio
Combined portfolio
Michael Judd
 
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
Zachary Davison
 
Presentación mariana colina
Presentación mariana colinaPresentación mariana colina
Presentación mariana colina
albanyta
 

Viewers also liked (20)

TDD for Coding Practices - by Zhifu Ge
TDD for Coding Practices - by Zhifu GeTDD for Coding Practices - by Zhifu Ge
TDD for Coding Practices - by Zhifu Ge
 
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
Ruby Under The Hood - By Craig Lehmann and Robert Young - Ottawa Ruby Novembe...
 
Project Night Meta - Ruby Tuesday - Pitch
Project Night Meta - Ruby Tuesday - PitchProject Night Meta - Ruby Tuesday - Pitch
Project Night Meta - Ruby Tuesday - Pitch
 
Hackfest mockups
Hackfest mockupsHackfest mockups
Hackfest mockups
 
Curso formación humana
Curso formación humanaCurso formación humana
Curso formación humana
 
Marissa Barnes Visual Communications Portfolio
Marissa Barnes Visual Communications PortfolioMarissa Barnes Visual Communications Portfolio
Marissa Barnes Visual Communications Portfolio
 
Sample traveler shut-off valve (sov travler)
Sample traveler  shut-off valve (sov travler)Sample traveler  shut-off valve (sov travler)
Sample traveler shut-off valve (sov travler)
 
Resume - Shaikh Rabbani_2016
Resume - Shaikh Rabbani_2016Resume - Shaikh Rabbani_2016
Resume - Shaikh Rabbani_2016
 
Saas aroundio-iimb
Saas aroundio-iimbSaas aroundio-iimb
Saas aroundio-iimb
 
Art Evaluation
Art EvaluationArt Evaluation
Art Evaluation
 
السيرة الذاتية - لغة عربية
السيرة الذاتية - لغة عربيةالسيرة الذاتية - لغة عربية
السيرة الذاتية - لغة عربية
 
Melastomataceae
MelastomataceaeMelastomataceae
Melastomataceae
 
Flora y fauna de quintana roo
Flora y fauna de quintana rooFlora y fauna de quintana roo
Flora y fauna de quintana roo
 
7ps
7ps7ps
7ps
 
Customer acquisition for SaaS
Customer acquisition for SaaSCustomer acquisition for SaaS
Customer acquisition for SaaS
 
Virus informáticos y sus tipos paola negrete
Virus informáticos y sus tipos paola negreteVirus informáticos y sus tipos paola negrete
Virus informáticos y sus tipos paola negrete
 
Brickwork Bonding (basics)
Brickwork Bonding (basics)Brickwork Bonding (basics)
Brickwork Bonding (basics)
 
Combined portfolio
Combined portfolioCombined portfolio
Combined portfolio
 
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
1997 Dodge Ram 1500 5.9L V8 Airflow Analysis
 
Presentación mariana colina
Presentación mariana colinaPresentación mariana colina
Presentación mariana colina
 

Similar to Zhifu Ge - How To Be Weird In Ruby - With Notes

Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
Sarah Allen
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - BasicEddie Kao
 
Ruby Gotchas
Ruby GotchasRuby Gotchas
Ruby Gotchas
Dave Aronson
 
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# Developers
Cory Foy
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
Tushar Pal
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
Ben Scheirman
 
Ruby Gotchas
Ruby GotchasRuby Gotchas
Ruby Gotchas
Dave Aronson
 
Test First Teaching and the path to TDD
Test First Teaching and the path to TDDTest First Teaching and the path to TDD
Test First Teaching and the path to TDD
Sarah Allen
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developers
Max Titov
 
Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)
Benjamin Bock
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9sagaroceanic11
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9sagaroceanic11
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Wen-Tien Chang
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
Wes Oldenbeuving
 
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
Konrad Malawski
 
Ruby on rails presentation
Ruby on rails presentationRuby on rails presentation
Ruby on rails presentation
Synbioz
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Rormyuser
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
Aditya Tiwari
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)
bryanbibat
 

Similar to Zhifu Ge - How To Be Weird In Ruby - With Notes (20)

Test First Teaching
Test First TeachingTest First Teaching
Test First Teaching
 
Let's Learn Ruby - Basic
Let's Learn Ruby - BasicLet's Learn Ruby - Basic
Let's Learn Ruby - Basic
 
Ruby Gotchas
Ruby GotchasRuby Gotchas
Ruby Gotchas
 
The Joy Of Ruby
The Joy Of RubyThe Joy Of Ruby
The Joy Of Ruby
 
Ruby for C# Developers
Ruby for C# DevelopersRuby for C# Developers
Ruby for C# Developers
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Reasons To Love Ruby
Reasons To Love RubyReasons To Love Ruby
Reasons To Love Ruby
 
Ruby Gotchas
Ruby GotchasRuby Gotchas
Ruby Gotchas
 
Test First Teaching and the path to TDD
Test First Teaching and the path to TDDTest First Teaching and the path to TDD
Test First Teaching and the path to TDD
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developers
 
Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)Ruby Topic Maps Tutorial (2007-10-10)
Ruby Topic Maps Tutorial (2007-10-10)
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
 
Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9Rubyforjavaprogrammers 1210167973516759-9
Rubyforjavaprogrammers 1210167973516759-9
 
Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介Ruby 程式語言綜覽簡介
Ruby 程式語言綜覽簡介
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
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
 
Ruby on rails presentation
Ruby on rails presentationRuby on rails presentation
Ruby on rails presentation
 
Intro To Ror
Intro To RorIntro To Ror
Intro To Ror
 
Ruby basics
Ruby basicsRuby basics
Ruby basics
 
Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)Ruby and Rails by Example (GeekCamp edition)
Ruby and Rails by Example (GeekCamp edition)
 

More from ottawaruby

Working With Legacy Rails Apps - Ahmed Omran
Working With Legacy Rails Apps - Ahmed OmranWorking With Legacy Rails Apps - Ahmed Omran
Working With Legacy Rails Apps - Ahmed Omran
ottawaruby
 
Canarie and dair in 10 minutes sept 2014 f
Canarie and dair in 10 minutes sept 2014 fCanarie and dair in 10 minutes sept 2014 f
Canarie and dair in 10 minutes sept 2014 f
ottawaruby
 
Ruby Tuesday - October 23rd, 2012
Ruby Tuesday - October 23rd, 2012Ruby Tuesday - October 23rd, 2012
Ruby Tuesday - October 23rd, 2012ottawaruby
 
Ruby Tuesday - November 27th, 2012
Ruby Tuesday - November 27th, 2012Ruby Tuesday - November 27th, 2012
Ruby Tuesday - November 27th, 2012
ottawaruby
 
Ruby Tuesday - September 25th, 2012
Ruby Tuesday - September 25th, 2012Ruby Tuesday - September 25th, 2012
Ruby Tuesday - September 25th, 2012
ottawaruby
 
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
ottawaruby
 
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting TalkJuly 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
ottawaruby
 
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
ottawaruby
 
Ottawa Ruby - Ruby Tuesday - June 26, 2012
Ottawa Ruby - Ruby Tuesday - June 26, 2012Ottawa Ruby - Ruby Tuesday - June 26, 2012
Ottawa Ruby - Ruby Tuesday - June 26, 2012
ottawaruby
 

More from ottawaruby (9)

Working With Legacy Rails Apps - Ahmed Omran
Working With Legacy Rails Apps - Ahmed OmranWorking With Legacy Rails Apps - Ahmed Omran
Working With Legacy Rails Apps - Ahmed Omran
 
Canarie and dair in 10 minutes sept 2014 f
Canarie and dair in 10 minutes sept 2014 fCanarie and dair in 10 minutes sept 2014 f
Canarie and dair in 10 minutes sept 2014 f
 
Ruby Tuesday - October 23rd, 2012
Ruby Tuesday - October 23rd, 2012Ruby Tuesday - October 23rd, 2012
Ruby Tuesday - October 23rd, 2012
 
Ruby Tuesday - November 27th, 2012
Ruby Tuesday - November 27th, 2012Ruby Tuesday - November 27th, 2012
Ruby Tuesday - November 27th, 2012
 
Ruby Tuesday - September 25th, 2012
Ruby Tuesday - September 25th, 2012Ruby Tuesday - September 25th, 2012
Ruby Tuesday - September 25th, 2012
 
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
Ottawa Ruby - Ruby Tuesday Meetup - August 28, 2012
 
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting TalkJuly 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
July 2012 Ruby Tuesday - Lana Lodge - Refactoring Lighting Talk
 
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
Ottawa Ruby - Ruby Tuesday Meetup - July 24, 2012
 
Ottawa Ruby - Ruby Tuesday - June 26, 2012
Ottawa Ruby - Ruby Tuesday - June 26, 2012Ottawa Ruby - Ruby Tuesday - June 26, 2012
Ottawa Ruby - Ruby Tuesday - June 26, 2012
 

Recently uploaded

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
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
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
RinaMondal9
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
Guy Korland
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
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
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
ThomasParaiso2
 

Recently uploaded (20)

Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4UiPath Test Automation using UiPath Test Suite series, part 4
UiPath Test Automation using UiPath Test Suite series, part 4
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
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
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Free Complete Python - A step towards Data Science
Free Complete Python - A step towards Data ScienceFree Complete Python - A step towards Data Science
Free Complete Python - A step towards Data Science
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
GraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge GraphGraphRAG is All You need? LLM & Knowledge Graph
GraphRAG is All You need? LLM & Knowledge Graph
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
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...
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...GridMate - End to end testing is a critical piece to ensure quality and avoid...
GridMate - End to end testing is a critical piece to ensure quality and avoid...
 

Zhifu Ge - How To Be Weird In Ruby - With Notes