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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🛠 Кастомная обработка событий

NEsper — это библиотека для .NET, предназначенная для сложной обработки событий.

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

Основные возможности:

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

• Язык для описания правил обработки событий, чем-то похож на SQL, что делает его удобным для разработчиков.

• Поддерживает распределённые системы и интегрируется с Кафкой и RabbitMQ.

Пример использования:
using EsperTech.NEsper;
using EsperTech.NEsper.Client;
using EsperTech.NEsper.Config;

var config = new Configuration();
config.AddEventType("MyEvent", typeof(MyEvent));

var epService = EPServiceProviderManager.GetDefaultProvider(config);
var epStatement = epService.EPAdministrator.CreateEPL("select * from MyEvent where value > 100");

epStatement.Events += (sender, e) =>
{
foreach (var ev in e.NewEvents)
{
Console.WriteLine($"Detected event: {ev.Get("value")}");
}
};


В этом примере создаётся обработчик событий, который срабатывает, когда значение события превышает 100.

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

➡️ Обработать все события

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍3
🤖 Как выбрать подходящий режим GitHub Copilot

GitHub Copilot Chat от Microsoft теперь предлагает два режима — Ask Mode и Agent Mode. Оба инструмента предназначены для улучшения работы разработчиков, но каждый из них ориентирован на разные типы задач.

Сами Microsoft помогают разобраться у себя в блоге какой режим выбрать вам.

В Ask Mode Copilot помогает вам, предоставляя четкие ответы и примеры, но при этом не взаимодействует с кодом, находящимся в вашем проекте. Например, запрос «Что такое LINQ?».

В Agent Mode Copilot не только предоставляет ответы, но и выполняет действия в вашем коде, что делает его незаменимым инструментом для более сложных задач. Как пример будет запрос «Отрефактори этот метод».

➡️ Блог разработчиков

🐸Библиотека шарписта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
👩‍💻 Управляем несколькими ветками одновременно

Git worktrees — это возможность использовать несколько рабочих деревьев (worktrees) для одного репозитория.

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

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

1. Вы создаете новый worktree для выбранной ветки. В результате появляется отдельный каталог, где будет находиться эта ветка:
git worktree add ../my-feature-branch my-feature-branch


2. После создания worktree вы можете работать с веткой, не вмешиваясь в другие ветки. Это удобно, когда нужно параллельно тестировать изменения или делать ревью PR, не мешая текущей работе.

Когда работа с веткой завершена, можно её удалить:
git worktree remove ../my-feature-branch


Практический пример

Если вам нужно протестировать PR, вы можете создать отдельный worktree для его ветки:
git worktree add ../pr-branch pr-branch
cd ../pr-branch


Применяйте и властвуйте над ветками гита.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔71
✏️ Промпт для создания абстракции

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

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

Промпт:
Опиши, как создать абстракцию для задачи "[вставьте краткое описание задачи]" с использованием методик объектно-ориентированного проектирования. В ответе подробно изложи основные этапы проектирования абстракции, включая выявление ключевых классов и их ответственности, применение принципов SOLID и паттернов проектирования. Добавь пример кода на С# или диаграмму классов UML, иллюстрирующую предложенную абстракцию.


Хороший способ улучшить архитектуру вашего кода и овладеть лучшими практиками ООП.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤩1🌚1
🔄 Обновление MCP C# SDK

В свежем обновлении Microsoft выводит разработку AI‑приложений на новый уровень. Разберём самое вкусное в обновлении.

Диалоговый сбор данных

Механизм, позволяющий вашим приложениям заранее задавать пользователю структурированные вопросы — например, «Введите количество элементов» (число), «Укажите путь к файлу» (строка) или «Разрешить доступ?» (флаг).

Структурированный вывод инструментов

Позволяет инструментам явно описывать формат возвращаемых данных через JSON‑схему: какие поля будут, какого они типа и какие обязательны.

Улучшенные метаданные

Расширенный блок _meta, включающий человекочитаемые поля name и title для каждого инструмента и подсказки.

Как обновиться

Чтобы начать пользоваться всеми этими возможностями, достаточно ввести в консоли проекта команду:
dotnet add package ModelContextProtocol --prerelease


После этого пересоберите приложение и убедитесь, что используемая версия пакета соответствует 2025‑06‑18.

🐸Библиотека шарписта #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
1
🔥 Хороший ML-разработчик не начинает с нейросетей

На собеседовании по ML System Design кандидату дают задачу «предсказать отток», а он сразу лезет в нейросети. Красиво, модно, дорого.

Но профи думает иначе:

💭 Логрегрессия? Градиентный бустинг?
💭 А сколько у нас данных и времени?
💭 Что с интерпретируемостью?

Потому что не выбрать адекватную модель — это уже ошибка.

Нейросети — это круто. Но без понимания классического ML вы просто «подключаете модельку», а не строите решения.

➡️ На курсе разберём:

— линейные модели, деревья, PCA, кластеризацию
— метрики, переобучение, bias vs variance
— инженерные подводные камни, которые идут сразу после fit()

🎁 Скидка 10 000₽ по промокоду Earlybird, только до 27 июля.

А ещё — подарок для первых 10 участников: специальный лонгрид по теме курса, чтобы вы могли начать погружение в материал уже сегодня.

🔗 Успей записаться — и начни карьеру в Data Science уже через 3 месяца!
👍21
🧑‍💻 Как отменить асинхронную операцию с помощью CancellationToken

Одной из ключевых особенностей асинхронного программирования в C# является возможность отменить долгие или зависшие операции, используя CancellationToken.

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

