
Первая версия генератора кода готова. Сделал я его через IIncrementalGenerator и она очень сильно не оптимизирована, но да ладно он мне все ровно нужен был только ради следующей статьи про диагностику dsl

Первая версия генератора кода готова. Сделал я его через IIncrementalGenerator и она очень сильно не оптимизирована, но да ладно он мне все ровно нужен был только ради следующей статьи про диагностику dsl
День открытых дверей онлайн-магистратуры МФТИ «Разработка ИТ-продукта»
Приглашаем на открытый эфир, который будет полезен тем, кто планирует поступать на программу «Разработка ИТ-продукта» в 2026 году и хочет заранее разобраться, как устроены обучение, практика и процесс поступления.
Расскажем, какие дисциплины входят в учебный план, как студенты совмещают магистратуру с работой, над какими проектами работают во время обучения и какие карьерные траектории могут выстроить после выпуска.
На эфире обсудим:
— Как устроена программа «Разработка ИТ-продукта» и кому она подойдет.
— Какие навыки получают студенты и как проходит работа над практическими задачами.
— Как обучение помогает расти в разработке, переходить к проектированию архитектуры и запускать собственные ИТ-продукты.
— Как устроен процесс поступления в 2026 году: какие документы потребуются и как подготовиться к вступительным испытаниям.
К встрече присоединится выпускник программы, который поделится опытом обучения и расскажет, как полученные знания помогли ему в работе.
👥 Специальный гость: Антон Устинов — академический руководитель программы, директор по технологиям и информационным технологиям (CTO/CIO) с более чем 15-летним опытом в разработке и проектировании архитектуры финтех- и EdTech-продуктов (Сбер, Exante, Click и SmartBank), кандидат экономических наук и сертифицированный архитектор Сбера.
📅 Дата: 29 июля (среда)
⏰ Время: 18:00 (Мск)
🔗 Регистрация:
ВКонтакте: https://vk.com/app6379730_-224205661#l=30&auto=1
Telegram: https://t.me/mipt_events_bot?start=dl-1784623748d866ee49855e
Поступить в магистратуру, чтобы запустить стартап: как это работает
В корпоративном бэклоге почти всегда есть задачи, до которых месяцами не доходят руки: проверить гипотезу, собрать прототип, автоматизировать процесс. Во время магистратуры одну из них можно взять как проект, системно проработать и защитить как выпускную работу.

28 июля проведем эфир «Запуск корпоративного стартапа во время обучения: как совместить работу и учебу с максимальной пользой».
На открытой встрече выпускники онлайн-магистратур Центра «Пуск» МФТИ и представители компаний расскажут, как развивали корпоративные стартапы во время обучения.
За три года наши студенты разработали и защитили более 50 проектов для Hoff, Сбера, билайна, НИИАС РЖД, НЛМК, Совкомбанка, МКБ, Zecurion, GreenData и других компаний.
В программе:
🔹 Какие корпоративные стартапы выпускники разрабатывали во время обучения и для каких компаний.
🔹 Какие задачи стояли перед командами и какие решения они предложили.
🔹 Как студенты совмещали основную работу, учебу и разработку реального продукта.
🔹 Как работа над корпоративным стартапом повлияла на карьеру и профессиональное развитие выпускников.
🔹 Как прийти в магистратуру с проектом своей компании или взять задачу от индустриального партнера и развивать во время обучения в магистратуре Центра «Пуск» МФТИ.
📅 28 июля (вторник)
🕖 19:00 (Мск)
💻 Онлайн
Участие бесплатное. Необходима регистрация.
ВКонтакте: https://vk.com/app6379730_-224205661#l=31&auto=1
Telegram: https://t.me/mipt_events_bot?start=dl-17846368420ebf8e1ae9f2

