Николай Хитров | Блог
2.18K subscribers
189 photos
8 videos
11 files
284 links
Личный бложик про IT новости, инструменты из мира python и различные методологии по типу DDD, TDD, OOP vs FP и прочие модные абревиатуры

Tg: @nkhitrov
Github: https://github.com/nkhitrov
Download Telegram
Проект разработки новой базы данных EdgeDB (Gel) - закрыли

Несколько лет назад появились первые упоминания про новую БД, можно сказать, убийцу postgres. Необычный синтаксис запросов на смену старому SQL, лаконичные понятные конструкции вместо жирных join-ов, фильтраций, подзапросов на 100500 строк кода...

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

Но случилось, что случилось. На любой труд нужны инвестиции и они иногда заканчиваются. Поэтому команда разработки перешла в компанию Vercel, а edgedb (не так давно была переименована в gel) осталась на гитхабе и теперь похоже без поддержки и развития.

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

https://www.geldata.com/blog/gel-joins-vercel
1🫡29😭9👍1😢1
Всех уже за**али конференции и доклады

Несколько недель назад в разных чатах Онтико запустили опрос, что участники думают про текущие форматы конференций. Не могу сказать, что очень своевременно... Но все равно круто, что организаторы (не только Онтико) потихоньку начинают задумываться о проблеме конференций.

В чем соль. Если походить и пообщаться с завсегдатаями такого рода тусовок, можно заметить, что они все жалуются примерно на одни и те же проблемы:
- Немалая доля докладов это либо пересказ документации, либо "мы такие красавчики в БИгКЕкНейМ"
- Люди приходят за нетворком, но не умеют в него, потому что воробушки-социофобушки
- За 20-100к деняг ты как участник получаешь меньше пользы, чем от обычного курса
- Из-за больших цен на билеты покупают в основном за счет компании (больших), за свой счет мало кто ходит

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

И вот значит сел я читать новый манифест от Онтико, который они опубликовали после анализа всей обратной связи участников. И могу сказать, что мне нравится то, что я увидел. Вот прям очень откликается

Пунктов много, кому интересно, почитайте сами, но самое главное, на мой взгляд, это вот эти два

Ключевым параметром выступления на конференциях становится применимость полученного участниками материала в их повседневной деятельности

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

Коммуникация является важнейшей составляющей профессионального развития, поэтому мы организуем различные формы фасилитируемого нетворкинга, от speed dating до mastermind-групп, как на самой конференции, так и вне её

(перевод Далеко не все люди умеют общаться, поэтому мы им с этим поможем)


Make conferences great again, получаеца? Что думаете?

https://ontico.ru/manifest.html
128👍23🔥6🎉1🍾1
Принц Персии: разбираем код гениальной игры, вытирая слезы счастья

Очень клевая документалка про автора культовой игры. Как появилась идея, какие хитрости использовались при разработке, с какими трудностями пришлось столкнуться во время разработки. Мне очень понравилось, посмотрел на одном дыхании. Рекомендую🍿

https://youtu.be/UhxCE6QBotE?si=7n3GTTrHhyhgmSYV
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥4🥴1
Точка синхронизации технологий и тех, кто их использует

T-Sync Conf — офлайн-конференция от Группы «Т-Технологии» для опытных инженеров. 7 февраля в Москве на площадке TAU соберутся платформенные, security и дата-инженеры, аналитики, DevOps, SRE, CI/CD, AI-, ML-, R&D- и DX -специалисты.

Это новый формат инженерного диалога:
— Контуры — тематические зоны, каждая из которых раскрывает отдельный слой инженерной реальности: AI, Data, R&D, Security, Platform и другие направления.
— Вместо классических докладов — круглые столы, стенды, хакатон, воркшопы и мастер-классы.
— Инженерные решения изнутри — возможность посмотреть, как устроены технологии в Т-Банке и других компаниях, и пообщаться напрямую с теми, кто их создает.

А еще много практики, интересных знакомств и живых систем.

