SlideShare a Scribd company logo
Ruby: Beauty or the Beast? Александр Дымо IT Jam 2009 www.acunote.com
О чем речь? Опыт разработки на Ruby (Rails) приложения Acunote  www.acunote.com Онлайновая система управления проектами  для компаний, использующих Scrum ,[object Object]
22 000 строк кода
31 000 строк тестов
~5600 зарегистрированных организаций
О чем речь? ,[object Object]
Что не понравилось
Интересные особенности ,[object Object],[object Object]
Как измерять и как бороться ,[object Object],[object Object]
Тестирование
Профилировка и производительность
Деплоймент ,[object Object]
Язык Ruby: Что понравилось Меньше кода – больше кислорода! ~3 разработчика * ~4 года = 22k строк???
Язык Ruby: Что понравилось Меньше кода – больше кислорода! 400 строк на Ruby == 6000 на C++
Язык Ruby: Что понравилось Уж больно хорошо все выглядит! module  SearchLanguage class  Parser class  ParseError < StandardError;  end def  self. parse (text) parser = Parser. new parser. parse (text) end private : def  parse_search_query parse_and_expression end def  parse_and_expression match_spaces node = ExpressionNode. new (:and) return  node  if  empty_buffer? node. expressions  << parse_or_expression while  match_AND  and  !empty_buffer?  and  !end_of_subexpression? node. expressions  << parse_or_expression end node end end end
Язык Ruby: Что понравилось Методы с ! и ? [1,2,3] . include?   2 &quot;foo bar&quot; . gsub ( &quot;o&quot; ,  &quot;a&quot; ) &quot;foo bar&quot; . gsub! ( &quot;o&quot; ,  &quot;a&quot; )
Язык Ruby: Что понравилось Методы с ! и ? class  Foo def  transform! #... end def  transformed? #... end end
Язык Ruby: Что понравилось Блоки def  do_smth(&block) puts yield(10) puts yield(20) end do_smth { |value| value += 5 } >  15 >  25
Язык Ruby: Что понравилось Возможность встроиться куда угодно class  BigDecimal alias_method  :eq_without_boolean_comparison, :== def  eq_with_boolean_comparison(other) if  [FalseClass, TrueClass].include? other.class return  false end eq_without_boolean_comparison(other) end alias_method  :==, :eq_with_boolean_comparison end
Язык Ruby: Что понравилось Возможность встроиться куда угодно class  Time def  humanize strftime(&quot;%a %b %d, %Y %H:%M&quot;) end end ...мы дополнили 26 различных классов
Язык Ruby: Что понравилось Правильный способ встраивания/расширения class  Foo def  do_smth puts  &quot;Hello World&quot; end end class  Foo def  do_smth_with_decoration puts  &quot;--------------&quot; do_smth_without_decoration puts  &quot;--------------&quot; end end f = Foo.new f.do_smth >  -------------- >  Hello World >  --------------
Язык Ruby: Что понравилось Возможность переписать все что угодно class  Foo { private: void  doSmth() { std::cout  <<  &quot;Hello World&quot; } }; ... class  Foo def  doSmth puts  &quot;Hi&quot; end end f = Foo.new f.doSmth >  Hi
О чем речь? ,[object Object]
Что не понравилось
Интересные особенности ,[object Object],[object Object]
Как измерять и как бороться ,[object Object],[object Object]
Тестирование
Профилировка и производительность
Деплоймент ,[object Object]
Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false or true puts x  #???
Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false or true (x = false) or true puts x >  false
Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false || true x = (false || true) puts x >  true
Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = 2  if  false or true puts x > ?
Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = 2  if  false or true x = 2  if  (false or true) puts x > 2
Язык Ruby: Что не понравилось Python'измы в синтаксисе class  Foo attr_accessor  :x def  do_smth x = 10 end end f = Foo.new f.x >  nil #WTF?
Язык Ruby: Что не понравилось Python'измы в синтаксисе class  Foo attr_accessor  :x def  do_smth self. x = 10 end end f = Foo.new f.x >  10
Язык Ruby: Что не понравилось Переменные экземпляров классов class  Foo attr_accessor  :x def  initialize @x  = 10 #или self.x  = 10 y =  @x #или y = x end end
О чем речь? ,[object Object]
Что не понравилось
Интересные особенности ,[object Object],[object Object]
Как измерять и как бороться ,[object Object],[object Object]
Тестирование
Профилировка и производительность
Деплоймент ,[object Object]
Язык Ruby: Интересные особенности Модули: пространства имен  или решение проблемы множественного наследования module  ActiveRecord module  ConnectionAdapters class  MysqlAdapter def  execute #... end end end end module  ActiveResource module  Validations def  valid? errors.empty? end end end module  ActiveRecord class  Base include  Validations end end
Язык Ruby: Интересные особенности Блоки: передача функций в другие функции  или предусловия/постусловия def  calculate(&algorithm) yield (2, 2) end result = calculate  do  |x,y| x + y end def  calculate(&expression) return  unless can_calculate? result =  yield result.good?  ?  result  :  nil end result = calculate  do 2+2 end
Язык Ruby: Интересные особенности Ассоциации в Rails: реализация с method_missing class  User has_many :roles end user = User.find(:first) #метод ассоциации user.roles.find(:all, :conditions => &quot;name = 'Admin'&quot;) #метод массива user.roles.map { |role| role.name }
Язык Ruby: Интересные особенности Ассоциации в Rails: реализация с method_missing class  AssociationProxy def  reload @target = [1,2,3]  #just for an example end def  method_missing(method, *args, &block) if  @target.respond_to? method @target.send(method, *args, &block) else raise  NoMethodError end end end end p = AssociationProxy.new p.reload #вызываем свой метод p << 3 #вызываем метод класса Array (у @target)
О чем речь? ,[object Object]
Что не понравилось
Интересные особенности ,[object Object],[object Object]
Как измерять и как бороться ,[object Object],[object Object]
Тестирование
Профилировка и производительность
Деплоймент ,[object Object]
Garbage Collection: Что с ним не так Сборка мусора – самое плохое  что может произойти с вашим Ruby кодом!
Garbage Collection: Что с ним не так Сборка мусора происходит: каждые 8 Мб (точнее миллионов байт) выделенной памяти
Garbage Collection: Что с ним не так Эффект сборки мусора: GC GC Area Burndown 120 0,94 0,65 1,5x Sprint 20 x (1+5) (C) 0,59 0,30 2,0x Sprint 20 x (1+5) 0,70 0,40 1,8x Move Left 0,77 0,46 1,7x Ruby приложение будет в  2  раза медленнее! &quot;Спасибо&quot; сборщику мусора!
О чем речь? ,[object Object]
Что не понравилось
Интересные особенности ,[object Object],[object Object]
Как измерять и как бороться ,[object Object],[object Object]
Тестирование
Профилировка и производительность
Деплоймент ,[object Object]
Garbage Collection: Как с этим бороться Патч, включающий сбор статистики про GC http://blog.pluron.com/2008/02/memory-profilin.html gc_statistics { x = &quot;x&quot; * 1024 * 1024 * 1024  #дайте-ка мне гиг памяти! } >   allocated: 1049602K total in 2052 allocations, GC calls: 146, GC time: 161 msec
Garbage Collection: Как с этим бороться Способы бороться с GC в Ruby Enterprise Edition (www.rubyenterpriseedition.com) по-умолчанию RUBY_HEAP_MIN_SLOTS=10000 RUBY_HEAP_SLOTS_INCREMENT=10000 RUBY_GC_MALLOC_LIMIT=8000000 RUBY_HEAP_SLOTS_GROWTH_FACTOR=1.8 оптимальные настройки надо подбирать, но примерно RUBY_HEAP_MIN_SLOTS=1250000 RUBY_HEAP_SLOTS_INCREMENT=100000 RUBY_GC_MALLOC_LIMIT=30000000 RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
Garbage Collection: Как с этим бороться Альтернативы? JRuby
Garbage Collection: Как с этим бороться Альтернативы? кто хочет написать generational garbage collector для Ruby?
О чем речь? ,[object Object]

