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
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
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