Библиотека шарписта | C#, F#, .NET, ASP.NET
23K subscribers
2.24K photos
35 videos
85 files
4.4K links
Все самое полезное для C#-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/b60af5a4

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🚀 Обновленный CodeBehind

Вышел CodeBehind 4.0, который добавляет новые возможности для удобного разделения логики и разметки в Blazor.

Основные изменения:

Обновленный BlazorComponentBase — улучшена поддержка жизненного цикла компонентов.

Удобный Dependency Injection — сервисы передаются напрямую в код-бихайнды.

Source Generators — автоматическая генерация кода для снижения рутины.

Гибкая обработка событий — больше контроля и возможностей.

Автоматическая синхронизация состояний — меньше бойлерплейта.

➡️ Подробный обзор обновления

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍62👾1
This media is not supported in your browser
VIEW IN TELEGRAM
⚙️ SQL-конструктор для .NET

KnightMoves.SqlObjects: объектно-ориентированный SQL-конструктор для .NET, который позволяет писать запросы максимально близко к чистому SQL, но с удобством C#.

Как это работает

Вместо строкового SQL-запроса создаются объекты, которые позволяют собирать SQL-инструкции интуитивно:
using KnightMoves.SqlObjects;

var sql = TSQL
.SELECT()
.STAR()
.FROM("Products")
.Build();

Console.WriteLine(sql);


В итоге получится запрос:
SELECT * FROM Products;


➡️ Документация библиотеки

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38🤔10😢5👏2🥱2
💻 Управление пакетами в .NET

Благодаря NuGet разработчики могут сосредоточиться на коде, а не на поиске и подключении библиотек. Это стандарт в экосистеме .NET, который упрощает разработку как для одиночных программистов, так и для команд.

Почему NuGet важен

• Автоматическое управление зависимостями – избавляет от ручного скачивания библиотек

• Центральный репозиторий – тысячи готовых пакетов, включая Newtonsoft.Json, Entity Framework и Serilog

• Лёгкая интеграция с .NET CLI, Visual Studio и CI/CD

Что такое api.nuget.org/v3/index.json.

Этот URL — официальный репозиторий пакетов NuGet, поддерживаемый Microsoft

Работа с NuGet в .NET CLI

Установка пакета:
dotnet add package Newtonsoft.Json


Обновление пакетов:
dotnet restore


Удаление пакета:
dotnet remove package Newtonsoft.Json


➡️ Подробнее на официальном сайте

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱25👍3🔥1
Swipe right or swipe left

Что делать, если твои мэтчи в жизни не такие точные, как твой код?

Спокойно, 14 февраля в 19:00 по МСК мы разберём, как ML анализирует speed dating и предсказывает match.

📌 Мы возьмем реальные данные со speed dating.

📌 Обучим модель, которая скажет: match или swipe left.

