SlideShare a Scribd company logo
1 of 53
Download to read offline
RUBY SEEN BY A C#
DEVELOPER
Emanuele DelBono - @emadb
I AM
I am a software
engineer and web
architect in
CodicePlastico. I write
web apps in C#,
javascript e ruby.
IT ISN’T A RUBY TUTORIAL
!

It’s a bunch of stuff that made me say
WOW!
C# (2002)
!

• Compiled, strongly typed
• OOP (multiparadigm)
• Delegate/lambda/enumerators
• ECMA standard
• Mono on Linux and MacOS
• “A better java”
RUBY (1995)
• Dynamic
• Open Source
• Interpreted
• Multi inheritance through Mixin
• Fully OOP
HELLO WORLD
using System;!


public class Program

{!
public void Main()

{!
Console.WriteLine("Hello World");

}!
}!
HELLO WORLD

p 'hello world'
RAILS
class Employee < ActiveRecord::Base!
belongs_to :company!
attr_accessible :name, :surname, :role!
has_many :activities!
before_save :update_role!
scope :managers, -> { where(role: 'manager') }!
!
def update_role!
# ...!
end!
def foo!
# ...!
end !
end
ALL CODE IS EXECUTED
class MyClass < (rand < 0.5 ? Array : Hash)!
end!
WOW!
REAL OOP
class is an instance of class
class Cat
end
cat = Cat.new
puts cat
#<Cat:0x007fa2bc13d5d8>
puts cat.class
Cat
puts cat.class.class
Class
puts cat.class.class.class
!

Class
Klazz = Class.new

=> Klazz
puts Klazz

=> Klazz
puts Klazz.class
Class
k = Klazz.new
=> #<Klazz:0x007f8fc121ab58>
Foo = Class.new do
def bar
"I'm bar...an instance method of foo"
end
end
!

a = Foo.new
p a.bar
=> "hello"
WOW!
SINGLETON METHODS

