en
Feedback
Библиотека шарписта | C#, F#, .NET, ASP.NET

Библиотека шарписта | C#, F#, .NET, ASP.NET

Open in Telegram

Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Show more

📈 Analytical overview of Telegram channel Библиотека шарписта | C#, F#, .NET, ASP.NET

Channel Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) in the Russian language segment is an active participant. Currently, the community unites 21 707 subscribers, ranking 5 962 in the Technologies & Applications category and 30 301 in the Russia region.

📊 Audience metrics and dynamics

Since its creation on невідомо, the project has demonstrated rapid growth, gathering an audience of 21 707 subscribers.

According to the latest data from 27 August, 2026, the channel demonstrates stable activity. Although there has been a change in the number of participants by -42 over the last 30 days and by 3 over the last 24 hours, overall reach remains high.

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 15.91%. Within the first 24 hours after publication, content typically collects 7.92% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 3 454 views. Within the first day, a publication typically gains 1 718 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 26.
  • Thematic interests: Content is focused on key topics such as .net, шарписта, навигация, await, string.

📝 Description and content policy

The author describes the resource as a platform for expressing subjective opinions:
Все самое полезное для C#-разработчика в одном канале. Наши курсы: https://clc.to/y3LDtw По рекламе: @proglib_adv Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Thanks to the high frequency of updates (latest data received on 28 August, 2026), the channel maintains relevance and a high level of publication reach. Analytics show that the audience actively interacts with content, making it an important point of influence in the Technologies & Applications category.

21 707
Subscribers
+324 hours
-137 days
-4230 days
Posts Archive
Semantic Kernel или LangGraph? В мире .NET популярен Semantic Kernel, но глобальный стандарт задаёт LangGraph. Его киллер-фич
Semantic Kernel или LangGraph? В мире .NET популярен Semantic Kernel, но глобальный стандарт задаёт LangGraph. Его киллер-фича — явное управление графом выполнения и состоянием (Stateful Graph). Это позволяет реализовывать сложные паттерны: Human-in-the-loop (человек подтверждает действие), Time Travel (откат состояния назад) и цикличное планирование. Понимание этих принципов пригодится любому разработчику, внедряющему AI. Записаться на курс Погружение в архитектуру агентов: Смотрите вводный урок бесплатно.

❓ Пойдём от обратного: какой пост вам больше всего не понравился за эту неделю
Anonymous voting

📰 Дайджест недели В .NET-среде штиль, новостей не так много, поэтому вспоминаем лучшее за неделю. — IoT на .NET — ExecuteUpd
📰 Дайджест недели В .NET-среде штиль, новостей не так много, поэтому вспоминаем лучшее за неделю. — IoT на .NETExecuteUpdate и ExecuteDelete Коты вместо HTTP статусов10 советов по обустройству вашего рабочего местаНестандартные форматы резюме Делитесь в комментах своими инфоповодами недели 👇 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #async_news

7️⃣ Генерация случайных чисел в C# Класс Random в .NET генерирует псевдослучайные числа для игр, тестов или симуляций. Он работает на основе сида, обычно времени, и дает целые, дробные значения или байты. Основы класса Random System.Random создает последовательности чисел через алгоритм. Для простого инта берут Next(min, max), где верхняя граница не включается. Переиспользуйте один экземпляр, иначе в цикле из-за одинаковых сидов выйдут повторения. Статический или инжектированный через DI вариант подходит для прода:
var rng = new Random();
int число = rng.Next(1, 101); // от 1 до 100
NextDouble возвращает от 0.0 до 1.0, умножьте и сдвиньте для нужного интервала. Байты через NextBytes заполняют массив. Это для тестовых файлов или симуляций.
double температура = rng.NextDouble() * 50 - 10; // от -10 до 40
byte[] буфер = new byte[16];
rng.NextBytes(буфер);
Обычный Random не годится для токенов или паролей, предсказуем при известном сиде. Берите RandomNumberGenerator из System.Security.Cryptography для криптографии. GetInt32(1, 101) или Fill для байт. В API для ключей всегда крипто-вариант. Random не потокобезопасен, общий экземпляр сломается. ThreadLocal<Random> создаст по инстансу на поток. Parallel.For с ним работает корректно, без гонок:
var локальныйRng = new ThreadLocal<Random>(() => new Random());
Parallel.For(0, 100, i => {
    int значение = локальныйRng.Value!.Next(100);
});
📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

🧑‍💻 Неявная проверка на null В C# можно заставить любой класс вести себя в if как в JavaScript: просто if (myObject) и внут
🧑‍💻 Неявная проверка на null В C# можно заставить любой класс вести себя в if как в JavaScript: просто if (myObject) и внутри проверка на null. Это работает благодаря перегрузке операторов. Создайте класс с двумя статическими методами:
public class User
{
    public string Name { get; set; }