More Related Content

What's hot

Rupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev RubyRupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev Rubyemarkine
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grailsguest32215a
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
Sergey Platonov
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
corehard_by
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
Infinity
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияYandex
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascript
inqubick
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
Sergey Staroletov
 
Rubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на RubyRubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на Ruby
Ivan Samsonov
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
corehard_by
 
Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET
Nikita Lipsky
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
Igor Shkulipa
 
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Oleg Poludnenko
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
Sergey Platonov
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
Igor Shkulipa
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
Python Meetup
 
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint Kyiv
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
Igor Shkulipa
 
Intelligent или сделай мне красиво
Intelligent или сделай мне красивоIntelligent или сделай мне красиво
Intelligent или сделай мне красиво
Artem Malyshev
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
Andrey Vlasovskikh
 

What's hot (20)

Rupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev RubyRupyru2007 Rastyagaev Ruby
Rupyru2007 Rastyagaev Ruby
 
Groovy On Grails
Groovy On GrailsGroovy On Grails
Groovy On Grails
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Михаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знанияМихаил Давыдов: JavaScript. Базовые знания
Михаил Давыдов: JavaScript. Базовые знания
 
введение в Javascript
введение в Javascriptвведение в Javascript
введение в Javascript
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Rubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на RubyRubinius: Ruby написанный на Ruby
Rubinius: Ruby написанный на Ruby
 
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...
 
Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET Поддержка Java 8 в Excelsior JET
Поддержка Java 8 в Excelsior JET
 