На Бирже заказов Инфостарта за неделю с 15 по 22 июля появились новые проекты для разработчиков, аналитиков и консультантов 1С. В подборке - настройка отчетов и обменов, работа с банковскими выписками, перенос данных, интеграции с CRM и диагностика ошибок в учетных системах.
На этой неделе заказчикам нужны специалисты для следующих задач:
Автоматическое определение договора при загрузке банковской выписки в 1С:Бухгалтерии 3.0.
Настройка отображения остатков Центральной базы при подборе товара в УТ 11.5 РИБ.
Поиск и исправление ошибки закрытия месяца в 1С:Бухгалтерии ПРОФ.
Настройка пересчета закупочной цены из валюты в рубли без потери сумм из-за округления.
Биржа заказов Инфостарта помогает компаниям находить специалистов под задачи по 1С, а исполнителям - выбирать проекты по своей специализации и загрузке. На площадке размещают разовые задачи, консультации, доработки, запросы на сопровождение и участие в проектных командах.
Для заказчиков доступны исполнители разного формата - от частных специалистов до проектных ИТ-команд. Можно напрямую обмениваться контактами, работать без комиссии площадки и при необходимости использовать безопасную сделку.
Must-read для Python-разработчика: 5 статей от практика с сотнями интервью за плечами
Делимся подборкой статей от Евгения Бартенева, эксперта курсов Практикума и разработчика с 20-летним опытом. А ещё он активно занимается созданием образовательного контента: является автором и техлидом курса «Python-разработчик», пишет статьи и проводит бесплатные мок-интервью для всех желающих в рамках проекта Boreesych.
Особенности Python, о которых вас точно спросят на техническом собеседовании. Евгений прособеседовал сотни кандидатов и сам неоднократно побывал в роли собеседуемого, поэтому хорошо представляет, какие именно знания проверяют на интервью и где чаще всего проваливаются не только джуны, но и опытные разработчики.
Особенности Python, о которых вас точно спросят на техническом собеседовании. Часть 2. Евгений выпустил продолжение, так как первая часть вызвала оживлённое обсуждение: в комментариях читатели делились собственным опытом и задавали отличные уточняющие вопросы. В этой части ещё больше подводных камней Python — уже традиционно без абстракций и банальщины.
Строки в Python: всё не так просто, как кажется. Начинающим разработчикам строки обычно кажутся едва ли не самым простым, что есть в языке программирования, но для Python это не совсем так. Евгений разбирает, какие бывают строки, чем они отличаются друг от друга, какие возможности дают и какие подводные камни могут встретиться в работе с ними. Здесь и о базовом использовании, и о важных деталях, которые стоит помнить каждому разработчику.
От джуна к эксперту: как карта навыков и план развития помогают профессиональному росту Python-разработчика. Евгений размышляет, почему «стать мидлом, потом синьором» — плохая цель, которая не помогает расти. Затем рассказывает, что такое план профессионального развития, зачем он нужен и как его использовать на собеседованиях, в обучении и в реальной работе. А также делится примером карты навыков и шаблоном плана.
Книжная полка разработчика в эпоху интернета и искусственного интеллекта. Евгений объясняет, почему книги остаются незаменимым инструментом для изучения программирования даже в эпоху нейросетей, и делится личной подборкой — как для начинающих разработчиков, так и для тех, кто пишет код не первый день.
Если хотите освоить профессию Python-разработчика с нуля, сделать это можно на курсе «Python-разработчик» в Практикуме. Первые 30 уроков доступны бесплатно: вы попробуете себя в роли разработчика, познакомитесь с образовательной платформой и поймёте, подходит ли вам курс.
Прогнал официальный conformance suite OpenID Foundation против redb.Identity.
Basic OP: 35 модулей, 0 failures. Config OP: 0 failures.
Что нашли и исправили:
PII утечка: scope-derived claims (phone, email) попадали в id_token — они должны быть только в UserInfo
UserInfo возвращал внутренности OpenIddict через deny-list
Отсутствовал Cache-Control: no-store на token endpoint (RFC 6749 §5.1)
prompt=login / max_age ре-аутентификация была сломана
Одно WARNING осталось намеренно — два приватных claim в id_token с обоснованием.
Type-driven development в Rust: делаем недопустимые состояния невыразимыми

