Обновить

Бэкенд

Сначала показывать
Порог рейтинга
Уровень сложности

Создаем клиентскую библиотеку ROS2. Элементы ноды

Время на прочтение7 мин
Охват и читатели12K

Теперь, когда в вашей клиентской библиотеке появились сообщения, можно перейти к созданию ROS2 ноды и связанных с ней элементов (издателей, сервисов и т.п.). На самом деле процесс добавления этих элементов мало отличается от создания обёртки для таймера, описанный в первой части, поскольку всё сводится к надстройке над функциями библиотеки rcl. Поэтому я не буду рассматривать их подробно, а остановлюсь только на отдельных особенностях.

Читать далее

GLM-5.1 придумал для меня новый алгоритм

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели15K

Друзья, знаю, что интернет переполнен воспеванием AI, что вызывает у многих людей (особенно специалистов) фрустрацию, особенно когда речь заходит о написании кода на C/C++. Я не AI-проповедник – просто активный и ответственный программист, который пользуется AI-инструментами. Недавно я предложил AI (если быть точнее, opencode + GLM-5.1) придумать алгоритм для одной из задач, над которой я работаю, и он справился очень хорошо. Это не прорывной алгоритм, на котором я разбогатею, но он интересный: составленный из известных компонентов, но всё же новый. В статье расскажу:

Как решать задачу “дана битовая строка, нужно найти все позиции в ней, что количество единиц минус количество нулей до этой позиции равно заданному числу”

Что мне придумал AI для этой задачи

Что я использую для того, чтобы AI писал что-то адекватное на C++

Если вам интересны алгоритмы и структуры данных, то описанная задача используется в контексте RMQ/LCA.

Читать далее

МакКладун или почему балансеруны не нужны

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели12K

Вчера автор побывал на прекрасной конференции Backend Talks 360 от компании Yandex и не в силах спокойно спать, не ответив конструктивной критикой на доклад Ильи Абрамова о работе Яндекс.Диска, автор принялся писать очередной «В интернете кто‑то не прав». Что из этого вышло — добро пожаловать под кат.

Достать меч

Memento mori

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели12K

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

Читать далее

Основы тестирования и правила, которые помогают надёжно тестировать сложные приложения: примеры на Python

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели14K

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

Читать далее

Как я за последний год стал программировать по-новому. А как вы?

Уровень сложностиСредний
Время на прочтение2 мин
Охват и читатели20K

Довольно интересное наблюдение: я перестал пользоваться автокомплитом в IDE, который предлагает LLM.

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

Читать далее

Как работают lambda-функции в Python: замыкания, позднее связывание и антипаттерны

Уровень сложностиПростой
Время на прочтение10 мин
Охват и читатели15K

Вы всё ещё используете map и filter с лямбдами в 2026 году? Подготовил большой гайд по анонимным функциям в Python: от самого первого lambda x для новичков до разбора байт-кода, замыканий и жестких антипаттернов, за которые бьют по рукам на код-ревью.

Читать далее

Калькулятор VRAM для локальных LLM: Какие модели ИИ запустятся у вас на компьютере?

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели18K

Когда я начал ковыряться с локальными LLM, главная боль была не в установке моделей, а в понимании, что вообще влезет в моё железо. Документация Hugging Face говорит “Llama 3.1 8B” — что это значит для моей видеокарты с 16 GB? А если хочу 32k контекст? А с Q4_K_M? Несколько недель назад мне попался open-source калькулятор whatmodelscanirun.ru. Прогнал его на трёх своих сетапах (4060 Ti, 3090, M2 Pro), сравнил предсказания с реальными запусками через llama.cpp и разобрался, как работает математика внутри. Спойлер: алгоритм правильный, но систематически переоценивает скорость на 15-25%.

Читать далее

manage.py migrate в пятницу в 17:30 на проде с 3K RPS и таблицей 200М строк

Уровень сложностиСредний
Время на прочтение29 мин
Охват и читатели12K

Всем привет! Меня зовут Макс, я Lead Backend и автор YouTube‑канала PyLounge

Это третья часть мини‑серии о Django‑миграциях. В первой части мы готовились к миграциям и разбирались с конфликтами, во второй чинили типичные подводные камни. Если их не читали, то рекомендую начать именно с них, а затем вернуться сюда.

В этом же материале поговорим о самом интересном: что происходит, когда python manage.py migrate запускается в 17:30 в пятницу на проде, под 3k RPS и таблицей в 200 миллионов строк. 

