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
ШарпиZм update 👩‍💻

Теперь в закрытом канале есть регулярный эксклюзивный технический контент

В постах о технологиях:
- разбираю новинки
- открываю «hidden gems»
- копаю в глубину

По промокоду JAVASOSAT можно получить скидку 40% на первый месяц подписки!

Кол-во скидок ограничено - всего 5 мест
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥74😁4🤯3❤‍🔥1
StepOne | Степан Минин
ШарпиZм update 👩‍💻 Теперь в закрытом канале есть регулярный эксклюзивный технический контент В постах о технологиях: - разбираю новинки - открываю «hidden gems» - копаю в глубину По промокоду JAVASOSAT можно получить скидку 40% на первый месяц подписки!…
Как я работал с wkt и гео запросами 👩‍💻

Была задача - вытащить данные по гео-запросу из монги, а потом сделать по ним гео-поиск в 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
🔥12👍43❤‍🔥1
А доклад оказался реально хорош!

Если не смогли приехать на Ozon E-Code, то можете посмотреть его в записи 👉 https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f/
👍14🔥74❤‍🔥1
StepOne | Степан Минин
Как я работал с wkt и гео запросами 👩‍💻 Была задача - вытащить данные по гео-запросу из монги, а потом сделать по ним гео-поиск в SQL Server Так странно, потому что "микросервисы" Код был написан, локально на винде работал - а в проде обосрамс. Оказалось…
Самая важная часть обновления .NET 10 👩‍💻

Последние дни активно читаю, что добавят в юбилейный релиз, и ощущаю его минорность. Об этом подробнее в будущих постах Шарпи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

Напоминаю, что у промокода JAVASOSAT осталось 2 активации!
Промокод активен до конца этой недели!
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩83👍2❤‍🔥1
Serilog.Sinks.XUnit3 👩‍💻

Пришло время рассказывать про свои библиотеки!

Если вы пишете тесты на xUnit.v3 и логгируете через Serilog, то моё решение для вас!


Каждый на работе сталкивался с непонятным багом. Смотришь в код и видишь фигу)

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

Логгирование призвано помочь разрабу справиться со страданиями, но вот незадача! При запуске интеграционного теста с воспроизведением бага логи никуда не выводятся.

Поэтому я написал Serilog.Sinks.XUnit3!
Чтобы не выходя из IDE разработчик понимал, что происходит!

Призываю вас делится этой библиотекой и внедрять в свои тесты!

👩‍💻 GitHub: https://github.com/Stepami/serilog-sinks-xunit-v3
👩‍💻 NuGet: https://www.nuget.org/packages/Serilog.Sinks.XUnit3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥126❤‍🔥1
Мой open-source растёт

Совсем недавно меня аппрувнули на включение в подборку лучших 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 - что это и почему нужно использовать
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍107❤‍🔥1
Завершил C# секцию Стачки 2025

В роли ПК выступаю во второй раз, и сейчас ШарпиZм стал ещё больше

Два дня и 6 докладов


У джавы всего один день и 4 доклада

Разыграли 6 топовых книг при поддержке издательств Питер и ДМК Пресс 💪

А если вы хотите розыгрыш той самой футболки, то вступайте в закрытый тг канал по ссылке в закрепе
🔥259😁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
👍9😁6🔥41❤‍🔥1
Вы знаете, за кого голосовать
2😁2🔥1
Forwarded from Decembrist IT News
Please open Telegram to view this post
VIEW IN TELEGRAM
😁7🤯4👍1
StepOne | Степан Минин
Учу инженеров OZON искусству ШарпиZма на E-Code 13-14 сентября снова рассказываю про крутые штуки, которые не могу внедрить из-за бюрократии и отсутствия власти https://ecode.ozon.tech/talks/b725f3db910e488191e79b9614d7d51f
Мне надо вам кое в чём признаться про validly

В своём докладе на 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
5👍3🔥2🤯2❤‍🔥1
IT 2025 - сплошной обман!

Они говорят "не хватает миллионов айтишников", но на хх ру всего 13 000 вакансий на программиста...
Они говорят "мы умеем нанимать кадры", но весь 2024 год в технических сбоях...

В индустрию берут кого попало, а мы огребаем!


Пора прекратить этот беспредел! В своём новом видео навалил базы по лечению найма - https://youtu.be/aQ3ltJ7wOC0
🔥8😁6👍2😍2❤‍🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12😁92❤‍🔥1