StepOne | Степан Минин – Telegram
StepOne | Степан Минин
3.42K subscribers
249 photos
35 videos
6 files
313 links
StepOne by Степан Минин @ststphn

Твой первый шаг к успеху в программировании

Закрытый тг канал https://news.1rj.ru/str/tribute/app?startapp=slOA

По вопросам рекламы @Spiral_Yuri

Ютуб https://www.youtube.com/@steponeit
Download Telegram
Forwarded from ДевФест
8 сентября будем говорить о .NET

Приглашаем дотнет-разработчиков обсудить интересные темы:

- Подходы в .NET для обеспечения надёжной работы с RabbitMQ
- .NET Aspire — новый экспериментальный фреймворк для микросервисных приложений
- «Безумные проекты» сообщества разработчиков OmsDotNet
- Roslyn и плагины для компилятора C#
- Новый способ написания unit-тестов, который сэкономит кучу времени и нервов
- Статический анализ кода и .NET

Купить билет на трек: www.devfestomsk.ru
👍111🔥1
#анонсы

.NET-решения под капотом — в тематическом треке Internals 

На DotNext 2024 будет тематический трек Internals, в котором спикеры расскажут про инструменты и .NET-решения под капотом.

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

Доклады из трека Internals: 

→ Андрей Порожняков — Native AOT. Возможности и ограничения   
→ Степан Минин — Как в C# 11 появилась обобщенная математика 
→ Евгений Пешков — Асинхронность: не только async/await 
→ Кирилл Пронин — Как приручить XDocument? XmlDocument vs XDocument  
→ Юрий Малич — Методы повышения производительности .NET-приложения на примере программы поиска дубликатов
→ Станислав Сидристый — Плагины к сервисам: безопасное расширение функциональности  

Подробности и билеты
👍82🔥1
Логгирование в пет проекте

Да-да-да, очередной пост про hydranoscript

Но разве я виноват в том, что проект развивается и там есть интересные мне задачи?

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

Реализация была довольно спорной - зарегал в DI Console.Out

Не использовал ILogger<T>, поскольку хост писал status messages, да и формат сообщений был не такой, как надо

В итоге, спустя время я всё-таки узнал, как сделать логгирование в консоль стандартными средствами дотнета идентичным вызовам Console.WriteLine

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

Шаг второй. Написать свой форматтер сообщений, унаследованный от ConsoleFormatter

Шаг третий. Зарегать всё в DI примерно таким образом:
services.AddLogging(c => c.ClearProviders()
.AddConsole(options => options.FormatterName = nameof(SimplestConsoleFormatter))
.AddConsoleFormatter<SimplestConsoleFormatter, ConsoleFormatterOptions>());
services.Configure<InvocationLifetimeOptions>(options => options.SuppressStatusMessages = true);


Получился по итогу вот такой PR:
https://github.com/Stepami/hydranoscript/pull/108/files
👍52🔥2
Как выводить тестовую консоль xUnit?

Наступает момент, когда хочется в рамках тестов видеть, что происходит в программе с помощью консольных логов

Обычный Console.WriteLine не работает

На замену ему существует абстракция ITestOutputHelper, у которой есть аналогичный метод

Запрашивается просто, в конструкторе класса с тестами - xUnit сам предоставит туда реализацию, всё как в DI

С логгированием через ILogger<T> уже хитрее

Тут понадобится NuGet пакет MartinCostello.Logging.XUnit

Он содержит расширение AddXUnit, которое нужно использовать при настройке тестового хоста, передавая внутрь упомянутый ранее ITestOutputHelper

builder.ConfigureLogging(
x => x.ClearProviders()
.AddXUnit(testOutputHelper))
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍53
Fake Logging .NET 8

Ещё одна крутая плюшка восьмого дотнета - это коробочное решение для тестирования логов

Бывают ситуации, когда нужно проверить, что было определённое количество сообщений, определённого состава с определённым содержанием

Для этих целей можно использовать NuGet Microsoft.Extensions.Diagnostics.Testing

Можно подключить в хост через AddFakeLogging, можно использовать экземпляры FakeLogger<T> в юнит-тестах

Неплохо по сабжу написано тут и там
👍152🔥2
Личная выгода vs общественная польза

Неделю назад прилетел домой в Москву из Омска, где завершился DevFest
Подъехали фоточки, так что поделюсь своим experience

Моя мотивация подаваться на миллион конференций была донельзя примитивной - ачивка «speaker» level-up’ет CV и позволяет просить больше денег на собесе 🤵

Плюс, это повод для злорадства и хвастовства в сторону компаний, когда-то не способных сделать достойное предложение 😈
Ведь теперь они упустили не просто профи, а спикера DotNext) Чувствуете, как ценник поднялся?

После DevFest я стал считать своё мышление ошибочным, потому что первый же день в Омске показал, что ребята делают что-то другое, ну реально другое 😲