Расскажу какие блокировки в PostgreSQL берёт каждая операция Django, что внутри atomic = False, как пишется правильный паттерн expand‑migrate‑contract, зачемнужны AddIndexConcurrentlyAddConstraintNotValidSeparateDatabaseAndState и как обновлять данные на больших таблицах.

P. S. примеры намеренно упрощены, чтобы влезли в статью и не задушили. В реальной жизни всё ещё хуже — но шаги те же.

P. S.S. При подготовки этого материала ни одна продовая база данных не пострадала. 

Читать далее

Возвращение блудного программиста (ч. 4)

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9.9K

Эта часть про то, как я пилю бэкенд, учусь на этом и получаю эмоциональные качели.

Для начала, напомню о себе: после 12 лет отсутствия в сфере я решил вернуться к своему базовому образованию – инженер-программист. Что-то приходится «вспоминать с нуля», но я не люблю начинать изучение полностью с теории, я больше экспериментатор.

Читать далее

Я заставил LLM писать Rust полгода. Вот что они стабильно ломают

Время на прочтение11 мин
Охват и читатели26K

Полгода использовал Claude, GPT и Cursor как полноценного второго разработчика на Rust в проде. Собрал семь категорий ошибок, которые модели стабильно делают и которые проходят cargo build, cargo test, иногда cargo clippy и при этом являются UB или скрытыми архитектурными ловушками. Lifetime laundering, std::sync::Mutex через .await, Drop у транзакций, unaligned read, async cancellation, orphan rule и массивы на стеке. Разбираю, почему именно Rust ломает LLM и что с этим делать.

Читать далее

Очереди в микросервисах: 5 ошибок, которые приводят к дублям и потерям

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели13K

Почему добавление второго consumer«а в очередь может привести к двойным списаниям? Разбираем на реальном кейсе: как один Topic стоил компании 312 дублей за час. »

Сравниваем поведение JMS, Kafka и RabbitMQ, показываем, почему ни одна очередь не даёт exactly‑once из коробки, и как идемпотентность, Dead Letter Queue и правильный выбор канала (команды vs события) делают интеграции надёжными.“

Готовые схемы, продакшен‑код на Java и чек‑лист, который стоит применить прямо сейчас!

Читать разбор

Обработка исключений, возникших при обработке исключений

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели13K

Исключения рождаются не только в основном коде, но и в обработчиках этих самых исключений. Зачастую вопросу не уделяется должного внимания. Действительно, что может пойти не так в блоке catch? Там ведь код тривиальный! Но это только на первый взгляд.

Например, безобидный LOG.warn("...") выливается в десяток вызовов нижележащих методов. И чем больше «наслоений» в библиотеке логгирования, тем выше вероятность сбоя. Всё бы ничего, если бы не одна особенность языка Java…

Читать далее

Ближайшие события

Сравнение моделей конкурентности JVM языков: Нужен ли еще ThreadPool после coroutines, ZIO и Virtual Threads?

Уровень сложностиСложный
Время на прочтение6 мин
Охват и читатели11K

В последней части про модели конкурентности JVM языков мы сравним разные подходы друг с другом. И ответим на вопрос “А зачем теперь тред пулы, если есть столько модных концепций: корутины, файберы, виртуальные потоки ?”

Узнать что есть кроме Java Threads

Я заколебался искать запятую в коде бота — и написал библиотеку, чтобы диалоги жили в YAML

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели9.2K

Я три года пилю Telegram-бот для одного B2C-продукта. В пятницу вечером маркетолог попросил убрать запятую — я потратил двадцать минут на одну запятую, потому что текст был размазан по семи питон-файлам. И тут меня переклинило. Так появилась библиотека, где все диалоги бота живут в одном YAML — с клавиатурами, медиа, условиями и опциональной очередью под лимит Telegram. Выложил на PyPI, делюсь.

И что?

Кэш результатов запросов в Postgres Pro: как ускорить часто выполняющиеся запросы и разгрузить базу

Уровень сложностиСредний
Время на прочтение18 мин
Охват и читатели10K