Для создания токена отмены используется объект типа CancellationTokenSource, который предоставляет токен для отмены, а также метод Cancel(), который сигнализирует об отмене.

Пример отмены с помощью токена. Вызываем функцию и передаём в неё токен:
using System;
using System.Threading;
using System.Threading.Tasks;

class Program
{
static async Task Main(string[] args)
{
// Создаем объект CancellationTokenSource
var cancellationTokenSource = new CancellationTokenSource();

// Получаем токен отмены
var cancellationToken = cancellationTokenSource.Token;

// Запускаем асинхронную задачу
var task = LongRunningOperation(cancellationToken);

// Через 3 секунды отменяем операцию
await Task.Delay(3000);
cancellationTokenSource.Cancel();

try
{
// Ожидаем завершения операции
await task;
}
catch (OperationCanceledException)
{
Console.WriteLine("Операция была отменена.");
}
}
}


Сама функция:
// Асинхронная операция, которая может быть отменена
static async Task LongRunningOperation(CancellationToken cancellationToken)
{
Console.WriteLine("Операция началась.");

for (int i = 0; i < 10; i++)
{
// Проверка на отмену операции
if (cancellationToken.IsCancellationRequested)
{
Console.WriteLine("Операция отменена.");
throw new OperationCanceledException();
}

// Имитация работы
Console.WriteLine($"Шаг {i + 1}...");
await Task.Delay(1000); // Задержка в 1 секунду
}

Console.WriteLine("Операция завершена.");
}
}


При отмене операции метод выбрасывает исключение OperationCanceledException, которое можно ловить и обрабатывать соответствующим образом.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍87😁3🥱1
🤨 Нужен ли async в каждом методе

Асинхронное программирование стало неотъемлемой частью разработки на C#. Но появляется вопрос: нужно ли использовать асинхронность в каждом методе?

Когда стоит использовать async

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

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

— Применяя async/await, мы освобождаем потоки от ожидания завершения I/O операций.

Но за плюсами спрятались и минусы

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

— Применение асинхронности везде может привести к проблемам с синхронизацией данных и контекстом выполнения.

— Если приложение не работает с большим количеством асинхронных операций, добавление async/await в каждый метод не даст значительного прироста производительности.

💬 Как вам асинхронность? Даёшь в каждый метод или лучше дважды подумать?

🐸Библиотека шарписта #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
8
💻 Удалённая разработка в Rider

Не всегда нужно хранить код у себя на пк. Хранение и выполнение кода на удалённых хостах и контейнерах давно стало реальностью.

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

Подключение к серверу через SSH

Настроить SSH-подключение в Rider — проще, чем вы думаете. Всё, что нужно — это пару кликов в настройках IDE.

1. Откройте File → Settings → Tools → Deployment.

2. Выберите Add Remote Server и в качестве типа соединения выберите SSH.

3. Введите IP-адрес удалённого сервера, пользовательские данные и путь к приватному ключу (или пароль).

4. Нажмите Test Connection и, если всё в порядке, готово — подключение установлено!

🧑‍💻 Работа с проектами на удалённом сервере

Когда подключение установлено, вы получаете доступ к файловой системе удалённого сервера. Это значит, что вы можете:

• Перемещать файлы между локальной машиной и сервером

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

• Открывать логи, работать с конфигурационными файлами и запускать процессы прямо из Rider.

Один из самых полезных инструментов при удалённой разработке — это отладка через SSH.

Вы можете подключиться к процессу, который работает на удалённом сервере, и отлаживать код, как если бы он выполнялся локально.

Чтобы начать удалённую отладку:

1. Запустите приложение на удалённом сервере

2. Выберите Run → Edit Configurations и создайте конфигурацию для Remote Debugging.

3. Подключитесь к удалённому процессу через SSH и начинайте отладку прямо из Rider.

Если вы ещё не настроили SSH в Rider, самое время попробовать.

🐸Библиотека шарписта #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍5
😤 Устал листать туториалы, которые не складываются в картину

У тебя в голове уже есть логрегрессии, деревья, метрики и какая-то PCA, но системного понимания всё нет?

Пора с этим разобраться!

Наш курс по классическому ML:

— научит выбирать адекватные модели под задачу
— разложит метрики, переобучение и bias по полочкам
— покажет, что скрывается за fit/predict, и что с этим делать

🔔 До 27 июля по промокоду Earlybird минус 10.000₽

P.S. Первые 10 участников получат эксклюзивный лонгрид, чтобы начать изучать тему ещё до старта курса.

👉 Поменяй свою жизнь: старт карьеры в AI — успей до закрытия набора!
⚡️ Ошибки в резюме

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

В карточках объяснили какие ошибки могут быть при описании пет-проектов.

➡️ Узнайте, как правильно оформить пет-проекты в резюме

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64🔥2
Первоначальное имя языка C# было …
Anonymous Quiz
20%
С-2
33%
С++++
18%
СOOL
29%
Obj-C
😁29👏3👾3
🤔 «Начни сразу с нейросетей — зачем тебе логрегрессия?»

Это один из худших советов для начинающего ML-разработчика. Зрелость — это понимать, где простого достаточно, а не тянуть трансформеры на любую задачу из-за хайпа.

Классика ML — это не допотопная теория, а база (bias/variance, деревья, метрики), без которой не понять Deep Learning.

⚡️ Хотите освоить этот фундамент на реальных задачах? Приходите на наш курс по классическому ML. Только хардкор, только продовые задачи!

📆 Старт — 12 августа.

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

🎁 Последний день промокода Earlybird на скидку 10.000₽.

👉 Не упустите шанс!