В своей работе наша инженерная команда довольно часто сталкивается с уникальными и сложными задачами — мы решили поделиться своей экспертизой и практическими наработками. В том числе и теми задачами, которые напрямую не связанны с информационной безопасностью.
Начинаем с type-driven development в Rust — подхода, при котором правила предметной области выражаются в типах, а код, нарушающий эти правила, не компилируется. О том, как применять его на практике расскажет Никита Тимофеенко, разработчик команды MXDR компании F6.
Серия рассчитана на тех, кто уже пишет на Rust и хочет от системы типов большего, чем борьба с borrow checker-ом. Теории типов не будет — только приёмы и шаблоны для рабочего кода, почти всё на стабильном Rust.
После первой части вы сможете посмотреть на свои структуры с флагами и Option-ами, посчитать, сколько недопустимых состояний они позволяют собрать, перепроектировать их так, чтобы эти состояния перестали компилироваться, и удалить часть defensive-проверок.
В первой статье — пять техник, каждая разобрана по схеме «проблема -> решение -> хорошие практики -> как это используют известные крейты или std библиотека».
Примеры во всей серии — из биржевой торговли, но сами приёмы работают в любом домене со сложными состояниями и правилами их изменения:
newtype — свой тип для каждой роли вместо голого примитива: значения разных типов не перепутать местами, а инварианты проверяются один раз — при создании (smart constructor);
ADT — «одно из» через enum с данными в вариантах вместо булевых флагов и Option-ов, допускающих бессмысленные комбинации;
uninhabited types — типы без значений: как убрать ветку ошибки, которая «никогда не случится», так, чтобы это гарантировал компилятор, а не unreachable!();
phantom types — параметры-маркеры без рантайм-представления: одна generic-обёртка с типом-тегом вместо семейства одинаковых newtype-ов;
typestate — состояние объекта в его типе: у каждого состояния свой набор методов, переход возвращает новый тип, а неверный порядок шагов не компилируется.
Первая статья — «Type-driven development в Rust. Часть 1/5: делаем недопустимые состояния невыразимыми» — уже на GitHub. Там же — компилируемые примеры ко всем приёмам: Cargo workspace, который собирается и проходит тесты.
Сегодня произошла интересная штука: я встретил вживую новый вид сотрудника - "Оператор ЛЛМ", это как "Оператор ЭВМ", он "жмакает" кнопки, но не понимает зачем.
Суть: собесил сегодня чувака на инженерную позицию. Туда-сюда, вроде все складно, тимлиду вроде нравится. Потом дали мне слово, как софтверному инженеру, и я задал ровно два вопроса, после которых все стало понятно.
1 - чувак говорил, что у него есть хоум лаба, но не смог рассказать из чего она состоит (контейнеры/виртуалки/гипервизор).
2 - чувак показал свой пет-проект, но не смог рассказать как он работает под капотом.
Почему? - потому что он "кнопкодав", "оператор ЛЛМ" - называйте как хотите.
Это очень опасная тенденция, все больше людей называют себя "архитекторами" приложений, не понимая основ технологий которые их ЛЛМ пытается применять.

