Fork me on GitHub

Июнь 24–25

PyCon Russia 2019

Рус Eng

Антон Брагин, JetBrains

Jupyter Notebooks — There is a Better Way

Ноутбуки для научных вычислений, в частности, Jupyter для Python, необычайно популярны, с ними работают как начинающие Python-программисты, так и профессионалы в области Data Science, а общее количество пользователей оценивается в шесть миллионов. Однако у Jupyter есть и противники, которые утверждают, что использование ноутбуков несовместимо с хорошими практиками программирования, полученные результаты зачастую невоспроизводимы, а интерактивная разработка осложнена отсутствием явной связи между кодом ноутбука и состоянием работающего вычислительного ядра.

В докладе будут проанализированы наиболее острые из проблем, возникающих при работе с Jupyter, и рассмотрены подходы и инструменты, позволяющие устранить эти проблемы или снизить их остроту.

Доклад будет интересен как любителям Jupyter, готовым под критическим углом взглянуть на саму концепцию ноутбуков для научных вычислений, так и его ненавистникам, которые не против дать Jupyter второй шанс, а также всем, кому интересны вопросы анализа и представления данных с использованием Python.

Ришат Ибрагимов, Яндекс

Квантовое программирование на Python: учимся на примерах

Многие слышали о квантовых компьютерах и о фантастических возможностях, которые они открывают. Но не многие знают, что технологии дошли до такого уровня, что уже сегодня любой желающий может написать простую программу на Python и запустить ее на реальном квантовом вычислителе. Разберем на примерах с кодом основы квантовых вычислений, научимся запускать программы на локальном симуляторе и удаленном квантовом компьютере.

Александр Хаёров, Chainstack

Прощай, Virtual Environments?

Python разработчику представлена огромная свобода по управлению зависимостями в отличие от прочих языков программирования. Почему так произошло и как это можно увязать с принципами дзена? Должен ли быть лишь один инструмент для управления зависимостями? В последние годы заметную популярность набрали Pipenv и Poetry. А еще опубликован PEP 517 (изоляция сборки), и что в нем напророчено нам? Я постараюсь ответить на все эти вопросы и расскажу, к чему готовиться, учитывая DevOps практики и наш собственный опыт.

Никита Гришко, Flo Health Inc

Evolution of dependency management

Если вы пишете на Python, то вы используете виртуальные окружения и pip для установки пакетов в них. Вероятно, у вас в проекте есть requirements.txt со всеми вашими зависимостями, а то и два, например requirements-dev.txt. Но что, если я вам скажу, что у этого старого доброго подхода есть проблемы и что существует не один инструмент, который пытается их решить?

В рамках доклада мы взглянем на существующие проблемы управления зависимостями и посмотрим, как разработчики пытались и пытаются их решить, пройдемся по таким инструментам как pip-tools, pipenv, flit, poetry и попытаемся выяснить, стоят ли они того, чтобы вы обратили на них внимание и принесли в свои проекты, или же это просто очередной поезд безумия мимо которого стоит пройти.

Владислав Блинов, Tinkoff.ru

Как написать чат-бота, если нет времени получать PhD?

В докладе я расскажу, как, не зная ничего или почти ничего про машинное обучение и глубокое обучение, написать своего чат-бота на Python. Разберём, какие есть open-source библиотеки для разработки чат-бота и как можно их соединить в единое решение, которое будет решать необходимые задачи.

Доклад будет полезен практикующим разработчикам на Python, которые так или иначе сталкиваются с обработкой естественного языка или разработкой чат-ботов. Но также доклад может быть интересен и разработчикам с другим бэкграундом, поскольку я буду разбирать довольно общие подходы к поиску данных и соответствующие библиотеки на Python.

Артем Королев, Тимур Кадыров, Dentsu Aegis Russia

Создание индустриальных датасетов для задач глубокого обучения

Мы бы хотели, используя Python, поговорить про тему, которую обычно не посмотришь на Coursera в курсе по deep learning и не прочитаешь на Medium в блоге по data science:

