DjangoCon Europe 2019. А не сдох ли ваш пони?

в 9:01, , рубрики: django, python, python 3, Блог компании Mail.Ru Group, конференции, конференция
image

С 9 по 14 апреля в Копенгагене проходила конференция DjangoCon Europe 2019. Полный надежд и стремлений я прибыл на данное мероприятие, а уезжал в глубоком смятении. В статье я попробую передать мои впечатления от конференции и прокомментировать столь резкую смену отношения к Django.

Disclaimer: в статье присутствует нетолерантность, безаппеляционность суждений и неоправданная критика.


Привет всем, я Максим, живу в Австрии, в Тироле. Я преподаватель в GeekBrains и совладелец проекта winePad, это коллектор и продавец технических данных по алкогольным напиткам. Обычно это данные о винах.

Про проект winePad

У нас самая точная база данных в Европе. Это потому что все вина в базе проверены нашими специалистами лично. Коротко о нашей работе: бухать. И порой это бывает жёстко: когда по 40 апробаций в день, следующим утром я не всегда уверен, как попал домой. Ну или не помню, где припаркована машина.

Проект начинался в 2012 с Django 1.4 / Python 2.7 на сервере, и с Jquery на клиенте + JsonRPC сервером. Сейчас набор технологий увеличился. Все равно мы уперлись в буквальном смысле в Django.

Я подключился к проекту в 2015, переняв эстафету у тирольских разработчиков. От некачественной реализации шевелились волосы везде.

Рассказ о тирольских пастухах, резко переквалифицировавшихся в программисты, я оставлю за кадром. Если вы увидите их решения, уверен, вам резко захочется убивать всех, кто называет себя «тирольским программистом».

К февралю 2019 стало понятно: развитие проекта невозможно с текущим набором технологий. В поисках ответов я решил съездить на DjangoCon 2019, который очень вовремя проходил в Копенгагене. Что хотелось от конференции:

  1. Поучиться у профессионалов, посмотреть, что я могу улучшить в своей работе.
  2. Окунуться в мир новых решений для моей платформы.
  3. Потусить с такими же Django-задротами, как и я. Войти, так сказать, в тусовку.
  4. Понять, что не так с Django. С 2016 года регулярно посещают мысли, что я что-то упускаю. Только не могу понять что.

Что же из всего этого получилось:

DjangoCon Europe 2019. А не сдох ли ваш пони? - 2

Нулевой день

Во вторник днем, до начала конференции, проходило собрание Django Girls — это инициатива DjangoFoundation по продвижению Django в женские массы. С 17 часов началась регистрация. В роли бейджей выступали 3-дюймовые дискеты, любой желающий мог записать на дискету все, что хотел (ха-ха), USB-дисководы присутствовали.

Во все дни конференции было неограниченное количество крафтового пива с этикеткой «розовый Django-пони», из местной небольшой пивоварни. С одной стороны прикольно, с другой… так себе пиво. В оформлении залов присутствовали розовые летающие лошадки всех размеров.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 3

От ненавязчивого символизма и ощущения причастности к сообществу лошадиных пастухов был особый веселящий привкус. Я познакомился с Russell Keith-Magee, многолетним бессменным разработчиком Django. Все прибывшие на эту конференцию зависят от его программных решений.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 4

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

Тут я впервые узнал про правило Pacman-a: если к кругу разговаривающих подходит ещё один человек, участники беседы ДОЛЖНЫ расступиться и освободить место для нового собеседника. В общем, можно было бухать и жрать чипсы (в любом количестве), знакомиться с прибывающими специалистами, присоединяться к абсолютно любому разговору, дергать организаторов.

Субъективизм и отсутствие толерантности

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

Вечером я прогулялся по Копенгагену.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 5

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

В первые три дня конференции доклады шли в зале на 500 человек (было 377 участников). Параллельно в отдельных залах были воркшопы. Большинство докладов записаны на видео, вы можете посмотреть их на YouTube. Трансляций воркшопов нет. Список и описание докладов и воркшопов тут. ВСЕ воркшопы без исключения были очень плохо подготовлены, это отмечали и остальные участники.

В перерывах предлагалось много еды и кофе. В этом плане конференция была хорошо подготовлена. Стенды спонсоров, в основном HR, ненавязчиво стояли в холле. Мне было интересно поболтать со скандинавскими хедхантерами.

День первый

Открывающая лекция про ситуацию с DjangoProject

Коротко: помогите кто чем может.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 6

Воркшоп GraphQL

JSON для ленивых. Жизнь не станет лучше, если все начнут использовать другую нотацию запросов.

Life is hAPIer

Враппер Django REST, начните писать 4 строки кода вместо 6.

Воркшоп про переезд на новую версию кода без остановки сервера

История про десятимесячную операцию на сердце коде из 100 моделей. Проект был создан три раза:

  1. Со старыми моделями.
  2. Со старыми и новыми моделями и возможностью online-переключения.
  3. Без старых моделей и переключателей.

Долго и дорого.

