Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
Выбор языка для разработки под iOS не ограничен Objective-C — всё зависит от конкретных задач. Но даже если код пишется на Objective-C, у разработчика есть и другие инструменты, кроме Xcode, способные облегчить жизнь. Есть сторонние тестовые фреймворки, менеджеры зависимостей, браузеры документации и, конечно, альтернативные IDE — например, AppCode.
В докладе я расскажу, почему в JetBrains создали собственную IDE для Objective-C, а не просто плагин к Xcode. Обсудим, чем AppCode отличается от Xcode, и как мы реализовали интеграцию с этой средой. А также поговорим о возникавших сложностях и планах по развитию интеграции и всего продукта.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
"Инструментарий разработчика iOS: Xcode, AppCode и сторонние инструменты". Ма...Yandex
Выбор языка для разработки под iOS не ограничен Objective-C — всё зависит от конкретных задач. Но даже если код пишется на Objective-C, у разработчика есть и другие инструменты, кроме Xcode, способные облегчить жизнь. Есть сторонние тестовые фреймворки, менеджеры зависимостей, браузеры документации и, конечно, альтернативные IDE — например, AppCode.
В докладе я расскажу, почему в JetBrains создали собственную IDE для Objective-C, а не просто плагин к Xcode. Обсудим, чем AppCode отличается от Xcode, и как мы реализовали интеграцию с этой средой. А также поговорим о возникавших сложностях и планах по развитию интеграции и всего продукта.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Иван Стеценко: ЯП Zephir. Панацея или лечение?Oleg Poludnenko
Доклад с PUG#6 https://www.facebook.com/events/837043689707114/
Поговорим о:
- сути интерпретируемого PHP, обсудим, как с этим жить;
- панацее Zephir. «А что там под капотом?»;
- наглядном профите. Поиграем с Symfony, Yii, Magento;
- будущем Zephir.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Презентация с конференции "Город IT"
Томск, 19 ноября 2016 года.
Андрей Аксёнов, ведущий разработчик Unigine.
Доклад: «С одним плюсом».
— К чему надо стремиться, разрабатывая на C++ (и не только)?
— Как писать элегантно на C++’03 и что делать с новыми стандартами?
— Как на C++ делать не надо?
— Об идеальном коде и Идеальной Архитектуре.
Краткое введение в Scala для разработчиков на других языках. Рассмотрены несколько простых программ, написанных с использованием красивых возможностей Scala.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Иван Стеценко: ЯП Zephir. Панацея или лечение?Oleg Poludnenko
Доклад с PUG#6 https://www.facebook.com/events/837043689707114/
Поговорим о:
- сути интерпретируемого PHP, обсудим, как с этим жить;
- панацее Zephir. «А что там под капотом?»;
- наглядном профите. Поиграем с Symfony, Yii, Magento;
- будущем Zephir.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Презентация с конференции "Город IT"
Томск, 19 ноября 2016 года.
Андрей Аксёнов, ведущий разработчик Unigine.
Доклад: «С одним плюсом».
— К чему надо стремиться, разрабатывая на C++ (и не только)?
— Как писать элегантно на C++’03 и что делать с новыми стандартами?
— Как на C++ делать не надо?
— Об идеальном коде и Идеальной Архитектуре.
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
Последние 2 года язык Go является моим - нашим - основным средством заработка на хлеб. Хватает, в общем-то, и на хлеб, и на масло, а иногда и на красную икру.
Не покривив душой, я могу сказать, что мы относимся к языку Go и его создателям с симпатией и уважением.
Однако, при всем нашем уважении, заявить, что Go предназначен для "тяжелых" проектов, я, не покривив душой, не могу.
Во-первых, Go молодой язык, для которого еще не известны паттерны и - что важнее - антипаттерны. Тем, кто пишет на Go тяжелое приложение сегодня, приходится тратить существенное время на тесты и оптимизации
Во-вторых, выразительные средства Go довольно скудны, что приводит к появлению в коде ужасающего количества boilerplate, за которым эффективно прячется бизнес-логика. Программу на Go бывает трудно охватить взглядом и поместить ее модель себе в голову просто из-за количества строк, которые надо для этого прочесть.
В-третьих, у Go есть проблемы с эффективностью кода. У Go плохой оптимизатор. У Go плохо с "заточкой" под железо - вспомним хотя бы историю с патчем CloudFlare для TLS. Патч ведь так и не попал в основную ветку...
Возникает вопрос - почему же, не по наслышке зная о вышеперечисленных проблемах, мы пишем наш реально тяжелый проект именно на Go?
Ответ прост: Go не идеален, но под наши задачи он подходит лучше всего.
Раньше мы строили разные тяжелые бекенды на perl, python, java, groovy и даже lua+nginx. Нам есть, с чем сравнивать.
Во-первых, Go достаточно быстр. Во всяком случае, он быстрее perl и python на нашем профиле нагрузки.
Во-вторых, и это важнее, Go предоставляет вполне достаточные средства контроля за потреблением как RAM, так и CPU. Например, регулярные выражения Go не такие гибкие, как pcre, и, по моим наблюдениям, медленнее, чем pcre. Но! регулярные выражения в Go всегда отрабатывают за предсказуемое время!
В-третьих, создатели языка не врут нам - они, действительно, постарались сделать язык, на котором человекочитаемую программу написать проще, чем нечитаемую. И у них - с некоторомы оговорками - получилось! Даже пресловутый boilerplate не способен этому помешать.
Наконец, Go просто сумел нам понравиться, чего уже давно не случалось с языками программирования.
Итак, на основании опыта, полученного при создании пилотной версии проекта inCaller.org я расскажу о том, как мы писали на Go тяжелое приложение.
Миллионы одновременных персистентных websocket соединений, десятки тысяч коннектов по ssl в секунду, сотни тысяч в секунду обновлений записей в БД.
Я расскажу об антипаттернах, нами обнаруженных, о методике тестирования производительности, анализа проблем и способах с проблемами справиться.
Доклад рассчитан на backend-программистов, как на языке Go, так и на других.
DevPoint 2016: Признаки плохого кода и как с ним бороться в PHP проектах - Па...DevPoint Kyiv
– Основные критерии оценки качества кода;
– Хардкод или Ad-hoc решение? Когда хардкод оправдан;
– Инструменты для профилактики хардкодных заболеваний;
– Бизнес VS качество кода;
-------------------------------------------------------------------------------------------------------
Сайт: http://devpoint.com.ua
FB: http://bit.ly/25Aytad
SlideShare :http://bit.ly/1SGi8d0
Все разработчики автоматизированных тестов рано или поздно сталкиваются с проблемой - "то, что есть в тулзе, которую я юзаю, явно не достаточно и надо что-то делать".
Мы поговорим с чего начать и чем продолжить, так чтоб получить действительно хорошее решение для автоматизированного тестирования. Обсудим интеграцию с continues integration и реализации систем репортинга. За опорный пример возьму фреймворк на базе Selenium.
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
Василий Соловей, Солигорск. PHP-разработчик в в «Электронном Солигорске».
«Минусы ООП на примере языка PHP». Development секция. Для разработчиков (начальный и средний уровень).
1. Что есть ООП (легкое повторение уже знакомого)
2. Лучше доверять авторитету мнения, чем мнению авторитета (во всем нужно разбираться основательно, а в ООП тем более)
3. Неизменная скупость в похвалах — верный признак посредственного ума (плюсы ООП)
4. Не все то солнышко, что блестит (основная часть доклада – минусы ООП)
5. Кто владеет информацией, тот владеет ситуацией (пояснение сути доклада:
доклад не принижает и не умоляет достоинств ООП он создан расширить кругозор)
«Начинать никогда не поздно!». Мотивационное выступление. На личном примере, я могу рассказать, что начинать никогда не поздно, и если есть желание – нет повода себе отказывать.
1. Путь в тысячу миль начинается с одного шага (с чего начать)
2. И на верном пути повстречаются распутья (как не сбиться с дороги начав)
3. Кто ты программист? (мой взгляд на программирование)
4. Успех – дитя настойчивости
Similar to Alexander Dymo - IT-клуб Николаева - April 2011 - Ruby: Beaty and the Beast (20)
13. Язык Ruby: Что понравилось Меньше кода – больше кислорода! ~3-4 разработчика * ~5 лет = 29k строк???
14. Язык Ruby: Что понравилось Меньше кода – больше кислорода! 400 строк на Ruby == 6000 на C++
15. Язык 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
16. Язык Ruby: Что понравилось Методы с ! и ? [1,2,3] . include? 2 "foo bar" . gsub ( "o" , "a" ) "foo bar" . gsub! ( "o" , "a" )
17. Язык Ruby: Что понравилось Методы с ! и ? class Foo def transform! #... end def transformed? #... end end
18. Язык Ruby: Что понравилось Элегантный подход к getters/setters class Foo attr_accessor :foo end class Foo def foo @foo end def foo=(value) @foo = value end end f = Foo.new f.foo = 2 # f.foo=(2) puts f.foo
19. Язык Ruby: Что понравилось Блоки def do_smth(&block) puts yield(10) puts yield(20) end do_smth { |value| value + 5 } > 15 > 25
20. Язык Ruby: Что понравилось Возможность встроиться куда угодно class Time def humanize strftime("%a %b %d, %Y %H:%M") end end puts Time.now.humanize > Thu Apr 21, 2011 13:37 ...мы дополнили 28 различных классов
21. Язык 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
22. Язык Ruby: Что понравилось Правильный способ встраивания/расширения class Foo def do_smth puts "Hello World" end end class Foo def do_smth_with_decoration puts "--------------" do_smth_without_decoration puts "--------------" end end f = Foo.new f.do_smth > -------------- > Hello World > --------------
23. Язык Ruby: Что понравилось Возможность переписать все что угодно class Foo { private: void doSmth() { std::cout << "Hello World" } }; ... class Foo def doSmth puts "Hi" end end f = Foo.new f.doSmth > Hi
31. Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false or true puts x #???
32. Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false or true (x = false) or true puts x > false
33. Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = false || true x = (false || true) puts x > true
34. Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = 2 if false or true puts x > ?
35. Язык Ruby: Что не понравилось Perl'измы в синтаксисе x = 2 if false or true x = 2 if (false or true) puts x > 2
36. Язык Ruby: Что не понравилось Python'измы в синтаксисе class Foo attr_accessor :x def do_smth x = 10 end end f = Foo.new f.x > nil #WTF?
37. Язык Ruby: Что не понравилось Python'измы в синтаксисе class Foo attr_accessor :x def do_smth self. x = 10 end end f = Foo.new f.x > 10
38. Язык Ruby: Что не понравилось Переменные экземпляров классов class Foo attr_accessor :x def initialize @x = 10 #или self.x = 10 y = @x #или y = x end end
46. Язык Ruby: Интересные особенности Модули: пространства имен или решение проблемы множественного наследования module ActiveRecord module ConnectionAdapters class MysqlAdapter def execute #... end end end end module ActiveRecord module Validations def valid? errors.empty? end end class Base include Validations end end
47. Язык 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
48. Язык Ruby: Интересные особенности method_missing class GoldenFish def method_missing(name, *args, &block) if name == :make_me_rich puts "here you go: $1 000 000" else puts "you want too much!" end end end fish = GoldenFish.new fish.make_me_rich > here you go: $1 000 000 fish.make_my_old_wife_a_supermodel > you want too much!
49. Язык Ruby: Интересные особенности Ассоциации в Rails: реализация с method_missing class User has_many :roles end user = User.find(:first) #метод ассоциации user.roles.find(:all, :conditions => "name = 'Admin'") #метод массива user.roles.map { |role| role.name }
50. Язык 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)
62. Ruby Runtime: Что с ним так и не так Апрель 2008 Май 2008 Июнь 2008 Июль 2008 Время обслуживания запроса, % Худший случай: O(n a ) В среднем: O(log n)
70. Ruby Runtime: Garbage Collection Сборка мусора – самое плохое что может произойти с вашим Ruby кодом!
71. Ruby Runtime: Garbage Collection Сборка мусора происходит: каждые 8 Мб выделенной памяти выделенная однажды память повторно используется но никогда не возвращается!
72. Ruby Runtime: Garbage Collection в среднем приложении 1 сборка мусора == 100ms выделяете 1Gb? - ожидайте 1024/8 = 128 вызовов GC - потеряете 128 * 0,1 = 12,8 sec!!! - навсегда оставите себе этот гиг
73. Ruby Runtime: Garbage Collection class TestController def index gc_statistics { #дайте-ка мне гиг памяти! 1024.times { "x"*1024*1024 } } end end app.get '/test' > : allocated: 1049602K total in 2052 allocations, GC calls: 146, GC time: 17281 msec
74. Ruby Runtime: Garbage Collection Патч, включающий сбор статистики про GC http://blog.pluron.com/2008/02/memory-profilin.html
75. Ruby Runtime: 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 раза медленнее! "Спасибо" сборщику мусора!
76. Ruby Runtime: 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
87. Инструменты: Редакторы и IDE Ruby – проклятье разработчиков IDE def foo(arg) arg. end foo(2) foo(Class.new)
88. Инструменты: Редакторы и IDE Ruby – проклятье разработчиков IDE class Foo 10.times do |i| define_method "great_method_#{i}" .to_sym do #... end end end f = Foo.new f.
97. Инструменты: Тестирование Не спешите выбрасывать Test::Unit, он еще послужит Обычно тестируют так: def test_file_tree tree = FilesTree.new( "/home/user" ) assert tree assert_equal "." , tree[0], assert_equal ".." , tree[1], assert_equal "dir1" , tree[2] assert_equal "file1" , tree[2][0] assert_equal "file2" , tree[3] end
98. Инструменты: Тестирование Не спешите выбрасывать Test::Unit, он еще послужит: мечтают о таком (cucumber) scenario : sample file tree When I go to /home/user Then I see current directory, top directory, dir1 There's a file2 in current directory There's a file1 in dir1 directory end
99. Инструменты: Тестирование Не спешите выбрасывать Test::Unit, он еще послужит: но лучше всего так (Test::Unit): def test_file_tree tree = FilesTree.new( "/home/user" ) assert_equal serialize_tree(tree), <<-END . .. dir1 file1 file2 END end
111. Инструменты: Производительность Что нужно помнить при профилировке Ruby приложений? не забывать профилировать память в среднем приложении 1 сборка мусора == 100ms выделяете 1Gb? - ожидайте 1024/8 = 128 вызовов GC - потеряете 128 * 0,1 = 12,8 sec!!!
112. Инструменты: Производительность Что нужно помнить при профилировке Ruby приложений? выключать GC (GC.disable), иначе можно увидеть: class Foo def do_smth return "x" * 1024 # займем 1Kb памяти end end smth = "x" * 7999999 # займем почти 8Mb памяти Foo.new.do_smth # здесь произойдет GC -------------------------- %self calls name 0.10 1 Foo#do_smth # do_smth такой медленный??? 0.01 2 String#*
113. Инструменты: Производительность Переписывать на C не такая уж плохая идея: date-performance github.com/rtomayko/date-performance ускоряет операции с датами в 13 раз! ускоряет приложения в 1.5 раза monkeysupport http://github.com/burke/monkeysupport ActiveSupport переписанный на C
114. Инструменты: Производительность Переписывать Rails приложение на SQL тоже неплохая идея: – иногда ускорение в 5х – иногда делает возможным то, что невозможно в Ruby операции над большим кол-вом (1млн) объектов – детали в моей презентации "Быстрее, Выше, SQL'нее" http://www.slideshare.net/adymo/alexander-dymo-barcamp-2009-faster-higher-sql-2644467
115. Инструменты: Производительность Почему все так плохо? нет реальных приложений, на которых Ruby (и Rails) core teams могли бы тестировать производительность некому написать generational GC никто не профилирует память
123. Инструменты: Деплоймент monit скрипты мониторинга Отличительные особенности: - скорость ограничена CPU - нужно много памяти VPS'ы могут не подходить! Хорошо работает - capistrano - rinda unicorn unicorn unicorn unicorn unicorn nginx rinda (s) rinda (w)