Успейте подать заявку
1🔥3
В пятницу на стриме у MoscowPython будем подводить итоги года по python

P. S. дизайнеры уже совсем обленились, пихают через ИИ вместо обработки фотографии левых людей. Ни стыда, ни совести, ни профессионализма🙄🙄🙄🤷‍♀
Подведем итоги года в мире Python уже в эту пятницу в прямом эфире 🎙

Будем обсуждать итоги года вместе с Никитой Соболевым, Колей Хитровым и Сережей Яхницким, а вести выпуск будут Гриша Петров и Миша Корнеев.

Поделимся самыми интересными технологиями за год, обсудим куда идет Python и что нас ждет в следующем году.

📍Когда:26 декабря, 14:00
Ведущие: Михаил Корнеев и Григорий Петров

🔵Смотреть на YouTube
🔵Смотреть на VK Видео
🔵Смотретреть на Rutube

➡️ Присоединяйтесь к эфиру или смотрите в записи на любой из площадок
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15👍5
Дружеский репост

По моим ощущениям с каждым годом все больше разговоров вокруг темы system design. Воркшопы, доклады, курсы, подготовки к собеседованиям. Уже куда только не засунули рисование квадратиков. Ну, видимо, нравится людям.

Если вам тоже нравится, могу порекомендовать канал Вовы Невзорова - @system_design_world

У меня на канале сборная солянка всякого, а на его канале можно найти разные разборы задачек, воркшопы именно по теме дизайна. Спешали для вас Вова подготовил один из примеров таких задачек


Теряем клиентов, System Design виноват!

У нас получилось захватить 20% рынка с монолитным приложением и драгоценной всемогущей PostgreSQL.
Мы сразу ввели аналитику с помощью тяжелых select и построения витрин.

Отдел маркетинга быстро реагировал на вызовы рынка. Требовал постоянного обновления данных.
В какой-то момент эти запросы стали нагружать базу так, что операции вставки при создание заказа существенно замедлились.
🐤 И клиенты стали страдать.

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


Так может звучать вводная для System Design Интервью.
На что она намекает? Давайте разбираться 👉

Дано:
1. Единая база
2. Обслуживает запросы на чтение и запись
3. Тормозит

На интервью можно упомянуть про анализ запросов, использование нужных индексов.
И дальше пойти в архитектурное решение. Какое?

💡 Разделение write, read нагрузки
Мы всё также пишем заказы, мета информацию в основную БД. Исходя из условия можно предположить что с этим она может продолжать справляться, если... уберём тяжелые select запросы/анализ данных. Такую гипотезу вполне законно озвучить интервьюеру.
Получили апрув? Идём дальше.

Как обслужить аналитические запросы?
Думаю в Вашей голове уже созревают идеи, архитектурные паттерны для решения этой задачи. Предложу свой - Change Data Capture(CDC).

Change Data Capture
Суть - ловим изменения данных. Не сами. А с помощью инструмента - Debezium.

⚡️ Финальная схема
Postgres (WAL) → Debezium → Kafka → ClickHouse

Такой пайплайн:
1) Позволяет не грузить основную базу
2) Работает за счёт считывания изменений WAL журнала, а не select'а таблиц
3) Выдаёт данные для аналитики в near-real time
Красота, да и только! 😊 Но за всё приходиться платить...

🌿 Вечные tradeoff System Design
Можно заметить насколько усложнилась наша инфраструктура.
С одной стороны, это нужно один раз настроить. В тоже время поддержка - падения, изменения, поддерживание SLA, ... . Представленный пайплайн становится важной частью итогового архитектурного решения.

✏️ Итог
• Счастливые пользователи. Crud'ы не тормозят!
• Счастливый маректинговый отдел! Данные свежие и всегда перед глазами!
• Devops инженер, системный администратор настраивают новые графики мониторинга, алертинги, получают новые задачи на поддержания и развития инфраструктуры.
С'est la vie!

