SlideShare a Scribd company logo
Почему все так любят
ruby?
Юрий Хрусталев, Deep Refactoring, 28.09.2016
О чем это?
● О стереотипах
● ruby - удобно, элегантно, просто, понятно
● ruby - инструмент Силиконовой Долины
● ruby лучше, чем python*
Почему?
● Я недавно начал писать на ruby on rails
● До этого я 4 года писал на python
● Wat?
https://www.destroyallsoftware.com/talks/wat
Плохая Махачкала Ruby
class Foo
def initialize
puts 'hi'
end
end
class Foo
def initialize
puts 'hi'
end
end
Foo.new
# А почему метод initialize, не new?
irb(main):001:0> bool
irb(main):001:0> bool
NameError: undefined local variable or method
`bool' for main:Object
from (irb):1
from /usr/bin/irb:12:in `<main>'
# Ок, это же язык с продвинутым ООП
irb(main):002:0> "".to_b
irb(main):002:0> "".to_b
NoMethodError: undefined method `to_b' for
"":String
from (irb):1
from /usr/bin/irb:12:in `<main>'
# Где метод у объекта, это же ООП язык?
irb(main):003:0> !!""
irb(main):003:0> !!""
(irb):2: warning: string literal in condition
=> true
# Почему warning?
# Нужно сравнивать через ==
irb(main):003:0> !!""
(irb):2: warning: string literal in condition
=> true
# Почему warning?
# Нужно сравнивать через ==
# Почему оно true?
irb(main):004:0> !!{}
irb(main):004:0> !!{}
=> true
irb(main):004:0> !!{}
=> true
irb(main):005:0> !![]
irb(main):004:0> !!{}
=> true
irb(main):005:0> !![]
=> true
irb(main):004:0> !!{}
=> true
irb(main):005:0> !![]
=> true
irb(main):006:0> !!Object.new
irb(main):004:0> !!{}
=> true
irb(main):005:0> !![]
=> true
irb(main):006:0> !!Object.new
=> true
# Ничто не false, кроме false/nil/собственного ==
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
irb(main):003:0> nil.blank?
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
irb(main):003:0> nil.blank?
=> true
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
irb(main):003:0> nil.blank?
=> true
irb(main):004:0> 0.blank?
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
irb(main):003:0> nil.blank?
=> true
irb(main):004:0> 0.blank?
=> false
# Ruby? Это такой DSL для написания Rails-приложений?
irb(main):001:0> require 'active_support/all'
=> true
irb(main):002:0> [].blank?
=> true
irb(main):003:0> nil.blank?
=> true
irb(main):004:0> 0.blank?
=> false
# нормально же общались
# Python
>>> arr = [1, 2, 3]
>>> map(str, arr)
["1", "2", "3"]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.map {|item| item.to_s}
=> ["1", "2", "3"]
irb(main):001:0> arr = [1, 2, 3]
=> [1, 2, 3]
irb(main):002:0> arr.map {|item| item.to_s}
=> ["1", "2", "3"]
irb(main):003:0> arr.map(&:to_s)
=> ["1", "2", "3"]
# &: - указатель на имя метода
irb(main):001:0> arr = ["1", "2", "3"]
=> ["1", "2", "3"]
irb(main):001:0> arr = ["1", "2", "3"]
=> ["1", "2", "3"]
irb(main):002:0> arr.map(&:String.new)
irb(main):001:0> arr = ["1", "2", "3"]
=> ["1", "2", "3"]
irb(main):002:0> arr.map(&:String.new)
NoMethodError: undefined method `new' for
:String:Symbol
from (irb):26
from /usr/bin/irb:12:in `<main>'
# это было бы слишком элегантно
irb(main):003:0> arr.map(&String.method(:new))
irb(main):003:0> arr.map(&String.method(:new))
=> ["1", "2", "3"]
# это удобно
# chain.rb
x =
' foo bar '
.strip
.split(' ')
puts x.to_s
# chain.rb
x =
' foo bar '
.strip
.split(' ')
puts x.to_s
irb(main):001:0> load './chain.rb'
[1, 2]
=> nil
# chain.rb
x =
' foo bar '
#.strip
.split(' ')
puts x.to_s
irb(main):001:0> load './chain.rb'
SyntaxError: /tmp/code.rb:4: syntax error,
unexpected '.', expecting end-of-input
.split(' ')
^
from (irb):15:in `load'
from (irb):15
from /usr/bin/irb:12:in `<main>'
# даже python так не делает
irb(main):001:0> String.new "x"
irb(main):001:0> String.new "x"
=> "x"
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
=> "x"
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
=> "x"
irb(main):003:0> String.new( "x" )
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
=> "x"
irb(main):003:0> String.new( "x" )
=> "x"
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
=> "x"
irb(main):003:0> String.new( "x" )
=> "x"
irb(main):004:0> String.new ("x")
irb(main):001:0> String.new "x"
=> "x"
irb(main):002:0> String.new("x")
=> "x"
irb(main):003:0> String.new( "x" )
=> "x"
irb(main):004:0> String.new ("x")
=> "x"
irb(main):005:0> [String.new("x")]
irb(main):005:0> [String.new("x")]
=> ["x"]
irb(main):005:0> [String.new("x")]
=> ["x"]
irb(main):006:0> [String.new ("x")]
irb(main):005:0> [String.new("x")]
=> ["x"]
irb(main):006:0> [String.new ("x")]
SyntaxError: (irb):25: syntax error, unexpected (
arg, expecting ']'
[String.new ("x")]
^
(irb):25: syntax error, unexpected ']',
expecting end-of-input
from /usr/bin/irb:12:in `<main>'
# Пробелы
irb(main):001:0> %w(rm -rf /home)
irb(main):001:0> %w(rm -rf /home)
=> ["rm", "-rf", "/home"]
irb(main):001:0> %w(rm -rf /home)
=> ["rm", "-rf", "/home"]
irb(main):002:0> %i(rm -rf /home)
irb(main):001:0> %w(rm -rf /home)
=> ["rm", "-rf", "/home"]
irb(main):002:0> %i(rm -rf /home)
=> [:rm, :"-rf", :"/home"]
irb(main):001:0> %w(rm -rf /home)
=> ["rm", "-rf", "/home"]
irb(main):002:0> %i(rm -rf /home)
=> [:rm, :"-rf", :"/home"]
irb(main):003:0> %x(rm -rf /home)
irb(main):001:0> %w(rm -rf /home)
=> ["rm", "-rf", "/home"]
irb(main):002:0> %i(rm -rf /home)
=> [:rm, :"-rf", :"/home"]
irb(main):003:0> %x(rm -rf /home)
=> ""
# это еще хорошо у меня OSX
irb(main):001:0> {foo: 1}
=> {:foo=>1}
irb(main):001:0> {foo: 1}
=> {:foo=>1}
irb(main):002:0> {:foo => 1}
=> {:foo=>1}
irb(main):001:0> {foo: 1}
=> {:foo=>1}
irb(main):002:0> {:foo => 1}
=> {:foo=>1}
irb(main):003:0> {"foo" => 1}
=> {"foo"=>1}
irb(main):005:0> {:foo => 1}["foo"]
irb(main):005:0> {:foo => 1}["foo"]
=> nil
irb(main):005:0> {:foo => 1}["foo"]
=> nil
irb(main):006:0> {:foo => 1}["foo".to_sym]
irb(main):005:0> {:foo => 1}["foo"]
=> nil
irb(main):006:0> {:foo => 1}["foo".to_sym]
=> 1
# зато метод без скобок вызван
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):003:0> h["foo"]
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):003:0> h["foo"]
=> 1
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):003:0> h["foo"]
=> 1
irb(main):004:0> h[:foo]
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):003:0> h["foo"]
=> 1
irb(main):004:0> h[:foo]
=> 1
# доступно только в rails
irb(main):001:0> h = {:foo => 1}
=> {:foo=>1}
irb(main):002:0> h = h.with_indifferent_access
=> {"foo"=>1}
irb(main):003:0> h["foo"]
=> 1
irb(main):004:0> h[:foo]
=> 1
# доступно только в rails
# ruby DSL для rails
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
foo do |value|
puts value
end
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
foo do |value|
puts value
end
> open resource
41
42
close resource
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
foo do |value|
puts value
break
end
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
foo do |value|
puts value
break
end
> open resource
41
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
def has_answer?
foo do |value|
return true if value == 42
end
end
puts has_answer?
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
def has_answer?
foo do |value|
return true if value == 42
end
end
puts has_answer?
> open resource
true
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
def has_answer?
rc = false
foo {|value| rc = true if value == 42}
rc
end
puts has_answer?
def foo(&block)
puts 'open resource'
[*41..42].each &block.method(:call)
puts 'close resource'
end
def has_answer?
rc = false
foo {|value| rc = true if value == 42}
rc
end
puts has_answer?
> open resource
close resource
true
module Foo
def bar
puts 'hi'
end
end
irb(main):009:0* Foo.bar
module Foo
def bar
puts 'hi'
end
end
irb(main):009:0* Foo.bar
NoMethodError: undefined method `bar' for
Foo:Module
from (irb):9
from /usr/bin/irb:12:in `<main>'
module Foo
module_function
def bar
puts 'hi'
end
end
irb(main):010:0* Foo.bar
hi
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
hi
=> nil
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
hi
=> nil
irb(main):097:0> Foo::BAZ
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
hi
=> nil
irb(main):097:0> Foo::BAZ
=> "hey"
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
hi
=> nil
irb(main):097:0> Foo::BAZ
=> "hey"
irb(main):098:0> Foo.baz
module Foo
BAZ = 'hey'
module_function
def bar
puts 'hi'
end
end
irb(main):096:0> Foo::bar
hi
=> nil
irb(main):097:0> Foo::BAZ
=> "hey"
irb(main):098:0> Foo.baz
NoMethodError: undefined
method `baz' for Foo:Module
from (irb):98
from /usr/bin/irb:12:in
`<main>'
# почему нет?
В качестве заключения, что с
популярностью ruby?
http://githut.info/
http://pypl.github.io/PYPL.html
http://stackoverflow.com/jobs
Спасибо за внимание

More Related Content

What's hot

The journey of an (un)orthodox optimization
The journey of an (un)orthodox optimizationThe journey of an (un)orthodox optimization
The journey of an (un)orthodox optimization
Sian Lerk Lau
 
Bioinformatica p6-bioperl
Bioinformatica p6-bioperlBioinformatica p6-bioperl
Bioinformatica p6-bioperl
Prof. Wim Van Criekinge
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Prof. Wim Van Criekinge
 
Symfony2 meets propel 1.5
Symfony2 meets propel 1.5Symfony2 meets propel 1.5
Symfony2 meets propel 1.5
Francois Zaninotto
 
fme Alfresco Day 06-2013 - alfresco.js and share
fme Alfresco Day 06-2013 - alfresco.js and sharefme Alfresco Day 06-2013 - alfresco.js and share
fme Alfresco Day 06-2013 - alfresco.js and share
Alfresco by fme AG
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature Preview
Yonik Seeley
 
Ruby 2.0
Ruby 2.0Ruby 2.0
Ruby 2.0
Uģis Ozols
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
Michael Pirnat
 
Synapseindia reviews on array php
Synapseindia reviews on array phpSynapseindia reviews on array php
Synapseindia reviews on array php
saritasingh19866
 
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
Mark Wilkinson
 
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Lucidworks
 
Banishing Loops with Functional Programming in PHP
Banishing Loops with Functional Programming in PHPBanishing Loops with Functional Programming in PHP
Banishing Loops with Functional Programming in PHP
David Hayes
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Damien Seguy
 
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, PuppetPuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
Puppet
 
The bones of a nice Python script
The bones of a nice Python scriptThe bones of a nice Python script
The bones of a nice Python script
saniac
 
MIND sweeping introduction to PHP
MIND sweeping introduction to PHPMIND sweeping introduction to PHP
MIND sweeping introduction to PHPBUDNET
 
Solr Anti - patterns
Solr Anti - patternsSolr Anti - patterns
Solr Anti - patterns
Rafał Kuć
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateKiev ALT.NET
 
All about Erubis (English)
All about Erubis (English)All about Erubis (English)
All about Erubis (English)
kwatch
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
Andres Almiray
 

What's hot (20)

The journey of an (un)orthodox optimization
The journey of an (un)orthodox optimizationThe journey of an (un)orthodox optimization
The journey of an (un)orthodox optimization
 
Bioinformatica p6-bioperl
Bioinformatica p6-bioperlBioinformatica p6-bioperl
Bioinformatica p6-bioperl
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekinge
 
Symfony2 meets propel 1.5
Symfony2 meets propel 1.5Symfony2 meets propel 1.5
Symfony2 meets propel 1.5
 
fme Alfresco Day 06-2013 - alfresco.js and share
fme Alfresco Day 06-2013 - alfresco.js and sharefme Alfresco Day 06-2013 - alfresco.js and share
fme Alfresco Day 06-2013 - alfresco.js and share
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature Preview
 
Ruby 2.0
Ruby 2.0Ruby 2.0
Ruby 2.0
 
A Few of My Favorite (Python) Things
A Few of My Favorite (Python) ThingsA Few of My Favorite (Python) Things
A Few of My Favorite (Python) Things
 
Synapseindia reviews on array php
Synapseindia reviews on array phpSynapseindia reviews on array php
Synapseindia reviews on array php
 
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
SADI in Perl - Protege Plugin Tutorial (fixed Aug 24, 2011)
 
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
Rebuilding Solr 6 Examples - Layer by Layer: Presented by Alexandre Rafalovit...
 
Banishing Loops with Functional Programming in PHP
Banishing Loops with Functional Programming in PHPBanishing Loops with Functional Programming in PHP
Banishing Loops with Functional Programming in PHP
 
Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)Php Code Audits (PHP UK 2010)
Php Code Audits (PHP UK 2010)
 
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, PuppetPuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
PuppetConf 2017: Hiera 5: The Full Data Enchilada- Hendrik Lindberg, Puppet
 
The bones of a nice Python script
The bones of a nice Python scriptThe bones of a nice Python script
The bones of a nice Python script
 
MIND sweeping introduction to PHP
MIND sweeping introduction to PHPMIND sweeping introduction to PHP
MIND sweeping introduction to PHP
 
Solr Anti - patterns
Solr Anti - patternsSolr Anti - patterns
Solr Anti - patterns
 
Micro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicateMicro-ORM Introduction - Don't overcomplicate
Micro-ORM Introduction - Don't overcomplicate
 
All about Erubis (English)
All about Erubis (English)All about Erubis (English)
All about Erubis (English)
 
Go Java, Go!
Go Java, Go!Go Java, Go!
Go Java, Go!
 

Viewers also liked

Что такое говнокод
Что такое говнокодЧто такое говнокод
Что такое говнокод
Ivan Grishaev
 
В поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомВ поисках удаленной работы за рубежом
В поисках удаленной работы за рубежом
Ivan Grishaev
 
Pepsico presentation
Pepsico presentationPepsico presentation
Pepsico presentation
BHARATH C
 
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCE
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCELEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCE
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCEClementine Rouan
 
Chicken pox and Shingles: Letter to Parents
Chicken pox and Shingles:  Letter to ParentsChicken pox and Shingles:  Letter to Parents
Chicken pox and Shingles: Letter to Parents
household6
 
Lesson pollution
Lesson pollution Lesson pollution
Lesson pollution
Nawel Boubkar
 
Warriors Head Back To The Finals
Warriors Head Back To The Finals Warriors Head Back To The Finals
Warriors Head Back To The Finals
Scott Greenlaw
 
Ccpa on basic income final.pd
Ccpa on basic income final.pdCcpa on basic income final.pd
Ccpa on basic income final.pd
coachdee
 
April Rocky Mountain UAS Professionals Meetup
April Rocky Mountain UAS Professionals Meetup April Rocky Mountain UAS Professionals Meetup
April Rocky Mountain UAS Professionals Meetup
UAS Colorado
 
Marmot Is A Piece of Meat
Marmot Is A Piece of MeatMarmot Is A Piece of Meat
Marmot Is A Piece of Meat
mukmuk1212
 
Hipervinculo
HipervinculoHipervinculo
Hipervinculo
Sheila Mar
 
Mycologie
MycologieMycologie
Mycologie
salhi emna
 

Viewers also liked (13)

Что такое говнокод
Что такое говнокодЧто такое говнокод
Что такое говнокод
 
В поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомВ поисках удаленной работы за рубежом
В поисках удаленной работы за рубежом
 
Pepsico presentation
Pepsico presentationPepsico presentation
Pepsico presentation
 
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCE
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCELEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCE
LEXPANSION LE TOURISME PEUT IL SAUVER LA FRANCE
 
Chicken pox and Shingles: Letter to Parents
Chicken pox and Shingles:  Letter to ParentsChicken pox and Shingles:  Letter to Parents
Chicken pox and Shingles: Letter to Parents
 
Lesson pollution
Lesson pollution Lesson pollution
Lesson pollution
 
Warriors Head Back To The Finals
Warriors Head Back To The Finals Warriors Head Back To The Finals
Warriors Head Back To The Finals
 
JamesHanisBook-v5
JamesHanisBook-v5JamesHanisBook-v5
JamesHanisBook-v5
 
Ccpa on basic income final.pd
Ccpa on basic income final.pdCcpa on basic income final.pd
Ccpa on basic income final.pd
 
April Rocky Mountain UAS Professionals Meetup
April Rocky Mountain UAS Professionals Meetup April Rocky Mountain UAS Professionals Meetup
April Rocky Mountain UAS Professionals Meetup
 
Marmot Is A Piece of Meat
Marmot Is A Piece of MeatMarmot Is A Piece of Meat
Marmot Is A Piece of Meat
 
Hipervinculo
HipervinculoHipervinculo
Hipervinculo
 
Mycologie
MycologieMycologie
Mycologie
 

Similar to Why everyone like ruby

دورتنا
دورتنادورتنا
دورتناmahersaif
 
اليوم السعيد
اليوم السعيداليوم السعيد
اليوم السعيدmahersaif
 
What I Love About Ruby
What I Love About RubyWhat I Love About Ruby
What I Love About Ruby
Keith Bennett
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP Developers
Robert Dempsey
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - Introduction
Kwangshin Oh
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
Henry S
 
Minicurso Ruby e Rails
Minicurso Ruby e RailsMinicurso Ruby e Rails
Minicurso Ruby e Rails
SEA Tecnologia
 
Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010
Qiangning Hong
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web Development
Koichi ITO
 
Variables, expressions, standard types
 Variables, expressions, standard types  Variables, expressions, standard types
Variables, expressions, standard types
Rubizza
 
RubyMotion
RubyMotionRubyMotion
RubyMotion
Mark
 

Similar to Why everyone like ruby (20)

Introduction to Ruby
Introduction to RubyIntroduction to Ruby
Introduction to Ruby
 
I Love Ruby
I Love RubyI Love Ruby
I Love Ruby
 
ruby
rubyruby
ruby
 
دورتنا
دورتنادورتنا
دورتنا
 
ruby
rubyruby
ruby
 
a course
a coursea course
a course
 
I Love Ruby
I Love RubyI Love Ruby
I Love Ruby
 
ruby
rubyruby
ruby
 
ruby
rubyruby
ruby
 
اليوم السعيد
اليوم السعيداليوم السعيد
اليوم السعيد
 
What I Love About Ruby
What I Love About RubyWhat I Love About Ruby
What I Love About Ruby
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP Developers
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - Introduction
 
Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2Code for Startup MVP (Ruby on Rails) Session 2
Code for Startup MVP (Ruby on Rails) Session 2
 
Minicurso Ruby e Rails
Minicurso Ruby e RailsMinicurso Ruby e Rails
Minicurso Ruby e Rails
 
Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010Python于Web 2.0网站的应用 - QCon Beijing 2010
Python于Web 2.0网站的应用 - QCon Beijing 2010
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web Development
 
Command Liner with Scala
Command Liner with ScalaCommand Liner with Scala
Command Liner with Scala
 
Variables, expressions, standard types
 Variables, expressions, standard types  Variables, expressions, standard types
Variables, expressions, standard types
 
RubyMotion
RubyMotionRubyMotion
RubyMotion
 

More from Ivan Grishaev

Основы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий СоболевОсновы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий Соболев
Ivan Grishaev
 
Docker
DockerDocker
NoSQL pain
NoSQL painNoSQL pain
NoSQL pain
Ivan Grishaev
 
Еще раз про качество
Еще раз про качествоЕще раз про качество
Еще раз про качество
Ivan Grishaev
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
Ivan Grishaev
 
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетяхЧек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
Ivan Grishaev
 
10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю
Ivan Grishaev
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурами
Ivan Grishaev
 
Project Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогикиProject Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогики
Ivan Grishaev
 
Agile or not agile
Agile or not agileAgile or not agile
Agile or not agile
Ivan Grishaev
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
Ivan Grishaev
 
Личный взгляд на Clojure
Личный взгляд на ClojureЛичный взгляд на Clojure
Личный взгляд на Clojure
Ivan Grishaev
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
Ivan Grishaev
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
Ivan Grishaev
 

More from Ivan Grishaev (14)

Основы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий СоболевОсновы машинного обучения. Дмитрий Соболев
Основы машинного обучения. Дмитрий Соболев
 
Docker
DockerDocker
Docker
 
NoSQL pain
NoSQL painNoSQL pain
NoSQL pain
 
Еще раз про качество
Еще раз про качествоЕще раз про качество
Еще раз про качество
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетяхЧек-лист ежедневных действий для сообществ компаний в соц. сетях
Чек-лист ежедневных действий для сообществ компаний в соц. сетях
 
10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю10 вопросов, которые следует задать будущему работодателю
10 вопросов, которые следует задать будущему работодателю
 
тесты с фикстурами
тесты с фикстурамитесты с фикстурами
тесты с фикстурами
 
Project Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогикиProject Management в разрезе бихевиоризма и общей педагогики
Project Management в разрезе бихевиоризма и общей педагогики
 
Agile or not agile
Agile or not agileAgile or not agile
Agile or not agile
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Личный взгляд на Clojure
Личный взгляд на ClojureЛичный взгляд на Clojure
Личный взгляд на Clojure
 
Erlang, который мы потеряли
Erlang, который мы потерялиErlang, который мы потеряли
Erlang, который мы потеряли
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
 

Recently uploaded

Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
Kamal Acharya
 
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
H.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdfH.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdf
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
MLILAB
 
Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.
PrashantGoswami42
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
gdsczhcet
 
HYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generationHYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generation
Robbie Edward Sayers
 
ethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.pptethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.ppt
Jayaprasanna4
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
Vaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdfVaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdf
Kamal Acharya
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
seandesed
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
Kamal Acharya
 
Event Management System Vb Net Project Report.pdf
Event Management System Vb Net  Project Report.pdfEvent Management System Vb Net  Project Report.pdf
Event Management System Vb Net Project Report.pdf
Kamal Acharya
 
Forklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella PartsForklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella Parts
Intella Parts
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
JoytuBarua2
 
Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdf
Kamal Acharya
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation & Control
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
Kamal Acharya
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
Pratik Pawar
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
ankuprajapati0525
 
Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
TeeVichai
 

Recently uploaded (20)

Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
 
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
H.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdfH.Seo,  ICLR 2024, MLILAB,  KAIST AI.pdf
H.Seo, ICLR 2024, MLILAB, KAIST AI.pdf
 
Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.
 
Gen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdfGen AI Study Jams _ For the GDSC Leads in India.pdf
Gen AI Study Jams _ For the GDSC Leads in India.pdf
 
HYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generationHYDROPOWER - Hydroelectric power generation
HYDROPOWER - Hydroelectric power generation
 
ethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.pptethical hacking in wireless-hacking1.ppt
ethical hacking in wireless-hacking1.ppt
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
Vaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdfVaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdf
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
 
Event Management System Vb Net Project Report.pdf
Event Management System Vb Net  Project Report.pdfEvent Management System Vb Net  Project Report.pdf
Event Management System Vb Net Project Report.pdf
 
Forklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella PartsForklift Classes Overview by Intella Parts
Forklift Classes Overview by Intella Parts
 
Planning Of Procurement o different goods and services
Planning Of Procurement o different goods and servicesPlanning Of Procurement o different goods and services
Planning Of Procurement o different goods and services
 
Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdf
 
Water Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdfWater Industry Process Automation and Control Monthly - May 2024.pdf
Water Industry Process Automation and Control Monthly - May 2024.pdf
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
 
weather web application report.pdf
weather web application report.pdfweather web application report.pdf
weather web application report.pdf
 
The role of big data in decision making.
The role of big data in decision making.The role of big data in decision making.
The role of big data in decision making.
 
Railway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdfRailway Signalling Principles Edition 3.pdf
Railway Signalling Principles Edition 3.pdf
 

Why everyone like ruby