Из-за этого воркшопа я пропустил три лекции, о двух отзывались хорошо, буду смотреть в записи:

  • pull-реквест на 750 000 строк.
  • Django web-security-headers.

После перерыва с очередной цистерной кофе была лекция про DJANGO-ORM. Докладчик — Sigurd Ljodal. Это разработчик текущего ORM, его деятельность можно посмотреть по репозиторию Django.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 7

Доклад полезный, но меня расстроил. С одной стороны — новая ORM-Django очень повзрослела. С другой стороны — Sigurd использовал в примерах недокументированные возможности queryset.query. На последующем общении с Sigurd меня поразило, что он, как и большинство Django-разработчиков, не очень знает методы queryset.query.

«Чего ж ты их в примерах используешь!» — вопрошал я. «Ну… вот так...» — отвечал Sigurd.

После всех докладов шли «lightning talks» («молнии»). Доклады-пятиминутки для тех, кто стихийно захотел выступить. «Молнии» в основном были интересны, но пять минут — этого мало. Цель докладчика заинтересовать, а люди потом могут спрашивать.

Несколько грузовиков с пивом и долгие разговоры после «lightning talks»… Первый день завершен.

День второй

Воркшоп: Бутстрап Django

Не получился.

Распознавание картинок, машинное обучение с Django

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

Воркшоп по распознаванию картинок

Все заработало, и картинка по ее части была найдена среди 10 других. Но скорость работы перечеркнула все. 20 секунд на подготовку, 30-40 секунд на поиск. Я посчитал: на однократный поиск в нашем проекте по картинкам уйдут годы. А у нас в день десятки тысяч подобных запросов. Предложенное решение мне не подходит.

Визуальное тестирование изменений

Фронтэндщикам может быть полезно.

SQL-Alchemy vs Django-ORM

Докладчик Глеб из DjangoStars. С идеей согласен, но некоторые вещи я бы все равно реализовал через методы DJANGO-ORM. Главное, что я увидел, где можно применить алхимию в моем проекте.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 8

Воркшоп: полный путь request/response по пищепроводу Django

Полезно было освежить знания. Django-разработчик, помни: все что ты делаешь — это настройка WSGI-приложения.

Дальше я загорелся идеей выступить на «молниях». Я делал презентацию и пропустил несколько докладов.

Божественный доклад о ведении документации проекта

От руководителя команды документации RedHat.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 9

Я подскочил поблагодарить докладчицу после. Она понятно рассказала, почему я должен все бросить и начать документировать свой проект. В момент благодарности я прикоснулся к ее предплечью. Что тут началось!!! Это песец. Я думал меня посадят. Все обошлось словесным взысканием за неподобающее поведение по отношению к другому участнику конференции.

Пентестинг при помощи ZAP

Приложение попробует все известные ей методы взломать указанный сайт.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 10

Сразу захотелось попробовать хакнуть свой проект.

Молнии были полезнее, чем в первый день.

Александр (DjangoStars) рассказал о вариантах хранения settings

DjangoCon Europe 2019. А не сдох ли ваш пони? - 11

Рассказ о враппере для полей моделей

Враппер следит за возвращаемым типом значения.

Доклад про установку заглушек вместо показа приватных данных клиентов

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

Доклад об использовании переменных с зоной видимости в рамках одного потока

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

После двух дней конференции я был расстроен: пару полезных докладов за три дня. Очень мало про Django, очень много про посторонние и ненужные решения. WTF??? И даже Копенгаген меня не успокоил.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 12

Вода в каналах чистейшая. Видно, что на дне. Вы тоже там что-то видите?

DjangoCon Europe 2019. А не сдох ли ваш пони? - 13

Гениальный третий день

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

Доклад про убийства в викторианскую эпоху

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

Использование GeoDjango с примерами

От автора документации по GeoDjango. Красота.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 14

У меня это запланировано в проекте. Теперь я знаю, как это реализовать.

Архитектор Эластик групп о программных продуктах компании

Сюда входит elasticsearch.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 15

Понравился пример, как встроить график активности пользователей в админ-панель Django.

Полный цикл создания собственного поля модели

DjangoCon Europe 2019. А не сдох ли ваш пони? - 16

Мне понравилось: у меня есть несколько своих полей, но я многое упустил в процессе их создания.

Система «плагинов» Django

Плагин включается и выключается на лету, проверка включения через… сигналы. Слишком экзотичный вариант решения, чтобы использовать. Разок прокатит под соусом «смотри, как еще можно».

Потом я повелся на речи про elasticsearch и пошел на воркшоп. Тут я пропустил два доклада и потерял время.

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

Редизайн вашего проекта Django

Разработчики рано или поздно сталкиваются с рекомендацией: Fat Models, skinny Views, stupid Templates (тупые шаблоны, тонкие вьюхи, толстые модели).

DjangoCon Europe 2019. А не сдох ли ваш пони? - 17

От себя дополню: выборка объектов только в методах ObjectManager и в методах QuerySet, порожденных ObjectManager.

