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

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

Open in Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @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 866 subscribers, ranking 6 209 in the Technologies & Applications category and 30 824 in the Russia region.

📊 Audience metrics and dynamics

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

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

  • Verification status: Not verified
  • Engagement rate (ER): The average audience engagement rate is 12.48%. Within the first 24 hours after publication, content typically collects 7.13% reactions from the total number of subscribers.
  • Post reach: On average, each post receives 2 729 views. Within the first day, a publication typically gains 1 560 views.
  • Reactions and interaction: The audience actively supports content: the average number of reactions per post is 9.
  • 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#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Thanks to the high frequency of updates (latest data received on 12 June, 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 866
Subscribers
-624 hours
-237 days
-9530 days
Posts Archive
👨‍💻 Не хватает комментария «Создаёт переменную x равную 10» 📍 Навигация: Вакансии • Задачи • Собесы 🐸Библиотека шарписта
👨‍💻 Не хватает комментария «Создаёт переменную x равную 10» 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #garbage_collector

⚙️ Один обработчик вместо сотни try catch Когда в проекте десятки эндпоинтов, разъезжающий по коду try catch быстро превращается в свалку. Гораздо проще один раз настроить глобальный маппинг исключений в HTTP статус и возвращать нормальные ProblemDetails для всех ошибок. ASP.NET уже умеет работать с ProblemDetails из коробки, нужно только включить службу и повесить обработчик ошибок. В примере вся логика перевода исключений в HTTP ответы живет в одном месте:
builder.Services.AddProblemDetails();

var app = builder.Build();

app.UseExceptionHandler(appErr =>
{
    appErr.Run(async ctx =>
    {
        var ex = ctx.Features.Get<IExceptionHandlerFeature>()?.Error;

        var (status, title) = ex switch
        {
            ConcurrencyException => (StatusCodes.Status409Conflict, "Concurrency conflict"),
            NotFoundException    => (StatusCodes.Status404NotFound, "Resource not found"),
            _                    => (StatusCodes.Status500InternalServerError, "Server error")
        };

        ctx.Response.StatusCode = status;

        await ctx.Response.WriteAsJsonAsync(new ProblemDetails
        {
            Status   = status,
            Title    = title,
            Detail   = app.Environment.IsDevelopment() ? ex?.Message : null,
            Instance = ctx.Request.Path
        });
    });
});
Любые новые исключения добавляются через одну запись в switch, без походов по контроллерам, а все ответы об ошибках приходят в едином формате application/problem+json, что упрощает жизнь фронту и интеграциям. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

❓ Лучший пост недели
Anonymous voting

📊 Рейтинг постов Вы всю неделю ставили нам лайки, а мы выбрали топ по реакциям: • 100 RPS Rate LimitingЗакон Брукса в разработкеАнтиспам в .NETFluentValidation в APIStackTraceHiddenAttribute Давайте выберем самый лучший пост в голосовании. Что добавить в следующий спринт? Пишите! 👇 🐸Библиотека шарписта #entry_point

🔄 WSL 2.7.0: обновление с новым ядром Windows Subsystem for Linux это встроенный слой совместимости, который позволяет запус
🔄 WSL 2.7.0: обновление с новым ядром Windows Subsystem for Linux это встроенный слой совместимости, который позволяет запускать Linux и его приложения напрямую без виртуальной машины. В WSL 2.7.0 ядро обновили до ветки Linux 6.6.114. Параллельно подтянули новые версии WSLg .NET и связанных NuGet пакетов. Список поддерживаемых дистрибутивов пополнился свежими релизами: Debian 13, Ubuntu 25.10, Fedora 43, а также Kali 2025.3 и декабрьская сборка Arch Linux. ➡️ Релиз на GitHub 🐸Библиотека шарписта #async_news

👨‍💻 Чистые стектрейсы в .NET с помощью StackTraceHiddenAttribute В .NET есть простой способ скрыть внутреннюю кухню и оставить только то, что важно потребителю API. Атрибут StackTraceHiddenAttribute помечает методы, которые не должны попадать в публичный стектрейс, при этом логика выполнения не меняется. Пример:
public static class UserService
{
    [StackTraceHidden]
    private static void ValidateName(string name)
    {
        if (string.IsNullOrWhiteSpace(name))
            throw new ArgumentException("Name cannot be empty");
    }

    public static void CreateUser(string name)
    {
        ValidateName(name);
        Console.WriteLine("Created user " + name);
    }
}
В этом примере при исключении из ValidateName в стектрейсе вы увидите только вызов UserService.CreateUser. Валидационный хелпер скрыт атрибутом, поэтому внешний разработчик не видит внутренний слой проверки. 🐸Библиотека шарписта #sharp_view

💼 Карьерная «страховка» для IT‑шника Собрали для вас в карточках пункты, которые необходимо знать, чтобы вас не смогли выпну
+5
💼 Карьерная «страховка» для IT‑шника Собрали для вас в карточках пункты, которые необходимо знать, чтобы вас не смогли выпнуть с работы. Знайте свои права и читайте полную статью. 🐸Библиотека шарписта

