StepOne | Степан Минин
Открыть в Telegram
StepOne by Степан Минин @ststphn Твой первый шаг к успеху в программировании Закрытый тг канал https://t.me/tribute/app?startapp=slOA По вопросам рекламы @Spiral_Yuri Ютуб https://www.youtube.com/@steponeit
Больше3 289
Подписчики
Нет данных24 часа
-137 дней
-3130 день
Архив постов
Получил военный билет
Я работаю в IT, поэтому привык разбираться в сложных системах. Но система военкоматов — это отдельный мир со своей логикой и стандартами. Недостаточно просто иметь заболевание - нужно ещё правильно и последовательно подтвердить его документами
Важно понимать, что это не быстрый процесс. Пришлось проходить обследования, лежать в больницах, собирать бумаги и ждать. Прошло 16 месяцев с момента заключения договора — путь оказался долгим, нервным и очень бюрократическим
За это время я трижды лежал в больнице. При этом, по моим ощущениям, в военкомате фактическое состояние здоровья почти не изучали. Основное внимание уделяли соответствию документов их требованиям
Самостоятельно разобраться во всех правилах, справках и последовательности действий было очень сложно. Юристы помогали понимать, какие документы нужны, как действовать на каждом этапе и чего ожидать дальше. Особенно ценно было сопровождение в моменты, когда процесс затягивался
Спасибо команде Андрея Породзинского за помощь в получении военного билета и сопровождение на протяжении всех 16 месяцев!
DotNext 2026: мой топ-3 докладов
StepOne стал информационным партнёром DotNext 2026, поэтому сейчас вы читаете краткий обзор финальной программы. Она получилась крепкой.
В ней есть компиляторы, рантайм, производительность, архитектура, базы данных, тестирование и, конечно, ИИ — его в этом году тоже приняли в программном комитете.
Вот мой личный топ-3.
1. Native AOT vs JIT в .NET 10: производительность, оптимизации и подводные камни
Юрий Малич сравнит JIT и Native AOT на x86-64 и ARM64, разберёт SSE, AVX2, AVX512, недокументированные настройки и будущие изменения кодогенерации в .NET 11. То есть будет нормальный разговор о том, где AOT быстрее, почему и какой процессор способен всё испортить.
2. C# (JIT) vs Go (AOT): сравнение с точки зрения результата и процесса компиляции
C# и Go обычно сравнивают в комментариях, где победитель определяется громкостью и количеством эмодзи. Здесь обещают одинаковые примеры, inlining, bounds checks, аллокации, escape analysis, PGO и Tiered JIT. Наконец-то появится возможность ругать Go не только по зову сердца, но и с опорой на результат компиляции!
3. Agent Framework. Как и зачем делать своего мини-агента на бэке
Да, ИИ-доклад вошёл в мой топ. В Dodo взялись автоматизировать агентами реальный процесс открытия новой страны: 66 этапов, до десяти шагов в каждом и ручные операции на стыке сервисов и людей. Хочу посмотреть, где Microsoft Agent Framework действительно избавляет от тысяч строк обвязки, а где агенту просто выдали красивое название. Это хороший шанс либо укрепить мой ИИ-скепсис, либо аргументированно его уменьшить.
Я буду на DotNext оффлайн оба дня — 25 и 26 сентября.
Если читаете канал и увидите меня на площадке — подходите знакомиться. Не надо стоять в пяти метрах и думать: «Наверное, не стоит отвлекать». Я еду на конференцию в том числе встречаться с вами.
Обсудим C#, open source, доклады, карьеру, блог или вашу очередную попытку доказать, что Go — нормальный язык.
Также у подписчиков моего канала есть возможность приобрести персональные билеты со скидкой. Пишите в лс: @ststphn
А вот и первый баг!
Не успел WireMock.Grpc.Protobuf толком размяться, как у него появился первый баг. Всё по-взрослому.
Проблема нашлась в
GrpcPredicateMatcher. Первый запрос он обрабатывал правильно, а при повторном вызове выдавал отсутствие совпадения. Особенно хорошо эффект проявлялся на protobuf-сообщениях с repeated-полями.
Причина оказалась в одной строчке:
private static readonly TMessage Empty = new();
private static readonly MessageParser<TMessage> Parser =
new(() => Empty);
MessageParser ожидает фабрику, которая при каждом разборе создаёт новый объект сообщения. А я возвращал ему один и тот же статический экземпляр.
В результате парсер не очищал объект и дописывал туда новые данные поверх старых. К примеру, если сообщение содержало поле с коллекцией, то она распухала при каждом вызове:
["1", "2", "3"] // первый вызов ["1", "2", "3", "1", "2", "3"] // второй вызовИсправление заняло меньше символов, чем объяснение бага и заключалось в подстановке вызова конструктора
new() вместо статического объека Empty.
Первый баг пойман, тест добавлен, стероидный курс продолжается. Поставить звезду на GitHub:
https://github.com/Stepami/wiremock-protobufКак я посадил WireMock.Net на gRPC стероиды
WireMock.Net умеет мокать gRPC. Но для этого он заставляет разработчика таскать .proto файлы и поддерживать лишнюю конфигурацию. Я контрибьютил в проект несколько месяцев, разобрался в кишках и написал своё расширение WireMock.Grpc.Protobuf
Пакет предлагает gRPC моки через типизированные контракты Google.Protobuf. Получилось короче, надёжнее и заметно удобнее. Можно проверить входящий запрос как на точное равенство, так и на частичное через предикат
В статье на Habr показал, почему мой способ удобнее стандартного, как всё устроено под капотом и зачем вашему проекту пакет WireMock.Grpc.Protobuf
Исходники расширения уже доступны на GitHub, а проект уже экономит вечера борьбы с gRPC моками! Звезда и скачивание будут лучшей благодарностью:
⚙️ GitHub https://github.com/Stepami/wiremock‑protobuf
👩💻 NuGet https://www.nuget.org/packages/WireMock.Grpc.ProtobufDotNext приезжает в Сокольники
Я редко рассказываю про конференции. Доклады доступны в записи, а бейджик участника не превращает мидла в сеньора. Но DotNext — исключение
Я с трудом стал там спикером. Ещё и работаю над конкурентом — «Стачкой». Поэтому у меня есть все основания промолчать. Но не в этот раз
Для меня DotNext давно остаётся тем самым местом, где C#-разработчики говорят о настоящей инженерии, пока джависты в это время обсуждают, как прогреть JVM, чтобы открыть Swagger к обеду
Ивент не для тех, кто вчера наклодИИл сервис и называет себя агент-лидом
В программе DotNext есть всё, ради чего инженеры терпят индустрию:
- рантайм, производительность, архитектура, инструменты
- практические кейсы
- что на самом деле происходит под капотом
Это вам не слёт гoферов, где архитектурные болезни выдают за простоту и удобство
В этом году DotNext пройдёт 25–26 сентября в Москве. Я пойду и буду рад встретить подписчиков и знакомых
Сейчас просто хочется побыть среди людей, которые всё ещё умеют обсуждать разработку без слов «агент», «вайб» и «перепишем это на микросервисы»
+1
Первый и последний раз показываю как правильно использовать нейросети. Думайте
Repost from ProIT Fest
GitHub не заплатит: зумеры против Open Source ветеранов.🥊Формат баттла строится на оппозиционных мнениях. И наши спикеры видят мир IT по-разному. 🎙️С одной стороны баттла Степан Минин готовит прагматичный зумерский контрудар рациональным инвестированием времени вместо романтики в IT. О спикере: Старший .NET разработчик Золотое Яблоко. Спикер DotNext, Ozon E-Code. Лидер ПК C# секции Стачки. Топ-5 автор Хабра по C#. Соло автор библиотек на 150+к скачиваний и 150 звёзд суммарно. 🎙️С другой стороны баттла вас ждет ветеран IT Александр Макаров, который сам является примером, как OpenSource помогает карьере на международном рынке. О спикере: Мейнтейер YII3. Lead Twindo.io, CTO с 20+ лет в разработке и OpenSource, программный комитет по PHP треку. 🤔Выступление стоит посетить: - разработчикам, которые думают, стоит ли вкладываться в OSS ради карьеры; - тимлидам и нанимающим менеджерам, чтобы обсудить, насколько GitHub реально помогает оценивать кандидатов; - всем, кто любит айтишные батлы поколений: зумерский прагматизм против миллениальской веры в комьюнити, репутацию и «правильный инженерный путь». 👉Обменяй свой социальный капитал на стоимость билета тут 👀Программа на сайте. 📍До встречи в субботу 11 июля в Питере в пространстве SENO!
HydraScript 2.7.0 Compound Assignments
В языке появилась поддержка compound assignments: теперь можно писать привычные конструкции вроде
x += y, x -= y, x *= y и так далее. Интересно, что я попробовал поручить эту задачу нейросети — и она не справилась
Она быстро предложила идею синтаксического сахара:
«развернуть x += y в x = x + y»Но дальше начались проблемы: модель не поняла, какие рефакторинги нужны и споткнулась об грамматику с парсером. Задача была чисто про FrontEnd, но LLM потерпела фиаско Единственный ощутимый плюс — идея решения действительно появилась быстро. Хотя до неё, честно говоря, можно было дойти самостоятельно Кроме того, я прокачал инфру и настроил .NET 10 Native AOT tool publish. Теперь пользователь получает из NuGet готовый бинарник, собранный под свою ОС, если таковой имеется. Сейчас поддержаны
win-x64, osx-arm64, linux-x64.
Этот релиз стал хорошим напоминанием: нейросети полезны как ускоритель размышлений, но не как замена пониманию кода. Если вам интересны эксперименты с языками программирования, компиляторами и небольшими, но живыми open-source проектами — загляните на GitHub и поставьте звезду HydraScript 💫Нейрозатраты
Вчера компания, где я работаю, сожгла месячный лимит LLM вендора. За две недели слито 1 500 000 рублей. Я тут же развеселил корпчат:
"ИИ уменьшит корпоративные расходы и оптимизирует затраты говорили они)))"Но мне не смешно. Разработчики тащат в компанию счётчик токенов, чтобы радоваться скорости, с которой он крутится. Они выбирают отключить голову, делегировать работу ИИ и с гордостью хвастаться ничего-не-деланьем. Неудивительно, что бизнес хочет вас заменить - вы сами приучаете их к этой мысли.
Каждая купленная подписка приближает нас к катастрофе.Кучка психопатов решила манипулировать рынком железа ради собственной прибыли, и вы поддержали их амбиции. Теперь за ПК надо переплачивать от 40 до 80 тысяч рублей. Вы позволяете им портить наш дом, разрушать экологию, загрязнять воздух и океаны. Несколько ИИ дата центров выбрасывают больше CO2, чем Норвегия. Но Рой Агентов Claude Code об этом не расскажет - он просто открутит токены и выставит счёт за нейрослоп. А ведь деньги можно было пустить на повышение зарплат. Оплачивая очередной GPT тариф, вы разрешаете лишить себя работы. Финансируя содомитов, вы выбираете путь Сатаны. Одумайтесь, пока не поздно
Взять того же Гладкова
Я не верю в миф 10x-программистов. Особенно когда 10иксеры делят коллег по принципу:
«я — рок-звезда разработки и все остальные лоуперформеры»А дальше начинаются вопросы, на которые ни одна рок-звезда не ответит: 😏 Эти самые 10x ревьюеров с нами в одной комнате? Или код летит в продакшн как набросы на вентилятор? 😳 10иксер готов к 10x реакции тестировщиков, которым надо проверить 10x фич? 😱 Сможешь поддерживать своё 10x легаси и фиксить 10x багов? Среди адептов этой идеи я чаще вижу 10x ЭГО, чем 10x результат. Да, сильные специалисты существуют — но обычно это либо одиночки, либо члены таких же 10x-команд
Починил WireMock пока не заблокировали GitHub
Я использую WireMock на работе, чтобы мокировать gRPC-вызовы внешних сервисов и тестировать транспортный уровень. Это придаёт уверенности в интеграциях до выхода в реальные окружения. Всё должно было работать гладко, но я столкнулся с неприятностью. Логи мок-сервера внезапно заполнились ошибками. Это произошло, как только моков стало несколько и ко всем пошли запросы. Стало ясно: здесь что-то не так.
Я нырнул в исходный код WireMock и начал отлаживать его шаг за шагом, как сложный механизм. Проверял всё: как protobuf-байты превращаются в gRPC C#-объекты и обратно, где именно ломается логика. И в один момент щёлкнуло: сервер просто перебирает все заглушки подряд и пытается сконвертировать байты в неподходящие типы сообщений. Представьте ребёнка с сортером: он не ищет сразу квадратное отверстие, а методично примеряет кубик ко всем подряд.
Я вышел на связь с автором WireMock из Нидерландов, и мы вместе стали искать решение. В процессе проектирования стало понятно: нужен ранний отказ от заглушки по явным признакам запроса — URL, header, cookie и другим. Проще говоря, система должна сразу выбирать «квадратное отверстие» для «кубика», а не перебирать всё подряд. Это не только устранило ошибки, но и избавило сервер от лишней работы.
Сам процесс, когда инженер из России и разработчик из Нидерландов вместе решают проблему — это и есть настоящая магия опен-сорса и глобализации. Мой Pull Request уже влит, скоро выйдет новая версия NuGet пакета. Но что будет, если завтра такие связи оборвутся? Вы готовы жить в мире, где развитие технологий замедляется не из-за сложности задач, а из-за границ в интернете?
Министерство Джавистов публикует файлы СтэпУан. Фото в цвете.
ШарпиZм. Подписаться
Я поменял подход к релизам hydrascript
Раньше делал по классике: копил пачку изменений, доводил до «солидного объёма» и только потом выкатывал релиз. В итоге обновления выходили редко, а исправления ошибок и мелкие и полезные вещи долго лежали без дела
Теперь проще: сделал фичу — зарелизил. Не жду, пока наберётся «достаточно». Это позволяет чаще обновляться и быстрее получать фидбек. Да и вам не нужно ждать месяцами багфикса
Параллельно наметил небольшой roadmap на ближайшие версии:
👩💻 2.7.0 — compound assignments
👩💻 2.8.0 — новые операторы
👩💻 2.9.0 — динамические словари
Буду двигаться по нему, но без фанатизма — если что-то полезное появится раньше, оно не будет ждать своей «очереди»
Если у вас есть идеи фич для hydrascript — накидывайте в комментарии. Интересно посмотреть, чего не хватает со стороны 🗿
Я выкатил новую версию Hydrascript (2.6.6) — и, честно говоря, это был тот ещё квест 😅
Делать язык программирования — это не просто «написать код», а постоянно разруливать такие тонкие и странные штуки, о которых обычные разработчики даже не задумываются.
Например, я поймал баг, где порядок типов внезапно влиял на статический анализ — оказалось, я слишком рано смешал этапы построения типов и разрешения ссылок.
А ещё пришлось чинить арифметику: сравнения ломались, если в выражении была длина строки, потому что она не приводилась к
double.
Такие вещи незаметны снаружи, но внутри это целая головоломка, и именно в таких местах понимаешь, насколько глубоко нужно разбираться в устройстве языков.
Если хочешь поддержать проект — закинь звезду на GitHub, это правда помогает 👩💻
Скачать на NuGet: https://www.nuget.org/packages/hydrascriptПродолжаю путь гофера ⚙️
Честно, заходил в этот курс как типичный Senior C# бэкендер с лёгким скепсисом:
Зачем мне ваш Go, когда есть нормальный ООП, async, LINQ и взрослая экосистема?
В итоге залип! Курс реально техничный: 17 тем, куча задач в каждой, и всё это прокачивает именно мышление под собеседования, а не «как делать прод»
Но важно понимать: это не про реальную разработку на Go, а чисто про то, как проходить интервью: мапы, горутины, каналы, планировщик, подводные камни языка. И вот тут Go иногда выглядит… мягко говоря, своеобразно: после C# местами не хватает выразительности и строгости, а некоторые решения ощущаются как компромисс ради простоты
Если хочешь выйти за пределы своей зоны комфорта и уверенно щёлкать задачи на Go-интервью, курс точно стоит попробовать. Переходи по ссылке и проверь себя: либо укрепишь любовь к C#, либо внезапно начнёшь писать на Go осознанно⚙️
Всем привет! К сожалению, по не зависящим от меня причинам не смогу присутствовать на Стачке
Тем не менее, я призываю всех получить максимум пользы и удовольствия от мероприятия!
Спикерам - успешных выступлений, участникам - хорошего настроения!
Покажите всем победу Шарпизма!
10 апреля C# день на Стачке
Мы выбили 6 докладов которые пройдут с 13:25 до 18:25
Помимо этого, с 10:15 до 12:25 пройдёт круглый стол на тему ".NET сообщество в РФ - застой, смерть или возрождение?"
В рамках круглого стола планируется обсудить текущее состояние сообщества, есть ли влияние бигтех-хайпа Go и что делать в сложившейся ситуации
В обсуждении поучаствует Игорь Лабутин, один из лидеров @dotnetru
Ждём вас, шарпистов, для участия в диалоге на такую наболевшую тему!
Скука на работе из-за перекладывания JSON стала причиной появления HydraScript
Теперь я пошёл дальше, и научился перекладывать JSON на HydraScript в Docker на MacBook
Читайте на Хабре о том, как я это сделал и ставьте плюсы статье