Дальше такого перераспределения кода мало кто ушел. В докладе были примеры максимального устранения зависимостей и полного абстрагирования бизнес-логики.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 18

Это солидный урок последователям каноничного стиля разделения кода. Устойчивость от изменений. Независимость решения… Все то, что и должно быть в качественном продукте. В конце доклада приводилась литература, которая поможет это реализовать.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 19

Супер полезно.

Потом были речи и закрытие официальной части DjangoCon.

А потом был доклад, ответивший на все мои вопросы и подтвердивший мои ощущения.

Наброски для редизайна Django

Докладчик — Том Кристи, создатель Django REST framework. В слайдах Том рассказал и показал в примерах кода, почему Django (и, как следствие, DRF) больше не имеет возможностей развития. Да, можно исправлять ошибки, да можно добавлять финтифлюшки или улучшать ORM. Общая же форма Django все равно остается неизменной.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 20

Когда Том сказал, «я вообще не думаю, что возможно построить высоконагруженную быструю систему на Python», народ притих.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 21

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

DjangoCon Europe 2019. А не сдох ли ваш пони? - 22

Для асинхронного ORM были упомянуты Ариадна и недоделанный асинхронный DB-драйвер. Для шаблонов Jinja и переделывание кода шаблонов.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 23

Доклад четко обрисовал, что для создания из Django фреймворка, готового к современным технологиям, надо переписать все, что есть в Django. И желательно на другом языке. Было ясно, что Django в тупике развития, красивом, уютном, и устаревшем лет на 10.

Я очень благодарен Тому, что он не оставил меня, и показал варианты куда развиваться

Вариант, как дальше пилить Django, если вы не готовы пока бросать эту дохлую лошадь. Библиотеки, как интегрировать, как тестировать. Starlet, SQLAlchemy, Jinja-templates и т.д., подробнее смотрите в слайдах.

Вариант, что делать дальше тем, кто хочет слезть. Пока нет решения «так же, как в Django». Был обзор существующих аналогов, быстродействие, сложности, перспективы. Я уже попробовал упомянутый GO, мне почти понравилось.

На молниях я рискнул выступить с призывом пилить Django и дальше. Только после выступления Тома Кристи — призыв звучал совсем неубедительно.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 24

Следующие два дня состояли из спринтов. Те, кто остался, работали с Django: открывали сообщения об ошибках и правили их.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 25

После успешной правки можно было подбежать и грохнуть в гонг на весь зал. Частота бумов была каждые 5-7 минут.

Для интереса, что происходит на спринтах

Я посмотрел одну из одобренных правок: исправление ошибки конвертации числа в строку. (#30363 — Do not use exponential notation for small decimal) файл django/utils/numberformat.py
И мне стало совсем грустно:

  • Правка содержит ошибку возвращаемого типа.
  • В код добавлено две ненужных рекурсии.
  • Автор, похоже, не понял, как работает Decimal.
  • Тесты не проверяют все граничные случаи и возвращаемый тип данных.

Я переписал код и подошел к одобрившему предыдущую правку, и сказал: у вас тут ошибка! И выбрал неверную стратегию: программисты не очень любят, когда кто-то говорит про их ошибки, особенно про проверенные и одобренные.

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

Отсюда вытекает еще одна проблема, почему Django такая, какая она есть: часто ошибки правят люди, не понимающие алгоритм или идею. Именно поэтому появляются новые ошибки, кривые методы типа QuerySet.as_manager, неотключаемый GROUP_BY в запросе с base_sort=True (не проверял, может исправили), или же алогичные решения, как с формсетами и инлайнами в AdminModelForm.

Кроме спринтов было пару воркшопов, мне понравился повтор про ZAP. Крякнуть сайт удалось, и дыры в безопасности были найдены.

А в Копенгагене тем временем было холодно и солнечно

DjangoCon Europe 2019. А не сдох ли ваш пони? - 26

Я посетил Христианию, погулял по каналам и посмотрел на русалочку.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 27

DjangoCon Europe 2019. А не сдох ли ваш пони? - 28

DjangoCon Europe 2019. А не сдох ли ваш пони? - 29

Домой я уезжал в задумчивости. Я хотел увидеть новые возможности в Django… а нашел их где-то еще. Я хотел донести, что есть быстрое и верное решение… и не сумел (про баг я все же сообщу). Хотел войти в профессиональный мир… но что-то не так я себе это представлял. Знание приносит печаль. Главное, что я знаю, куда идти дальше.

DjangoCon Europe 2019. А не сдох ли ваш пони? - 30

P.S. Решение про мой проект принято, пока winePad останется на Django.
P.P.S. Я открыт для обсуждения как конференции, так и Django. Спрашивайте, если непонятно.
P.P.P.S. С 20-го июня 2019 на GeekBrains стартует мой курс по Django на факультете Python-разработки, я обязательно упомяну на курсе важные моменты, о которых я узнал на конференции.

Автор: Максим

Источник


* - обязательные к заполнению поля