🌐 Контроллеры без мусора Пишете API, и в каждом контроллере приходится проверять if (!ModelState.IsValid) return BadRequest(). Скучно копипастить одно и то же. А если контроллеры станут реально чистыми — только маршрутизация и вызов сервиса? [ApiController] автоматически подключает механизм валидации. Он ищет в DI IValidator<T> для ваших DTO/команд и запускает их до входа в метод контроллера. FluentValidation делает так, что все ваши AbstractValidator<T> автоматически регистрируются как IValidator<T>. Настройка за 5 секунд:
// Program.cs
builder.Services.AddControllers()
    .AddJsonOptions(o => o.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase);

builder.Services.AddValidatorsFromAssembly(typeof(CreateUserValidator).Assembly);
Теперь все ваши AbstractValidator<T> автоматически работают. Вот так пишется валидатор:
public class CreateUserValidator : AbstractValidator<CreateUserCommand>
{
    public CreateUserValidator()
    {
        RuleFor(x => x.Email).NotEmpty().EmailAddress().MaximumLength(256);
        RuleFor(x => x.DisplayName).NotEmpty().MaximumLength(100);
        RuleFor(x => x.Password).NotEmpty().MinimumLength(8);
    }
}
Итоговый эндпоинт:
[ApiController]
[Route("users")]
public class UsersController : ControllerBase
{
    [HttpPost]
    public async Task<IActionResult> Create(CreateUserCommand cmd)
    {
        var user = await _mediator.Send(cmd);
        return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
    }
}
Один раз настроили — наслаждаетесь чистотой контроллеров и валидацией. 🐸Библиотека шарписта #il_люминатор

⚡️ Fleet В С Ё JetBrains убивает Fleet как продукт, но не как технологию: с 22 декабря 2025 его перестанут распространять и к
⚡️ Fleet В С Ё JetBrains убивает Fleet как продукт, но не как технологию: с 22 декабря 2025 его перестанут распространять и команда переезжает в новый инструмент для «агентной разработки» — среды, где код пишут в основном AI‑агенты, а разработчик управляет задачами и ревьюит патчи. Fleet создавали как эксперимент: лёгкая архитектура, современный UI, свобода от легаси IntelliJ-платформы, и технически он реально удался — его компоненты и UX‑решения уже раскатаны по другим IDE от JetBrains. ➡️ Оригинальный анонс 🐸Библиотека шарписта #async_news

🧑‍💻 IDE для .NET, написанная на .NET У нас тут интересный эксперимент из мира .NET‑инструментов — SharpIDE. Это кроссплатфо
🧑‍💻 IDE для .NET, написанная на .NET У нас тут интересный эксперимент из мира .NET‑инструментов — SharpIDE. Это кроссплатформенная IDE для .NET, которую делают не на Java и не на Electron, а на самом .NET + движок Godot для UI. Автор позиционирует её как полностью open source‑альтернативу классическим IDE с упором на расширяемость и игровой UI ➡️ Репозиторий проекта 🐸Библиотека шарписта #sharp_view

🎮 Портфолио, в которое хочется играть Наткнулись на резюме разраба, которое явно не пройдёт роботизированную проверку, потом
🎮 Портфолио, в которое хочется играть Наткнулись на резюме разраба, которое явно не пройдёт роботизированную проверку, потому что робот ничего не поймёт. Резюме сделано в виде 3D игры, где нужно кататься на машинке по точкам интереса: проекты, места работы, соц. сети. У обычного HR'а на такое точно не хватит времени. Челлендж от админа — попробуйте выбить страйк в левой части карты. Скидывайте скрины в комменты 👇 ➡️ Выбить страйк 🐸Библиотека шарписта #GoTalk

🔄 Первое сервисное обновление .NET 10 Вышло сервисное обновление для десятой версии платформы, в котором правят баги и стаби
🔄 Первое сервисное обновление .NET 10 Вышло сервисное обновление для десятой версии платформы, в котором правят баги и стабильность без новых фич. Обновление помечено как non security: оно не закрывает уязвимости, а дорабатывает поведение рантайма, BCL и SDK после выхода 10.0.0. ➡️ Release notes 🐸Библиотека шарписта #async_news

🧑‍💻 Готовые LINQ-скрипты Шарписты, которые активно пользуются LINQPad редко хранят полезные скрипты. Нашли личный набор раб
🧑‍💻 Готовые LINQ-скрипты Шарписты, которые активно пользуются LINQPad редко хранят полезные скрипты. Нашли личный набор рабочих скриптов для LINQPad, который автор вынес в общий GitHub репозиторий. В репозитории лежат .linq скрипты которые помогают решать рутину в .NET проектах через LINQPad вместо отдельных утилит. Это могут быть быстрые запросы к БД, небольшие проверки, конвертеры данных и прочие «разовые» задачи которые регулярно повторяются. ➡️ Репозиторий 🔹 Специалист по ИИ 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