📌 Разберём, какие признаки реально важны (спойлер: работа в IT — не прям гарантия успеха (наши маркетологи подтверждают 😥).

💡 Приходи, если хочешь прокачать свой Python, ML и, возможно, станешь идеальной парой, как самый стильные форсы.

👉 Записаться
😁7👍5🥱31
🤩 AI-коммиты в Visual Studio: теперь с кастомизацией

Visual Studio позволяет генерировать и настраивать AI-коммиты. Можно задать длину, формат и количество строк, чтобы коммиты соответствовали стандартам команды.

Как настроить

Перейти в Tools > Options > Copilot и настроить шаблоны и параметры

➡️ Подробнее в блоге Microsoft

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱9👍3
⚙️ Гибридное кэширование

Гибридный кэш это баланс между скоростью и масштабируемостью. Он объединяет два уровня хранения данных:

1️⃣ Кэш в памяти. Хранит часто используемые данные локально, обеспечивая моментальный доступ.

2️⃣ Распределенный кэш: Redis, SQL Server Cache. Используется для хранения данных, доступных нескольким серверам.

То есть это метод, при котором данные сначала проверяются в локальном кэше, а если их там нет, запрашиваются из распределенного кэша, например, Redis.

Настройка гибридного кэша в .NET

Чтобы реализовать гибридное кэширование можно использовать HybridCache, который сочетает кэш в памяти и Redis.

1️⃣ Настроить локальный кэш

2️⃣ Добавить Redis как распределенный кэш

3️⃣ Реализовать логику работы с кэшем, используя стратегию «сначала память, потом Redis»

➡️ Подробнее о реализации HybridCache

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👏4👍2👾1
🛠 Асинхронное взаимодействие микросервисов в .NET

Одним из самых популярных брокеров сообщений является RabbitMQ, а MassTransit — это удобная библиотека для работы с ним в .NET. Сейчас разберем, как связать эти инструменты и создать отказоустойчивую систему обмена сообщениями.

Какие инструменты нужны

• RabbitMQ. Брокер сообщений, который позволяет сервисам отправлять и получать сообщения асинхронно, используя очереди.

• MassTransit. Библиотека для .NET, которая предоставляет простой и удобный API для работы с брокерами сообщений.

Как использовать их вместе

1️⃣ Устанавливаем RabbitMQ

RabbitMQ можно развернуть в Docker:
docker run -d --hostname my-rabbit --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management


2️⃣ Настраиваем MassTransit

Необходимо зарегистрировать MassTransit и подключить его к RabbitMQ:
builder.Services.AddMassTransit(x =>
{
x.UsingRabbitMq((context, cfg) =>
{
cfg.Host("localhost", "/", h =>
{
h.Username("guest");
h.Password("guest");
});
});
});


Этот код создает подключение к RabbitMQ, которое позволяет сервису отправлять и получать сообщения.

3️⃣ Создаем производителя

Производитель отправляет сообщения в очередь, используя MassTransit:
public async Task SendMessage(IBus bus, string message)
{
var endpoint = await bus.GetSendEndpoint(new Uri("queue:order-queue"));
await endpoint.Send(new OrderCreated { OrderId = Guid.NewGuid(), Message = message });
}


4️⃣ Создаем потребителя

Потребитель автоматически получает и обрабатывает сообщения из очереди:
public class OrderConsumer : IConsumer<OrderCreated>
{
public Task Consume(ConsumeContext<OrderCreated> context)
{
Console.WriteLine($"Получено сообщение: {context.Message.Message}");
return Task.CompletedTask;
}
}


💾 Сохраняйте мини-гайд себе, чтобы не потерять


📎 Подробный гайд в источнике

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍236🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 Windows Terminal Preview 1.23 – что нового в обновлении

Вышла новая версия превью терминала Windows! В этом обновлении разработчики сосредоточились на переносе множества настроек в графический интерфейс, а также внесли исправления ошибок и улучшения доступности.

Ключевые нововведения:

1️⃣ Обновления интерфейса настроек: Многие параметры, ранее доступные только в файле settings.json, теперь можно настроить непосредственно через интерфейс.

2️⃣ Новая вкладка "Совместимость": Добавлена страница настроек "Совместимость", где можно разрешить фоновую работу терминала, включить отладочные функции и изменить режим измерения текста.

3️⃣ Настройка меню новой вкладки: Теперь пользователи могут кастомизировать меню новой вкладки прямо через интерфейс настроек.

Cтабильная версия Windows Terminal обновлена до 1.22, включающей поддержку Sixel и панель сниппетов из предыдущей превью-версии.

Установить Windows Terminal Preview можно со страницы релизов на GitHub или с помощью winget.

👉 Подробности читайте в официальном блоге
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
🧑‍💻 Мокирование последовательных вызовов в Moq

Когда один и тот же метод вызывается несколько раз в тестах, часто требуется вернуть разные значения при каждом вызове. Например, первый вызов возвращает 1, второй — 2, а третий выбрасывает исключение.

Для подобных задач можно использовать SetupSequence().

🛠 Как это работает

Допустим, у нас есть интерфейс IMyInterface с методом MyMethod(), который вызывается несколько раз. Вместо обычного Setup() мы используем SetupSequence(), чтобы задать разные результаты:
var mock = new Mock<IMyInterface>();  
mock.SetupSequence(m => m.MyMethod())
.Returns(1)
.Returns(2)
.Throws(new Exception("Ошибка"));


Это удобно при тестировании кеширования, ретраев, обработки ошибок или сложных зависимостей.

➡️ Подробнее о SetupSequence и примерах использования

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25👾3
🤔 Какие вебинары вам действительно нужны?

Привет, шарписты! 👋

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

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

Заполнение займет всего пару минут, а нам это очень поможет! Спасибо, что участвуете в нашем развитии! 💙

👉 Пройти опрос
1
Как классическая классификация ML помогает в реальном мире

🤖 Классификация в ML — это метод обучения, в котором модель обучается на размеченных данных и предсказывает, к какому классу относится новый объект.

Фильтрация спама – чтобы в почте оставалось только важное.
Рекомендации фильмов – Netflix знает, что ты любишь!
Кредитный скоринг – банки решают, дать ли тебе займ.
Предсказание мэтчей – как на нашем вебинаре по speed dating.

14 февраля мы разберём на практике задачу классификации:

- Как выбрать оптимальные признаки

- Что делать с несбалансированными данными

- Как интерпретировать результаты модели

🔥 Если уже работаешь с ML или только начинающий программист – приходи на наш вебинар, в котором мы разберем «как предсказывать мэтч на speed dating» .

Приходи!
👍1
💡 Shuffle() в действии

До сих пор в LINQ не было встроенного метода для случайного перемешивания коллекций. Разработчикам приходилось использовать разные неэффективные методы.

В новом PR был добавлен метод Shuffle() в IEnumerable<T>. Будем ждать в одном из следующих релизов .NET

Пример будущего кода:
var shuffledItems = items.Shuffle();


Подробности:

🔗 Обсуждение необходимости метода

🔗 Реализация в .NET

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍40🤔7
Вам нравится читать контент на этом канале?

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

Следуйте 3 простым шагам, чтобы сделать это:

1) Нажмите на ссылку: Вход
2) Пополняйтесь удобным способом
3) Размещайте публикацию

