Forwarded from ДевФест
8 сентября будем говорить о .NET
Приглашаем дотнет-разработчиков обсудить интересные темы:
- Подходы в .NET для обеспечения надёжной работы с RabbitMQ
- .NET Aspire — новый экспериментальный фреймворк для микросервисных приложений
- «Безумные проекты» сообщества разработчиков OmsDotNet
- Roslyn и плагины для компилятора C#
- Новый способ написания unit-тестов, который сэкономит кучу времени и нервов
- Статический анализ кода и .NET
Купить билет на трек: www.devfestomsk.ru
Приглашаем дотнет-разработчиков обсудить интересные темы:
- Подходы в .NET для обеспечения надёжной работы с RabbitMQ
- .NET Aspire — новый экспериментальный фреймворк для микросервисных приложений
- «Безумные проекты» сообщества разработчиков OmsDotNet
- Roslyn и плагины для компилятора C#
- Новый способ написания unit-тестов, который сэкономит кучу времени и нервов
- Статический анализ кода и .NET
Купить билет на трек: www.devfestomsk.ru
👍11❤1🔥1
Forwarded from DotNext — конференция для .NET‑разработчиков
#анонсы
.NET-решения под капотом — в тематическом треке Internals
На DotNext 2024 будет тематический трек Internals, в котором спикеры расскажут про инструменты и .NET-решения под капотом.
Например, про AOT-компиляцию, возможности обобщенной математики, методы повышения производительности и расширение функциональности сервисов.
Доклады из трека Internals:
→ Андрей Порожняков — Native AOT. Возможности и ограничения
→ Степан Минин — Как в C# 11 появилась обобщенная математика
→ Евгений Пешков — Асинхронность: не только async/await
→ Кирилл Пронин — Как приручить XDocument? XmlDocument vs XDocument
→ Юрий Малич — Методы повышения производительности .NET-приложения на примере программы поиска дубликатов
→ Станислав Сидристый — Плагины к сервисам: безопасное расширение функциональности
Подробности и билеты
.NET-решения под капотом — в тематическом треке Internals
На DotNext 2024 будет тематический трек Internals, в котором спикеры расскажут про инструменты и .NET-решения под капотом.
Например, про AOT-компиляцию, возможности обобщенной математики, методы повышения производительности и расширение функциональности сервисов.
Доклады из трека Internals:
→ Андрей Порожняков — Native AOT. Возможности и ограничения
→ Степан Минин — Как в C# 11 появилась обобщенная математика
→ Евгений Пешков — Асинхронность: не только async/await
→ Кирилл Пронин — Как приручить XDocument? XmlDocument vs XDocument
→ Юрий Малич — Методы повышения производительности .NET-приложения на примере программы поиска дубликатов
→ Станислав Сидристый — Плагины к сервисам: безопасное расширение функциональности
Подробности и билеты
👍8❤2🔥1
Логгирование в пет проекте
Да-да-да, очередной пост про
Но разве я виноват в том, что проект развивается и там есть интересные мне задачи?
Так уж вышло, что поскольку вывод в консоль хотелось абстрагировать, как часть возможностей виртуальной машины, то он осуществлялся с помощью экземпляра
Реализация была довольно спорной - зарегал в DI
Не использовал
В итоге, спустя время я всё-таки узнал, как сделать логгирование в консоль стандартными средствами дотнета идентичным вызовам
Шаг первый. Внедрить интерфейс логгера там, где требуется вывод
Шаг второй. Написать свой форматтер сообщений, унаследованный от
Шаг третий. Зарегать всё в DI примерно таким образом:
Получился по итогу вот такой PR:
https://github.com/Stepami/hydranoscript/pull/108/files
Да-да-да, очередной пост про
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
GitHub
#97 - внедрение логгера by Stepami · Pull Request #108 · Stepami/hydranoscript
Denoscription
Внедрил нормальный логгинг и централизовал механизм вывода информации в консоль
Теперь:
В релизе обычный ConsoleWriteLine
В тестах логи
В дебаге стектрейс
Related Issues
Closes #97
Внедрил нормальный логгинг и централизовал механизм вывода информации в консоль
Теперь:
В релизе обычный ConsoleWriteLine
В тестах логи
В дебаге стектрейс
Related Issues
Closes #97
👍5❤2🔥2
Как выводить тестовую консоль xUnit?
Наступает момент, когда хочется в рамках тестов видеть, что происходит в программе с помощью консольных логов
Обычный❌
На замену ему существует абстракция
Запрашивается просто, в конструкторе класса с тестами - xUnit сам предоставит туда реализацию, всё как в DI
С логгированием через
Тут понадобится NuGet пакет
Он содержит расширение AddXUnit, которое нужно использовать при настройке тестового хоста, передавая внутрь упомянутый ранее
Наступает момент, когда хочется в рамках тестов видеть, что происходит в программе с помощью консольных логов
Обычный
Console.WriteLine не работает На замену ему существует абстракция
ITestOutputHelper, у которой есть аналогичный методЗапрашивается просто, в конструкторе класса с тестами - xUnit сам предоставит туда реализацию, всё как в DI
С логгированием через
ILogger<T> уже хитрееТут понадобится NuGet пакет
MartinCostello.Logging.XUnitОн содержит расширение AddXUnit, которое нужно использовать при настройке тестового хоста, передавая внутрь упомянутый ранее
ITestOutputHelperbuilder.ConfigureLogging(
x => x.ClearProviders()
.AddXUnit(testOutputHelper))
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍5❤3
Fake Logging .NET 8
Ещё одна крутая плюшка восьмого дотнета - это коробочное решение для тестирования логов
Бывают ситуации, когда нужно проверить, что было определённое количество сообщений, определённого состава с определённым содержанием
Для этих целей можно использовать NuGet
Можно подключить в хост через
Неплохо по сабжу написано тут и там
Ещё одна крутая плюшка восьмого дотнета - это коробочное решение для тестирования логов
Бывают ситуации, когда нужно проверить, что было определённое количество сообщений, определённого состава с определённым содержанием
Для этих целей можно использовать NuGet
Microsoft.Extensions.Diagnostics.TestingМожно подключить в хост через
AddFakeLogging, можно использовать экземпляры FakeLogger<T> в юнит-тестахНеплохо по сабжу написано тут и там
Microsoft News
Fake It Til You Make It…To Production
Explores the new logging, metric, and time provider fakes introduced in .NET 8
👍15❤2🔥2
Личная выгода vs общественная польза
Неделю назад прилетел домой в Москву из Омска, где завершился DevFest
Подъехали фоточки, так что поделюсь своим experience
Моя мотивация подаваться на миллион конференций была донельзя примитивной - ачивка «speaker» level-up’ет CV и позволяет просить больше денег на собесе🤵
Плюс, это повод для злорадства и хвастовства в сторону компаний, когда-то не способных сделать достойное предложение 😈
Ведь теперь они упустили не просто профи, а спикера DotNext) Чувствуете, как ценник поднялся?
После DevFest я стал считать своё мышление ошибочным, потому что первый же день в Омске показал, что ребята делают что-то другое, ну реально другое😲
Как только услышал следующий девиз, он поселился в голове rent-free
Такого точно не хватает большинству мероприятий
Пока аля-jugru втыкает стенды и нагоняет
Чтобы находить единомышленников, запускать проекты, находить вдохновение и мотивацию, да и просто развивать it сообщество
Это неочевидный и сложный путь - пусть у организаторов всё получится 🙏❤️
Благодаря DevFest, я надеюсь, что нашёл новых друзей, и совершенно точно зарядился сделать лучший дотнет инструмент для экономии времени при написании тестов!
Если не расскажу про него в следующем году, можете отписаться и начать учить джаву☠️
Настолько высоки ставки
Уже сейчас открыта продажа билетов на 2025, поэтому искренне советую запланировать посещение - это личный совет, а не реклама
Совершенно точно, для меня DevFest - открытие года, и хочется посетить его снова, потому что там 💯 будет круто!
Неделю назад прилетел домой в Москву из Омска, где завершился 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❤🔥8❤3👍3🥰2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍33😁11🔥9❤1🤩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 по разработке сервиса логгирования
Я бы на твоём месте слепил её с предыдущей в один отрезок времени)
Из описания практики по валидации артефактов не понял ценность продукта, поэтому убрал бы этот раздел в пользу последнего
Направление задано неплохое, скелет хороший - надо "набирать мясо" и всё будет 💪
Напоминаю, что в комменты под постом в реплае можно скинуть своё резюме и я его публично разберу
На этот раз CV https://news.1rj.ru/str/steponeit/388?comment=4181 от @cher_misha
Вижу, что Михаил - начинающий специалист, сразу бросается в глаза малое количество даже не лет, а месяцев опыта
Очень смелая и неплохая идея расписать курсовой проект - правда 3 месяца для него маловато
Всё-таки кажется, что минимальные курсы разработки в университетах длятся семестр, то есть полгода
Не совсем ясно, для чего указывать курс по Flask, если автор шарпист 🤷♂️
Неплохо расписана последняя практика в PARMA по разработке сервиса логгирования
Я бы на твоём месте слепил её с предыдущей в один отрезок времени)
Из описания практики по валидации артефактов не понял ценность продукта, поэтому убрал бы этот раздел в пользу последнего
Направление задано неплохое, скелет хороший - надо "набирать мясо" и всё будет 💪
Telegram
Михаил Чернышев in StepOne Comments
🔥7👍2❤1🤩1
StepOne | Степан Минин
StepOne - Senior DevOps??? GitHub Actions CI/CD Expert На выходных сделал две вещи: 1️⃣ Дописал статью на Хабр с подробным рассказом про свой пет-проект hydranoscript. Там появился логотип кстати, прикладываю к посту! Выйдет в конце августа - начале сентября…
Пытался перевести hydranoscript на AOT
В любом случае релиз паблишит на конкретные платформы, а тут под них ещё и оптимизацию пообещали
Сначала сомневался даже попробовать - на винду надо ставить террабайты плюсистого кала, чисто чтобы была возможность прогнать команду
Через некоторое время, вспомнил, что у меня есть макбук, поэтому попробовал там - оказалось, что проект не готов из-за
Однако, в Github Actions такое можно катить без проблем - на винду они ставят кал-плюс-плюс автоматом, на маках уже стоит xcode, а на православном линухе достаточно один апт-гет вызвать
В итоге, переход не удался из-за
В любом случае релиз паблишит на конкретные платформы, а тут под них ещё и оптимизацию пообещали
Сначала сомневался даже попробовать - на винду надо ставить террабайты плюсистого кала, чисто чтобы была возможность прогнать команду
Через некоторое время, вспомнил, что у меня есть макбук, поэтому попробовал там - оказалось, что проект не готов из-за
json зависимостей, надо было переходить на сурс ген, о чём расскажу в следующем постеОднако, в Github Actions такое можно катить без проблем - на винду они ставят кал-плюс-плюс автоматом, на маках уже стоит xcode, а на православном линухе достаточно один апт-гет вызвать
В итоге, переход не удался из-за
Scrutor и System.CommandLineThe GitHub Blog
GitHub Actions: Windows Server 2022 with Visual Studio 2022 is now generally available on GitHub-hosted runners - GitHub Changelog
Windows Server 2022 with Visual Studio 2022 is now generally available on GitHub-hosted runners. To use it now, simply add runs-on: windows-2022 in your workflow file. Otherwise, our recommendation is…
👍6🤩3❤2
System.Text.Json | Source Generator
Сурс ген входит в жизнь дотнет разрабов всё глубже
И это не может не радовать - достойная замена псевдоИИ как никак
Одним из платформенных решений стал перенос сериализации в compile-time, что ofc должно бустануть перф
Во-первых, в
Во-вторых, пилим
Часть можно передать в атрибут
Оказывается, можно просто создать экземпляр контекста руками и не париться:
Ах да, к чему это я всё? Если хотите AOT, то сериализация должна быть на сурс гене)
В результате перевода
https://github.com/Stepami/hydranoscript/pull/80/files
Сурс ген входит в жизнь дотнет разрабов всё глубже
И это не может не радовать - достойная замена псевдоИИ как никак
Одним из платформенных решений стал перенос сериализации в 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
GitHub
Перевод на Source Gen Json by Stepami · Pull Request #80 · Stepami/hydranoscript
Denoscription
В рамках PR пытался перевести проект на AOT Publish
Оказалось, что это невозможно
В процессе оказалось, что для того чтобы прогнать
dotnet publish -p:PublishAot=true
Необходимо перевес...
В рамках PR пытался перевести проект на AOT Publish
Оказалось, что это невозможно
В процессе оказалось, что для того чтобы прогнать
dotnet publish -p:PublishAot=true
Необходимо перевес...
🔥10👍6❤🔥1