⚙️ Останавливаем некрасивый код Использовать dotnet format в CI удобно как «стоп кран» по стилю кода. В пайплайн достаточно добавить один шаг:
- name: Format
  run: dotnet tool restore && dotnet format --verify-no-changes
Зачем так делать dotnet format читает правила из .editorconfig и проверяет что код им соответствует. Ключ --verify-no-changes сообщает утилите работать в режиме проверки без правок файлов и выйти с ненулевым кодом если что то нужно переформатировать. В результате билд в CI падает если кто то закоммитил неотформатированный код. 🔹 Математика для разработки AI-моделей 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

🧑‍🎓 Как вуз влияет на карьеру В экосистеме шарпа традиционно много продуктовых компаний банков и корпораций. Для них формал
🧑‍🎓 Как вуз влияет на карьеру В экосистеме шарпа традиционно много продуктовых компаний банков и корпораций. Для них формальное образование по прежнему важнее чем в типичном веб фрилансе. Но и здесь со временем решающим фактором становятся не корочки а опыт и стек. ➡️ Сколько стоит джун с дипломом и без 🔹 AI-агенты для DS-специалистов 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта

Летим зимовать ✈️ Когда холодает, айтишники пакуют чемоданы, а мы разыгрываем ваучер на 50 000 рублей в Островке. Поехать к морю или остаться среди снежных пейзажей — выбирайте сами! Чтобы участвовать, нужно оставить любую реакцию под этим постом и подписаться на каналы ниже: 😎 Типичный программист 🐸 Библиотека программиста 🟢 Ostrovok! Tech Теперь осталось нажать на кнопку участия под этим постом и вы в игре! Итоги подведём 12 декабря. Победителя выберем с помощью бота. Подробнее с правилами можно ознакомиться здесь. Всем удачи! Участников: 111 Призовых мест: 1 Дата розыгрыша: 19:00, 12.12.2025 MSK (3 дня)

📩 Быстрый антиспам Для .NET есть готовый клиент Cloudmersive Spam Detection API который умеет проверять текстовые поля. Вместо того чтобы вручную обучать модель для спама можно отдать эту задачу готовому облачному сервису. Для работы с API нужно поставить NuGet пакет Cloudmersive.APIClient.NET.Spam. После установки достаточно прописать ключ API и создать экземпляр клиента:
using Cloudmersive.APIClient.NET.Spam.Client;
using Cloudmersive.APIClient.NET.Spam.Api;
using Cloudmersive.APIClient.NET.Spam.Model;

public class SpamChecker
{
    private readonly SpamDetectionApi _api;

    public SpamChecker(string apiKey)
    {
        // глобальная конфигурация
        Configuration.Default.AddApiKey("Apikey", apiKey);
        _api = new SpamDetectionApi();
    }
}
Базовый сценарий — проверить строку и понять спам это или нет. API предоставляет метод для AI проверки текста и возвращает набор флагов:
public async Task<bool> IsSpamAsync(string text)
{
    var request = new SpamDetectionAdvancedRequest
    {
        InputString = text,
        Model = "Advanced",
        // политика  что считаем допустимым
        AllowUnsolicitedSales = false,
        AllowPromotionalContent = false,
        AllowPhishing = false
    };

    SpamDetectionAdvancedResponse resp =
        await _api.SpamDetectionAdvancedAsync(request);

    // если сервис считает текст спамом  реагируем
    return resp.ContainsSpam ||
           resp.ContainsUnsolicitedSales ||
           resp.ContainsPhishingAttempt;
}
Ответ модели позволяет различать продажные сообщения промо контент и фишинг а не только спам не спам. ➡️ Документация 🔹 Практический интенсив «Архитектуры и шаблоны проектирования» 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #sharp_view

⭐️ Золотой стандарт для рефакторинга Golden Master — это простой приём для безопасного рефакторинга, когда страшно ломать легаси и непонятно, как правильно должно «по идее» работать. Идея такая: берём старую реализацию, гоняем через неё достаточно входных данных и сериализуем результат — это и есть золотой стандарт. Потом пишем тест, который запускает старую и новую версию и сравнивает их вывод. Если совпадает — поведение не изменилось, можно смело продолжать рефакторить; если нет — либо нашли баг, либо сознательно меняем старый код. В C# это можно сделать вообще минималистично:
// serialize output before change, compare after change
var before = JsonSerializer.Serialize(await RunOld());
var after  = JsonSerializer.Serialize(await RunNew());
Assert.Equal(before, after);
Главное — позаботиться о детерминизме: вычистить случайные поля: время или GUID’ы, иначе стандарт будет шуметь и тест станет бесполезным. 🔹 Математика для Data Science 🔹 Получить консультацию менеджера 🔹 Сайт Академии 🔹 Сайт Proglib 🐸Библиотека шарписта #il_люминатор