uk
Feedback
StepOne | Степан Минин

StepOne | Степан Минин

Відкрити в Telegram

StepOne by Степан Минин @ststphn Твой первый шаг к успеху в программировании Закрытый тг канал https://t.me/tribute/app?startapp=slOA По вопросам рекламы @Spiral_Yuri Ютуб https://www.youtube.com/@steponeit

Показати більше
3 264
Підписники
-624 години
-57 днів
-2430 днів
Архів дописів
Рассказал как автоматизировал сборку лексера компилятором для своего языка программирования HydraScript. Да-да, вы не ослышал
Рассказал как автоматизировал сборку лексера компилятором для своего языка программирования HydraScript. Да-да, вы не ослышались - автоматизация без упоминания ИИ или агентов! Из интересного - фактически научился передавать работу из одного генератора в другой через небольшой хак рослина Ставить плюс на Хабре здесь 👉 https://habr.com/ru/articles/1087280/

Пошутил про джавистов в прямом эфире 😅 Шарпизм победил окончательно и бесповоротно!

Рассказал как я добавил в HydraScript объекты и методы без классов и сделал протоколы. Структурные типы, явный receiver и доп
Рассказал как я добавил в HydraScript объекты и методы без классов и сделал протоколы. Структурные типы, явный receiver и дополнительная работа аннотации типа. Накидаем плюсов на Хабре СтепВану 👉 https://habr.com/ru/articles/1086432/

Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентные тесты с gRPC 👀 Оно позволяет на
Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентные тесты с gRPC 👀 Оно позволяет настраивать моки WireMock.Net через сгенерированные C#-контракты Google.Protobuf. Можно сопоставлять запрос целиком или проверять только нужные поля:
Request.Create()
    .WithBodyAsGoogleProtobuf(
        (HelloRequest x) => x.Name == "StepOne");
Планирую написать практическое продолжение с примером написания компонентного теста на базе xUnit. Если после прошлой статьи откладывали знакомство — самое время попробовать 🙂
📦 Пакет на NuGet ⭐️ Исходники на GitHub
Звезда — простой способ поддержать мою работу. А если уже используете пакет, расскажите, как он вам и чего не хватает!

Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентные тесты с gRPC👩‍💻 Оно позволяет
Напомню, что у меня есть WireMock.Grpc.Protobuf — расширение для тех, кто пишет компонентные тесты с gRPC👩‍💻 Оно позволяет настраивать моки WireMock.Net через сгенерированные C#-контракты Google.Protobuf. Можно проверять запрос целиком или только нужные поля:
Request.Create()
    .WithBodyAsGoogleProtobuf(
        (HelloRequest x) => x.Name == "StepOne");
Планирую написать новую статью с практическим примером компонентного теста на базе xUnit ✅ Если после прошлой статьи откладывали знакомство — самое время попробовать😊
📦 Пакет на NuGet ⭐️ Исходники на GitHub
Звезда — простой способ поддержать мою работу. А если уже используете пакет, расскажите, как он вам и чего не хватает!

StepOne — официальный контрибутор FusionCache 🤙 Между набросами можно ещё и код писать FusionCache — библиотека гибридного к
StepOne — официальный контрибутор FusionCache 🤙
Между набросами можно ещё и код писать
FusionCache — библиотека гибридного кэширования для .NET. Объединяет кэш в памяти и распределённый кэш. Даёт из коробки джиттеринг, защиту от cache stampede, распределённую блокировку и многое другое Всё началось с бытового раздражения - для подключения RedisDistributedLocker приходилось вручную собирать объект локера, прокидывать настройки и логгер, доставать всё из DI Я же предложил сократить эту конструкцию до одного вызова. Добавил WithRedisDistributedLocker и проверки в DI-тестах Сам механизм блокировок уже был — я сделал его подключение удобнее. Теперь этот код в библиотеке, а не в очередном самописном extension-методе внутри проекта

Оказывается, год назад я предсказал выход Астры И вместе с этим - точную реакцию рынка на роль программистов Думайте. АГИ уже здесь! Астра 💪💪💪

