Иван Стеценко: ЯП Zephir. Панацея или лечение?Oleg Poludnenko
Доклад с PUG#6 https://www.facebook.com/events/837043689707114/
Поговорим о:
- сути интерпретируемого PHP, обсудим, как с этим жить;
- панацее Zephir. «А что там под капотом?»;
- наглядном профите. Поиграем с Symfony, Yii, Magento;
- будущем Zephir.
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
В данном докладе затронуты такие темы, как теория и проблемы парсинга, построение и обход абстрактных синтаксических деревьев (AST) и разработка предметно-ориентированного языка (DSL).
Рассматриваются такие проблемы парсинга, как разбор контекстно-зависимых языков, обработка ошибок и др. В качестве примера применения теории приведена грамматика PHP, разработанная для генератора парсеров ANTLR.
Далее рассматриваются структура унифицированного AST, методы его обхода и сопоставления с паттернами.
Завершающей частью презентации является описание DSL, разработанного с целью записи существующих и будущих паттернов. Также приведены примеры некоторых паттернов для лучшей усвояемости материала.
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
Доклад осветит вопросы устройства REST API для веб-приложений и мобильных клиентов, от которых требуется высокая производительность.
Проектирование высокопроизводительных REST API.
- Кто должен участвовать в проектировании.
- Как узнать, что оптимизировать.
- Как измерять производительность REST API.
Паттерны и антипаттерны.
- Почему pagination - это плохо, и на что лучше заменить.
- Проблема N+1 и как с ней бороться.
- Бесполезные данные - как обнаружить и уничтожить.
- Как не ломать кэширование на клиенте.
- Эффективная работа с интерфейсами "мастер-детали".
Кэширование.
- Три слоя кэширования.
- Самый быстрый запрос - тот, которого не было. Как увеличить их количество.
- Экономия трафика.
- Исключение ненужных вычислений.
- Подходы к инвалидации кэша.
Приемы оптимизации работы с API на клиенте.
- Параллельные запросы.
- Эффективный разбор данных.
- In-memory DB на клиенте.
- Стратегии кэширования на клиенте.
Иван Стеценко: ЯП Zephir. Панацея или лечение?Oleg Poludnenko
Доклад с PUG#6 https://www.facebook.com/events/837043689707114/
Поговорим о:
- сути интерпретируемого PHP, обсудим, как с этим жить;
- панацее Zephir. «А что там под капотом?»;
- наглядном профите. Поиграем с Symfony, Yii, Magento;
- будущем Zephir.
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Универсальный сигнатурный анализ кода на C#, Java, PHPИван Кочуркин
В данном докладе затронуты такие темы, как теория и проблемы парсинга, построение и обход абстрактных синтаксических деревьев (AST) и разработка предметно-ориентированного языка (DSL).
Рассматриваются такие проблемы парсинга, как разбор контекстно-зависимых языков, обработка ошибок и др. В качестве примера применения теории приведена грамматика PHP, разработанная для генератора парсеров ANTLR.
Далее рассматриваются структура унифицированного AST, методы его обхода и сопоставления с паттернами.
Завершающей частью презентации является описание DSL, разработанного с целью записи существующих и будущих паттернов. Также приведены примеры некоторых паттернов для лучшей усвояемости материала.
Дизайн REST API для высокопроизводительных систем / Александр Лебедев (Новые ...Ontico
Доклад осветит вопросы устройства REST API для веб-приложений и мобильных клиентов, от которых требуется высокая производительность.
Проектирование высокопроизводительных REST API.
- Кто должен участвовать в проектировании.
- Как узнать, что оптимизировать.
- Как измерять производительность REST API.
Паттерны и антипаттерны.
- Почему pagination - это плохо, и на что лучше заменить.
- Проблема N+1 и как с ней бороться.
- Бесполезные данные - как обнаружить и уничтожить.
- Как не ломать кэширование на клиенте.
- Эффективная работа с интерфейсами "мастер-детали".
Кэширование.
- Три слоя кэширования.
- Самый быстрый запрос - тот, которого не было. Как увеличить их количество.
- Экономия трафика.
- Исключение ненужных вычислений.
- Подходы к инвалидации кэша.
Приемы оптимизации работы с API на клиенте.
- Параллельные запросы.
- Эффективный разбор данных.
- In-memory DB на клиенте.
- Стратегии кэширования на клиенте.
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Теории и практики фунционального программирования - GDG D2D0xffAA
Большинство разработчиков, к сожалению, считают функциональное программирование чем-то страшным и не понятным, но это совершенно не так. В своем докладе я хочу показать мощь и простоту функционального подхода, рассказать о базовых концепциях и о том, как с их помощью можно делать привычные вещи удивительным образом, а так же расскажу о новых приемах.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
Программирование как способ выражения мыслей. Levon Avakyan
Я расскажу на простейших примерах как функционирует современный компьютер, какие языки программирования бывают, для чего они используются, какие парадигмы лежат в их основе. По сути, язык программирования это инструмент, с помощью которого можно рассказать машине, чего же мы от неё хотим, тем самым воплотив свои мысли.
Теории и практики фунционального программирования - GDG D2D0xffAA
Большинство разработчиков, к сожалению, считают функциональное программирование чем-то страшным и не понятным, но это совершенно не так. В своем докладе я хочу показать мощь и простоту функционального подхода, рассказать о базовых концепциях и о том, как с их помощью можно делать привычные вещи удивительным образом, а так же расскажу о новых приемах.
Андрей Карпов, Приватные байки от разработчиков анализатора кодаSergey Platonov
Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
Синтаксис объявления классов. Атрибуты, связанные и несвязанные методы, __dict__, __slots__. Статические методы и методы класса. Свойства, декоратор @property. Наследование, перегрузка методов и функция super. Декораторы классов. Магические методы.
2. О себе
• Девелопер с 1998 года.
• Писал индустриальные системы на PHP.
• Теперь на RoR.
3. Как определить
неофита?
• Толстые контроллеры
• Беспокойство
• Желание “работать” с предельными
условиями
4. Самый простой
способ?
def foobar
x = self.bar
x = nil if x == 0
y = foo
return x || y
end
5. Return
• Самый неочевидный оператор для
новичков
• Функция его наиболее отличается от
таковой в других языках
6. return для flow-control
def foobar
if foo?
if bar?
#do something
return 42
else
#do something
end
else
#do something
end
end
7. if || unless
if !params[:query].blank?
if !something unless something
8. unless?
• Как ни странно, это единственное для
чего он нужен.
• Читать логику объединенную and/or при
этом применяя к ней ! сложно.
• У него нет elsunless (нельзя сказать, что
это минус).
9. If/else vs. unless
def possible_parents
if self.new_record?
Category.first_level
else
Category.first_level.where('id != ?', self.id)
end
end
vs.
scope :not_given, lambda{|id| where('id != ?', id)}
def possible_parents
Category.first_level
Category.first_level.not_given(self.id) unless self.new_record?
end
10. Виды беспокойства
• Боязнь пользователя (глупого или
злонамерянного).
• Боязнь предельных условий.
• Боязнь языка. Недостаток времени для
экспериментов.
• Иллюзия контроля.
11. Боязнь пользователя
Код из контроллера в админке
@role = Role.find params[:id]
redirect_to role_index_path and return unless @role
Программист боится неправильного параметра.
При этом он забывает о том, что find выбрасывает
exception.
12. Боязнь предельных
условий
session[:foo] = params[:foo].blank? ? nil :
params[:foo].to_i
VS.
session[:foo] = params[:foo] ? params[:foo] : nil
13. Боязнь языка
scope :with_state, lambda {|state| where('state = ?',
state.to_s)}
scope :ready_for_start, with_state(:foo)
scope :ready_for_close, where('state IN(?)',
[:foo, :bar])
“А вдруг он не приведет символ к строке?”
scope :with_states, lambda {|s| where("state in
(#{s.map{|e| "'#{e.to_s}'"}.join(',')})")}
14. Иллюзия контроля
def self.find_for_facebook_oauth(access_token,
signed_in_resource=nil)
data = access_token['extra']['user_hash']
if user = User.find_by_email(data["email"])
user
else # Create a user with a stub password.
user = User.create do |record|
record.email = data['email']
record.password = Devise.friendly_token[0,20]
record.registration_source = 1
record.skip_confirmation!
end
end
end
16. Ослепление
беспокойством 2
def self.to_rtf(codes)
codes.inject("") {|code, buffer| buffer << code.value << "n"}
end
Это был рефакторинг
17. Ослепление
беспокойством 3
def self.to_rtf(codes)
codes.map(&:value).join("n")
end
А это то, что на самом деле было нужно.
18. Знай свои
инструменты
before_filter :guests_only!
def guests_only!
redirect_to root_url and return if user_signed_in?
end
Зачем тут return?
19. Разгадка
• Программист не знает, как работает
before_filter.
• Он беспокоится, что код контроллера
будет выполняться после редиректа в
фильтре.
• От своего беспокойства он забывает как
о том, что нужно возвращать false, так и о
том, что после редиректа это уже лишнее.
20. Более простое
объяснение
• Код был перенесен в фильтр из экшена.
• Программисту просто не хочется его
переписывать, потому как кажется, что
этот возврат нужен (возвращаемся к
исходному объяснению).
21. Metaprogramming to
the recsue
if permission.can?
can permission.action.to_sym, subject
else
cannot permission.action.to_sym, subject
end
vs.
method = permission.can? ? :can : :cannot
send method, permission.action.to_sym, subject
22. Способы борьбы
• Знание языка
• Критический взгляд на свой код
• Let it fail (hoptoad в помощь)