    public static bool operator true(User? user) => user?.Name != null;
    public static bool operator false(User? user) => user?.Name == null;
}
Теперь if (user) сработает если имя задано, иначе попадет в else. Компилятор автоматически вызывает нужный оператор при булевом контексте. Единственный минус: никто не ожидает такого, код становится загадкой для команды. Лучше стандартные is not null или !ReferenceEquals(null, obj). 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

📎 Фабрика HttpClient в .NET В .NET для HTTP-запросов фабрика IHttpClientFactory упрощает создание клиентов, интегрируется с DI и решает проблемы вроде утечек сокетов. Фабрика кэширует обработчики сообщений, управляет их временем жизни и добавляет логирование. Зачем нужна фабрика HttpClient из Framework 4.5 часто создают вручную, но это приводит к проблемам: сокеты не освобождаются, DNS не обновляется. Фабрика решает это через пул обработчиков с лайфтаймом в 2 минуты по умолчанию. Она регистрируется через AddHttpClient в IServiceCollection и дает доступ к CreateClient. Короткоживущие клиенты подходят для большинства случаев, в отличие от долгоживущих с PooledConnectionLifetime. Предупреждение: если нужны куки, лучше обойтись без фабрики из-за шаринга CookieContainer. Способы использования Разработчики выбирают между базовым, именованными, типизированными клиентами или сгенерированными через Refit. В базовом варианте инжектят IHttpClientFactory и вызывают CreateClient для каждого запроса. Это просто для рефакторинга старого кода. Именованные клиенты настраивают по имени из конфига, с базовым URI и заголовками вроде User-Agent:
builder.Services.AddHttpClient("MyClient", client =>
{
    client.BaseAddress = new Uri("https://api.example.com/");
    client.DefaultRequestHeaders.UserAgent.ParseAdd("MyApp");
});
Затем CreateClient("MyClient"). Типизированные удобны для конкретного API: класс принимает HttpClient в конструкторе, фабрика регистрирует его через AddHttpClient<T>. Логика запросов инкапсулируется в методах класса, DI все подхватывает. IntelliSense работает, нет строковых ключей. Не используйте в синглтонах: клиент должен быть короткоживущим, иначе DNS не обновится. Лучше именованные или SocketsHttpHandler:
public class ApiService(HttpClient client)
{
    public async Task<Todo[]> GetTodos(int id) =>
        await client.GetFromJsonAsync<Todo[]>($"todos/{id}");
}
В итоге фабрика делает HTTP-клиенты в .NET предсказуемыми и масштабируемыми. Для прода это как стандарт: меньше багов с соединениями, проще DI. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

LangGraph vs Semantic Kernel: архитектура агентов В .NET мире популярен Semantic Kernel, но индустрия движется к графовым под
LangGraph vs Semantic Kernel: архитектура агентов В .NET мире популярен Semantic Kernel, но индустрия движется к графовым подходам. LangGraph реализует паттерн, где агент — это не просто цепочка плагинов, а граф с состоянием. Архитектурные преимущества: — цикличность: нативная поддержка циклов (ReAct pattern); — state management: управление контекстом похоже на работу с сессиями; — human-in-the-loop: возможность поставить граф на паузу, получить апрув человека и продолжить. Курс по архитектуре уже стартовал. Записаться на курс Смотреть первую лекцию бесплатно

🎯 Нестандартные форматы резюме Листайте карточки и подбирайте вариант резюме под свои навыки. В комментах можете поделиться
+5
🎯 Нестандартные форматы резюме Листайте карточки и подбирайте вариант резюме под свои навыки. В комментах можете поделиться своими проектами 👇 ➡️ В статье ещё два формата 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

📎 ValueTask в публичном API ValueTask часто хвалят за экономию памяти. Но если сунуть его в публичный API, потребители могут
📎 ValueTask в публичном API ValueTask часто хвалят за экономию памяти. Но если сунуть его в публичный API, потребители могут не оценить такой шаг. Вопрос: чем так плох ValueTask в публичном API? Он же снизит аллокации Ответ: у нас в канале с вопросами с собесов 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #dotnet_challenge

🔛📈 Включаем фичи без редеплоя Feature Flags — это условные переключатели, которые позволяют включать/выключать фичи на лету, без передеплоя приложения. Зачем они нужны • Безопасный rollout — можно включить фичу для 10% пользователей, проверить метрики, затем раскатывать дальше. • A/B тестирование — запуск двух версий фичи и выбор лучшей на основе данных. • Eсли что-то пошло не так, флаг выключается за секунду вместо отката всего деплоя. • Возможность коммитить незавершённый код без риска для продакшна Подготовка:
// Добавим NuGet пакет
dotnet add package Microsoft.FeatureManagement

// В appsettings.json
"FeatureManagement": {
    "NewDashboard": false
}
В коде:

if (await featureManager.IsEnabledAsync("NewDashboard"))
{
    RenderNewDashboard();
}
else
{
    RenderOldDashboard();
}
📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

⚡️ ExecuteUpdate и ExecuteDelete в EF Core ExecuteUpdate и ExecuteDelete появились для случаев, когда вам не нужны сущности и сложные хуки. Это способ выполнять быстрые массовые операции, говоря с базой на языке SQL через LINQ. Простой пример с заказами, которые нужно отметить как просроченные:
public async Task<IActionResult> ExpireOldOrders()
{
    var cutoff = DateTime.UtcNow.AddDays(-30);

    var affectedRows = await _db.Orders
        .Where(o => o.Status == OrderStatus.Pending 
                    && o.CreatedAt < cutoff)
        .ExecuteUpdateAsync(setters =>
            setters.SetProperty(
                o => o.Status,
                OrderStatus.Expired));

    return Ok(new { affectedRows });
}
EF Core сгенерирует один SQL примерно такого вида:
UPDATE Orders
SET Status = 2
WHERE Status = 0
  AND CreatedAt < @cutoff
Приложение отправляет в базу одну команду, а не тысячи мелких запросов. С точки зрения БД — это максимально естественный сценарий: нагрузка на сеть и блокировки минимальны. ExecuteDelete решает такую же задачу для удаления:
public async Task<int> CleanOldLogsAsync(DateTime cutoff)
{
    var affected = await _db.Logs
        .Where(l => l.CreatedAt < cutoff)
        .ExecuteDeleteAsync();

    return affected;
}
EF Core не загружает логи в память — удаление происходит одним SQL-запросом. Важно: эти методы обходят change tracking и не вызывают события SaveChanges. Используйте их, когда производительность важнее бизнес-логики в коде. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

AI-агенты в экосистеме .NET: расширяем границы возможного Интеграция ИИ в энтерпрайз-продукты требует понимания того, как раб
AI-агенты в экосистеме .NET: расширяем границы возможного Интеграция ИИ в энтерпрайз-продукты требует понимания того, как работают автономные системы. Изучите общие принципы построения агентских систем, чтобы внедрять их в свои проекты. Курс «Углубленные AI-агенты» даст вам глубокую экспертизу в актуальном стеке. На обучении вас ждёт: — проектирование автономных агентских систем; — освоение LangGraph, CrewAI и AutoGen; — интеграция RAG и инструментов планирования; — 13 живых вебинаров и поддержка менторов. Поток уже стартовал, присоединяйтесь сейчас. 🚀 Записаться на основной курс Если сомневаетесь — просто посмотрите вводное занятие.

⚙️ Вы настраиваете ASP.NET Core «по наитию» и тратите время на поиск, почему приложение ведет себя по-разному в продакшене и локально? 🗓 29 января в 20:00 OTUS проводит открытый урок «Конфигурирование приложения ASP.NET Core» в преддверии старта курса «C# ASP.NET Core разработчик». На занятии разберем, как выстроить прозрачную и управляемую систему настроек: appsettings.json, провайдеры конфигурации, приоритет применения конфигураций, настройки специфичные для среды и шаблон Options для работы с настройками. Вы поймете, как проектировать конфигурации так, чтобы приложения были стабильными и предсказуемыми. ❗️Урок будет полезен разработчикам ASP.NET Core начального и среднего уровня, которые хотят систематизировать знания и работать по индустриальным стандартам. ➡️ Регистрируйтесь на бесплатный урок: https://clc.to/JVrtgw 🎁 Все участники открытого урока получат скидку на обучение. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

📞 Как доска объявлений, но отборная C#/.NET-разработчик до 300 000 ₽ и удалёнка. С# разработчик от 200 000 ₽ и снова удалёнка. .NET Developer внезапный офис в Новосибирске. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

🛋 Работа в кайф Продуктивность — это не про силу воли и мотивацию. Это про то, как вы обустроили своё рабочее место. Синий с
🛋 Работа в кайф Продуктивность — это не про силу воли и мотивацию. Это про то, как вы обустроили своё рабочее место. Синий свет экрана, температура в комнате, даже то, сколько воды вы выпили за день — всё это напрямую влияет на работу вашего мозга. ➡️ В статье 10 базовых советов по обустройству вашего рабочего места 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

🐳 Docker для быстрого запуска сервисов локально Docker это платформа для запуска приложений в контейнерах. Контейнер получает собственные зависимости, сетевую конфигурацию и порты и при этом не вмешивается в окружение хоста. Предположим, вам нужно быстро поднять MongoDB локально, не устанавливая ее системным пакетом. Достаточно выполнить:
docker run -p 27017:27017 mongo
Эта команда скачает официальный образ mongo с Docker Hub и запустит контейнер. Флаг -p 27017:27017 пробрасывает порт на хост, то есть вы обращаетесь к базе на localhost:27017. Так вы получаете рабочую MongoDB без отдельной установки сервера, настройки сервисов и борьбы с конфликтами версий. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