Если тематика вашего поста подойдет нашему каналу, мы с удовольствием опубликуем его.
👍5🥱1
Как применять сторителлинг на IT-собеседовании

Чтобы выделиться среди других кандидатов, можно использовать сторителлинг — инструмент, который помогает не только запомниться работодателю, но и показать свои софт-скиллы и опыт в выгодном свете.

➡️ Что внутри статьи:

▪️ Почему сторителлинг работает лучше сухого перечисления навыков.

▪️ Советы по созданию историй для IT-собеседований.

▪️ Готовые примеры успешных историй.

🔗 Читать статью

🔵 Чтобы подготовиться к IT-собеседованию, попробуйте наш курс «Алгоритмы и структуры данных»
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
💡 Оркестрация фоновых задач в .NET

Temporal.io — это инструмент для управления сложными рабочими процессами, который обеспечивает автоматическое восстановление, управление состоянием и предсказуемость выполнения задач.

🛠 Как использовать Temporal в .NET

1. Добавляем Temporal в .NET проект
dotnet add package Temporalio


2. Настраиваем клиент Temporal
var client = await TemporalClient.ConnectAsync(new TemporalClientConnectOptions
{
TargetHost = "localhost:7233"
});

TargetHost — это адрес сервера Temporal, который управляет процессами.

3. Создаем Workflow
[Workflow]
public class MyWorkflow
{
public async Task<string> RunAsync(string name)
{
return $"Hello, {name}!";
}
}