Вышел lazy-tmux 0.2.0!
Напомню в двух словах: lazy-tmux — менеджер tmux-сессий на Go, который показывает все сохранённые сессии деревом, но реально восстанавливает сессию с её процессами и скроллбэком только когда вы её открываете, а не поднимает всё разом. Подробнее про сам проект я уже писал раньше, а сейчас — про новый релиз, в котором накопилось много всего.
Настройки наконец переехали в TOML-конфиг. Раньше приходилось прокидывать флаги каждый раз, теперь есть файл: config gen создаёт болванку, config show печатает итоговую конфигурацию с учётом всех источников. Заодно появился контроль над тем, что вообще перезапускается при восстановлении сессии — белый и чёрный списки, причём оба матчатся как регулярки по всей командной строке.
Сильно переработал сам TUI picker: нормальная тема, поддержка мыши, цветные режимы действий, панель хоткеев по ?, относительное время снапшота. Пока сессия поднимается, прямо внутри picker’а теперь рисуется анимация загрузки, а Esc аккуратно отменяет восстановление и убивает частично поднятую сессию.
Ещё в релизе появился слой интеграций со сторонними программами, и первая из них — Claude Code. Рядом с каждой сессией в picker’е показывается живой статус: работает, ждёт вашего ответа или подтверждения, либо просто простаивает. Когда крутишь несколько агентов по разным проектам, удобно видеть, кто из них заблокирован, не переключаясь внутрь каждого. А восстановленные окна Claude сами переподхватывают свою сессию.
Из остального: проверил совместимость с tmux от 2.9 до 3.7b, починил поведение когда сервер tmux вообще не запущен, добавил фоновый демон автосейва, команду version и обновил сайт документации.
Поставить можно одной строкой:
curl -fsSL https://lazy-tmux.xyz/install.sh | shЕсть и Homebrew с AUR. Код — https://github.com/alchemmist/lazy-tmux, документация — https://lazy-tmux.xyz. Проект ещё молодой, открытых задач хватает, так что буду рад фидбэку и контрибьюшенам!
Собираю резюме, чтобы вычислить причины отказов.
Апдейт на 22.07 (спустя неделю): 5к просмотров, ни одного письма в личку, работать не с чем. То ли мало кто из читателей попадает в очерченную мною группу (не получали ответ на отклики, или не джава-сеньоры, или например ищут не удаленку) а может таких и вообще очень мало за последнее время, то ли читателям не интересно помочь, то ли не хотят/опасаются рассказывать.
---
Хочу получить ответ, но прямой не получу.
Я 20 с чем-то лет в разработке, чего-то классного и прорывного по-моему не было, хотя были и широко известные в узких кругах продукты. Все где-то 15-20 проектов в различных стеках начиная с Win32*, сейчас - Java и микросервисы. Живу в регионах, лет 13 работаю удаленно, последние годы - в крупных компаниях.
Так вот, я конечно знаю что рынок и процессы найма - в тяжелом состоянии. Но у меня наблюдается как будто что-то другое, скорее система, чем невезение. Последние три месяца я копаюсь в рынке, откликаясь на интересные мне вакансии, которых набралось 128 штук пока что. И ни на один отклик ко мне никто не пришел. Кроме ИИ, чтобы задать какие-то вопросы. Да, речь не о проваленных интервью, а об отказе без выхода на связь, или отсутствии ответа. 128 откликов и из них 100% - в пустоту. (Тут стоит отметить, что в 2-3 достаточно контактные конторы из потенциально интересных мне я не писал, есть причины)
И конечно же, мне хочется знать, в чем причина, чтобы этот барьер преодолеть так или иначе. 128 раз подряд - это явно система. Но диалог (когда на него все же обходными путями удается выйти) выглядит примерно так: "мы не предоставляем индивидуальную детализацию по причинам отказа на этапе первичного отбора"
И поэтому я хочу сейчас попробовать другой подход. Дамы и господа Java Senior, проживающие НЕ в Мск/СПб, кто на горизонте 2-3 месяцев (можно 6, но 2-3 это более актуальное состояние рынка) получил визит рекрутера в ответ на отклик в крупные и известные компании (рефералки или прямые письма рекрутерам не в счет, только реакция на отклики в HH) - предлагаю вам написать мне в личку и поделиться своим резюме, с которым вы тогда откликались (можно было бы обезличенным, но просьба все же оставить возраст, если он был, ВУЗ, и тп - сами понимаете, это все может быть факторами отсева). Можно даже не показывать, куда именно, хотя эффективнее будет, конечно, если показать. Если получили оффер, будет здорово, если это тоже отметите. Если удастся собрать достаточно информации для каких-то выводов - опубликую фоллоу-ап.
Как управлять окружениями — venv / pip vs pipenv vs poetry?

