StepOne | Степан Минин
Решил подвести итоги лета и понял, что у StepOne ничего не получилось Ютуб не стрельнул. Сколько бы не набрасывал на хайповые темы, получаю несколько сотен просмотров и смерть видео Про айти-ремиксы вы уже знаете Разоблачение Гандона Наварова не поддержал…
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
А у Степана Минина всё отлично!
Чего только стоит сходка в августе👩💻
Этим летом я жил полной жизнью! Ходил на тусовки, концерты, мероприятия и много путешествовал🕺🏼
Родной Петербург с Александринским театром, уютный Калининград и сбывшаяся мечта - Владивосток с яхтингом 🤩
Приморскую природу, морепродукты и купание в Тихом океане собякину никак не перебить 🤣
Чего только стоит сходка в августе
Этим летом я жил полной жизнью! Ходил на тусовки, концерты, мероприятия и много путешествовал🕺🏼
Родной Петербург с Александринским театром, уютный Калининград и сбывшаяся мечта - Владивосток с яхтингом 🤩
Приморскую природу, морепродукты и купание в Тихом океане собякину никак не перебить 🤣
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14👍10🔥9❤🔥2
ШарпиZм update 👩💻
Теперь в закрытом канале есть регулярный эксклюзивный технический контент
В постах о технологиях:
- разбираю новинки
- открываю «hidden gems»
- копаю в глубину
По промокоду
Кол-во скидок ограничено - всего 5 мест
Теперь в закрытом канале есть регулярный эксклюзивный технический контент
В постах о технологиях:
- разбираю новинки
- открываю «hidden gems»
- копаю в глубину
По промокоду
JAVASOSAT можно получить скидку 40% на первый месяц подписки!Кол-во скидок ограничено - всего 5 мест
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Tribute
This bot helps content creators receive financial support from their followers directly in the app.
🔥7❤4😁4🤯3❤🔥1
StepOne | Степан Минин
ШарпиZм update 👩💻 Теперь в закрытом канале есть регулярный эксклюзивный технический контент В постах о технологиях: - разбираю новинки - открываю «hidden gems» - копаю в глубину По промокоду JAVASOSAT можно получить скидку 40% на первый месяц подписки!…
Как я работал с wkt и гео запросами 👩💻
Была задача - вытащить данные по гео-запросу из монги, а потом сделать по ним гео-поиск в SQL Server
Так странно, потому что "микросервисы"
Код был написан, локально на винде работал - а в проде обосрамс. Оказалось Linux не умеет работать с
Не помогало ничего, даже мок-пакет от dotMorten. Проблема слишком низкоуровневая и зашита dll биндинги клиентской библиотеки.
Но по сути, мне надо было вжухнуть в запрос wkt строку, из которой СУБД собрала объект геометрии сама.
Решил проблему можно сказать через ООП - нашёл библиотеку Geo.
Дальше собрал объект геометрии и сериализовал. Почти вот так:
Дальше пульнул строку в запрос и отвязался от OS зависимостей.
Больше таких постов найдёте в ШарпиZме📱
Была задача - вытащить данные по гео-запросу из монги, а потом сделать по ним гео-поиск в SQL Server
Так странно, потому что "микросервисы"
Код был написан, локально на винде работал - а в проде обосрамс. Оказалось Linux не умеет работать с
Microsoft.SqlServer.Types.SqlGeometryНе помогало ничего, даже мок-пакет от dotMorten. Проблема слишком низкоуровневая и зашита dll биндинги клиентской библиотеки.
Но по сути, мне надо было вжухнуть в запрос wkt строку, из которой СУБД собрала объект геометрии сама.
wkt - Well Known Text, что-то вроде JSON для геоданных: точки, полигоны, дырки и так далее. Почитайте на досуге
Решил проблему можно сказать через ООП - нашёл библиотеку Geo.
Дальше собрал объект геометрии и сериализовал. Почти вот так:
var settings = new WktWriterSettings {
LinearRing = false;
Triangle = false;
DimensionFlag = true;
NullOrdinate = Coordinate.NullOrdinate.ToString(CultureInfo.InvariantCulture);
MaxDimesions = 4;
};
var writer = new WktWriter(settings); // Pass the settings object into the writer's constructor
var pointString = writer.Write(new Point(68.389, 73.89));Дальше пульнул строку в запрос и отвязался от OS зависимостей.
Больше таких постов найдёте в ШарпиZме
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - sibartlett/Geo: A geospatial library for .NET
A geospatial library for .NET. Contribute to sibartlett/Geo development by creating an account on GitHub.
🔥12👍4❤3❤🔥1
StepOne | Степан Минин
Учу инженеров OZON искусству ШарпиZма на E-Code 13-14 сентября снова рассказываю про крутые штуки, которые не могу внедрить из-за бюрократии и отсутствия власти https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f
This media is not supported in your browser
VIEW IN TELEGRAM
🔥13❤🔥3🤯3🤩2
А доклад оказался реально хорош!
Если не смогли приехать на Ozon E-Code, то можете посмотреть его в записи 👉 https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f/
Если не смогли приехать на Ozon E-Code, то можете посмотреть его в записи 👉 https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f/
👍14🔥7❤4❤🔥1
StepOne | Степан Минин
Как я работал с wkt и гео запросами 👩💻 Была задача - вытащить данные по гео-запросу из монги, а потом сделать по ним гео-поиск в SQL Server Так странно, потому что "микросервисы" Код был написан, локально на винде работал - а в проде обосрамс. Оказалось…
Самая важная часть обновления .NET 10 👩💻
Последние дни активно читаю, что добавят в юбилейный релиз, и ощущаю его минорность. Об этом подробнее в будущих постах ШарпиZма
Одну крутую оптимизацию всё-таки отмечу, потому что она уже была несколько лет у джавистов
Это аллокация на стеке для маленьких массивов как значимых, так и ссылочных значений:
В коде выше массивы
Upd: коллега подсказал - ограничение 512 байт
==========
Это был пост из моего закрытого канала ШарпиZм👩💻
Там мы уже детально обсудили самые важные обновления C# и .NET:
- C# 14 расширения и присваивания
- EF Core 10
- ASP NET Core 10
- Обновления платформенных библиотек .NET 10
Напоминаю, что у промокодаJAVASOSAT осталось 2 активации!
Промокод активен до конца этой недели!
Последние дни активно читаю, что добавят в юбилейный релиз, и ощущаю его минорность. Об этом подробнее в будущих постах ШарпиZма
Одну крутую оптимизацию всё-таки отмечу, потому что она уже была несколько лет у джавистов
Это аллокация на стеке для маленьких массивов как значимых, так и ссылочных значений:
static void SumAndPrint()
{
int[] numbers = {1, 2, 3};
int sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
sum += numbers[i];
}
Console.WriteLine(sum);
string[] words = {"Hello", "World!"};
foreach (var str in words)
{
Console.WriteLine(str);
}
}
В коде выше массивы
numbers и words живут на стеке, потому что их время жизни ограничено внешним контекстом метода SumAndPrint. Единственное, не уточняется, что значит маленький массив. Хочу знать точное число килобайт, а не гадать на кофейной гуще. Надеюсь в ноябре МелкоМягкие сообщатUpd: коллега подсказал - ограничение 512 байт
==========
Это был пост из моего закрытого канала ШарпиZм
Там мы уже детально обсудили самые важные обновления C# и .NET:
- C# 14 расширения и присваивания
- EF Core 10
- ASP NET Core 10
- Обновления платформенных библиотек .NET 10
Напоминаю, что у промокода
Промокод активен до конца этой недели!
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Tribute
This bot helps content creators receive financial support from their followers directly in the app.
🤩8❤3👍2❤🔥1
Serilog.Sinks.XUnit3 👩💻
Пришло время рассказывать про свои библиотеки!
Каждый на работе сталкивался с непонятным багом. Смотришь в код и видишь фигу)
А чтобы разобраться в проблеме надо сидеть часами в медленном отладчике и поднимать ворох окружения, чтобы отследить одно единственное значение...
Логгирование призвано помочь разрабу справиться со страданиями, но вот незадача! При запуске интеграционного теста с воспроизведением бага логи никуда не выводятся.
Поэтому я написал Serilog.Sinks.XUnit3!
Чтобы не выходя из IDE разработчик понимал, что происходит!
Призываю вас делится этой библиотекой и внедрять в свои тесты!
👩💻 GitHub: https://github.com/Stepami/serilog-sinks-xunit-v3
👩💻 NuGet: https://www.nuget.org/packages/Serilog.Sinks.XUnit3
Пришло время рассказывать про свои библиотеки!
Если вы пишете тесты на xUnit.v3 и логгируете через Serilog, то моё решение для вас!
Каждый на работе сталкивался с непонятным багом. Смотришь в код и видишь фигу)
А чтобы разобраться в проблеме надо сидеть часами в медленном отладчике и поднимать ворох окружения, чтобы отследить одно единственное значение...
Логгирование призвано помочь разрабу справиться со страданиями, но вот незадача! При запуске интеграционного теста с воспроизведением бага логи никуда не выводятся.
Поэтому я написал Serilog.Sinks.XUnit3!
Чтобы не выходя из IDE разработчик понимал, что происходит!
Призываю вас делится этой библиотекой и внедрять в свои тесты!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥12❤6❤🔥1
Мой open-source растёт
Совсем недавно меня аппрувнули на включение в подборку лучших C# проектов по сорс генераторам
Теперь в репозитории csharp-source-generators вы найдёте ссылки на hydranoscript и visitor-net
https://github.com/amis92/csharp-source-generators
Совсем недавно меня аппрувнули на включение в подборку лучших C# проектов по сорс генераторам
Теперь в репозитории csharp-source-generators вы найдёте ссылки на hydranoscript и visitor-net
https://github.com/amis92/csharp-source-generators
❤18🔥12👍9❤🔥1
StepOne | Степан Минин
Ну щас как напроектирую! Прошёл курс Владимира Балуна по System Design и теперь советую своим СтепВанчикам Что мне очень понравилось - курс полезен не только как инструмент для взлома сис диз собесов, но и как база знаний по бекенду Внутри всё разложено…
Сходил на митап Владимира Балуна и внезапно выиграл курс в его школе
Пройду ещё раз сис диз, но уже на премиум тарифе с мок собесами и проверкой домашек. В прошлый раз компания мне оплатила только стандартный тариф
Митап был классный, на удивление встретил шарпистов. Теперь тоже хочу свой сделать!
Послезавтра поеду в Петербург на Стачку вести C# трек - там 2 дня докладов и целых 6 спикеров! Шарпизм всё больше и больше!
Хочешь, чтобы он рос дальше? Переходи по ссылке в закрепе за экслюзивным C# контентом! На прошлой неделе разобрали:
👩💻 Устройство и принцип работы unions в C# 15
👩💻 Миграцию на xUnit.v3
👩💻 Microsoft.Testing.Platform - что это и почему нужно использовать
Пройду ещё раз сис диз, но уже на премиум тарифе с мок собесами и проверкой домашек. В прошлый раз компания мне оплатила только стандартный тариф
Митап был классный, на удивление встретил шарпистов. Теперь тоже хочу свой сделать!
Послезавтра поеду в Петербург на Стачку вести C# трек - там 2 дня докладов и целых 6 спикеров! Шарпизм всё больше и больше!
Хочешь, чтобы он рос дальше? Переходи по ссылке в закрепе за экслюзивным C# контентом! На прошлой неделе разобрали:
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍10❤7❤🔥1
Завершил C# секцию Стачки 2025
В роли ПК выступаю во второй раз, и сейчас ШарпиZм стал ещё больше
У джавы всего один день и 4 доклада
Разыграли 6 топовых книг при поддержке издательств Питер и ДМК Пресс 💪
А если вы хотите розыгрыш той самой футболки, то вступайте в закрытый тг канал по ссылке в закрепе
В роли ПК выступаю во второй раз, и сейчас ШарпиZм стал ещё больше
Два дня и 6 докладов
Разыграли 6 топовых книг при поддержке издательств Питер и ДМК Пресс 💪
А если вы хотите розыгрыш той самой футболки, то вступайте в закрытый тг канал по ссылке в закрепе
🔥25❤9😁4👍3❤🔥1
Дотнет может стать самым быстрым бекендом из коробки в ближайшие 2-3 года
вк, вб, авито и другие гофер-еды должны уже перенимать практики озона в ШарпиZме
Бенчмарк с девяткой я думаю все видели
Конечно, это определённый тюнинг, но если взглянуть на роадмап оптимизирующего компилятора и рантайма, то всё становится очевидно:
.NET 7 - On Stack Replacement
.NET 8 - Dynamic PGO by default
.NET 9 - Object Stack Allocation + DATAS by default
.NET 10 - Stack Allocation
Предположу, что дальше будет async2 с переносом асинхронности в рантайм
Ну а чтобы прямо сейчас приблизить свои микросервисы к тотальной доминации над джавистами и гоферами, предлагаю вступить в закрытый канал ШарпиZм по ссылке закрепе 👆
На прошлой неделе я через бенчмарки показал, как дотюнить перфоманс:
- Регулярных Выражений
- Web API Request Delegates
- Native AOT Console Apps
вк, вб, авито и другие гофер-еды должны уже перенимать практики озона в ШарпиZме
Бенчмарк с девяткой я думаю все видели
Конечно, это определённый тюнинг, но если взглянуть на роадмап оптимизирующего компилятора и рантайма, то всё становится очевидно:
.NET 7 - On Stack Replacement
.NET 8 - Dynamic PGO by default
.NET 9 - Object Stack Allocation + DATAS by default
.NET 10 - Stack Allocation
Предположу, что дальше будет async2 с переносом асинхронности в рантайм
Ну а чтобы прямо сейчас приблизить свои микросервисы к тотальной доминации над джавистами и гоферами, предлагаю вступить в закрытый канал ШарпиZм по ссылке закрепе 👆
На прошлой неделе я через бенчмарки показал, как дотюнить перфоманс:
- Регулярных Выражений
- Web API Request Delegates
- Native AOT Console Apps
Telegram
О сложном просто!
.NET 9 обошёл всех конкурентов по скорости. Он быстрее Java, Go, Python, Node.js, PHP и ещё десятка популярных фреймворков.
Адаптивный GC, умный JIT, векторизация на AVX10 и Arm SVE, Native AOT для контейнеров и IoT, быстрый System.Text.Json, минимальные…
Адаптивный GC, умный JIT, векторизация на AVX10 и Arm SVE, Native AOT для контейнеров и IoT, быстрый System.Text.Json, минимальные…
👍9😁6🔥4❤1❤🔥1
StepOne | Степан Минин
Учу инженеров OZON искусству ШарпиZма на E-Code 13-14 сентября снова рассказываю про крутые штуки, которые не могу внедрить из-за бюрократии и отсутствия власти https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f
Мне надо вам кое в чём признаться про validly
В своём докладе на Ozon E-Code я утверждал, что validly поддерживает внедрение сервисов из DI, и приводил примерно такой кусок кода:
На самом деле это почти так. Генератор действительно понимает зависимости и пытается их достать через
К счастью, исправления от меня уже в мастере, но релиз до сих пор затягивается. Так что ждём!
Пока можете посмотреть PR с исправлениями - https://github.com/Hookyns/validly/pull/13
Или присоединиться в закрытый канал ШарпиZм, оформив подписку по ссылке в закрепе ☝️
Там вас ждёт гайд по подготовке к новому режиму сборки мусора при переходе на .NET 9 и .NET 10
В своём докладе на Ozon E-Code я утверждал, что validly поддерживает внедрение сервисов из DI, и приводил примерно такой кусок кода:
[Validatable]
public partial record CreateObjectRequest
{
[CustomValidation]
public string? IntegrationField { get; set; }
public async IAsyncEnumerable<ValidationMessage> ValidateIntegrationField(
IExternalService externalService,
[EnumeratorCancellation] CancellationToken ct = default)
{
if (IntegrationField is null)
yield break;
var isValid = await externalService.IsValidValue(IntegrationField, ct);
if (!isValid)
yield return new ValidationMessage("Integration field is invalid", "External.Integration");
}
}
public interface IExternalService
{
Task<bool> IsValidValue(string integrationField, CancellationToken ct = default);
}
На самом деле это почти так. Генератор действительно понимает зависимости и пытается их достать через
IServiceProvider. Но автор генерировал неправильный код из-за чего возникала ошибка сборки. А также пытался извлечь CancellationToken как сервис!К счастью, исправления от меня уже в мастере, но релиз до сих пор затягивается. Так что ждём!
Пока можете посмотреть PR с исправлениями - https://github.com/Hookyns/validly/pull/13
Или присоединиться в закрытый канал ШарпиZм, оформив подписку по ссылке в закрепе ☝️
Там вас ждёт гайд по подготовке к новому режиму сборки мусора при переходе на .NET 9 и .NET 10
GitHub
[bug] IServiceProvider does not contain a definition for GetRequiredService by Stepami · Pull Request #13 · Hookyns/validly
Setup
[Validatable]
public partial record CreateObjectRequest
{
[CustomValidation]
public string? IntegrationField { get; set; }
public async IAsyncEnumerable<ValidationMessage> V...
[Validatable]
public partial record CreateObjectRequest
{
[CustomValidation]
public string? IntegrationField { get; set; }
public async IAsyncEnumerable<ValidationMessage> V...
❤5👍3🔥2🤯2❤🔥1