C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.C++ Базовый. Занятие 04.
C++ Базовый. Занятие 04.
 
Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?Иван Стеценко: ЯП Zephir. Панацея или лечение?
Иван Стеценко: ЯП Zephir. Панацея или лечение?
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 
JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.JavaScript Базовый. Занятие 03.
JavaScript Базовый. Занятие 03.
 
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекSWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек
 
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...
 
C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.C++ Базовый. Занятие 01.
C++ Базовый. Занятие 01.
 
Intelligent или сделай мне красиво
Intelligent или сделай мне красивоIntelligent или сделай мне красиво
Intelligent или сделай мне красиво
 
Внешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlibВнешние языки DSL на funcparserlib
Внешние языки DSL на funcparserlib
 

Viewers also liked

R18n
R18nR18n
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016
zykin-ilya
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
Vitalii Tytskyi
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
Vladimir Dementyev
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRails
Pavel Gabriel
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
Vladimir Dementyev
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
railsclub
 
RSpec. Part 1
RSpec. Part 1RSpec. Part 1
RSpec. Part 1
Vladimir Dementyev
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
Kir Shatrov
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
Andrey Sitnik
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
Yaroslav Markin
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.
Vitalii Tytskyi
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
Vladimir Dementyev
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Andrey Listochkin
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
Vladimir Dementyev
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo
 

Viewers also liked (20)

Assets Pipeline
Assets PipelineAssets Pipeline
Assets Pipeline
 
R18n
R18nR18n
R18n
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRails
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
 
RSpec. Part 1
RSpec. Part 1RSpec. Part 1
RSpec. Part 1
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
 

Similar to Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast

About Python
About PythonAbout Python
About Python
Yury Yurevich
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
Pavel Tsukanov
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...lshevtsov
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
Andrei Kaleshka
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
voituk
 
запахи кода
запахи кодазапахи кода
запахи кода
Vitaly Ruzhnikov
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
solit
 
Теории и практики функционального программирования.
Теории и практики функционального программирования.Теории и практики функционального программирования.
Теории и практики функционального программирования.
Dev2Dev
 
Worried code
Worried codeWorried code
Worried code
sergeymoiseev
 
Writing Open Source Library
Writing Open Source LibraryWriting Open Source Library
Writing Open Source Library
Andrew Svetlov
 
Успешный Open Source - Андрей Светлов, PyCon RU 2014
Успешный Open Source - Андрей Светлов, PyCon RU 2014Успешный Open Source - Андрей Светлов, PyCon RU 2014
Успешный Open Source - Андрей Светлов, PyCon RU 2014it-people
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
Kamil Samigullin
 
Теории и практики фунционального программирования - GDG D2D
Теории и практики фунционального программирования - GDG D2DТеории и практики фунционального программирования - GDG D2D
Теории и практики фунционального программирования - GDG D2D
0xffAA
 

Similar to Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast (20)

About Python
About PythonAbout Python
About Python
 
Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?Ruby - или зачем мне еще один язык программирования?
Ruby - или зачем мне еще один язык программирования?
 
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...Системное тестирование  приложений на Ruby on Rails с применением Rspec и Cap...
Системное тестирование приложений на Ruby on Rails с применением Rspec и Cap...
 
python vs ruby
python vs rubypython vs ruby
python vs ruby
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Groovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conferenceGroovy presentation on Exception #7 conference
Groovy presentation on Exception #7 conference
 
Ruby exceptions
Ruby exceptionsRuby exceptions
Ruby exceptions
 
запахи кода
запахи кодазапахи кода
запахи кода
 
бегун
бегунбегун
бегун
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
 
Теории и практики функционального программирования.
Теории и практики функционального программирования.Теории и практики функционального программирования.
Теории и практики функционального программирования.
 
Worried code
Worried codeWorried code
Worried code
 
Worried code
Worried codeWorried code
Worried code
 
Writing Open Source Library
Writing Open Source LibraryWriting Open Source Library
Writing Open Source Library
 
Успешный Open Source - Андрей Светлов, PyCon RU 2014
Успешный Open Source - Андрей Светлов, PyCon RU 2014Успешный Open Source - Андрей Светлов, PyCon RU 2014
Успешный Open Source - Андрей Светлов, PyCon RU 2014
 
Enter: legacy code
Enter: legacy codeEnter: legacy code
Enter: legacy code
 
Теории и практики фунционального программирования - GDG D2D
Теории и практики фунционального программирования - GDG D2DТеории и практики фунционального программирования - GDG D2D
Теории и практики фунционального программирования - GDG D2D
 

Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast