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
Типичное собеседование в Бигтех
🔥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
This media is not supported in your browser
VIEW IN TELEGRAM
👩‍💻👩‍💻👩‍💻👩‍💻👩‍💻👩‍💻👩‍💻
Большой Шарпизм
Please open Telegram to view this post
VIEW IN TELEGRAM
😁11🔥43❤‍🔥2🤯1
StepOne | Степан Минин
Твой шанс на 2025 Из моего последнего видео вы поняли, что из-за плохой работы рекрутеров найти работу в IT становится всё сложнее Однако, помимо апгрейда резюме есть ещё одно решение от моего кореша Сани из канала «Папочка Дотнета» Совсем недавно, он запустил…
Важный эфир 17 апреля в 19-00

Топ-5 крупнейших IT компаний СНГ перестали нанимать любых мобильных разработчиков


Везде поставили стоп на повышения, деньги дают только руководителям


Что дальше? Повсеместный отказ от C# в пользу Go?

Мои коллеги по цеху, Папочка Дотнета @dotnetdad и Сергей Назаров, 17 апреля выступят на эфире в Шарпизме, где расскажут самое важное о текущем состоянии дотнет рынка в РФ

Почему им можно верить?


Они занимаются менторством без предоплаты и уже успели довести до оффера десяток шарпистов

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

Помимо этого, они ответят на ваши вопросы, которые вы оставите в комментариях под этим постом

Твой последний шанс получить преимущество и обогнать всех находиться здесь
👍53❤‍🔥1🔥1
StepOne | Степан Минин
👩‍💻 А ещё в закрытом канале с подписчиками добавили в hydranoscript перегрузку функций в версию 2.2.0
В новой версии язык делает то, чего typenoscript не может!
Записи эфиров с лайвкодингом уже в Шарпизме, доступ в закрепе
Новости hydranoscript 2.3.0

После победы над typenoscript в прямом эфире мой подписчик Илья Левин @mmm_ilya пришёл в репу и закрыл много задач!

Респект уважуха и благодарность от лица Шарпизма!

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

Илья не просто обновил какие-то пакеты или доки, а сделал реально важный вклад:
- пофиксил баг с выводом в консоль, который я засадил во время рефакторинга
- внедрил логгирование на основе Source Generators: ещё одна фишка дотнета для повышения эффективности системы, которую, на мой взгляд, надо обязательно использовать в коммерческих проектах
- Упростил добавление тест-кейсов, реализовав типизированную авто подгрузку скриптов из файловой системы

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

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

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

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

https://github.com/Stepami/hydranoscript/milestone/7
👍153🔥3❤‍🔥2😁2
StepOne | Степан Минин
StepOne - Senior DevOps??? GitHub Actions CI/CD Expert На выходных сделал две вещи: 1️⃣Дописал статью на Хабр с подробным рассказом про свой пет-проект hydranoscript. Там появился логотип кстати, прикладываю к посту! Выйдет в конце августа - начале сентября…
Что такое CI/CD?
За что девоПсины получают свои какосеки?


В эту среду 9 апреля в 19-00 я проведу эфир в Шарпизме, где разберу по косточкам самое непонятное и частое требование из вакансий

А потом покажу свой большой и длинный пайплайн hydranoscript в GitHub Actions

После этого эфира твой оффер увеличиться минимум на 50к
6🔥3❤‍🔥2👍2
есть два типа людей
😁27👍156🔥5❤‍🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Строй дотнетландию с нами
👍12🔥65❤‍🔥4
StepOne | Степан Минин
Последние два месяца активно занимался сбором C# секции на конференцию Стачка Впервые в роли ПК оказалось тяжело, потому что задача собрать с нуля годный ростер за два месяца до сдачи чистовиков презентаций мягко говоря, непростая При чём, как мне показалось…
Замена на поле

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

На его место пришёл мой наставник и проводник в мир дотнета - Сергей Банников

Он поделится опытом импортозамещения систем построения отчётов, что является не только важной и актуальной темой в наше время, но и крайне болезненной

Так что, 19 апреля прекращаем работать и идём на Стачку!
👍76🔥3❤‍🔥1
Кажется, до кого-то начало доходить...

Как же надоели эти вездесущие микросервисы в круд приложениях, где меньше 1000 RPS...

А то понапихают своих модных-молодёжных приёмов, а потом:
1. Дебажишь data inconsistency
2. Чинишь распределённые транзакции
3. Думаешь как вставить outbox
4. Решаешь постоянные конфликты версий пакетов контрактов (даунгрейды и циклические ссылки)
5. Дублируешь код
6. Пытаешься собрать логи из разных хостов
7. Мучаешься с локальным развёртыванием, потому что докер можно не во всех компаниях

Накидывайте в комментах ещё попоболи, мой список - это не всё

Я прям жду вакансии, где будут писать не "распиливаем на микросервисы", а "склеиваем в монолит"!
❤‍🔥11😁7🔥31
Во время работы в большом красном телекоме в 2022 году мне удалось разработать методику написания unit-тестов, которая значительно сокращает время их написания, улучшая качество кода

С тех пор мне удалось успешно внедрить эту практику в нескольких компаниях, не только через работу, но и через этот канал

Решил зафиксировать на Хабре кейс, чтобы вы могли присылать это в свои команды, своим техлидам, тимлидам, архитекторам и так далее

Подробности внутри 👇
https://habr.com/ru/companies/ruvds/articles/894522/
1🔥13👍52❤‍🔥1
Сегодня на Стачке слушал доклад про рост в тимлиды

Внезапно на секции вопросов нарисовалась HRюша и в очередной раз доказала вред и бесполезность рекрутерш

Кейс примерно звучал так:
Наша компания сейчас активно расширяется, и текущие тимлиды могут стать Head’ами, но им нужно найти замену.
Вот незадача - условные сеньоры не хотят быть тимлидами, а условные мидлы хотят, но при этом они не сеньоры.
Думаем искать на рынке.
Что делать?

Во-первых, кто сказал, что технический скилл коррелирует с управленческим, и кто дал право каким-то рекрутершам это решать?

Крутым мега экспертным сеньорам вообще вредно идти в лиды, потому что тогда команда теряет ресурс

Во-вторых, я просто сгорел от их псевдогениального решения выйти на рынок

Вырастить сотрудников и получить сплочённую команду? Нет!

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

Как и прежде повторяю:
HR - раковая опухоль.

Не только в IT
18👍11🔥6🤯2❤‍🔥1