Привет, Хабр! Продолжаем нашу рубрику с быстрыми ответами на некоторые часто встречающиеся вопросы. Сегодня разберем такую проблему: проекты постоянно ломаются из-за конфликтов зависимостей. Что выбрать для новых проектов и как сделать так, чтобы код работал одинаково, в том числе в CI?
Обычно начало всех проблем — смешение глобальных и локальных пакетов или отсутствие фиксированных версий библиотек. Главный совет: у каждого проекта должно быть собственное окружение с явно указанными зависимостями и сохраненным lock‑файлом в репозитории.
Если говорить о базе, то это связка venv и pip. Плюс она встроена в сам Python. Вы вручную создаете окружение, устанавливаете нужные пакеты и фиксируете их в requirements.txt.
Но подход со временем может стать неудобным — особенно когда в проекте десятки зависимостей и несколько разработчиков. Поэтому, на смену ручным методам пришел Poetry.
Сейчас это, пожалуй, наиболее сбалансированное решение: он создает и управляет окружениями, отслеживает версии, собирает wheel‑пакеты и умеет публиковать их в PyPI. Lock‑файл (poetry.lock) обеспечивает воспроизводимость сборок, а сам формат pyproject.toml — это стандарт. В итоге вы получаете чистое окружение, детерминированные зависимости и понятное поведение CI.
Вот пример рабочего цикла:
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install poetry
poetry install
poetry run pytestВ CI чаще используют схему с экспортом зависимостей:
poetry export -f requirements.txt --without-hashes -o reqs.txt
pip install -r reqs.txt
pytestОтдельно стоит упомянуть uv — относительно новый инструмент, созданный командой Astral (авторы Ruff). Он написан на Rust и совместим с Python. По сути, это те же функции pip, venv и частично poetry, но быстрее. От Poetry он отличается отсутствием публикации пакетов, но при этом умеет сам устанавливать и менять версии Python через .python-version.
UV работает с pyproject.toml и имеет собственный uv.lock. Может использоваться вместе с Poetry, но лучше создавать единый uv.lock для строгой воспроизводимости. Для CI это удобно, вы пишите:
pip install uvДалее есть два варианта:
uv venv — создает виртуальное окружение. Это аналог python3.13 -m venv .venv, но работает быстрее и с автоустановкой версии Python.
uv init — помимо .venv, добавляет шаблон проекта с pyproject.toml для зависимостей, Git-репозиторий и базовые файлы. Идеально для нового проекта.
И окружение в CI полностью совпадает с локальным, а билд воспроизводится без сюрпризов. Но чаще всего комбинируют два решения: Poetry для разработки и uv — для быстрых сборок и деплоймента.
Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная подборка статей. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.
Вышел Echo 5.3
Echo - высокопроизводительный, расширяемый, минималистичный веб-фреймворк на Golang.
Echo построен на основе net/http и работает с ним через echo.WrapHandler / echo.WrapMiddleware, добавляя компоненты, которые стандартная библиотека оставляет разработчику: быстрый маршрутизатор на основе дерева решений, привязка запросов (с подключаемым валидатором), развитую экосистему middleware и централизованную обработку ошибок.
Ключевые новинки версии 5.3:
Добавлена полноценная поддержка метода HTTP QUERY в соот с RFC 10008
Маршрутизатор: автоматическая обработка HEAD-запросов обработчиками GET
Изменение логики группировки middleware
GitHub: https://github.com/labstack/echo
ChangeLog: https://github.com/labstack/echo/releases/tag/v5.3.0
Как настроить TLS в клиенте Python при HTTPS-запросах?

Бывает так, что после обновления OpenSSL часть HTTPS-вызовов к внешним сервисам падает с ошибкой ssl.SSLError. Сейчас разберемся, как настроить Python, чтобы handshake проходил успешно и соединение оставалось безопасным.
После апдейтов OpenSSL часто отключают старые протоколы и слабые шифры — старые серверы не проходят handshake. Решение на клиенте — явно создать ssl.SSLContext, задать минимальную версию TLS и, при необходимости, набор шифров, а затем передать этот контекст в HTTP-клиент (например, httpx).
import ssl
import httpx
ctx = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH)
ctx.minimum_version = ssl.TLSVersion.TLSv1_2
ctx.set_ciphers('ECDHE+AESGCM:!ECDSA:!aNULL:!eNULL')
with httpx.Client(verify=ctx, timeout=10.0) as client:
r = client.get('https://api.example.com')
r.raise_for_status()
print(r.status_code)В коде мы указываем TLSv1_2 как минимальный порог. Это удобно: если сервер уже поддерживает TLS 1.3, все само заработает на самой новой версии. Но если какой-то внешний сервис еще не успел обновиться, соединение не разорвется, и все продолжит работать на стабильном 1.2. Так мы получаем универсальный код, который не сломается при работе со старыми API.
Для отладки TLS handshake применяйте openssl s_client -connect host:443 -tls1_2 чтобы увидеть, какие шифры поддерживает сервер. Временное ослабление minimum_version даст совместимость, но хуже для безопасности — лучше апгрейдить серверную часть. Сертификаты и ключи храните вне кода (секреты/volumes), не логируйте их, и при работе в контейнерах используйте безопасные механизмы передачи секретов.
Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная подборка статей. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.
Нанимают ли ИТ-компании летом — и стоит ли сейчас искать работу

Каждое лето среди ИТ-специалистов возникает один и тот же вопрос: есть ли смысл искать работу в июле или лучше дождаться сентября, когда все, кто принимает решения, вернутся из отпусков? Короткий ответ — искать стоит.
Летом темп найма действительно немного снижается. Часть руководителей и HR в отпусках, собеседования переносятся, некоторые проекты ждут утверждения бюджетов на вторую половину года. Но это не значит, что рынок замирает.
По данным hh.ru, рынок труда в 2026 году остается неоднородным. В одних профессиях работодатели конкурируют за специалистов, в других — конкуренция выше среди кандидатов. Для ИТ сохраняется один устойчивый тренд: опыт и реальные навыки полностью перевешивают дипломы и корочки курсов, а владение ИИ-инструментами названо одним из ключевых конкурентных преимуществ. Поэтому даже летом компании продолжают искать сильных специалистов под текущие проекты, а не откладывают всё до осени.
Теперь про наблюдение у Хабр Карьеры. По их статистике, активность найма в ИТ постепенно становится менее сезонной. Компании продолжают публиковать вакансии даже в периоды отпусков, хотя скорость принятия решений ниже. Многие работодатели используют лето для формирования кадрового резерва и проведения первых этапов отбора — чтобы быстрее закрыть позиции, когда отпускной сезон закончится.
Если вы сейчас в статусе «кандидат» — летнее затишье это ваше преимущество, а не помеха. Хорошее время, чтобы обновить резюме, привести в порядок портфолио, добавить завершенные проекты на GitHub, разобраться с каким-нибудь новым инструментом. Осенью, когда конкуренция за интересные позиции возрастет, такая подготовка будет заметна на собеседованиях.
Главное — не воспринимай лето как потерянные два-три месяца. Если бизнес запускает новый проект в июле — ждать сентября HR не станет.
Мы в SSP SOFT нанимаем сейчас
В SSP SOFT занятость — это не про «отсидеть часы». Это про задачи, которые заставляют думать, искать нестандартные решения и видеть результат своих усилий. Мы предлагаем удаленку, гибрид или офис в Москве и Томске, ДМС, обучение по выбору сотрудника и среду, где мнение сотрудников стараются слышать. Задачи — реальные, коллеги — сеньоры, у кого есть чему учиться.
Сейчас в середине июля мы ищем:
— Ведущего аналитика 1С (финансовый контур, КТ 2000)
— Системного аналитика (Ритейл)
— Разработчика ЦФТ
— Архитектора 1С (Управление Договорами)
Подробности о вакансиях читайте на нашей странице ХХ.ру, но там откликаться необязательно. Ждем резюме напрямую Евгении Беловой, директору по развитию персонала: @EvgVBelova в Telegram.
Не забудьте добавить «секретную фразу» в сопроводительное письмо: «Увидел(а) вашу вакансию на Хабре».
💚 Солнечного лета и До новых встреч!
Понял asyncio только когда бот начал зависать под нагрузкой
Писал на Python и честно говоря asyncio воспринимал как магию. Работает и ладно.
Пока однажды бот не завис.
Пользователей было немного, штук двадцать одновременно, но один запустил команду которая делала тяжёлый запрос к внешнему API. Пока запрос выполнялся, бот молчал. Остальные подвисли в ожидании.
Начал разбираться. Оказалось я вызывал синхронную функцию прямо внутри async хендлера. requests.get внутри async def. Это блокирует весь event loop. Все корутины ждут пока эта одна функция не завершится.
Решение простое: либо заменить requests на aiohttp, либо обернуть синхронный вызов через asyncio.to_thread. Второй вариант проще когда менять библиотеку лень:
python
result = await asyncio.to_thread(requests.get, url)После замены бот перестал зависать. Все одновременные запросы к внешнему API обрабатываются параллельно без проблем, но теперь когда вижу синхронный вызов внутри async функции ощущение что что-то не так.
Кто сталкивался с похожим, как отлаживали?
Задача о 17 серверах и сетевом архитекторе