P.S. Какое ещё архитектурное решение можно здесь применить, чтобы разгрузить основную БД? (с) Вова
Please open Telegram to view this post
VIEW IN TELEGRAM
110👎4👍2
Рисуем квадратики из кода

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

В каждом стеке есть свои библиотеки для такого, в моем случае для python есть pydeps, impulse. Но у них есть одна большая проблема: при отрисовке вложенных модулей вся схема превращается в кашу.

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

Поэтому я решил написать свою тулзу, которая эти две проблемы решает

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

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

В последних ревизиях Tapeline добавил рендер схем в d2, а fadedDexofan сделал подчеркивание циклических связей

Кидайте свои схемки в комменты, ставьте звездочки, все такое

https://github.com/nkhitrov/arch-blueprint
1🔥30👍8🤔52
Откопал папку со старыми картинками, нашел там платину
😁596🤔2
Python Day в Сбере 20-го числа

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

Будет и оффлайн, и онлайн, и запись. Регистрация по ссылке 👇
https://developers.sber.ru/kak-v-sbere/events/pythonconf_2026
🔥24
Kanban Game

Попробовал новый симулятор тимлида, где нужно двигать карточки в jira по канбан доске. Напомнило мемы про дальнобойщиков, которые после рейса садятся играть в Euro Track Simulator🌚
В первый заход мне удалось заработать $38400. А еще рандомные события в игре достаточно жизненные

https://xn--r1a.website/data_driven_management/578
👍12😁11🤔3❤‍🔥2
Сижу значит, читаю статью. Ребята сделали тулзу для ревью через ollama, чтобы локально можно было запускать. Написали статью об этом на хабр. Не первый такой инструмент, их несколько уже есть на github, но посмотреть все равно можно, че бы нет.

Самое забавное, что меня привлекло, это что в комментариях на вопросы как будто отвечает не кожанный человек, а сразу LLM... Хотя может мне так просто кажется, кто знает

Но сама идея так сделать звучит прикольно. Так мы еще на один шажок ближе к теории мертвого интернета🚬

https://habr.com/ru/articles/1006258/
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣23👍2💯2
Djangist: Я хочу fastapi, Никита: У нас есть fastapi дома

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

Собственно фреймворк Никиты из тех, что предлагает привычные вещи делать непривычными новыми способами. И какие-то из них мне даже нравятся как ни странно. Рекомендую посмотреть, почитать даже если не пишите на django, просто ради концепций
👍9
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 для контекста
– Но никакого нейрослопа внутри!
🔥40🤔62
Изучаю сейчас разные библиотеки по стейт машинам. Попался вот такой. На скрине его quickstart раздел. Посмотрите на кол-вол строк кода и на ползунок браузера, просто какого он размера🥲

Очень "квик", очень "старт"...
Please open Telegram to view this post
VIEW IN TELEGRAM
😁27🗿21
Opensource, claude и немного дичи

Я очень люблю новые штучки. Инструменты, спецификации, методолгии и т.п. За время работы в ИТ у меня накопилось немалое количество заметок с идеями. Разной степени бредовости, дикости, а возможно где-то даже полезности

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

Недавно я решил попробовать claude. Вдруг вайбкодит как-то сможет разгрузить меня от части рутины. И в целом результатом я доволен. Сейчас он помогает мне писать сразу две библиотечки (и один веб сервис). И за пару дней на каждого я их смог довести до состояния вполне себе неплохих прототипов

Так что теперь я плотно взялся за реализацию всех своих давних идей.
Github будет в ужасе от моих способностей
10👍266😭2
Слили исходники claude code

Очень безопасные и самостоятельные агенты, видимо, проглядели дыру и вместе с пакетом улетели и .map файлы. Теперь можно почитать исходники клиента claude

Теперь проще обсуждать с безопасниками телеметрию и слив данных через модели☕️

https://github.com/instructkr/claude-code
Please open Telegram to view this post
VIEW IN TELEGRAM
😁31👀4🥰1
Провёл собственное исследование по языкам программирования будущего.

