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
Я большой фанат серии игр S.T.A.L.K.E.R.

2007 стоит вернуть, хотя бы для того, чтобы заново пройти Тени Чернобыля в первый раз)

И вот недавно в реках ютуба наткнулся на такой интересный видос, который объясняет архитектуру и принципы работы его системы игрового искусственного интеллекта A-Life

Видос мне зашёл, потому что он в какой-то степени и для программистов)

Там есть всякие вставки кода, автоматы (state machine), алгоритмы и так далее

В общем, прям захотелось почитать исходники X-Ray Engine...
🔥13👍61
dotnet console

Бывает такое на работе, что надо потестить какое-нибудь решение: алгоритм, библиотеку не важно

И для этих целей отлично подходит консольное приложение - создал, накидал нугетов с гумнокодом и радуешся

Но как пользователь Rider столкнулся, судя по всему, с последствиями санкций

Когда в очередной раз хотел создать солюшн полигон через UI, то получил ошибку:
Error updating templates


Ну видимо, корпоративная сеть, все дела

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

Решил дропнуть сюда простенький скрипт для создания такого полигона из CLI:
mkdir TestSpace
cd TestSpace

dotnet new sln

mkdir ConsoleApp
cd ConsoleApp

dotnet new console
cd ..
dotnet sln .\TestSpace.sln add .\ConsoleApp\ConsoleApp.csproj


Ну а про другие шаблоны можно прочитать тут 👉 https://learn.microsoft.com/ru-ru/dotnet/core/tools/dotnet-new-sdk-templates
👍162🔥1😁1
официальный лор StepOne
😁44🔥32🤩1
Как я познакомился с xUnit DI

В xUnit есть классный инструментарий для создания разделяемого контекста между тестами с разным временем жизни - https://xunit.net/docs/shared-context

Если кто-то читал исходники интеграционных тестов hydranoscript, то мог заметить, что там я использую IClassFixture<>

Силами фреймворка экземпляр класса контекста пропихивается в конструктор класса тестов, реализующих указанный интерфейс

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

Приходилось писать руками бойлерплейт:
1. Запросить ITestOutputHelper в конструкторе тестового класса
2. Передать в fixture.GetRunner

Однако, я познакомился с библиотекой Xunit.DependencyInjection, которая решает эту проблему добавляя DI для этих самых контекстов

Получилось очень хитрое решение, убравшее бойлерплейт - TestHostFixture
Ну а PR отрисуется чуть ниже 👇
👍5🔥31
Выйдя из военкомата, захотелось сообщить важную новость

С этого дня открываю постоянную рубрику гостевых постов

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

Это предложение для тех, кому нужна площадка для публикации, не такая токс как Хабр, когда хотелось попробовать, но идей только на один пост или нужна простая проба пера


Всем StepOne, конец связи 🤝
👍26🔥31
7😁43🤩11👍1🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Делитесь, даже с джавистами
😁221🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
🔥12😁75❤‍🔥2👍1
Найм сломан

Давайте честно, хх ру, хабр карьера и линкедин просто достали!

Эти бездушные гигантские корпораты только поощряют ту вакханалию, которую постоянно устраивают HRюши…

А что если бы появилось онлайн пространство для построения карьеры, которое о вас заботится?

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

Имаджинировали увольнение бесполезных рекрутерш?

И я тоже) Потому что мой подписчик, Роман Сухих @Roman_Suhih_tg, занимается разработкой такого проекта

Его детище - соцсеть Grossmann, которая заставит наконец отказаться от паразита на теле IT в виде HR

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

That’s the whole freaking package!

Роман занимается разработкой в одиночку на протяжении полугода и ему нужна помощь

Не помешают как бэкенд разработчики, так и фронтенд в особенности

За это время уже есть есть три полноценных микросервиса, и еле движимый фронт

Джависты мимо - стек джентельменский, шарпы: SignalR, RabbitMQ, Garnet
Со стороны фронта Vue, SCSS, Typenoscript

Связаться с Романом:
https://news.1rj.ru/str/Roman_Suhih_tg

#гостевой
❤‍🔥14🔥6👍3🥰2
This media is not supported in your browser
VIEW IN TELEGRAM
gotta pump those numbers up, those are rookie numbers 🗿
😁12🤩32
StepOne выбирает город для переезда

❤️ Нижний Новгород
🔥 Севастополь
73🔥27🥰2😁2
В декабрьской суете я пропустил, что .NET 9 оказывается уже релизнулся, аж месяц назад

Одним из самых значимых нововведений считаю внедрение в стандартную библиотеку UUIDv7

Почему цифра 7 важна?

Guid полезен для БД, как тип первичного ключа, поскольку гарантирует сильную уникальность своим разнообразием значений

Раньше, значение было реализовано согласно стандарту v4 - на основе случайных байтов

Грубо говоря, написать Guid.NewGuid() семантически равносильно Random.NextInt64()

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

Стандарт v7 предлагает другую концепцию - идентификатор, основанный на метке времени

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

Новый API:
var guid = Guid.CreateVersion7();
var guidWithTimestamp = Guid.CreateVersion7(DateTimeOffset.UtcNow);
🔥35👍175
StepOne | Степан Минин
Запись выступления на Стачке 💪 Наконец-то стала доступна! Бекендеры были в шоке, когда узнали, что при перекладывании JSON'ов можно...😅
Начиная с .NET 7 я пристально слежу за обновлениями платформенного сериализатора System.Text.Json просто потому, что в 7-й версии сделали прорыв с полиморфизмом, а в 8-й с интеграцией Source Generators

9-я же версия не копает куда-то вглубь, а растёт вширь, охватывая всего понемножку.

Во-первых, наконец-то завезли нормальную сериализацию енамов:
JsonSerializer.Serialize(MyEnum.Value1 | MyEnum.Value2); // "Value1, Custom enum value"

[Flags, JsonConverter(typeof(JsonStringEnumConverter))]
enum MyEnum
{
Value1 = 1,
[JsonStringEnumMemberName("Custom enum value")]
Value2 = 2,
}

Во-вторых, добавили глубокую проверку на равенство:
JsonElement left = JsonDocument.Parse("10e-3").RootElement;
JsonElement right = JsonDocument.Parse("0.001").RootElement;
JsonElement.DeepEquals(left, right); // True

В-третьих, убрали строгость порядка полей метанаданных:
JsonSerializerOptions options = new() { AllowOutOfOrderMetadataProperties = true };
JsonSerializer.Deserialize<Base>("""{"Name":"Name","$type":"derived"}""", options); // Success


В общем, то тут то там, по мелочи чего-то добавили

Полная сводка всех свежих новостей тут 👉 https://devblogs.microsoft.com/dotnet/system-text-json-in-dotnet-9
👍25🔥43