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
Топ-3 бесполезных фичи C# в 2025 по мнению StepOne

1️⃣ Кортежи - зачем они нужны, если есть рекорды, которые не раздувают сигнатуру и имеют сравнение по значению и печать в строку из коробки???

2️⃣ Короткий конструктор new(). Из моей коммерческой практики нигде не используется, все пишут var.

3️⃣ Ключевое слово new для перекрытия членов. Существует только для генерации задач на собесы.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤‍🔥6😁5🔥1
StepOne | Степан Минин
📱 две тысячи просмотров на дотнеткоре, спасибо! 50 сердечек ❤️ на этом посте и в конце февраля дропаю новый айти ремикс про созвоны
28 февраля дроп на ютубе

StepOne - 52 созвона


Сниппет доступен в StepOne Premium

P.S. Во вторник туда доедет запись эфира о ЗП переговорах
👍7🔥42
12 февраля в StepOne Premium прошёл легендарный эфир ZP 101:
Зарплатные Переговоры 101


Запись наконец-то доступна!
Внутри нереальная ultimate база по большому шарпизму и высокому окладу на карточку каждый месяц!

1. Когда начинаются зарплатные переговоры?
2. Позиционирование в диалоге, почему выгодно обозначить вилку в начале
3. Как выжать максимум по верху вилки
4. Два пути торга
5. Разбор моих кейсов повышения суммы трудоустройства + gem шаблон

Посмотреть запись можно по ссылке👇
https://news.1rj.ru/str/tribute/app?startapp=slOA
❤‍🔥52🔥2👍1😁1
Я против гейткипинга и люблю приводить людей в тусовки, в которые им трудно попасть

Аж два раза выдал инвайт Антону Назарову на Хабр, хоть и тщетно)
У него своя история отношений с ресурсом)

Недавно, пригласил ещё одного товарища, которого точно не заблокируют, потому что он профи фронтенда и рассказывает про это направление интересно!

Если вы не хотите ждать дебюта на Хабре, то почитайте его тг канал «Джун на фронте»

Автора зовут Юрий, он пилит интеграции для Web3 и пытается в инди-хакинг

Если вы хотите как и я разгадать тайны непонятного фронтенда, то welcome к @divatoz
🔥7👍52😁1
StepOne | Степан Минин
В этом году я состою в Программном Комитете конференции Стачка и отвечаю за секцию C# Приглашаю СтепВанчиков выступить с годным контентом Если у вас только идея, пишите - доработаем и дойдём до доклада Конференция пройдёт в Ульяновске 18-19 апреля, участие…
Напоминаю, что 28 февраля заканчивается приём заявок для выступления на Стачке

Призываю всех проактивных и заинтересованных подать доклад в C# секцию 👇
https://ul25.nastachku.ru/lectures-new

Не стесняйтесь писать в личку, если что-то не получается или не понятно
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍2❤‍🔥11
Настоящий эксперт - это не просто сотрудник, а продукт и бизнес

Вы думали, что жизнь в найме закончена после зарплатного потолка?

Глеб Лукьянов, автор канала Путь Экспансии, расскажет как преодолеть это плато с помощью внедрения маркетинговых механик в свою карьеру

Это не про резюме, не про отклики на вакансии, а про позиционирование себя как продукта, работу с ценностью, конверсией и выход на более высокий уровень дохода

Захват рынка начинается здесь
👍3🔥32😁1
Типичное собеседование в Бигтех
🔥27😁22❤‍🔥21
Вы не знали этот NuGet пакет!

Речь конечно же про Fare, но что эта штука умеет?

Инструмент генерирует строки, под заданное регулярное выражение.
ВНЕЗАПНО, порт джавовской либы, имеет ряд ограничений к регуляркам(

Пример, использования:

using Fare;

var regex = "[a-zA-Z]+";
var xeger = new Xeger(regex);

var text = xeger.Generate();


Очевидно, что применение в тестах - можно генерировать номера телефонов, имейлы, данные по спецификациям.
Есть вариант удобно интегрировать, поскольку пакет включён в AutoFixture.

Чтобы понять подход, советую смотреть доклад про юнит тесты в Шарпизме

Пример из hydranoscript.
Создаём класс-обёртку над строкой, поле размечаем атрибутом [RegularExpression], оттуда будет считываться паттерн.

public record TokenInput(
[property: RegularExpression(TokenInput.Pattern)]
string Value) :
IAdditiveIdentity<TokenInput, TokenInput>,
IAdditionOperators<TokenInput, TokenInput, TokenInput>
{
[StringSyntax(StringSyntaxAttribute.Regex)]
public const string Pattern = "[a-zA-Z]+|[0-9]+|[+]{2}";

public static TokenInput operator +(TokenInput left, TokenInput right) =>
new(left.Value + " " + right.Value);

public static TokenInput AdditiveIdentity { get; } = new(string.Empty);
}


Далее берём автоданные и просим в тест массив от 10 до 25 токенов:

[Theory, AutoData]
public void GetTokens_MockedRegex_ValidOutput(
[MinLength(10), MaxLength(25)] TokenInput[] tokenInputs


Реализацию контрактов System.Numerics сделал для удобного склеивания через LINQ:

var text = tokenInputs.Aggregate(
TokenInput.AdditiveIdentity,
(x, y) => x + y).Value
1👍144🔥4❤‍🔥1
StepOne | Степан Минин
⚡️Rider 2024.3 + .NET 9 Срочное включение⚡️ Если вы используете в своем проекте source generator, таргетированный на net9.0, то intellisense видеть это не будет Rider посыпет ошибками, в то время как dotnet build работает Обнаружил в hydranoscript))) ht…
А может это был не баг?

Спустя месяц борьбы мне таки удалось победить райдер и заставить его видеть результат работы сурс генератора

Не знаю, что случилось с обновлением и переходом на 9 net sdk, но стало очевидно, что IDE запускает билд и Roslyn плагины через MSBuild

А он гораздо капризнее, чем
dotnet build


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

Вот TFM не netstandard2.0, значит не хочу не буду!

Дальше всё стало сложнее - генератор парсил JSON строку для сборки глобального паттерна, но в стандарте либы нет - она только в sdk)))

Но подключить в плагин NuGet reference, это та ещё боль - https://github.com/dotnet/roslyn/issues/52017

Надо позаботиться о том, чтобы зависимость и всё, что ей требуется вышли в папку analyzers!

А там начнутся неразрешимые конфликты версий…

В итоге отказался от JSON и перешёл на стрим объектов

А дальше ещё лучше - правило с перекладыванием DLL применяется не только к внешним пакетам, но и проектным референсам!

Но там проще, всего лишь выставляем
OutputItemType="Analyzer"


Результат борьбы в виде PR hydranoscript прикрепляю

Победил, но какой ценой…
🔥82👍2❤‍🔥1
12 марта 19-30 новый эфир в Шарпизме 👩‍💻

Так теперь называется закрытый канал

В течение получаса буду разбирать личный список компаний для работы дотнет по следующим критериям:
1. Деньги
2. Напряг
3. Собес
4. Легаси/скилл

Успей подписаться, потому что уже завтра я выключу скидку на первый месяц, и все новые шарписты будут платить по фулл прайсу

На скрине та мощная база, которая доступна уже сейчас

Вступай в шарпизм, и твой оффер пробьёт 450 👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥4❤‍🔥22
StepOne | Степан Минин
Всем привет! Буквально через пару недель я выступлю на конференции DotNext 2024 с докладом про обобщенную математику в C# 11. Посмотрим на концепцию обобщенной математики с нуля, покажу участникам конференции как она выглядит в C# 11 и как она могла бы выглядеть…
Маленькие победы Generic Math в .NET

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

Запись доклада доступна в Шарпизме 👩‍💻


Она появилась в 7 дотнете, а в этом ноябре уже будет релиз 10 версии.
И с тех пор очевидный ответ на вопрос "зачем" проявляется отдельными частями только сейчас

Становится очевидно, что Microsoft готовят нечто похожее на платформу для создания экосистемы AI разработки

Например, в 9 .NET появился тип данных Tensor<> для работы с тензорами и был расширен класс TensorPrimitives, содержащий (теперь обобщённые) операции над векторными типами данных в обёртке Span'ов

Что интересно эти методы разработаны так, чтобы использовать SIMD ускорения CPU в зависимости от предоставляемых возможностей (AVX, SSE и так далее)

public class ManhattanDistance<T> : IDistanceCalculator<T>
where T : unmanaged, INumberBase<T>
{
public double ComputeDistance(T[] attributesOne, T[] attributesTwo)
{
Span<T> diff = stackalloc T[Math.Min(attributesOne.Length, attributesTwo.Length)];
TensorPrimitives.Subtract(attributesOne, attributesTwo, diff);
var l1Norm = TensorPrimitives.SumOfMagnitudes<T>(diff);
return double.CreateTruncating(l1Norm);
}
}


Получается некоторая долголетняя многоходовочка из Generic Math, Span, stackalloc и много другого, которая убивает несколько зайцев сразу:
- Адепты ООП получают новый мощный архитектурный инструмент, решающий проблемы костылей из синглотонов и жалких попыток симуляции ad-hoc полиморфизма
- Microsoft приближается ещё на один шаг к обретению конкурентоспособности на рынке ML разработки, добиваясь возможности разработки глубоких моделей, чтобы нейросети тренировали не на Python, а на C#
- Любителям Производительности закрывают вопрос ускорения вычислений на Span, который не оптимизируется JIT'ом так, как массив или список

Что дальше, Гейтс и Наделла?

Ставьте 🔥 и ❤️ на пост, чтобы я написал пост про Generic Math в действии
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5012🤯5👍2❤‍🔥1
Generic Math in Action

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

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

DBSCAN и HDBSCAN по сути, однако HDBSCAN лучше, так как более устойчив к шуму, и его наличие не влияет на результат

Оказалось, что некий канадец реализовал HDBSCAN в NuGet пакете HdbscanSharp, однако код принуждал использовать тип данных double для датасета, что было неудобным для меня, поскольку я пользовался float и конвертациями заниматься не хотелось

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

Открыл PR, подождал какое-то время, однако его не вмержили, поскольку было много breaking change, тогда я решил самостоятельно выпустить новый пакет

Получился HdbscanSharp.GenericMath - https://www.nuget.org/packages/HdbscanSharp.GenericMath

Код можно посмотреть на гитхабе - https://github.com/Stepami/HdbscanSharp-GenericMath
🔥18👍6❤‍🔥32
Dapper больше не нужен

К такому выводу я пришёл, когда изучал последние версии EF Core

Вообще, необходимость linq2db тоже уже под вопросом...

Так вот, оказывается в 8 версии мелкомягкие тупо отжали рынок у библиотеки
Выглядит это так:
public class BlogPost
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public DateOnly PublishedOn { get; set; }
public int BlogId { get; set; }
}

var start = new DateOnly(2022, 1, 1);
var end = new DateOnly(2023, 1, 1);
var postsIn2022 =
await context.Database
.SqlQuery<BlogPost>($"SELECT * FROM Posts as p WHERE p.PublishedOn >= {start} AND p.PublishedOn < {end}")
.ToListAsync();


Причём такой запрос параметризируется с защитой от инъекции

Да и вообще там сейчас много всего крутого, особенно для проектирования DDD моделей

Советую присмотреться (я админ мне можно советовать)
👍327🔥5❤‍🔥1
Последние два месяца активно занимался сбором C# секции на конференцию Стачка

Впервые в роли ПК оказалось тяжело, потому что задача
собрать с нуля годный ростер за два месяца до сдачи чистовиков презентаций

мягко говоря, непростая

При чём, как мне показалось активность очень похожа на тимлидство

У меня есть проект - секция на конфе, мои разрабы это спикеры, и их таски это доклады

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

В конце концов, на мне висит ответственность и задача как-то спикеров найти (нанять/захантить), проводить прогоны (пулл реквесты и код ревью) и собрать в установленные сроки продукт

Ростер, на мой взгляд, получился более чем годный, особенно в поставленных условиях:
- Алексей Калдузов, head of C# в Ozon, расскажет про дотнет сервисы в кубере и поделиться практиками по эффективному использованию ресурсов подов
- Дмитрий Егоров, спикер DotNext, расскажет про JIT оптимизации: вы увидите насколько продвинутый компилятор дотнета + что случится с лицом гоферов и джавистов
- наконец, Денис Павлов, Senior C# разработчик, поделиться нетривиальным опытом разработки бекенда для хранения и обработки видео

Жду всех в Ульяновске, 18-19 апреля, на Стачке!

Шарпизм 👩‍💻👩‍💻👩‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21🔥3❤‍🔥11😁1
StepOne ft. @safon_qa - NAKRUTILI
(Ameli IT Remix)

Мой третий айти ремикс, на этот раз фитанул с тестером по имени Кирилл

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

Призываю беляша на реакт!


Пишите в комменты свою любимую строчку среди всех ремиксов

https://youtu.be/6a3768JwZUM?si=-BKpa8dd2fcqdHS5
🔥103👍3❤‍🔥1