Стас Рудаков, компания СООО "Гейм Стрим"/Wargaming.net
Значение логов очень часто недооценивается, а зря. Доклад с оживленным диспутом со всеми участниками митапа, чтобы разобраться: как, куда и зачем писать логи. Помимо этого затронут вопрос, как из логов выжать больше информации.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
«Парсим CSS», Роман Дворнов (Avito)
В ходе работы над CSSO мне пришлось погрузиться в процесс парсинга CSS. В результате парсер (тот, что в CSSO) был не раз переписан. Пришло время сделать его отдельным инструментом. Новый быстрый детальный парсер CSS, его AST, области применения и кое-что ещё.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Python Meetup
Как скачать статистику игроков World of Tanks за одну ночь / Павел Пересторонин
Как при помощи Requests, Asyncio и Aiohttp перестать использовать многопоточный код? На примере Wargaming Public API Павел покажет, как однопоточный асинхронный код может оказаться эффективнее в исполнении и проще в отладке, чем наивный многопоточный.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Python Meetup
Machine learning with Python / Олег Шидловский / Web developer Doist
Олег расскажет о базовых концепциях Machine learning и покажет примеры работы с библиотеками, при помощи которых можно легко решать задачи, связанные с машинным обучением.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
«Парсим CSS», Роман Дворнов (Avito)
В ходе работы над CSSO мне пришлось погрузиться в процесс парсинга CSS. В результате парсер (тот, что в CSSO) был не раз переписан. Пришло время сделать его отдельным инструментом. Новый быстрый детальный парсер CSS, его AST, области применения и кое-что ещё.
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Как скачать статистику игроков World of Tanks / Павел Пересторонин [Python Me...Python Meetup
Как скачать статистику игроков World of Tanks за одну ночь / Павел Пересторонин
Как при помощи Requests, Asyncio и Aiohttp перестать использовать многопоточный код? На примере Wargaming Public API Павел покажет, как однопоточный асинхронный код может оказаться эффективнее в исполнении и проще в отладке, чем наивный многопоточный.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Machine learning with Python / Олег Шидловский / Doist [Python Meetup 27.03.15] Python Meetup
Machine learning with Python / Олег Шидловский / Web developer Doist
Олег расскажет о базовых концепциях Machine learning и покажет примеры работы с библиотеками, при помощи которых можно легко решать задачи, связанные с машинным обучением.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Почему я пишу хороший код, но его никто не ценит, кроме моей мамы / Павел Меш...Python Meetup
Со временем для разработчика становится недостаточно одних технических скиллов. Павел в своей презентации поделится болью, негативным опытом и полезными советами как избежать его же ошибок.
Максим Барышников "Wargaming: тыл - фронту!"
Чтобы игра стала успешной (а из успешной превратилась в легендарную), недостаточно самой игры, сколь бы хороша она ни была. Помимо всего прочего, действительно массовой игре нужна очень развитая веб-часть. О ней и пойдет речь.
Redis – это инструмент, который должен быть в арсенале любого разработчика. В докладе Роман расскажет, как Redis помогает Todoist обслуживать сотни тысяч пользователей и подкупает простотой и изяществом своих решений.
Автор: Роман Иманкулов (компания Doist.io).
В докладе рассмотрим и выясним, что такое async envenloop, что из себя представялет Twisted, когда он может понадобиться и чего от него не стоит ожидать; концепция Deferred; взаимодействие с RDBMS и другими синхронными библиотеками; Application Framework; Twisted Web и т.п.
Автор: Андрей Жлобич (Wargaming.net)
Про асинхронность / Максим Щепелин / Web Developer WargamingPython Meetup
Речь пойдет о двух языках: Python и Javascript. Максим расскажет об асинхронной работе Python и Javascript, что даст возможность слушателям приобщиться к особой касте разработчиков, работающих с Twisted.
Артем Первухин "Язык программирования GO"
В докладе будет рассказано, чем сможет заинтересовать Python-разработчика язык программирования Go. Будут описаны базовые идиомы языка Go и даны ответы на следующие вопросы: Насколько применим к Go "Zen of Python"? Какая у этого языка область применения? В чём можно выиграть, использовав Go вместо Python?
Распространено мнение, что навык пакетирования своих наработок необходим только гуру в Open Source. Стас развенчал этот миф и показал несколько практических задач, решаемых при помощи пакетирования кода.
S.O.L.I.D. - Павел Кохан, Python Meetup 26.09.2014Python Meetup
Ежедневно разработчикам приходится писать десятки классов для разного рода функционала. Этот функционал может быть связан между собой или иметь разные функции. Нередко, сопровождая чужой код, программист, который более или менее понимает как должен реализовываться класс, видит картину, где, к примеру, класс «Товар» изменяет баланс клиента. По сути это в корне неверно!
Доклад будет рассматривать такую проблему как правильного написания классов. Данные 5 принципов можно применять к любому объектно-ориентированному языку, но в рамках Python meetup примеры будут продемонстрированы на python.
Данный доклад рассматривает 5 основных принципов, где каждая буква в аббревиатуре обозначает свой принцип.
S – Single responsibility principle (Принцип единой обязанности):
O – Open/Closed principle (Принцип Открытости/Закрытости)
L – Liskov substitution principle (Принцип постановки Барбары Лисков)
I – Interface segregation principle (Принцип разделения интерфейса)
D – Dependency inversion principle (Принцип инверсий зависимостей)
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python Meetup
Python AST: между исходным текстом и байт-кодом / Николай Карелин / Системный архитектор VPI Development Center
Николай познакомит слушателей с деталями устройства Python AST и, в частности, расскажет некоторые интересные факты о работе диалекта Hy.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Доклад о подходе к отслеживанию потоков данных, формирующих окружение, в котором пользователь решает свои задачи.
На примере реализации для конкретного фреймворка будет озвучена идея, как сделать инструмент для отслеживания изменений данных на странице приложения для вашего технологического стека.
Целевая аудитория
Разработчики крупных web-приложений, регулярно сталкивающиеся с проблемой, как уследить за изменением большого количества данных, формирующих интерфейс пользователя, решающих задачу эффективно разобраться с потоками данных для устранения неполадок приложения.
Человеческий организм устроен сложно. Если с ним что-то не так, то для диагностики используют магнитно-резонансный томограф.
Большие одностраничные приложения тоже устроены сложно. Чтобы их починить или обвесить новым функционалом, требуется вникнуть в их устройство. Для этого нередко приходится засучивать рукава и с головой погружаться в самую глубь проекта. И немалая часть проблем связана именно с бизнес логикой и потоками данных. Но что если у нас будет возможность проникнуть в структуру данных, способ увидеть связи между ними и отслеживать то, как они влияют друг на друга? Такой способ, чтобы не требовалось вскрытия скальпелем - все как с МРТ.
В докладе речь пойдет о собственных разработках в этой области.
Доклад о подходе к отслеживанию потоков данных, формирующих окружение, в котором пользователь решает свои задачи. На примере реализации для конкретного фреймворка будет озвучена идея, как уследить за изменением данных на странице.
Подробнее:
Человеческий мозг устроен сложно. Если с ним что-то не так, то для диагностики используют магнитно-резонансный томограф.
Большие одностраничные приложения тоже устроены сложно. Чтобы их починить или обвесить новым функционалом, требуется вникнуть в их устройство. Для этого нередко приходится засучивать рукава и с головой погружаться в самую глубь проекта. И немалая часть проблем связана именно с бизнес-логикой и потоками данных. Но что, если у нас будет возможность проникнуть в структуру данных, способ увидеть связи между ними и отслеживать то, как они влияют друг на друга? Такой способ, чтобы не требовалось вскрытия черепной коробки — все как с МРТ.
В докладе речь пойдет о собственных разработках в этой области.
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
Мониторинг – важная часть работы хорошего сервиса. Мало просто протестировать релиз, надо также убедиться, что код работает у пользователей и работает правильно. В докладе я расскажу про логирование js-ошибок при разных способах загрузки js, подводных камнях, способах их обойти, а также почему это надо делать.
При написании программы, разработчик примерно представляет себе, как должна работать его программа. Но не всегда его ожидания соответствуют действительности — приложения тормозят, потребляют много ресурсов и вообще ведут себя не так, как задумывалось, особенно под большой нагрузкой. В своём докладе я покажу, как заглянуть "под капот" ваших приложений на Python (и Django в частности): какие способы профилирования бывают и когда их можно использовать, расскажу об отладке приложений и различных инструментах, которые помогают разработчику при разработке.
В лекции рассказано о доступных средствах по отладке веб-сайтов, их возможностях, а также способах их использования. Также речь пойдет о том, как искать ошибки у пользователей в продакшене и контролировать качество продукта.
[Defcon Russia #29] Михаил Клементьев - Обнаружение руткитов в GNU/LinuxDefconRussia
Руткиты в мире основанных на ядре Linux операционных систем уже не являются редкостью. Рассказ будет о том, как попытки в современных реалиях определить то, скомпрометирована ли система, привели к неожиданному результату.
«Статический анализ: гордость и предубеждения», Алексей Кузьменко, аналитик И...Mail.ru Group
Анализ кода — один из эффективных подходов к выявлению дефектов на этапе разработки программного обеспечения. Это позволяет избежать тривиальных и не очень ошибок, которые могут приводить к появлению уязвимостей. Существует ряд подходов, применяемых в анализаторах, на основании которых производится анализ, позволяющий снижать риски. Однако возникает ряд предубеждений, ведь не всегда предупреждение анализатора является реальным дефектом, тем более, что не всякий дефект является уязвимостью.
"Построение рекомендательной системы на Python" Василий Лексин (Avito)AvitoTech
В своём докладе ведущий аналитик Avito Василий Лексин поделится опытом построения рекомендательной системы для всех general категорий. Из рассказа вы узнаете, как создать такую систему с нуля, в том числе: как подготовить данные, обучить модель и сгенерировать рекомендации.
Python Data Science meetup @ Avito 13.08.2016
Роман Иманкулов, компания Doist.io.
Доклад об анализе данных и посвящен преимущественно тем, кто хочет попробовать, но не знает с чего начать. О том, кому это вообще надо, где брать данные, какие инструменты есть в распоряжении начинающего python-аналитика и какую пользу для себя из всего можно извлечь на старте.
Найти видео презентации можно здесь: http://habrahabr.ru/company/wargaming/
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные...Python Meetup
Автор: Роман Иманкулов (doist.io)
Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.
Использование gevent для эмуляции высокой нагрузкиPython Meetup
Автор: Александр Колесень (SiliconMint)
Обязательное действие перед выпуском более-менее серьёзного проекта — тестирование производительности. На высоконагруженных проектах нужно точно знать, какую нагрузку они могут выдержать, причём заранее. Следовательно, нужен способ эмуляции высокой конкурентности, желательно чтобы в теории он позволял полностью загрузить канал траффиком. К тому же, неплохо было бы, чтобы для этого не нужно было использовать несколько десятков серверов. В докладе будет рассказано об опыте использования gevent для подобной задачи, что позволило бы обойтись одним t1.micro инстансом, с которого выполняется тестирование.
Автор: Андрей Нехайчик (Wargaming.net | COOO «Гейм Стрим»)
— Треды, отличия от потоков.
— Как использовать треды.
— Тестирование производительности (и облом).
— Представление GIL, как он работает.
— Освобождение по I/O, 100 тиков.
— Зачем нужен GIL.
— Проблемы переключения потоков (медленный захват).
— Проблема 100 тиков.
— Проблема отсутствия приоритетов и их типов.
— Новый GIL, 5 миллисекунд, drop_request.
— Когда drop_request не работает.
— Соревнование CPU и I/O тредов.
— Как борются с GIL: тезисы о numpy, Jython, multiprocessing.
В докладе раскрыты слабые места Python, проблемы с GC, функциональным стилем, реализацией стандартных структур данных и интерпретатора CPython.
Автор: Кирилл Лашкевич
Социальный игровой сервер на Python: от первого коммита до продакшенаPython Meetup
Важными потребностями современного человека являются: общение с другими людьми и игры. На стыке двух этих потребностей и возникли различные игровые приложения в социальных сетях. Обычно такие приложения требуют наличия серверной стороны, способной справляться с высокими нагрузками. В данном докладе Алексей делится опытом разработки серверов на Python для социальных игр, начиная от этапа разработки дизайнерского документа и заканчивая выпуском игры в продакшн и её дальнейшей поддержкой.
Автор: Алексей Романов
Почему стоит все чаще задумывать о поддержке Python 3 и с какими проблемами можно столкнуться при портировании. Рассмотрим на примерах из Sentry (https://github.com/getsentry/sentry) как добавить поддержку Python 3 с использованием 2to3 (http://docs.python.org/3.3/library/2to3.html), tox (http://tox.readthedocs.org/en/latest/) и six (http://pythonhosted.org/six/).
Автор: Никита Гришко (Wargaming.net)
3. Про что будем говорить?
Про логгирование, Стас Рудаков
4. Про что будем говорить?
Про логгирование, там же было написано :)
Про логгирование, Стас Рудаков
5. Про что будем говорить?
Про логгирование, там же было написано :)
А именно:
зачем;
как;
проблемы;
очевидные пути решения;
неочевидные пути решения;
open source инструменты.
Про логгирование, Стас Рудаков
7. Что вообще значит “записать в лог”?
сформировать сообщение
Про логгирование, Стас Рудаков
8. Что вообще значит “записать в лог”?
сформировать сообщение
по некому событию
Про логгирование, Стас Рудаков
9. Что вообще значит “записать в лог”?
сформировать сообщение
по некому событию
и, если это сообщение нас вообще интересует,
Про логгирование, Стас Рудаков
10. Что вообще значит “записать в лог”?
сформировать сообщение
по некому событию
и, если это сообщение нас вообще интересует,
записать или отправить его куда-то,
Про логгирование, Стас Рудаков
11. Что вообще значит “записать в лог”?
сформировать сообщение
по некому событию
и, если это сообщение нас вообще интересует,
записать или отправить его куда-то,
куда имеют доступ заинтересованные лица.
Про логгирование, Стас Рудаков
15. Писать логи очень просто
1
import logging
2
3
4
5
6
7
logging . basicConfig (
format = ’ [%( asctime ) s ][%( levelname ) s ][%( name ) s ] %( message ) s ’ ,
stream = sys . stdout ,
level = logging . INFO
)
8
9
10
logger = logging . getLogger ( " meetup . python . minsk " )
logger . info ( " Stas has just started the talk on logging " )
Про логгирование, Стас Рудаков
16. Писать логи очень просто
1
import logging
2
3
4
5
6
7
logging . basicConfig (
format = ’ [%( asctime ) s ][%( levelname ) s ][%( name ) s ] %( message ) s ’ ,
stream = sys . stdout ,
level = logging . INFO
)
8
9
10
1
logger = logging . getLogger ( " meetup . python . minsk " )
logger . info ( " Stas has just started the talk on logging " )
[2014 -01 -31 06:23:27 ,904][ INFO ][ meetup . python . minsk ] Stas has
just started the talk on logging
Про логгирование, Стас Рудаков
17. logging: архитектура на пальцах
сформировать сообщение
по некому событию
и, если это сообщение нас вообще
интересует,
записать или отправить его куда-то,
куда имеют доступ
заинтересованные лица.
Про логгирование, Стас Рудаков
24. tips n tricks: уровни логгирования
Про логгирование, Стас Рудаков
25. tips n tricks: уровни логгирования
CRITICAL = 50
logger.critical(u’проблема, после которой приложение не может
восстановиться без постороннего вмешательства’)
Про логгирование, Стас Рудаков
26. tips n tricks: уровни логгирования
CRITICAL = 50
logger.critical(u’проблема, после которой приложение не может
восстановиться без постороннего вмешательства’)
ERROR = 40
logger.error(u’проблема, из-за которой приложение работает не в
штатном режиме’)
Про логгирование, Стас Рудаков
27. tips n tricks: уровни логгирования
CRITICAL = 50
logger.critical(u’проблема, после которой приложение не может
восстановиться без постороннего вмешательства’)
ERROR = 40
logger.error(u’проблема, из-за которой приложение работает не в
штатном режиме’)
WARNING = 30 # уровень по умолчанию
logger.warning(u’проблема, которая не мешает работе приложения, но
на которую стоит обратить внимание’)
Про логгирование, Стас Рудаков
28. tips n tricks: уровни логгирования
CRITICAL = 50
logger.critical(u’проблема, после которой приложение не может
восстановиться без постороннего вмешательства’)
ERROR = 40
logger.error(u’проблема, из-за которой приложение работает не в
штатном режиме’)
WARNING = 30 # уровень по умолчанию
logger.warning(u’проблема, которая не мешает работе приложения, но
на которую стоит обратить внимание’)
INFO = 20
logger.info(u’обычная запись в лог’)
Про логгирование, Стас Рудаков
29. tips n tricks: уровни логгирования
CRITICAL = 50
logger.critical(u’проблема, после которой приложение не может
восстановиться без постороннего вмешательства’)
ERROR = 40
logger.error(u’проблема, из-за которой приложение работает не в
штатном режиме’)
WARNING = 30 # уровень по умолчанию
logger.warning(u’проблема, которая не мешает работе приложения, но
на которую стоит обратить внимание’)
INFO = 20
logger.info(u’обычная запись в лог’)
DEBUG = 10
logger.debug(u’логи, которые помогли нам при отладке приложения и
которые вряд ли пригодятся в будущем’)
Про логгирование, Стас Рудаков
30. tips n tricks: traceback
1
try :
2
do_ s o me t hi n g_ u n sa f e ()
except Exception as e :
logger . exception ( ’ Unexpected exception ’)
raise
3
4
5
Про логгирование, Стас Рудаков
31. tips n tricks: traceback
1
try :
2
do_ s o me t hi n g_ u n sa f e ()
except Exception as e :
logger . exception ( ’ Unexpected exception ’)
raise
3
4
5
В лог отправится:
1
2
3
4
5
6
7
8
9
[2014 -01 -29 23:35:04 ,393][ examples ][ ERROR ] Unexpected exception
Traceback ( most recent call last ) :
File " stacktrace1 . py " , line 22 , in < module >
d o_ s o me t hi n g_ u n sa f e ()
File " stacktrace1 . py " , line 18 , in do _ so m e th i ng _ u ns a fe
down_rabbit_hole ()
File " stacktrace1 . py " , line 17 , in down_rabbit_hole
sender = message . sender
AttributeError : ’ NoneType ’ object has no attribute ’ sender ’
Про логгирование, Стас Рудаков
32. tips n tricks: traceback
1
try :
2
validate_data ( data )
except ValidationError as e :
logger . exception ( ’ Validation failed ’)
3
4
А в лог запишется
1
2
3
4
5
6
7
8
9
[2014 -01 -29 08:33:53 ,439][ examples ][ ERROR ] Validation failed
Traceback ( most recent call last ) :
File " stacktrace2 . py " , line 27 , in < module >
validate_data ( data )
File " stacktrace2 . py " , line 22 , in validate_data
check_values ( data )
File " stacktrace2 . py " , line 21 , in check_values
raise ValidationError ( ’ security key is missing ’)
ValidationError : security key is missing
Про логгирование, Стас Рудаков
33. tips n tricks: traceback
1
try :
2
validate_data ( data )
except ValidationError as e :
logger . exception ( ’ Validation failed ’)
3
4
А в лог запишется
1
2
3
4
5
6
7
8
9
[2014 -01 -29 08:33:53 ,439][ examples ][ ERROR ] Validation failed
Traceback ( most recent call last ) :
File " stacktrace2 . py " , line 27 , in < module >
validate_data ( data )
File " stacktrace2 . py " , line 22 , in validate_data
check_values ( data )
File " stacktrace2 . py " , line 21 , in check_values
raise ValidationError ( ’ security key is missing ’)
ValidationError : security key is missing
Но разве уровень ERROR нам подходит?
Про логгирование, Стас Рудаков
34. tips n tricks: traceback
1
try :
2
validate_data ( data )
except ValidationError as e :
logger . warning ( ’ Validation failed ’ , exc_info = True )
3
4
Получаем
1
2
3
4
5
6
7
8
9
[2014 -01 -29 08:33:53 ,439][ examples ][ WARNING ] Validation failed
Traceback ( most recent call last ) :
File " stacktrace2 . py " , line 27 , in < module >
validate_data ( data )
File " stacktrace2 . py " , line 22 , in validate_data
check_values ( data )
File " stacktrace2 . py " , line 21 , in check_values
raise ValidationError ( ’ security key is missing ’)
ValidationError : security key is missing
Про логгирование, Стас Рудаков
35. tips n tricks: “ленивое” форматирование
1
2
3
logger . info (
’ Request id =% s message =% r ’ % (100500 , { ’ event ’: ’ meetup ’ })
)
Про логгирование, Стас Рудаков
36. tips n tricks: “ленивое” форматирование
1
2
3
logger . info (
’ Request id =% s message =% r ’ % (100500 , { ’ event ’: ’ meetup ’ })
)
Зачем форматировать строку, если мы не знаем, попадет ли она в лог?
Про логгирование, Стас Рудаков
37. tips n tricks: “ленивое” форматирование
1
2
3
logger . info (
’ Request id =% s message =% r ’ % (100500 , { ’ event ’: ’ meetup ’ })
)
Зачем форматировать строку, если мы не знаем, попадет ли она в лог?
1
2
3
logger . info (
’ Request id =% s message =% r ’ , 100500 , { ’ event ’: ’ meetup ’}
)
Про логгирование, Стас Рудаков
38. tips n tricks: “ленивое” форматирование
1
2
3
logger . info (
’ Request id =% s message =% r ’ % (100500 , { ’ event ’: ’ meetup ’ })
)
Зачем форматировать строку, если мы не знаем, попадет ли она в лог?
1
2
3
logger . info (
’ Request id =% s message =% r ’ , 100500 , { ’ event ’: ’ meetup ’}
)
*args работают, **kwargs не работают
Про логгирование, Стас Рудаков
39. tips n tricks: ротация
в один прекрасный день. . .
Про логгирование, Стас Рудаков
40. tips n tricks: ротация
в один прекрасный день. . . no space left on device
Про логгирование, Стас Рудаков
41. tips n tricks: ротация
в один прекрасный день. . . no space left on device
from logging.handlers import *
1
2
3
4
5
1
2
3
4
5
Rotating Fi l eH a n dl e r (
filename , mode = ’a ’ ,
maxBytes =0 , backupCount =0 ,
encoding = None , delay = False
)
$ ls logs
meetup . log
meetup . log .1
meetup . log .2
meetup . log .3
Про логгирование, Стас Рудаков
42. tips n tricks: ротация
в один прекрасный день. . . no space left on device
from logging.handlers import *
1
2
3
4
5
1
2
3
4
5
Rotating Fi l eH a n dl e r (
filename , mode = ’a ’ ,
maxBytes =0 , backupCount =0 ,
encoding = None , delay = False
)
1
$ ls logs
meetup . log
meetup . log .1
meetup . log .2
meetup . log .3
1
Про логгирование, Стас Рудаков
2
3
4
5
2
3
4
5
T i m e d Ro t a t i n g F i l e H a n d l e r (
filename ,
when = ’h ’ , interval =1 ,
backupCount =0 , encoding = None ,
delay = False , utc = False )
$ ls logs
meetup . log
meetup . log .2014 -01 -31 _17
meetup . log .2014 -01 -31 _18
meetup . log .2014 -01 -31 _19
43. tips n tricks: ротация
в один прекрасный день. . . no space left on device
from logging.handlers import *
1
2
3
4
5
1
2
3
4
5
Rotating Fi l eH a n dl e r (
filename , mode = ’a ’ ,
maxBytes =0 , backupCount =0 ,
encoding = None , delay = False
)
1
$ ls logs
meetup . log
meetup . log .1
meetup . log .2
meetup . log .3
1
2
3
4
5
2
3
4
5
T i m e d Ro t a t i n g F i l e H a n d l e r (
filename ,
when = ’h ’ , interval =1 ,
backupCount =0 , encoding = None ,
delay = False , utc = False )
$ ls logs
meetup . log
meetup . log .2014 -01 -31 _17
meetup . log .2014 -01 -31 _18
meetup . log .2014 -01 -31 _19
Если варианты выше не подходят, можно использовать утилиту logrotate и
1
Wa tc he dFi le Ha ndl er ( fname , mode = ’a ’ , encoding = None , delay = False )
Про логгирование, Стас Рудаков
45. Sentry - это. . .
open source
аггрегатор
сообщений об
ошибках,
написанный на
Python +
Django +
Celery,
с клиентами
для многих
языков и
платформ.
Про логгирование, Стас Рудаков
49. Sentry: как подключить
1
2
3
4
5
6
7
from raven . handlers . logging import SentryHandler
handler = SentryHandler ( ’ http :// public : secret@example . com /1 ’ ,
level = logging . WARNING )
logger = logging . getLogger ( ’ coffeemaker ’)
logger . addHandler ( handler )
logger . warning ( ’ We are running out of milk ’)
logger . error ( ’ Not enough milk for a cappuccino ’)
Про логгирование, Стас Рудаков
50. Sentry: как подключить
1
2
3
4
5
6
7
from raven . handlers . logging import SentryHandler
handler = SentryHandler ( ’ http :// public : secret@example . com /1 ’ ,
level = logging . WARNING )
logger = logging . getLogger ( ’ coffeemaker ’)
logger . addHandler ( handler )
logger . warning ( ’ We are running out of milk ’)
logger . error ( ’ Not enough milk for a cappuccino ’)
HTTP? Cерьезно?
Про логгирование, Стас Рудаков
51. А теперь давайте вспомним, что мы с этими логами собирались делать
Debug
Разбор инцидентов
Про логгирование, Стас Рудаков
52. А теперь давайте вспомним, что мы с этими логами собирались делать
Debug
Разбор инцидентов
Сбор статистики
Средне- и долгосрочный мониторинг
Инструмент для службы поддержки пользователей
Аналитика
Про логгирование, Стас Рудаков
53. Назад в будущее
Современные вызовы:
хотим убедиться, что логи не были модифицированы злоумышленником
после взлома;
переходим от программ к сложным распределенным системам — хочется
иметь логгирование уровня всей системы, а не отдельных приложений;
быстрый поиск;
метрики.
Про логгирование, Стас Рудаков
56. elasticsearch - это. . .
распределенный
полнотекстовый
поисковый движок
c RESTful web-интерфейсом,
с документами без схемы
и возможностями аггрегации документов.
Про логгирование, Стас Рудаков
57. elasticsearch - это. . .
распределенный
полнотекстовый
поисковый движок
c RESTful web-интерфейсом,
с документами без схемы
и возможностями аггрегации документов.
Написан на Java
с использованием библиотеки Apache Lucene.
Используется в Mozilla, GitHub и многих других компаниях
(если вам нужно убедить своего менеджера).
Про логгирование, Стас Рудаков
58. elasticsearch - это. . .
распределенный
полнотекстовый
поисковый движок
c RESTful web-интерфейсом,
с документами без схемы
и возможностями аггрегации документов.
Написан на Java
с использованием библиотеки Apache Lucene.
Используется в Mozilla, GitHub и многих других компаниях
(если вам нужно убедить своего менеджера).
Но как связать логгирование и elasticsearch?
Про логгирование, Стас Рудаков
62. structlog — последний ингридиент
1
2
3
4
5
6
>>> from structlog import get_logger
>>> log = get_logger ()
>>> log = log . bind ( user = ’ anonymous ’ , some_key =23)
>>> log = log . bind ( user = ’ hynek ’ , another_key =42)
>>> log . info ( ’ user . logged_in ’ , happy = True )
some_key =23 user = ’ hynek ’ another_key =42 happy = True event = ’ user .
logged_in ’
http://www.structlog.org/
Про логгирование, Стас Рудаков
63. Что мы не объяли?
Syslog Protocol
Логи в реляционной базе данных
journald
logplex, fluentd
Агенты для сбора логов
Что, собственно, писать в логи.
Про логгирование, Стас Рудаков
64. Выводы
Батарейка logging вполне подходит для 95% случаев1 .
1
По статистике, не стоит доверять 75% статистики
Про логгирование, Стас Рудаков
65. Выводы
Батарейка logging вполне подходит для 95% случаев1 .
Архитектуры систем логгирования похожи как на микро, так и на макро
уровне.
1
По статистике, не стоит доверять 75% статистики
Про логгирование, Стас Рудаков
66. Выводы
Батарейка logging вполне подходит для 95% случаев1 .
Архитектуры систем логгирования похожи как на микро, так и на макро
уровне.
Open source инструменты помогают выжать из логов очень много полезных
свойств.
1
По статистике, не стоит доверять 75% статистики
Про логгирование, Стас Рудаков
67. Выводы
Батарейка logging вполне подходит для 95% случаев1 .
Архитектуры систем логгирования похожи как на микро, так и на макро
уровне.
Open source инструменты помогают выжать из логов очень много полезных
свойств.
Я вас всех порядочно утомил.
1
По статистике, не стоит доверять 75% статистики
Про логгирование, Стас Рудаков