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

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

Ir al canal en Telegram

Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Mostrar más

📈 Análisis del canal de Telegram Библиотека шарписта | C#, F#, .NET, ASP.NET

El canal Библиотека шарписта | C#, F#, .NET, ASP.NET (@csharpproglib) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 21 866 suscriptores, ocupando la posición 6 209 en la categoría Tecnologías y Aplicaciones y el puesto 30 824 en la región Rusia.

📊 Métricas de audiencia y dinámica

Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 21 866 suscriptores.

Según los últimos datos del 11 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -95, y en las últimas 24 horas de -6, conservando un alto alcance.

  • Estado de verificación: No verificado
  • Tasa de interacción (ER): El promedio de interacción de la audiencia es 12.48%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.13% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 2 729 visualizaciones. En el primer día suele acumular 1 560 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 9.
  • Intereses temáticos: El contenido se centra en temas clave como .net, шарписта, навигация, await, string.

📝 Descripción y política de contenido

El autor describe el recurso como un espacio para expresar opiniones subjetivas:
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead

Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 12 junio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.

21 866
Suscriptores
-624 horas
-237 días
-9530 días
Archivo de publicaciones
👨‍💻 Не хватает комментария «Создаёт переменную 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_люминатор