В целом, дядька Боб правильно уловил ветер и выдвинул правильные требования к языку программирования для AI:
- гомоиконичность;
- явные типы;
- никаких скрытых потоков управления;
- контракты встроены в язык.

Но это пока просто идея. Не реализовано даже формальной верификации контрактов. Типы явные, но это скорее аннотации, чем Хиндли-Милнер. Нет алгебраических типов с exhaustive matching (хотя tagged unions упомянуты). Нет вывода типов.

Если цель - ИИ как полноценный разработчик, нужен язык, который максимизирует вероятность того, что сгенерированный им код корректен. Это значит: сильная система типов (компилятор ловит ошибки ИИ), простота (меньше галлюцинаций), достаточный объём кода в обучающих данных, и путь к формальной верификации.

Lean 4 - стратегически самый интересный, но практически самый рискованный. Если через 5-7 лет Lean станет практическим языком программирования, выбравшие его сейчас окажутся впереди всех. Но не сегодня.

На сегодняшний день выделяются два языка.

Rust - первый кандидат. Огромный объём обучающих данных, ИИ пишет на нём уверенно. Borrow checker отсекает ошибки с памятью. Система типов ловит логические ошибки. Verus, rocq-of-rust, Aeneas для верификации. Экосистема зрелая. Один минус - сложность языка увеличивает вероятность, что ИИ сгенерирует компилируемый, но неидиоматичный код. Тем не менее, строгость компилятора это компенсирует.

Ownership-модель - это фундамент, на котором можно строить доказательства.

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

OCaml - второй кандидат. Меньше обучающих данных, но язык проще, и паттерны более предсказуемые. Алгебраические типы и exhaustive pattern matching - идеальный формат для ИИ-генерации: он описывает все случаи, компилятор проверяет, что ИИ ничего не пропустил. Gospel (Generic OCaml SPEcification Language) - tool-agnostic язык формальных спецификаций для OCaml.

Именно поэтому OCaml используется в финтехе. Экосистема, правда, уступает Rust.

Вишенка на торте - Camlp5. Это OCaml с Lisp-синтаксисом. Типы, компиляция, всё как в OCaml, но добавлена гомоиконичность. S-выражение - это одновременно и программа, и структура данных, которую можно анализировать, трансформировать, генерировать другой программой. Это не макросы как синтаксический сахар - это фундаментальное свойство: программа может порождать программы так же естественно, как оперировать числами.

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

Дейкстра мечтал об этом полвека назад. Но раньше не было генератора, способного превратить спецификацию в код. Теперь он есть - и узкое место сместилось от написания кода к доказательству его корректности.

Это возвращает нас к тому, с чего начался ML (Робина Милнера) - к языку, созданному для доказательства теорем. Круг замыкается.

Милнер в начале 1970-х в Эдинбурге строил LCF - Logic for Computable Functions - систему для доказательства теорем. Ему нужен был язык, в котором на уровне системы типов невозможно было бы сконструировать невалидное доказательство. Так появился ML - Meta Language.

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

ML был создан как язык для мира, где код должен быть доказуемо правильным. Этот мир тогда не наступил, потому что индустрии было важнее "быстро и дёшево", чем "правильно". Но если генерация кода становится бесплатной, а цена ошибки растёт - "правильно" побеждает. И оказывается, что фундамент для этого был заложен полвека назад в Эдинбурге.
🔥17👍5🤔4
pov: Делаешь формочку саппорта, чтобы юзеры описывали правильное состояние и разработчик понимал, как это исправлять
Тем временем юзеры:

P.S. для тех, кто вдруг не понял: мем в том, что неоченвидно что есть "верно"🙄
Please open Telegram to view this post
VIEW IN TELEGRAM
🍓14😁114
Сегодня больше не вайбкодим, рабочий день закончился☕️

https://downdetector.com/status/claude-ai/
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣28😢4👻4👍2👎21🤮1👌1💯1