Как только услышал следующий девиз, он поселился в голове rent-free
Такого точно не хватает большинству мероприятий

Make New Friends


Пока аля-jugru втыкает стенды и нагоняет certified dushnil на авось, здесь строится площадка для встречи новых крутых людей

Чтобы находить единомышленников, запускать проекты, находить вдохновение и мотивацию, да и просто развивать it сообщество

Это неочевидный и сложный путь - пусть у организаторов всё получится 🙏❤️

Благодаря DevFest, я надеюсь, что нашёл новых друзей, и совершенно точно зарядился сделать лучший дотнет инструмент для экономии времени при написании тестов!

Если не расскажу про него в следующем году, можете отписаться и начать учить джаву ☠️
Настолько высоки ставки

Уже сейчас открыта продажа билетов на 2025, поэтому искренне советую запланировать посещение - это личный совет, а не реклама

Совершенно точно, для меня DevFest - открытие года, и хочется посетить его снова, потому что там 💯 будет круто!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥21❤‍🔥83👍3🥰2
🇷🇺
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33😁11🔥91🤩1
⚰️⚰️⚰️
Please open Telegram to view this post
VIEW IN TELEGRAM
1😁15🤩2
StepOne | Степан Минин
Разбор резюме❗️ Мне очень нравится общаться с аудиторией, особенно когда степванчики предлагают какие-то новые рубрики и форматы ❤️ Сегодня, благодаря @Roman_Suhih_tg у вас есть возможность попросить меня разобрать резюме Для этого просто скиньте пдфку…
Наконец-то новый разбор!

Напоминаю, что в комменты под постом в реплае можно скинуть своё резюме и я его публично разберу

На этот раз CV https://news.1rj.ru/str/steponeit/388?comment=4181 от @cher_misha

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

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

Не совсем ясно, для чего указывать курс по Flask, если автор шарпист 🤷‍♂️

Неплохо расписана последняя практика в PARMA по разработке сервиса логгирования

Я бы на твоём месте слепил её с предыдущей в один отрезок времени)

Из описания практики по валидации артефактов не понял ценность продукта, поэтому убрал бы этот раздел в пользу последнего

Направление задано неплохое, скелет хороший - надо "набирать мясо" и всё будет 💪
🔥7👍21🤩1
StepOne | Степан Минин
StepOne - Senior DevOps??? GitHub Actions CI/CD Expert На выходных сделал две вещи: 1️⃣Дописал статью на Хабр с подробным рассказом про свой пет-проект hydranoscript. Там появился логотип кстати, прикладываю к посту! Выйдет в конце августа - начале сентября…
Пытался перевести hydranoscript на AOT

В любом случае релиз паблишит на конкретные платформы, а тут под них ещё и оптимизацию пообещали

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

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

Однако, в Github Actions такое можно катить без проблем - на винду они ставят кал-плюс-плюс автоматом, на маках уже стоит xcode, а на православном линухе достаточно один апт-гет вызвать

В итоге, переход не удался из-за Scrutor и System.CommandLine
👍6🤩32
System.Text.Json | Source Generator

Сурс ген входит в жизнь дотнет разрабов всё глубже

И это не может не радовать - достойная замена псевдоИИ как никак

Одним из платформенных решений стал перенос сериализации в compile-time, что ofc должно бустануть перф

Во-первых, в .csproj прописываем
<JsonSerializerIsReflectionEnabledByDefault>false</JsonSerializerIsReflectionEnabledByDefault>


Во-вторых, пилим partial наследника JsonSerializerContext, где указываем какие типы надо поддержать, например:
[JsonSourceGenerationOptions(GenerationMode = JsonSourceGenerationMode.Serialization)]
[JsonSerializable(typeof(List<object>))]
[JsonSerializable(typeof(Dictionary<string, object>))]
[JsonSerializable(typeof(bool))]
[JsonSerializable(typeof(double))]
[JsonSerializable(typeof(string))]
private partial class AsStringSerializationContext : JsonSerializerContext;


Что здесь super tricky и не очевидно, то это настройка и передача опций


Часть можно передать в атрибут [JsonSourceGenerationOptions], но он не поддерживает работу с циклическими ссылками в том числе

Оказывается, можно просто создать экземпляр контекста руками и не париться:
private static readonly AsStringSerializationContext AsStringJsonContext = new(new JsonSerializerOptions
{
WriteIndented = true,
ReferenceHandler = ReferenceHandler.IgnoreCycles,
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
NumberHandling = JsonNumberHandling.AllowNamedFloatingPointLiterals
});


Ах да, к чему это я всё? Если хотите AOT, то сериализация должна быть на сурс гене)
В результате перевода hydranoscript на сурс ген жсон получился такой PR:
https://github.com/Stepami/hydranoscript/pull/80/files
🔥10👍6❤‍🔥1