💡 Мигающий светодиод за 10 строк кода Работа с железом через .NET — это не просто про серверы и веб-приложения. С библиотеко
💡 Мигающий светодиод за 10 строк кода Работа с железом через .NET — это не просто про серверы и веб-приложения. С библиотекой Gpio вы можете управлять физическими устройствами напрямую с Raspberry Pi или других одноплатников. Рассмотрим базовый пример: как заставить мигать светодиод. Что понадобится Минимальный набор компонентов: Raspberry Pi (или аналог с поддержкой .NET), светодиод на 5 мм, резистор 330 Ом, макетная плата и провода. Как это работает Схема собирается просто: плата подключается к аноду светодиода (длинная ножка), катод идёт через резистор на землю. Резистор ограничивает ток и защищает светодиод от выгорания. В коде всего несколько строк:
using var controller = new GpioController();
controller.OpenPin(18, PinMode.Output);
bool ledOn = true;
while (true)
{
    controller.Write(18, ledOn ? PinValue.High : PinValue.Low);
    Thread.Sleep(1000);
    ledOn = !ledOn;
}
В цикле мы записываем значение «включено» или «выключено», меняем состояние каждую секунду. Приложение компилируется как self-contained и разворачивается на устройстве. После назначения прав на выполнение (chmod +x) запускаете исполняемый файл — и светодиод начинает мигать с интервалом в секунду. ➡️ Гайд от майков 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🛠 PostgreSQL как Dead Letter Queue История о том, как в Wayfair отказались от Kafka DLQ в пользу PostgreSQL и получили более
🛠 PostgreSQL как Dead Letter Queue История о том, как в Wayfair отказались от Kafka DLQ в пользу PostgreSQL и получили более управляемую систему обработки сбоев. Проблема: события падают, а видимости нет Сбои встречались везде: API для обогащения данных падали или тормозили, консьюмеры крашились посреди обработки, события приходили с битыми или отсутствующими полями. Всё это находилось вне прямого контроля команды, но требовало изящной обработки. Первая попытка: Kafka как DLQ Логичным решением было использовать сам Kafka в качестве Dead Letter Queue. Общий паттерн: если событие не обработалось, отправляем его в отдельный топик DLQ. Но быстро стало ясно, что это не лучший вариант. Kafka отлично двигает данные, но когда сообщения попадают в DLQ-топик, с ними сложно работать: • Нельзя просто взять и выполнить запрос «покажи всё, что упало вчера» • Нет нормальной фильтрации по причине сбоя • Чтобы повторить обработку конкретного набора событий, нужны кастомные консьюмеры • Для любого анализа требуется дополнительный инструментарий Для системы, генерирующей критичные бизнес-отчёты, такое отсутствие видимости стало серьёзной проблемой. Решение: PostgreSQL как первоклассный DLQ Вместо публикации сбойных событий в топик Kafka, начали сохранять их прямо в таблицу DLQ в PostgreSQL. CloudSQL уже использовался как основное хранилище, так что операционно это почти ничего не добавило. Концептуально же сбои стали первоклассными гражданами системы, а не непрозрачными сообщениями, потерянными в потоке. Дизайн-решения • payload как JSONB — сохраняет сырое событие без жёсткой схемы. Можно хранить любую структуру и при этом эффективно запрашивать. • Простая модель состояний — только PENDING и SUCCEEDED. Минимализм делает жизненный цикл события понятным. • retry_after — предотвращает агрессивные повторы, когда зависимые системы нестабильны. • retry_count — позволяет ограничивать количество попыток без внешнего состояния. Если событие не обработалось за 240 попыток — возможно, с ним что-то фундаментально не так. • Временные метки — делают аудит и операционный анализ простым делом. Целью не было заменить Kafka на PostgreSQL. Kafka остался основой для высокопроизводительного приёма событий, а PostgreSQL взял на себя то, что умеет лучше всего — долговременность, запросы и наблюдаемость вокруг сбоев. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

C#-разработчик? Пора осваивать AI-агентов Экосистема .NET активно интегрирует ИИ (например, через Semantic Kernel). Наш курс
C#-разработчик? Пора осваивать AI-агентов Экосистема .NET активно интегрирует ИИ (например, через Semantic Kernel). Наш курс поможет вам понять фундаментальные принципы построения автономных систем. Начинаем сегодня в 19:00 МСК. Основные темы: — путь от базовых промптов до мультиагентных систем; — использование инструментов и планирование задач; — деплой и масштабирование своих ИИ-решений; — работа с векторными хранилищами данных. Занять место