DevBrain
3.03K subscribers
28 photos
2 videos
9 files
712 links
Автор @adilkhash

Веду блог https://khashtamov.com/
Download Telegram
Паттерны и анти-паттерны использования паттерн-матчинга в Питоне

Наткнулся на доклад про паттерны паттерн-матчинга 😁 и мне он понравился: Patterns and Anti-Patterns in Python's Structural Pattern Matching
Доклад очень понравился, несмотря на то, что паттерн-матчингом я пользуюсь с самого его появления (кажется в 3.10), я подчерпнул полезное для себя. Что понравилось? Последний пример, где Brett показывает обработку semi-structured JSON. Я вспомнил, что часто внешние API могут возвращать разный формат JSON в зависимости от состояния, но мне в голову никогда не приходила идея обернуть обработку этого в match/case.

Элегантно! 💡
👍7
Вышла новая версия моего небольшой django аппа django-trix-editor для интеграции текстового редактор Trix в Django — 0.4.1, в ней исправлена проблема с тёмной темой Django Admin. Релиз состоялся благодаря неравнодушным контрибьюторам.
👍12🔥3
🤯 Браузер — кладбище открытых вкладок

Миллион открытых табов в браузере, знакомо? У меня до недавнего времени была такая же проблема. Периодически давал себе обещание, что буду следить за тем, что открываю, но спустя некоторое время снова сотня новых табов в браузере, и происходит это незаметно. В основном из-за желания сохранить что-то и прочитать/посмотреть позже, но "позже" не наступает, а FOMO растёт 😁

Из неприятных последствий:

🐢 медленный запуск браузера
💾 повышенное потребление оперативки (с моими 128 Гб можно пару тысяч открыть),
🧠 снижение концентрации внимания

🚀 Моё решение

Внезапно мне в голову пришла идея написать плагин для ограничения количества открытых табов. Сейчас с помощью LLM и Agentic coding сделать это можно моментально. Придумал и спустя десять минут плагин готов — Tabooo

Пользуйтесь! Лично себе поставил ограничение в 12 табов.

💡А что делать с нужными ссылками?

Страх потерять важную ссылку — главная причина, по которой мы не закрываем вкладки. Я решил и эту проблему! Я создал специальный букмарк-сервис с удобным плагином и даже Telegram-ботом, чтобы вы могли сохранять ссылки в одно касание, не захламляя браузер! Оставьте комментарий под этим постом (или в личку)! Если наберется интерес, я поделюсь ссылкой на сервис с плагином в следующем посте. Он бесплатный.

А пока пользуйтесь плагином для ограничения табов: Установить Tabooo из Chrome Web Store
🔥10👍3👎1
Django 6.0 beta 1

Вышла первая бетка новой мажорной версии Django 6.0: https://www.djangoproject.com/weblog/2025/oct/22/django-60-beta-released/
👍2👎1🔥1
Зачем нужен новый REST API для Django?

Последний месяц я крайне увлечен созданием https://github.com/wemake-services/django-modern-rest
(Кстати, у нас уже >200 звезд и 26 контрибьюторов при 0 релизов)

Ключевой вопрос – зачем? Что будет нового?

Во-первых, я крайне сильно люблю Django. Основная причина – под него есть буквально любые библиотеки. Все то, что в FastAPI нужно героически писать руками – в джанге уже давно есть и работает.
Но, есть несколько основных причин, почему люди думают, что не любят джангу:
1. DRF, тут без лишних слов – он ужасен. Нет типизации, нет async, очень сложно работать с ним в сложных случаях
2. Многие считают, что джанга - сложная. Однако, она как FastAPI или Litestar может спокойно уместиться в один файл: https://django-modern-rest.readthedocs.io/en/latest/pages/micro-framework.html
3. Есть критика за архитектуру: тут нечего особо даже комментировать. На любом фреймворке можно писать хорошо, на любом можно писать плохо. Слой фреймворка очень тонкий
4. Медленный. А вот тут остановимся подробнее.

На скринах выше можно сравнить, что с django-modern-rest, без нескольких будущих оптимизаций (привет cython и rust!), голая джанга начинает выглядеть не так уж и медленнее FastAPI: бенчи.

Во-вторых, Django на длительный срок был в плену DRF. Который морально устарел еще в середине десятых.
Потом появилась django-ninja, которая хоть и намного лучше, но все равно не решает главную задачу: интеграция с существующими тулами. Конечно, если затащить FastAPI дизайн в чужой мир, то ничего не будет нормально работать 🌚️

Вот такие проблемы мы решаем.

Одной строкой:
- Супер строгая OpenAPI схема и валидация при разработке, что мы ее соблюдаем
- Полная типизация всего
- Нормальный способ создания АПИ, без god-functions a-la FastAPI
- async без sync_to_async
- Быстро: msgspec для парсинга json (самый быстрый способ в питоне), практически 0 работы в рантайме (все делаем при импорте), оптимизации роутера (быстрее дефолтного в 51 раз)
- Пидантик, msgspec, или любой другой способ выражать модели. Хоть adaptix
- Полная поддержка всего существующего в Django. От декораторов до миддлварь (с полной валидацией и OpenAPI схемой!)
- OpenAPI схема из коробки
- Удобное тестирование с polyfactory
- property-based тесты вашего АПИ одной командой благодаря schemathesis

Что еще будет:
- RSGI (да, на #rust скорее всего) под granian, в теории можем побить FastAPI после такого
- SSE с автоматической OpenAPI спекой и умной валидацией схемы
- JWT или любая другая аутентификация
- Какие-то части (скорее всего валидацию) мы компильнем cython, чтобы было еще быстрее

Modern? Modern!
Осталось дождаться. Релиз скоро!
И еще скоро будут несколько новых видео.

Мы регулярно постим задачки в @opensource_findings_python, так что можно нам помочь.
А если кто хочет мне закинуть на развитие опенсорса (за написание 32500 строк кода за 2 недели), то мой бусти открыт: https://boosty.to/sobolevn
Ну и звезды можно ставить, конечно же. Там посмотрите, какие люди нас уже советуют.

Большое спасибо Александру, Алексею, Роману, Максиму и всем остальным за неоценимую помощь. Пацаны, без вас никак! Лучшее сообщество!

Обсуждение: а чего бы вам хотелось в modern rest фреймворке? Чего сильно не хватает сейчас?
🔥17👎3👍1
Доклады DjangoCon US 2025

На официальном Ютуб канале уже доступны видео с прошедшей в этом году конференции DjangoCon US 2025 — плейлист.
👍6
Django 6.0 🥳

Состоялся долгожданный мною релиз Django 6.0: https://www.djangoproject.com/weblog/2025/dec/03/django-60-released/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍1👎1