— откуда берутся картинки для разметки датасета

— стоит ли их размечать своими руками или сразу отдать подрядчикам и на биржу

— сколько нужно дней, чтобы собрать, удовлетворяющий требованиям заказчика, датасет

— как ставить ТЗ на разметку

— почему некоторые картинки вроде бы относящиеся к нужному классу на самом деле лучше не отправлять в train датасет

— а нужно ли брать картинку, если нужного объекта на ней очень мало

— нужно ли всегда ждать полного обучения нейронной сети или обучать ее итерационно

— и т.д и т.п.

Доклад рассчитан на тех людей, которые думают, что deep learning — это удел больших компаний с big data и огромными отделами data science. Мы расскажем, как подступиться к распознаванию картинок с нуля и вернуться к клиенту с результатом через пару недель, не используя vision API - Google, AWS или Azure.

Антон Патрушев, Spherical

Python&Rust: вместе веселей

Rust — горячая тема в современном мире разработки. Я коротко расскажу об этом сравнительно новом языке, о тех преимуществах, которые он предлагает разработчику. Доклад построен вокруг примера интеграции Rust в существующее Python-приложение, который демонстрирует лёгкость и удобство использования расширений, написанных на Rust и готовность связки Python-Rust к использованию в ваших Python-проектах.

Станислав Кириллов, CatBoost

CatBoost и Python: как быстро учить и применять CatBoost модели в Python приложениях

Градиентный бустинг на решающих деревьях является базовым инструментом решения множества практических задач. Очень часто обучать и применять модели необходимо именно на питоне, в том числе в продакшне. Если разобраться с тем, как происходит работа со входными данными у библиотек градиентного бустинга, то обучение и применение можно делать эффективно, без лишних преобразований данных.

Я поделюсь опытом написания Cython обертки для C++ кода на примере библиотеки CatBoost и расскажу о том, как эффективно передавать данные из Python в С++. Поделюсь рецептами эффективного использования CatBoost в python коде, позволяющими учить модели быстро и избегать перерасхода памяти и лишних преобразований данных.

Сергей Борисов, ДомКлик

Мастер-класс «Тестирование асинхронных приложений»

О важности тестирования знает каждый. Покажу, как мы в Домклик тестируем асинхронные приложения вместе с базой и другими инфраструктурными сервисами с помощью Docker и pytest.

В ходе мастер-класса:

— Вместе упакуем в Докер базовое веб-приложение

— … и покроем его тестами с головы до ног :)

А также:

— Сравним удобство unittest и pytest

— Посмотрим, как работают изнутри некоторые плагины pytest

— Воспользуемся моками там, где это действительно нужно

— Поборемся с медленными тестами

Понадобятся:

— Docker

Мастер-класс подойдет как тем, кто только начинает писать тесты на pytest, так и тем, кто хочет увереннее жонглировать фикстурами и опробовать новые подходы к CI / CD.

Для участия в мастер-классе нужно взять свой ноутбук с установленными на нем:

— Docker и docker-compose (https://docs.docker.com/install/)

— Образ: docker pull juntatalor/pycon2019-python-pytest

Michael Foord, Python core developer

Воркшоп «The Python Object Model»

Денис Катаев, Tinkoff.ru

Пишем приложения на SQLAlchemy

Я хочу рассказать более подробно про ORM часть SQLAlchemy. Поделюсь своим опытом разработки веб-приложений, которые используют алхимию, упомяну частые ошибки и их решение.

Кроме этого, подробно расскажу об устройстве сессии и разных способах ее использования, о том, что такое flush, и зачем он нужен.

Raymond Hettinger, Python core developer

Tutorial on Function Dispatchers and Microweb-frameworks

Level-up your core Python skills while learning to build both batch and interactive function dispatchers. Get an insight into how to implement interactive shells, test runners, and micro-webframeworks such as Flask and Bottle.

Prerequisite skills: Be comfortable with the basics of lists, dictionaries, looping functions, classes, and try/except.

Approximate time: 2 1/4 hours.

Bring your computer, this is a hands-on session using Python 3.7 or Python 3.8.

Topics covered:

— function annotations

— conditional expressions

— the getattr() function

— the dict.get() method

— function decorators

— filtered task lists

— the @ notation

— dispatch dictionaries

— logging module

— dataclasses module

— json module

— http.HTTPStatus

— url parsing

— REST API servers

— HTTP headers

— WSGI applications

Злата Обуховская, Nvidia

Structured Concurrency. Что не так с асинхронностью в питоне?

Structured concurrency — подход к асинхронности, реализованный Натаниэлом Смитом в проекте Trio. Подход предполагает построение для связанных конкурентных потоков контекста выполнения, в котором легче реализовывать разные стратегии отмены, следить за освобождением ресурсов, обрабатывать ошибки.

Идея была подхвачена разработчиками из других языков (Kotlin, C, Swift) и породила массу вопросов:

— А если вместо списка равнозначных конкурентных потоков у нас теперь граф?

— Как безопасно передавать данные между контекстами?

— Кто будет следить за жизненным циклом таких графов?

— Как эффективно выполнять граф конкурентных потоков на одном ядре? А на нескольких?

— Как добиться детерминизма выполнения?

Между тем, эти вопросы так или иначе решались в других языках и технологиях.

В докладе я расскажу, насколько подходы из других языков применимы к современному питону.

Александр Артёменко, Яндекс

Макросы для Питониста

Мой доклад о том, какие средства могут быть использованы для того, чтобы дополнять синтаксис Python, добавляя в него необходимые возможности. Мы рассмотрим то, как устроены такие библиотеки, как pytest, macropy, patterns и что они делают для того, чтобы добиться таких интересных результатов. Также мы посмотрим на пример кодогенерации с помощью макросов в HyLang - lisp-образного языка, бегущего поверх Python.

Michael Foord, Python core developer

Process Engineering: A Golden Age for Software Engineering

Python and its ecosystem are now mature and Python is one of the most popular programming languages in the world. From version control to continuous integration, IDEs to linters, documentation to deployment, virtualization to packaging, we have an unrivalled set of tools and practises available to us. Software Engineering is so much more than writing code and throwing it over a wall, in this talk we’ll take a slightly backward facing look at how modern tooling fits into powerful workflows for building and creating projects and how that’s been shaped by the community. Process Engineering: software development for humans.

Дмитрий Ходаков, Авито

CPU bound задачи в веб-сервисах на Python

Нам в Авито часто приходится применять в онлайне machine learning модель и совмещать асинхронность и масштабирование по CPU. Мы сталкиваемся с проблемами масштабирования и высокого потребления ресурсов итоговым сервисом.

В докладе я расскажу:

— Что делать, если нужно подружить io bound (сеть) и cpu bound (расчеты). Про multiprocessing в python и его дружбу с asyncio.

— Как мы ускорили в продакшене систему в 50 раз, отказавшись от pandas/numpy в пользу чистого python.

Доклад будет полезен опытным разработчикам Python, которые имеют дело с большим количеством вычислительных задач в веб-сервисах.

Дмитрий Орлов, Едадил

Асинхронный драйвер к RabbitMQ от автора

Когда я начал писать Open Source библиотеку для работы с rabbitmq, используя asyncio, я хотел сделать простой и понятный интерфейс для каждого. Кажется, получилось, но не сразу. Эта история о том, как мне пришлось залезать в драйвер (pika), править там баги и написать свой драйвер, и как при этом не сломать текущее публичное API и не «навредить» пользователям. Чего не хватает в asyncio для того, чтобы писать сетевые библиотеки без боли. Недостатки сетевых протоколов, в частности, AMQP 0.9.

Никита Левонович, Квестоделы

Micropython для аркадных игр и квестов в реальности

Квестоделы применяют Micropython для разработки квестов в реальности последнего поколения и аркадных игр. Современный квеструм — это около 10 электронно-вычислительных устройств, общающихся по сети (MQTT). Большинство из этих ЭВУ — микроконтроллеры (ESP32), которые управляют периферийными устройствами: mp3-плееры, реле и различные датчики и используют устройства ввода-вывода: дисплеи, диоды, кнопки, клавиатуры и многие другие. Однако так было далеко не всегда, еще пару лет назад в квестах было гораздо меньше устройств, основным вычислительным модулем была Arduino, а общение между разными парами устройств могло происходить по разным протоколам.

Доклад будет посвящен формированию архитектуры, используемой командой Квестоделы, для решения подобных задач на Micropython, применительно к популярным микроконтроллерам от Espressif Systems.

Raymond Hettinger, Python core developer

Build powerful, new data structures with Python's abstract base classes

  1. Learn how Python's abstract base classes work and why you would want them.
  2. Explore the rich ABCs for collections.
  3. Leverage that knowledge to build several, new powerful data structures:

— Bit sets

— Binary tree list

— Persistent file dictionary

— SQL based persistent, concurrent dictionary

Talk includes:

— Summary notes

— Working code

— Instructions for building your own collections

— Instructions for building your own ABCs

Василий Литвинов, Intel

Profiling Python and C for fun and profit, or Pandas, go fast!

Python используется достаточно массово, в том числе в тех продуктах, где производительность становится критична. Некоторые алгоритмы или реализации плохо масштабируются, или же, бывает, разработчик просто хочет большего от своего кода.

В любом случае, для эффективной оптимизации разработчику нужно понимание «поведения» кода, а один из лучших способов получить такое понимание — это профилировка. Поиск узких мест, оценка влияния этих мест, сравнение результатов оптимизаций.

В докладе я сделаю краткий обзор существующих профилировщиков для Python с упором на инструменты, работающие в смешанном режиме (способные показать и Python, и native функции одновременно). Такие инструменты могут быть особенно интересны разработчикам библиотек, однако будут полезны и тем, кто использует эти библиотеки. Будут представлены и закрытые, и open source решения.

Использование будет проиллюстрировано на примере исследования и ускорения отдельных частей Pandas.

Алексей Кузьмин, ДомКлик

Поиск и оптимизация узких мест в Python

Меня зовут Алексей, и я очень хочу соврать, что у меня ничего не тормозит, память не кончается, а старый код не надо рефакторить! Но, к сожалению, это не правда и за свою жизнь я успел приобрести опыт ответа на вопросы «Что тормозит?», «Где течет?» и, конечно же, «Что с этим делать?».

В докладе я хочу поделиться своими лайфхаками и инструментами, которые сэкономят вам время и нервные клетки при отладке. В итоге у вас должно остаться понимание — какие места в программе обычно тормозят, какими инструментами это можно подтвердить или опровергнуть, и как исправить эти места так, чтобы проблем больше не было.

Antonio Cuni, core developer в PyPy

How PyPy can help for high-performance computing

Кирилл Борисов, Booking.com

Слишком умная квартира: IoT + Python + все остальное

Вся наша жизнь — работа. И каждый час, отдаваемый на заработок денег лишает все большего и большего количества сил. Ладно бы только это, но серая рутина еще и лишает шанса попробовать новомодные штучки, оставляя вас вновь клепать формочки на втором Питоне.

«Доколе?!» — с этой мыслью я решил привнести в свою жизнь все самое хайповое, что было в тот момент на повестке моего Твиттера. Умный дом! Третий Питон! Асинхронщина! Облака!

Замысел прост: сделать простую систему сбора (и подачи) показаний счетчиков/датчиков, по максимуму используя Питон и все самые модные вещи, до которых дотянусь: асинхронность, облачные вычисления, телеграммный бот и MicroPython (IoT-ради). Приходите посмотреть, что из этого получилось и какие идеи (увы) пришлось оставить за бортом.

Максим Мазаев, ЦИАН

Проверка типов в большом проекте

Кажется, что внедрить проверку типов достаточно легко. Покрываем код аннотациями, запускаем mypy или Pyre, и готово. Но как оно на самом деле в большом живом проекте? Что, если проект — это большой монолит на миллионы строк кода? А если у него под боком полторы сотни микросервисов? Я расскажу об опыте ЦИАН в теме опциональной статической типизации, накопленном за последние 3 года.

— Какие плюсы можно извлечь из покрытия кода аннотациями типов и какие боли это может принести.

— Какими инструментами нужно выполнять проверку типов и нужно ли это вообще. Враги тайпчекеров — кто они?

— Разберем типичные ошибки, от которых можно легко избавиться с помощью тайпчекера.

Александр Кошелев, Яндекс

Сборка Docker образов без build зависимостей

Docker является очень популярным инструментом для развертывания приложения на различной инфраструктуре. Важными факторами эффективности этого процесса являются Docker-образы и их размер. Большие Docker-образы не являются проблемой, но могут замедлить деплой приложений и создают лишнюю нагрузку на инфраструктуру: их надо передавать по сети, распаковывать на хост-машинах и т.д.

Почему Docker-образы получаются большими? Python-проекты обычно собираются из source-пакетов и для этого требуются build-зависимости: компиляторы, библиотеки, заголовочные файлы и другие инструменты. Всё это нужно только для сборки приложения, но не для его работы.

Казалось бы, есть штатный механизм multi-stage builds, который позволяет сначала собрать приложения, а потом уже готовые собранные скопировать на «чистый» базовый образ. Это решает проблему, но не всегда. Поскольку Python-библиотеки часто имеют динамическую линковку с системными библиотеками, то просто скопировать venv недостаточно. Нужно ещё понимать, какие системные библиотеки нужны для работы приложения, иначе оно просто не будет работать корректно.

Я расскажу, как правильно сделать сборку Docker-образов без build-зависимостей, и как решить проблему с системными библиотеками.

Travis Oliphant, Anaconda Inc

Brief review of Array computing in Python, where it is heading, and why it matters

Python has been used to find gravitational waves and image black holes and has become the de facto language for machine learning. In this talk, I describe how this happened through the efforts of cooperative, community-driven open-source and dedicated volunteers. I will then describe how the big-data and deep learning communities have enhanced the landscape of array computing make accessible to Python users incredible computational capability. Finally, I will provide some thoughts and perspective on what may be coming next and what it will enable.

Николай Марков, Aligned Research

Мастер-класс «Как упаковать питонопроект, чтобы не было стыдно»

Многие разработчики не особо парятся с оформлением кода и обертыванием его в пакеты, особенно с появлением контейнеров. Да и вообще мало что понятно в этих пакетах — там и egg, и whl, и pipfile какие-то... На воркшопе мы поговорим о корректном оформлении проекта на Python (от аргументов командной строки до документации), пройдем классический процесс сборки пакета руками, посмотрим, что к чему, и разберемся, как выглядит экосистема пакетов питона в современном мире.

Андрей Власовских, JetBrains

Что будет в Python 3.8 и чего не будет

Что нового будет в Python 3.8? Об этом можно самостоятельно узнать из отличного документа What's New in Python 3.8, который не требует пересказа. В моём докладе речь пойдёт о том, что описано там лишь кратко или вообще не описано:

— Почему появятся эти новые возможности и какая история их появляения?

— Что уже обсуждается и разрабатывается, но не войдёт в Python 3.8?

Я поделюсь информацией, которую я узнал на PyCon US 2019 из докладов и общения с Python core developers. В частности, я расскажу о следующих областях:

— Новый синтаксис: x := expr, f(..., /, ...), f{expr=}

— Новые типы: Literal, Final, TypedDict

— Планы по typing и async/await

— Перспективы оптимизации Python: sub-interpreters, mypyc

Глеб Ивашкевич, datarythmics

Julia, Python и машинное обучение

Прогресс в машинном обучении невероятно быстр: постоянно появляются новые архитектуры нейронных сетей, а скоро начнут выходить и новые чипы для их обучения.

Благодаря этим изменениям в ландшафте отрасли более современные языки бросают вызов доминированию Python. Мы рассмотрим одного из конкурентов Python: язык Julia.

Julia создавалась как высокопроизводительный язык для технических вычислений. У Julia есть JIT компиляция, первоклассные средства метапрограммирования и совместимость с C и Python. Мы рассмотрим основы языка, инструменты для машинного обучения, которые в нем есть, и обсудим, стоит ли попробовать Julia, если вы занимаетесь data science.

Артем Малышев, drylabs.io

Инструменты Domain-driven design

Сложность бывает неотъемлемой и привнесённой. Из доклада вы узнаете, как организовывать первую и минимизировать вторую. Поговорим о том, как построить свой продукт вокруг решаемой проблемы, а не используемого фреймворка. Узнаем, в каком месте лучше вводить typing и dataclasses. Рассмотрим, где нам пригодится контрактное программирование и pydantic. Попробуем библиотеки из проекта dry-python. И, конечно, не обойдётся без тестов. Только практика. Никаких UML схем и абстрактных фабрик фасадов.

Иван Цыганов, Positive Technologies

(Без)опасные зависимости

Последние семь лет угроза «Использование компонентов с известными уязвимостями» занимает девятое место в рейтинге OWASP TOP-10. Мы рассмотрим, к каким последствиям может привести использование неактуальных версий библиотек и интерпретатора. Я покажу, как именно злоумышленник может воспользоваться известными уязвимостями в Django и Django Rest Framework, библиотеках SQLAlchemy, lxml, PyYAML и aiohttp-session и в самих интерпретаторах Python 2 и Python 3.

Tech Talks, МегаФон

Серия докладов от спикеров из МегаФон

12.30 «Исследование и визуализация свойств городской среды в Python» Юлия Тувалева и Андрей Тюкавин

15.15 «Оптимизируй это» Артем Селезнев

17.05 «Кластеризация данных смешанного типа с использованием карт Кохонена» Иван Горбань

18.25 «И швец, и жнец, и на дуде игрец, как одному докатить модель в прод» Артем Селезнев

Адиль Хаштамов, Playrix

ETL инструменты в экосистеме Python

У любой организации, генерирующей данные, рано или поздно наступает момент, когда количество регулярных задач становится очень большим, появляются сложные зависимости между ними, они чаще падают и возникают проблемы деплоя.

В докладе я хочу раскрыть тему построения дата пайплайнов для сбора, обогащения и загрузки данных в ваши data lakes и data warehouses в контексте экосистемы Python. Расскажу, чем отличаются между собой инструменты Luigi, Airflow, Prefect, Celery, а также поделюсь продакшен опытом внедрения дата-пайплайнов на базе Luigi в компании Playrix.

Борис Цема, Wargaming

Как мы уменьшили сложность наших проектов

В Python web разработке есть стандартные подходы к архитектуре и дизайну кода, привнесённые распространёнными web-фреймворками, но они не давали нам достаточной простоты и гибкости. Поэтому мы решили попробовать другое: немного Domain-Driven Design, немного слоёв в архитектуре, немного микросервисов. В результате проекты стали проще для понимания, оптимизации и изменения. Теперь мы можем быстрее их начинать и быстрее добавлять новых разработчиков даже на последнем этапе (мы почти отменили закон Брукса!).

В докладе я хочу поделиться нашим опытом и практическими рекомендациями, которые мы сформировали для наших проектов.

Доклад, в основном, практический, может быть интересен как тимлидам и python-разработчикам, знакомым с вышеупомянутыми концепциями, но не использующим их на практике, так и видящим их впервые.

Григорий Бакунов, Яндекс

О странностях и import'e