DevBrain
2.97K subscribers
28 photos
2 videos
9 files
724 links
Download Telegram
🤯 Браузер — кладбище открытых вкладок

Миллион открытых табов в браузере, знакомо? У меня до недавнего времени была такая же проблема. Периодически давал себе обещание, что буду следить за тем, что открываю, но спустя некоторое время снова сотня новых табов в браузере, и происходит это незаметно. В основном из-за желания сохранить что-то и прочитать/посмотреть позже, но "позже" не наступает, а 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👎4👍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
Я сейчас активно играю с вайб кодингом, реализую все свои старые хотелки по части веб-приложений, виджетов и других штук. Намедни за денёк сделал web app для трекинга привычек: Zen Habits

Я не любитель мобильных приложений и большую часть времени провожу за компьютером чем за телефоном. Также я везде стараюсь использовать телеграм: будь то общение, отчёты или какие-либо нотификации. Пришла в голову идея сделать нативную интеграцию с телегой. В итоге получился сервис, где вы можете заводить привычки, получать о них уведомления в Telegram, и там же их выполнять.

Порядок действий:

1. Авторизуйтесь через Telegram внутри веб-сайта

2. Укажите свой часовой пояс (сервис попробует его автоматически подставить)

3. Заведите первую привычку, укажите частоту и время для уведомления.

Пользуйтесь https://zenhabits.dev
👍8🔥3
Наконец-то...

Вышла мажорная версия старичка jQuery 4.0.0: https://blog.jquery.com/2026/01/17/jquery-4-0-0/
👍8👎2🔥2
Forwarded from DataEng
fastjsondiff - High-performance JSON comparison with a Zig-powered core

Написал небольшую библиотеку для сравнения двух JSON-текстов/файлов. В Python есть популярная либа jsondiff, но её основная проблема это сильные тормоза, если на вход подать более менее крупный JSON-текст. Давно вынашивал идею реализации чего-то такого, но на Zig/Rust, т.к. чистая реализация на Python будет всё равно медленнее. По итогу получилось реализовать на Zig основную либу и Python-интерфейс к ней.

pip install fastjsondiff-zig


Github: https://github.com/adilkhash/fastjsondiff
PyPI: https://pypi.org/project/fastjsondiff-zig/

Буду признателен за на репе в гитхабе, это поможет её распространить дальше.
👍5🔥4
gunicorn 24.0

Внезапно вышла новая версия популярного WSGI сервера для Python. Из новшеств, туда завезли поддержку ASGI, не прошло и ста лет.

В стадии беты, но есть сомнения, что будет быстрее uvicorn, например. В любом случае классно. К слову, я до сих пор WSGI приложения запускаю через gunicorn. Привычка.

Ссылка на релиз https://github.com/benoitc/gunicorn
🔥2👍1👎1
Курс по разработке под iOS на Swift от Стэнфордского университета: Stanford CS193p: iOS Development with SwiftUI
django-modern-rest@0.1.0 – первый публичный релиз!

Исходники: https://github.com/wemake-services/django-modern-rest
Подробнейшая документация: https://django-modern-rest.readthedocs.io
Пример настоящего приложения: https://github.com/wemake-services/wemake-django-template

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

Во-первых, у нас рекорд: еще нет ни одного релиза, а уже 560+ на Гитхабе (сходите поставьте, кто еще не).
Вижу, что люди ждут, вижу интерес. Спасибо!


import uuid
import msgspec
from dmr import Body, Controller
from dmr.plugins.msgspec import MsgspecSerializer

class UserCreateModel(msgspec.Struct):
email: str

class UserModel(UserCreateModel):
uid: uuid.UUID

class UserController(
Controller[MsgspecSerializer],
Body[UserCreateModel],
):
def post(self) -> UserModel:
return UserModel(uid=uuid.uuid4(), email=self.parsed_body.email)


Фичи

– Главная фича, которая вообще подтолкнула меня к такому проекту: инфраструктура Джанги. Тут есть буквально все пакеты на все случаи жизни. Но не было нормального REST фреймворка. В комментах я регулярно наблюдал, как люди ненавидят Джангу, но почти всегда говорят про DRF. Да, он был ужасен – но теперь он на свалке истории!
– Все существующие плагины к родной Джанге должны работать
– Официальная поддержка Джанго в одном файле, да, Джанга может быть настолько простой
– Работаем с любыми моделями: pydantic, msgspec, TypedDict, dataclass, тд. Сериализация и валидация не прибиты гвоздями. А значит можно выбирать сериализатор под контроллер. Где-то msgspec + TypedDict для скорости. Где-то pydantic для более широких возможностей валидации. Можно писать свои
Скорость. Мы довольно быстрые. Самый быстрый Python фреймворк для REST в Django. По скорости можно сравнивать с FastAPI, мы всего лишь на 30% медленнее. Но у нас и Джанга вообще-то. Скорость будет улучшаться, есть разные интересные идеи
– Типизация: типизировано всё! Но самое важное, типизацию не пихают вам в лицо. Нет огромных и сложных типов. Все просто, надежно и удобно. Поддерживаем mypy, pyright, pyrefly в самых строгих вариантах
– Поддержка async везде. От вьюх и моделей до SSE. Никаких sync_to_async внутри
– SSE! Без дополнительных костылей: просто работает (с валидацией сообщений и возможностью строить бизнесовые ADT поверх типов сообщений и крутейшей схемой)
Семантика. Одна из ключевых фичей: мы очень сильно упоролись по генерации схемы. Добавил auth= в контроллер? В списке ответов появился 401 статус код автоматически. Возвращаешь ответ, заголовок, куку, которой нет в спеке? Во время дебага – случится ошибка валидации. На проде валидацию нужно отключать для скорости. Так мы гарантируем точность ответов и схемы. Не нравится схема? Все легко переопределить или вообще отключить
– Swagger, Scalar, Redoc из коробки, легко настраивать
– Работаем не только с json, поддерживаем content negotiation, можно писать свои парсеры и рендереры
– JWT и DjangoSessionAuth из коробки, есть возможность отзыва токенов и сессий
– Возможность писать заготовки контроллеров и полностью переиспользовать код. Писать плагины под dmr будет просто и удобно
– Загрузка и отдача файлов (но на питоне такое очень осторожно надо делать, лучше на Rust)
– Нет привязки к логике или DI (берите любой, например dishka). Мы просто парсим данные и возвращаем их. То есть: код не превратится в кашу из логики и фреймворка уже через 10 бизнес фичей
– Удобная обработка ошибок на многих уровнях
– Полная возможность для кастомизации. Можно даже поменять формат внутренних ошибок в рамках контроллера
– Удобные тесты: polyfactory, pytest, schemathesis (проходим все правила из коробки)
– Скилы для LLM для написания кода по OpenAPI спеке, llms-full.txt, Context7 для контекста
– Но никакого нейрослопа внутри!
🔥6👍2