We can add methods to a single instance
class Cat
def meow; ’meow’; end
end
cat = Cat.new
new_cat = Cat.new
def cat.argh
'argh'
end
p cat.meow
=> "meow"
p cat.argh
=> "argh"
p new_cat.argh
NoMethodError: undefined method `argh' for
#<Cat:0x007fda63085878>
?

EIGENCLASS
THE OBJECT MODEL
• Every object, classes included, has its
own “real class,” be it a regular class
or an eigenclass
• The superclass of the eigenclass is the
object class
• The superclass of the eigenclass of a
class is the eigenclass of the class’s
superclass
THE OBJECT MODEL
class C; end
class D < C; end
obj = D.new

#Object

C

#C

D
obj

Object

#D

#obj

Metaprogramming Ruby - Pag. 125
WOW!
monkey patching
“a way to extend or modify the runtime
code of dynamic languages [...] without
altering the original source code.”
class String
def foo
to_s + ' fooed'
end
end
s = "hello"
puts s.foo
=> "hello fooed"
REMOVE METHODS
class String
remove_method :to_s
end
WOW!
duck typing
When I see a bird that walks like a duck
and swims like a duck and quacks like a
duck, I call that bird a duck
http://en.wikipedia.org/wiki/Duck_typing
class Type1
def foo; "I'm type1"; end
end
!

class Type2
def foo; "I'm type2"; end
end
def get_class
rand < 0.5 ? Type1 : Type2
end
!t

= get_class.new
p t.foo
=> "I'm type2" #or I'm type1
METHOD INTERCEPTION

Using alias and monkey patching we can
run through the execution
class
def
p
end
end
cat =

Cat
meow
"meow"

Cat.new

Cat.class_eval do
alias :meow_new :meow
def meow
p "i'm about to meow"
meow_new
p "did you hear me?"
end
end
=> "i'm about to meow"
=> "meow"
cat.meow
=> "did you hear me?"
METAPROGRAMMING
Metaprogramming is the writing of
computer programs that write or
manipulate other programs (or
themselves) as their data […]

http://en.wikipedia.org/wiki/Metaprogramming
METHOD MISSING
class Cat
def method_missing(method, *args)
#do something without failing
end
end
class Settings
def initialize(options)
options.each do |key, value|
self.instance_variable_set "@#{key}", value
self.class.send :define_method, key,

proc{self.instance_variable_get("@#{key}")}
self.class.send :define_method, "#{key}=",

proc{|v| self.instance_variable_set("@#{key}", v)}
end
end
end
c = Settings.new YAML.load_file("config.yaml")
!

p c.title # => "metaprogramming ruby"
p c.author # => "Paolo Perrotta"
p c.pub_year # => "2010"
!

c.title = 'metaprogramming ruby 2.00’
p c.title # => "metaprogramming ruby 2.00”
HOOKS
Since all code is executed. You can
intercept some “facts” about it.
inherited, append_features, included,
extend_object, extended, initialize_copy,
const_missing
WOW!
BUT THERE’S MORE
> [1, 2, 3] * 3 == [1, 2, 3, 1, 2, 3, 1, 2, 3]
> 1_000_000
> a = a || []
> a = [1,2,3]; a[-1]
> [1,2,3].shuffle
> (0..9).each { ... }
> 3.times {...}
> def name=(value); ...
PHILOSOPHY
I hope to see Ruby help
every programmer in the
world to be productive, and
to enjoy programming, and
to be happy. That is the
primary purpose of Ruby
language.
Yukihiro
Matsumoto
o = Object.new!
o.methods.count
=> 54

• ActiveRecord::Base => 367
• String => 161
• Fixnum => 128
SAME METRICS?
DIFFERENT WORLD?
RUBY PRO
• Simplicity
• REPL (irb, rails c, heroku run console)
• No ceremony
• One file app
• Community and frameworks
• Expressiveness (DSL)
CONS
• Freedom bring responsibility
• Performance
• No tools for refactoring
• Tests are mandatory (mmh…)
DOES IT WORTH?
LINGUISTIC RELATIVITY
“The principle of linguistic relativity holds
that the structure of a language affects
the ways in which its respective speakers
conceptualize their world.”
Sapir–Whorf hypothesis

http://en.wikipedia.org/wiki/Linguistic_relativity
THE PRAGMATIC
PROGRAMMER
“Learn at least one new language every
year. Different languages solve the same
problems in different ways. By learning
several different approaches, you can
help broaden your thinking and avoid
getting stuck in a rut.”
The Pragmatic Programmer
MORE LANGUAGES 

==

BETTER PROGRAMMER
Ruby seen by a C# developer

More Related Content

What's hot

Automated Testing
Automated TestingAutomated Testing
Automated TestingSpeed FC
 
When To Use Ruby On Rails
When To Use Ruby On RailsWhen To Use Ruby On Rails
When To Use Ruby On Railsdosire
 
4Developers: Michał Papis- Publikowanie gemów
4Developers: Michał Papis- Publikowanie gemów4Developers: Michał Papis- Publikowanie gemów
4Developers: Michał Papis- Publikowanie gemówPROIDEA
 
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
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Yasuko Ohba
 
Ruby Basics
Ruby BasicsRuby Basics
Ruby BasicsSHC
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortegaarman o
 
Ruby Rails Overview
Ruby Rails OverviewRuby Rails Overview
Ruby Rails OverviewNetguru
 
Learn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a RescueLearn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a RescueJames Thompson
 

What's hot (10)

Automated Testing
Automated TestingAutomated Testing
Automated Testing
 
Ruby on Rails Presentation
Ruby on Rails PresentationRuby on Rails Presentation
Ruby on Rails Presentation
 
When To Use Ruby On Rails
When To Use Ruby On RailsWhen To Use Ruby On Rails
When To Use Ruby On Rails
 
4Developers: Michał Papis- Publikowanie gemów
4Developers: Michał Papis- Publikowanie gemów4Developers: Michał Papis- Publikowanie gemów
4Developers: Michał Papis- Publikowanie gemów
 
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)
 
Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子Ruby on Rails 中級者を目指して - 大場寧子
Ruby on Rails 中級者を目指して - 大場寧子
 
Ruby Basics
Ruby BasicsRuby Basics
Ruby Basics
 
Introduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman OrtegaIntroduction to Rails - presented by Arman Ortega
Introduction to Rails - presented by Arman Ortega
 
Ruby Rails Overview
Ruby Rails OverviewRuby Rails Overview
Ruby Rails Overview
 
Learn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a RescueLearn Ruby 2011 - Session 5 - Looking for a Rescue
Learn Ruby 2011 - Session 5 - Looking for a Rescue
 

Viewers also liked

Sociolinguistics linguistic relativity
Sociolinguistics   linguistic relativitySociolinguistics   linguistic relativity
Sociolinguistics linguistic relativityRichard Pinner
 
Ruby is an Acceptable Lisp
Ruby is an Acceptable LispRuby is an Acceptable Lisp
Ruby is an Acceptable LispAstrails
 
Monkey patching in Ruby
Monkey patching in RubyMonkey patching in Ruby
Monkey patching in RubyAnton Sakovich
 
Sientific Method 5&6 The steps of the scientific conduct
Sientific Method 5&6 The steps of the scientific conductSientific Method 5&6 The steps of the scientific conduct
Sientific Method 5&6 The steps of the scientific conductBarbara Konat
 
Panorama językoznawstwa
Panorama językoznawstwaPanorama językoznawstwa
Panorama językoznawstwaBarbara Konat
 
Benjamin lee whorf exposición
Benjamin lee whorf exposiciónBenjamin lee whorf exposición
Benjamin lee whorf exposiciónRoux-i Zt
 
Technologia w komunikacji społecznej
Technologia w komunikacji społecznejTechnologia w komunikacji społecznej
Technologia w komunikacji społecznejKarolina Majewska
 
Language & thought s w hypothesis
Language & thought s w hypothesisLanguage & thought s w hypothesis
Language & thought s w hypothesisBrahim Guevara
 
SEMANTYKA - JO - KOGNI - 2014
SEMANTYKA - JO - KOGNI - 2014SEMANTYKA - JO - KOGNI - 2014
SEMANTYKA - JO - KOGNI - 2014Konrad Juszczyk
 
Linguistics relativity
Linguistics relativityLinguistics relativity
Linguistics relativityAsty Kim
 
Language culture & thought
Language culture & thoughtLanguage culture & thought
Language culture & thoughtClive McGoun
 
Language, Thought and Culture Slideshare
Language, Thought and Culture SlideshareLanguage, Thought and Culture Slideshare
Language, Thought and Culture SlideshareCorelle Gwyn Catane
 
Sapir whorf hypothesis
Sapir whorf hypothesis Sapir whorf hypothesis
Sapir whorf hypothesis Danish Ashraf
 
Sapir-Whorf Hypothesis
Sapir-Whorf HypothesisSapir-Whorf Hypothesis
Sapir-Whorf HypothesisJessie Varquez
 
Introduction to programming principles languages
Introduction to programming principles languagesIntroduction to programming principles languages
Introduction to programming principles languagesFrankie Jones
 

Viewers also liked (20)

Sociolinguistics linguistic relativity
Sociolinguistics   linguistic relativitySociolinguistics   linguistic relativity
Sociolinguistics linguistic relativity
 
Ruby is an Acceptable Lisp
Ruby is an Acceptable LispRuby is an Acceptable Lisp
Ruby is an Acceptable Lisp
 
Monkey patching in Ruby
Monkey patching in RubyMonkey patching in Ruby
Monkey patching in Ruby
 
Test driving an MVVM App
Test driving an MVVM AppTest driving an MVVM App
Test driving an MVVM App
 
Sientific Method 5&6 The steps of the scientific conduct
Sientific Method 5&6 The steps of the scientific conductSientific Method 5&6 The steps of the scientific conduct
Sientific Method 5&6 The steps of the scientific conduct
 
Panorama językoznawstwa
Panorama językoznawstwaPanorama językoznawstwa
Panorama językoznawstwa
 
Relatywizm językowy
Relatywizm językowyRelatywizm językowy
Relatywizm językowy
 
Benjamin lee whorf exposición
Benjamin lee whorf exposiciónBenjamin lee whorf exposición
Benjamin lee whorf exposición
 
Technologia w komunikacji społecznej
Technologia w komunikacji społecznejTechnologia w komunikacji społecznej
Technologia w komunikacji społecznej
 
Language & thought s w hypothesis
Language & thought s w hypothesisLanguage & thought s w hypothesis
Language & thought s w hypothesis
 
SEMANTYKA - JO - KOGNI - 2014
SEMANTYKA - JO - KOGNI - 2014SEMANTYKA - JO - KOGNI - 2014
SEMANTYKA - JO - KOGNI - 2014
 
Linguistics relativity
Linguistics relativityLinguistics relativity
Linguistics relativity
 
Language culture & thought
Language culture & thoughtLanguage culture & thought
Language culture & thought
 
Sapir and Whorf
Sapir and WhorfSapir and Whorf
Sapir and Whorf
 
Sapir whorf
Sapir whorfSapir whorf
Sapir whorf
 
Linguistic relativity
Linguistic relativityLinguistic relativity
Linguistic relativity
 
Language, Thought and Culture Slideshare
Language, Thought and Culture SlideshareLanguage, Thought and Culture Slideshare
Language, Thought and Culture Slideshare
 
Sapir whorf hypothesis
Sapir whorf hypothesis Sapir whorf hypothesis
Sapir whorf hypothesis
 
Sapir-Whorf Hypothesis
Sapir-Whorf HypothesisSapir-Whorf Hypothesis
Sapir-Whorf Hypothesis
 
Introduction to programming principles languages
Introduction to programming principles languagesIntroduction to programming principles languages
Introduction to programming principles languages
 

Similar to Ruby seen by a C# developer

A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends旻琦 潘
 
TechDays - IronRuby
TechDays - IronRubyTechDays - IronRuby
TechDays - IronRubyBen Hall
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developersMax Titov
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Anton Arhipov
 
Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introductionGonçalo Silva
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming languagePivorak MeetUp
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLBarry Jones
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Railsrstankov
 
Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in StyleBhavin Javia
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0Marcel Bruch
 
Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Bruce Li
 
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scalascalaconfjp
 

Similar to Ruby seen by a C# developer (20)

Why Ruby?
Why Ruby? Why Ruby?
Why Ruby?
 
An introduction to Ruby
An introduction to RubyAn introduction to Ruby
An introduction to Ruby
 
A tour on ruby and friends
A tour on ruby and friendsA tour on ruby and friends
A tour on ruby and friends
 
TechDays - IronRuby
TechDays - IronRubyTechDays - IronRuby
TechDays - IronRuby
 
Ruby for .NET developers
Ruby for .NET developersRuby for .NET developers
Ruby for .NET developers
 
Rails console
Rails consoleRails console
Rails console
 
Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012Mastering Java Bytecode - JAX.de 2012
Mastering Java Bytecode - JAX.de 2012
 
Ruby — An introduction
Ruby — An introductionRuby — An introduction
Ruby — An introduction
 
Origins of Elixir programming language
Origins of Elixir programming languageOrigins of Elixir programming language
Origins of Elixir programming language
 
Ruby
RubyRuby
Ruby
 
Exploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQLExploring Ruby on Rails and PostgreSQL
Exploring Ruby on Rails and PostgreSQL
 
ruby-cocoa
ruby-cocoaruby-cocoa
ruby-cocoa
 
ruby-cocoa
ruby-cocoaruby-cocoa
ruby-cocoa
 
Ruby/Rails
Ruby/RailsRuby/Rails
Ruby/Rails
 
Write your Ruby in Style
Write your Ruby in StyleWrite your Ruby in Style
Write your Ruby in Style
 
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
JUG Münster 2014 - Code Recommenders & Codetrails - Wissenstransfer 2.0
 
Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)Refactoring Workshop (Rails Pacific 2014)
Refactoring Workshop (Rails Pacific 2014)
 
Intro to Elixir talk
Intro to Elixir talkIntro to Elixir talk
Intro to Elixir talk
 
Ruby Kaigi 2008 LT
Ruby Kaigi 2008 LTRuby Kaigi 2008 LT
Ruby Kaigi 2008 LT
 
Solid and Sustainable Development in Scala
Solid and Sustainable Development in ScalaSolid and Sustainable Development in Scala
Solid and Sustainable Development in Scala
 

More from Emanuele DelBono

More from Emanuele DelBono (12)

The simplest thing that could possibly work
The simplest thing that could possibly workThe simplest thing that could possibly work
The simplest thing that could possibly work
 
Una crescita armoniosa
Una crescita armoniosaUna crescita armoniosa
Una crescita armoniosa
 
A sip of Elixir
A sip of ElixirA sip of Elixir
A sip of Elixir
 
React.js in real world apps.
React.js in real world apps. React.js in real world apps.
React.js in real world apps.
 
An introduction to React.js
An introduction to React.jsAn introduction to React.js
An introduction to React.js
 
From ActiveRecord to EventSourcing
From ActiveRecord to EventSourcingFrom ActiveRecord to EventSourcing
From ActiveRecord to EventSourcing
 
Ruby loves DDD
Ruby loves DDDRuby loves DDD
Ruby loves DDD
 
An introduction to knockout.js
An introduction to knockout.jsAn introduction to knockout.js
An introduction to knockout.js
 
Node azure
Node azureNode azure
Node azure
 
Da programmatore a CEO
Da programmatore a CEODa programmatore a CEO
Da programmatore a CEO
 
Sinatra for REST services
Sinatra for REST servicesSinatra for REST services
Sinatra for REST services
 
Mocking
MockingMocking
Mocking
 

Recently uploaded

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Jeffrey Haguewood
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...itnewsafrica
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Karmanjay Verma
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxAna-Maria Mihalceanu
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 

Recently uploaded (20)

So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
Email Marketing Automation for Bonterra Impact Management (fka Social Solutio...
 
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...Abdul Kader Baba- Managing Cybersecurity Risks  and Compliance Requirements i...
Abdul Kader Baba- Managing Cybersecurity Risks and Compliance Requirements i...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 
Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#Microservices, Docker deploy and Microservices source code in C#
Microservices, Docker deploy and Microservices source code in C#
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
A Glance At The Java Performance Toolbox
A Glance At The Java Performance ToolboxA Glance At The Java Performance Toolbox
A Glance At The Java Performance Toolbox
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 

Ruby seen by a C# developer

  • 1. RUBY SEEN BY A C# DEVELOPER Emanuele DelBono - @emadb
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. I AM I am a software engineer and web architect in CodicePlastico. I write web apps in C#, javascript e ruby.
  • 10. IT ISN’T A RUBY TUTORIAL ! It’s a bunch of stuff that made me say WOW!
  • 11. C# (2002) ! • Compiled, strongly typed • OOP (multiparadigm) • Delegate/lambda/enumerators • ECMA standard • Mono on Linux and MacOS • “A better java”
  • 12. RUBY (1995) • Dynamic • Open Source • Interpreted • Multi inheritance through Mixin • Fully OOP
  • 13. HELLO WORLD using System;! 
 public class Program
 {! public void Main()
 {! Console.WriteLine("Hello World");
 }! }!
  • 15.
  • 16. RAILS class Employee < ActiveRecord::Base! belongs_to :company! attr_accessible :name, :surname, :role! has_many :activities! before_save :update_role! scope :managers, -> { where(role: 'manager') }! ! def update_role! # ...! end! def foo! # ...! end ! end
  • 17. ALL CODE IS EXECUTED class MyClass < (rand < 0.5 ? Array : Hash)! end!
  • 18. WOW!
  • 19. REAL OOP class is an instance of class
  • 20. class Cat end cat = Cat.new puts cat #<Cat:0x007fa2bc13d5d8> puts cat.class Cat puts cat.class.class Class puts cat.class.class.class ! Class
  • 21. Klazz = Class.new
 => Klazz puts Klazz
 => Klazz puts Klazz.class Class k = Klazz.new => #<Klazz:0x007f8fc121ab58>
  • 22. Foo = Class.new do def bar "I'm bar...an instance method of foo" end end ! a = Foo.new p a.bar => "hello"
  • 23. WOW!
  • 24. SINGLETON METHODS We can add methods to a single instance
  • 25. class Cat def meow; ’meow’; end end cat = Cat.new new_cat = Cat.new def cat.argh 'argh' end p cat.meow => "meow" p cat.argh => "argh" p new_cat.argh NoMethodError: undefined method `argh' for #<Cat:0x007fda63085878>
  • 27. THE OBJECT MODEL • Every object, classes included, has its own “real class,” be it a regular class or an eigenclass • The superclass of the eigenclass is the object class • The superclass of the eigenclass of a class is the eigenclass of the class’s superclass
  • 28. THE OBJECT MODEL class C; end class D < C; end obj = D.new #Object C #C D obj Object #D #obj Metaprogramming Ruby - Pag. 125
  • 29. WOW!
  • 30. monkey patching “a way to extend or modify the runtime code of dynamic languages [...] without altering the original source code.”
  • 31. class String def foo to_s + ' fooed' end end s = "hello" puts s.foo => "hello fooed"
  • 33. WOW!
  • 34. duck typing When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck http://en.wikipedia.org/wiki/Duck_typing
  • 35. class Type1 def foo; "I'm type1"; end end ! class Type2 def foo; "I'm type2"; end end def get_class rand < 0.5 ? Type1 : Type2 end !t = get_class.new p t.foo => "I'm type2" #or I'm type1
  • 36. METHOD INTERCEPTION Using alias and monkey patching we can run through the execution
  • 37. class def p end end cat = Cat meow "meow" Cat.new Cat.class_eval do alias :meow_new :meow def meow p "i'm about to meow" meow_new p "did you hear me?" end end => "i'm about to meow" => "meow" cat.meow => "did you hear me?"
  • 38. METAPROGRAMMING Metaprogramming is the writing of computer programs that write or manipulate other programs (or themselves) as their data […] http://en.wikipedia.org/wiki/Metaprogramming
  • 39. METHOD MISSING class Cat def method_missing(method, *args) #do something without failing end end
  • 40. class Settings def initialize(options) options.each do |key, value| self.instance_variable_set "@#{key}", value self.class.send :define_method, key,
 proc{self.instance_variable_get("@#{key}")} self.class.send :define_method, "#{key}=",
 proc{|v| self.instance_variable_set("@#{key}", v)} end end end c = Settings.new YAML.load_file("config.yaml") ! p c.title # => "metaprogramming ruby" p c.author # => "Paolo Perrotta" p c.pub_year # => "2010" ! c.title = 'metaprogramming ruby 2.00’ p c.title # => "metaprogramming ruby 2.00”
  • 41. HOOKS Since all code is executed. You can intercept some “facts” about it. inherited, append_features, included, extend_object, extended, initialize_copy, const_missing
  • 42. WOW!
  • 43. BUT THERE’S MORE > [1, 2, 3] * 3 == [1, 2, 3, 1, 2, 3, 1, 2, 3] > 1_000_000 > a = a || [] > a = [1,2,3]; a[-1] > [1,2,3].shuffle > (0..9).each { ... } > 3.times {...} > def name=(value); ...
  • 44. PHILOSOPHY I hope to see Ruby help every programmer in the world to be productive, and to enjoy programming, and to be happy. That is the primary purpose of Ruby language. Yukihiro Matsumoto
  • 45. o = Object.new! o.methods.count => 54 • ActiveRecord::Base => 367 • String => 161 • Fixnum => 128
  • 47. RUBY PRO • Simplicity • REPL (irb, rails c, heroku run console) • No ceremony • One file app • Community and frameworks • Expressiveness (DSL)
  • 48. CONS • Freedom bring responsibility • Performance • No tools for refactoring • Tests are mandatory (mmh…)
  • 50. LINGUISTIC RELATIVITY “The principle of linguistic relativity holds that the structure of a language affects the ways in which its respective speakers conceptualize their world.” Sapir–Whorf hypothesis
 http://en.wikipedia.org/wiki/Linguistic_relativity
  • 51. THE PRAGMATIC PROGRAMMER “Learn at least one new language every year. Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut.” The Pragmatic Programmer