Привет, Хабр! Принесли задачу — попробуйте ее решить и сверить ответ с нашим.
Условие
В одной придуманной нами компании N сетевой архитектор получил задачу: развернуть изолированный контур из 17 серверов. Для обеспечения отказоустойчивости он решил соединить их напрямую патч-кордами так, чтобы от каждого сервера отходило ровно три кабеля к соседним машинам. Архитектор набросал схему и со спокойной душой ушел домой.
На следующее утро на смену заступил дежурный инженер. Взглянув на ТЗ и схему коллеги, он лишь покачал головой, налил кофе и заявил: «Сеть построить не получится, архитектор где-то просчитался».
Может, дежурный просто вредничает или не хочет обжимать лишние провода? 17 серверов — не так много, а три порта на каждом — стандартное требование для резервирования каналов. Или все-таки инженер прав, и законы математики выше в приоритете, чем фантазия архитектора?
Задача
Вы — старший системный архитектор. Помогите коллегам разобраться, кто прав: архитектор или дежурный инженер? Напишите небольшую программу на Python или другом языке, которая проверяет принципиальную возможность существования подобных сетей для любого количества серверов и соединений.
Узнайте решение в Академии Selectel.

На Бирже заказов Инфостарта опубликована новая подборка задач по 1С за неделю с 9 по 15 июля. В списке - доработки типовых и отраслевых решений, обмены, перенос данных, настройка документооборота, участие во внедрении ERP и консультации.
Биржа помогает заказчикам находить специалистов под конкретные задачи, а исполнителям — выбирать проекты по своей специализации и загрузке.
Донастроить БИТ.ФИНАНС и БИТ.СТРОИТЕЛЬСТВО по готовому техническому заданию
Настроить правило согласования договора в 1С:Документообороте 3.0
Платная консультация «Из 1С в S3 и обратно. Работа с объектным хранилищем»
Разработать обработку для УПП по формированию файла электронной транспортной накладной для РТУ
Сопровождение 1С:УАС, ЗУП, Бухгалтерии и доработка блоков под задачи
Базовая настройка и небольшие доработки для торговой компании
Настроить регулярный обмен из отдельных ЗУП ПРОФ/КОРП в общую ЗУП
Нужен консультант-аналитик 1С (Middle) для сопровождения системы в ОПЭ
На Бирже заказов Инфостарта можно найти исполнителя для консультации, исправления ошибки, доработки конфигурации, настройки обмена, переноса данных, сопровождения или участия во внедрении. Для исполнителей это источник задач разного масштаба — от небольших доработок до проектной работы.
Участвуй в МТС True Tech Champ 2026 — всероссийском чемпионате по программированию с призовым фондом 10 250 000 рублей 🔥