Доставка - новое IT Мужчина на видео делится опытом заработка 350 000 ₽ за месяц без выходных курьером ВкусВилл А после предлагает наставничество по вкату в курьеры Интересно, что будут разбирать в рамках курса. Правильный ответ на вопрос «Кем вы видите себя через пять доставок?» ??? С другой стороны это отличная карьерная возможность для джавистов. Наконец-то работа без унижений и шанс не позорить айти Кто сидит в чате СтепВанчиков, видел мои вбросы про выход из айти в подобные профессии. Но теперь это не шутки, а новая реальность Привлекательность работы программиста всё меньше и меньше...

GPT-6 УЖЕ ЗДЕСЬ!!! Мне стала доступна Астра!!! Теперь я ИИ-Пилот на стыке эпох! AI-First StepOne ИИ-Трансформировался на гран
GPT-6 УЖЕ ЗДЕСЬ!!! Мне стала доступна Астра!!! Теперь я ИИ-Пилот на стыке эпох! AI-First StepOne ИИ-Трансформировался на грани возможного!!! ASTRA 💪💪💪

Ребят, наткнулся на новый сериал, называется ДЖАВАзвимый. Он про джависта, которого часто бьют И короче, весь финал 1 сезона
Ребят, наткнулся на новый сериал, называется ДЖАВАзвимый. Он про джависта, которого часто бьют И короче, весь финал 1 сезона он борется со своим отцом Омни-ШАРПОМ Мой любимый момент оттуда, когда главный герой крикнул: «Время Джавы!», и его за это жёстко отДОТНЕТили! В общем, настоящий шедевр нашего времени 🙌

И снова "кажется началось" Представьте, что вы работаете в IT-компании. Внезапно к вам возвращается CTO, который провёл уходи
И снова "кажется началось" Представьте, что вы работаете в IT-компании. Внезапно к вам возвращается CTO, который провёл уходил на полгода в другую контору Он рассказывает о впечатлениях от настоящей AI-First разработки в той конторе, и объявляет начало ИИ-трансформации в вашей компании Затем проскакивает тезис:
ai-энтузиасты лайк ai-луддиты скорее в будущем столкнутся с увольнением
Какими были бы ваши действия внутри такой компании?

Поздравляю СтепВанчиков с Днём Знаний! Желаю узнать как переписать все микросервисы и монолиты на дотнет быстро без багов Вот
Поздравляю СтепВанчиков с Днём Знаний! Желаю узнать как переписать все микросервисы и монолиты на дотнет быстро без багов Вот сидел я в 9 утра и думал после ревью 5го PR:
«Как хорошо, что в школу не надо»

Красивый GitHub StepOne Нанейронил себе красивый README профиля и сайт на базе GitHub Pages https://stepami.github.io/
Красивый GitHub StepOne Нанейронил себе красивый README профиля и сайт на базе GitHub Pages https://stepami.github.io/

Получил военный билет Я работаю в IT, поэтому привык разбираться в сложных системах. Но система военкоматов — это отдельный мир со своей логикой и стандартами. Недостаточно просто иметь заболевание - нужно ещё правильно и последовательно подтвердить его документами Важно понимать, что это не быстрый процесс. Пришлось проходить обследования, лежать в больницах, собирать бумаги и ждать. Прошло 16 месяцев с момента заключения договора — путь оказался долгим, нервным и очень бюрократическим За это время я трижды лежал в больнице. При этом, по моим ощущениям, в военкомате фактическое состояние здоровья почти не изучали. Основное внимание уделяли соответствию документов их требованиям Самостоятельно разобраться во всех правилах, справках и последовательности действий было очень сложно. Юристы помогали понимать, какие документы нужны, как действовать на каждом этапе и чего ожидать дальше. Особенно ценно было сопровождение в моменты, когда процесс затягивался Спасибо команде Андрея Породзинского за помощь в получении военного билета и сопровождение на протяжении всех 16 месяцев!

DotNext 2026: мой топ-3 докладов StepOne стал информационным партнёром DotNext 2026, поэтому сейчас вы читаете краткий обзор
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. Но для этого он заставляет разработчика таскать .
Как я посадил 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.Protobuf