Workflow — это логика, которая будет управляться Temporal.

4. Запускаем Workflow из .NET-кода
var handle = await client.StartWorkflowAsync(
(MyWorkflow wf) => wf.RunAsync("Temporal.io"),
new WorkflowOptions("my-workflow"));
Console.WriteLine($"Workflow started: {handle.Id}");

Temporal автоматически отслеживает состояние процесса, перезапускает его при сбоях и масштабирует при необходимости.

Temporal + .NET = надежная система, где даже долгие процессы не теряются, не ломаются и автоматически восстанавливаются

📎 Подробнее в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🌚91
📈 IT-найм 2025: почему сеньоры будут на вес золота, а джуны — без работы?

Времена «мастеров на все руки» в IT подходят к концу. Работодатели все чаще отдают предпочтение кандидатам с опытом работы на конкретном стеке и с продолжительным опытом в конкретной отрасли, будь то финтех, е-ком, ритейл, фудтех и т. д.

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

Рассказываем, какие специалисты будут востребованы в 2025 году и как ими стать.

👉 Читать статью
👍7🤔2
🧑‍💻 Каналы в .NET – скрытая жемчужина для асинхронной обработки

Каналы в .NET – это асинхронные очереди в памяти, которые позволяют передавать данные быстро и без задержек. Разберём как их использовать.

Что такое каналы

Каналы — это быстрая и эффективная альтернатива очередям для перемещения данных внутри приложения. Они позволяют передавать данные между потоками без блокировок.

Где они полезны

• Фоновые задачи: например, отправка email после регистрации.

• Внутрипроцессные очереди: без необходимости поднимать Redis или Kafka.

• Обработка событий в реальном времени: без задержек и потерь данных.

➡️ Чтобы узнать про каналы подробнее посмотрите видео

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
🧪 Мутационное тестирование в .NET

Мутационное тестирование это метод тестирования, при котором код намеренно мутирует:

📌 Если тесты замечают изменения — хорошо.

📌 Если не замечают — тест бесполезен.

Как это работает в .NET

Для мутационного тестирования в .NET можно использовать Stryker.

Stryker — это библиотека для автоматического мутационного тестирования в .NET. Она анализирует тесты, создает мутации в коде и проверяет, насколько хорошо тесты обнаруживают эти изменения.

1️⃣ Берем исходный код и вносим мутации

• Инструмент автоматически меняет код, создавая мутантов.

• Например, если есть return x > 10;, он заменяет > на < или return true;.

2️⃣ Запускаем тесты на мутированном коде

• Если тест замечает изменения и падает — мутант убит.

• Если тест проходит — мутант выжил, а значит, тест неэффективен.

3️⃣ Анализируем отчет

• Сколько мутантов было убито, какие тесты не заметили изменений и какие части кода не защищены?

Мутационное тестирование — это как "стресс-тест" для тестов. Оно имитирует баги, проверяя, смогут ли тесты их поймать.

➡️ Подробнее про мутационное тестирование

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤩5👍3
🎮💉 Инъекция зависимостей в Unity для самых маленьких

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

В свежей статье разбираются подходы к DI в Unity, сложности, связанные с MonoBehaviour, и примеры улучшения структуры проекта.

➡️ Читать статью

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4😁1
📁 Оптимизация работы с данными

Большие JSON-объекты замедляют десериализацию, перегружают память и увеличивают задержки.

Что делать, чтобы JSON не тормозил приложение:

Использовать потоковую обработку JsonSerializer.DeserializeAsync, чтобы не загружать весь объект в память.

Сокращать размер JSON, удаляя ненужные поля и оптимизируя структуру данных.

Включать сжатие данных при передаче JSON через API (например, Gzip)

Рассмотреть альтернативные форматы: MessagePack или Protobuf быстрее и компактнее, чем JSON.

🖇 Полное руководство

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👍31