SlideShare ist ein Scribd-Unternehmen logo
1 von 95
Почему все так любят
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
Спасибо за внимание

Weitere ähnliche Inhalte

Was ist angesagt?

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 optimizationSian Lerk Lau
 
Bioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeBioinformatics p5-bioperl v2013-wim_vancriekinge
Bioinformatics p5-bioperl v2013-wim_vancriekingeProf. Wim Van Criekinge
 
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 shareAlfresco by fme AG
 
Solr 6 Feature Preview
Solr 6 Feature PreviewSolr 6 Feature Preview
Solr 6 Feature PreviewYonik Seeley
 
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) ThingsMichael Pirnat
 
Synapseindia reviews on array php
Synapseindia reviews on array phpSynapseindia reviews on array php
Synapseindia reviews on array phpsaritasingh19866
 
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 PHPDavid 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, PuppetPuppet
 
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 scriptsaniac
 
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 - patternsRafał 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
 

Was ist angesagt? (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!
 

Andere mochten auch

Что такое говнокод
Что такое говнокодЧто такое говнокод
Что такое говнокодIvan Grishaev
 
В поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомВ поисках удаленной работы за рубежом
В поисках удаленной работы за рубежомIvan Grishaev
 
Pepsico presentation
Pepsico presentationPepsico presentation
Pepsico presentationBHARATH 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 Parentshousehold6
 
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.pdcoachdee
 
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 Meatmukmuk1212
 

Andere mochten auch (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
 

Ähnlich wie Why everyone like ruby

اليوم السعيد
اليوم السعيداليوم السعيد
اليوم السعيدmahersaif
 
دورتنا
دورتنادورتنا
دورتناmahersaif
 
What I Love About Ruby
What I Love About RubyWhat I Love About Ruby
What I Love About RubyKeith Bennett
 
Rails for PHP Developers
Rails for PHP DevelopersRails for PHP Developers
Rails for PHP DevelopersRobert Dempsey
 
Ruby Programming Language - Introduction
Ruby Programming Language - IntroductionRuby Programming Language - Introduction
Ruby Programming Language - IntroductionKwangshin 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 2Henry S
 
Minicurso Ruby e Rails
Minicurso Ruby e RailsMinicurso Ruby e Rails
Minicurso Ruby e RailsSEA 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 2010Qiangning Hong
 
Gate of Agile Web Development
Gate of Agile Web DevelopmentGate of Agile Web Development
Gate of Agile Web DevelopmentKoichi ITO
 
Variables, expressions, standard types
 Variables, expressions, standard types  Variables, expressions, standard types
Variables, expressions, standard types Rubizza
 
RubyMotion
RubyMotionRubyMotion
RubyMotionMark
 

Ähnlich wie 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
 
a course
a coursea course
a course
 
I Love Ruby
I Love RubyI Love Ruby
I Love Ruby
 
ruby
rubyruby
ruby
 
ruby
rubyruby
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
 

Mehr von Ivan Grishaev

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

Mehr von 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, который мы потеряли
 
Расстаемся с мифами о ФП
Расстаемся с мифами о ФП Расстаемся с мифами о ФП
Расстаемся с мифами о ФП
 

Kürzlich hochgeladen

Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerAnamika Sarkar
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
Piping Basic stress analysis by engineering
Piping Basic stress analysis by engineeringPiping Basic stress analysis by engineering
Piping Basic stress analysis by engineeringJuanCarlosMorales19600
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - GuideGOPINATHS437943
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxsomshekarkn64
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfme23b1001
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...Chandu841456
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionDr.Costas Sachpazis
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgsaravananr517913
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girlsssuser7cb4ff
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptMadan Karki
 

Kürzlich hochgeladen (20)

Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
 
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
9953056974 Call Girls In South Ex, Escorts (Delhi) NCR.pdf
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
Piping Basic stress analysis by engineering
Piping Basic stress analysis by engineeringPiping Basic stress analysis by engineering
Piping Basic stress analysis by engineering
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
Transport layer issues and challenges - Guide
Transport layer issues and challenges - GuideTransport layer issues and challenges - Guide
Transport layer issues and challenges - Guide
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptx
 
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 
Electronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdfElectronically Controlled suspensions system .pdf
Electronically Controlled suspensions system .pdf
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...
 
young call girls in Green Park🔝 9953056974 🔝 escort Service
young call girls in Green Park🔝 9953056974 🔝 escort Serviceyoung call girls in Green Park🔝 9953056974 🔝 escort Service
young call girls in Green Park🔝 9953056974 🔝 escort Service
 
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective IntroductionSachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
Sachpazis Costas: Geotechnical Engineering: A student's Perspective Introduction
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
 
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
Call Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call GirlsCall Girls Narol 7397865700 Independent Call Girls
Call Girls Narol 7397865700 Independent Call Girls
 
Indian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.pptIndian Dairy Industry Present Status and.ppt
Indian Dairy Industry Present Status and.ppt
 

Why everyone like ruby