Каждый раз, когда пользователь открывает страницу каталога или дашборд со статистикой, база данных заново считает одно и то же. Запрос к 800 тысячам строк ради одного числа — снова и снова. Расширение pgpro_result_cache в Postgres Pro Enterprise решает эту проблему на уровне СУБД: результат тяжёлого запроса сохраняется в разделяемой памяти и при повторном обращении возвращается за миллисекунду — без сканирования, без нагрузки на процессор, прозрачно для приложения. В этой статье разберём, как это работает, когда кэш действительно полезен и на что нужно обратить внимание при настройке.

Читать далее

Полный гайд по каналам обмена сообщениями: от теории к реальным кейсам

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели9.4K

Первая статья из цикла о каналах обмена сообщениями. Разбираем архитектурные дилеммы, конкурирующих потребителей, message storm, гарантированную доставку и лучшие практики команд, работающих с JMS и Kafka.

Читать далее

Предиктивный автоскейлинг в Kubernetes: масштабируемся на опережение

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели7.6K

Современный Kubernetes приучил нас к тому, что инфраструктура должна быть эластичной. Для управления ресурсами традиционно мы можем использовать Horizontal Pod Autoscaler (HPA): растёт трафик — увеличивается количество подов, трафик падает — лишние поды удаляются. Но в высоконагруженных системах при быстром росте нагрузки стандартные инструменты масштабирования могут стать менее эффективными. Проблема заложена в самой природе реактивного подхода: система всегда догоняет реальность, а не формирует её. Решение лежит на поверхности: надо повышать осознанность и внедрять ИИ.

Меня зовут Дмитрий Чуринов, я руководитель команды разработки в трайбе Synapse. Хочу поделиться практическим опытом внедрения механизмов предиктивного масштабирования. Мой коллега Александр Козлов курирует разработку нескольких продуктов в СберТехе, в том числе Platform V SynAI, отвечающего за интерактивное управление трафиком на основе систем машинного обучения и моделирования.

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

Читать далее

Kotlin переходит к деструктурированию по именам

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели9.9K

В Kotlin деструктурирование выглядело так: val (name, age) = person. Но компилятор берет значения не по именам, а по позиции component1/component2.

Отсюда проблемы. Если поменяли порядок параметров в data class или сделали age вычисляемым свойством: то та же строка начинает доставать другое поле. Причем иногда код даже скомпилируется, но, конечно, смысл изменится: val (age, name) = person.

И вот теперь Kotlin эксперементально переводит круглые скобки на деструктурирование по имени. Синтаксис будет такой: (val name, val age) = person. И порядок внутри скобок не важен. Переименование явно: (val years = age, val theName = name) = person.

Позиционное же деструктурирование остается, но переезжает в квадратные скобки для Pair/Triple и коллекций: val [x, y] = point.

Разбираемся полностью в новом переводе от команды Spring АйО.

Читать далее

Как эволюционировала главная книга по Qt в России и чем удивляет 7-е издание

Уровень сложностиПростой
Время на прочтение4 мин
Охват и читатели15K

Более тридцати лет назад норвежские разработчики Ховард Норд и Эйрик Чамбэ-Энг создали Qt — фреймворк, которому суждено было стать стандартом де-факто для кроссплатформенной разработки. Широкому распространению Qt во многом способствовал Маттиас Эттрих: основатель проекта KDE выбрал его в качестве фундамента этой среды, а затем занял руководящую позицию в команде разработчиков Qt. А уж тем более трудно было предвидеть, что у Qt появится свой «летописец» в России, книги которого разойдутся тиражом более 25 000 экземпляров.

Вот как сам Эттрих напутствовал читателей в первом издании книги Макса Шлее:"Давайте начнём с вымышленной истории. Представьте, десять лет назад кто-то пришёл ко мне и спросил: «Возможно ли написать многофункциональное графическое приложение, а затем скомпилировать и запустить его на всех основных операционных системах? На Linux, на UNIX, на Windows и на Macintosh?» Тогда — будучи молодым прграммистом — я, вероятно, ответил бы: «Нет, это невозможно. А если бы и было возможно, то система была бы очень сложной в использовании и ограниченной самой слабой платформой. Лучше выберите одну платформу или напишите свой код несколько раз». Несколько лет спустя я открыл для себя Qt — и понял, как сильно я ошибался! Qt делает настоящую кроссплатформенную разработку реальностью, не ограничивая ваш выбор и творчество. Слишком хорошо, чтобы быть правдой? Не верите? Что ж, доказать легко. Я передаю слово Максу, который расскажет вам, как именно это делается. Макс, твой выход.

И Макс Шлее принял вызов!