Выбирай, какой трек тебе интереснее 👇
Алгоритмический (индивидуальный зачет, 2 750 000 ₽). Решай задачи по алгоритмам и структурам данных, которые помогут прокачать навыки для технических собеседований и работы в ведущих ИТ-командах. Лучшие участники пройдут в финал, где в режиме реального времени будут соревноваться в правильности решений и скорости мышления.
Программирование роботов (командный формат, 7 500 000 ₽). Напиши алгоритмы для робособаки и робота-манипулятора и проведи их через три этапа соревнований. Сначала — через цифровой симулятор, где нужно пройти трассу и выполнить задания по передаче предметов. Затем — подключись к реальному полигону через удаленный доступ и выполни задания на физических роботах дистанционно. А в очном финале лучшим командам предстоит управлять роботами на площадке, дорабатывать алгоритмы под новые условия и бороться за победу на глазах у зрителей.
Шоу-финал с кодерскими челленджами и выступлениями спикеров состоится 22 октября в МТС Live Холл. А лучшие участники получат шанс на стажировку в MTC Web Services (MWS).
Так после МТС True Tech Hack 2026 к команде присоединились три стажера:
1. Илья Матвеев из команды MCLover, 18 лет, студент 1-го курса бакалавриата Института интеллектуальных кибернетических систем (НИЯУ МИФИ). Вышел на позицию стажера frontend-разработчика в MWS Octapi.
2. Роман Субботин из команды DEP_IT_MISIS, 19 лет, студент 2-го курса бакалавриата НИТУ МИСИС по направлению «Прикладная математика» в институте компьютерных наук. Вышел на позицию стажера Python-разработчика в MWS Octapi.
3. Кирилл Ефимович из команды Моторный шуруповерт, 20 лет, студент третьего курса бакалавриата направления «Разработка ПО», Университет Иннополис, GPA: 4.6. Вышел на позицию стажера DevOps в MWS Tables.
➡️ Зарегистрируйся и стань участником масштабного ИТ-чемпионата.

Вам знакома ситуация, когда лид приходит в ваш merge request и предлагает совершенно бессмысленную правку? Она не приносит пользы, не наносит вреда, но требует от вас дополнительных усилий.
Просто сделайте её.
Обсуждение может занять больше времени, чем сама правка, а в худшем случае перерасти в ненужный спор и проблемы в коммуникации. Разве нам это нужно? Скорее всего, нет.
Проявите снисходительность. Поймите: у лида и так осталось не так много радостей в жизни. Когда-то и он был разработчиком с горящими глазами. Он мечтал писать код, создавать новое, менять мир. Теперь же у него горят совсем не глаза. И сам он лишь раб структуры.
У вас же есть всё необходимое для счастья: код, тесты и ощущение, что вы сделали что-то настоящее. У него остались только дашборды и диаграммы Ганта.
Сделайте эту правку, проявите добродетель. Дайте человеку хотя бы ненадолго почувствовать, что он всё ещё кому-то нужен и полезен.
Что делать, если Python-сервер падает из-за утечки памяти?

Привет, Хабр! Это наша экспериментальная рубрика, в которой мы даем новичкам быстрые ответы на четкие вопросы. Писать статью будет излишним, а некоторую пользу до аудитории донести, возможно, получится.
Итак, допустим, агент спустя время начинает расти по памяти и в итоге все падает. Где копать и как временно ограничить ущерб, пока ищете утечку?
Первое, что нужно сделать — измерить и локализовать. tracemalloc показывает, какие строки выделяют больше всего памяти, gc — количество объектов.
Часто проблема в неограниченных кэшах, списках или в C-расширениях. Сначала стоит включить tracemalloc, дать процессу поработать и снять снапшот:
import tracemalloc
tracemalloc.start()
# после нагрузки
snapshot = tracemalloc.take_snapshot()
top = snapshot.statistics('lineno')[:10]
for stat in top:
print(stat)Параллельно делайте gc.collect() и логируйте число объектов len(gc.get_objects()), чтобы увидеть рост. На время расследования применяйте эксплуатационные меры: для WSGI-сервисов используйте Gunicorn с --max-requests и --max-requests-jitter, чтобы процессы периодически перезапускались и не накапливали мусор. А в контейнерах ставьте cgroup-пределы (--memory) и настраивайте restart-политику, чтобы платформа автоматически перезапускала упавшие поды.
Пример запуска Gunicorn:
gunicorn myapp:app --workers 4 --max-requests 1000 --max-requests-jitter 50Если утечка в C-расширении или сторонней библиотеке, то временно автоматический перезапуск и мониторинг позволяют сохранить сервис работоспособным, пока вы находите корень проблемы и исправляете код.
Если хотите освоить инструменты Python, то в Академии Selectel у нас есть отдельная подборка статей. Там мы рассказываем, как настраивать инструменты, работать с базами данных, создавать программы с интерфейсом и использовать Python для парсинга.