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 212 en la categoría Tecnologías y Aplicaciones y el puesto 30 851 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 10 junio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -87, y en las últimas 24 horas de -4, 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.06%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 7.04% de reacciones respecto al total de suscriptores.
  • Alcance de las publicaciones: Cada publicación recibe en promedio 2 638 visualizaciones. En el primer día suele acumular 1 540 visualizaciones.
  • Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 8.
  • 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 11 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
-424 horas
-167 días
-8730 días
Archivo de publicaciones
🧑‍💻 Закон Хайрама: почему вы не можете изменить свой API Формулировка закона: При достаточном количестве пользователей API
🧑‍💻 Закон Хайрама: почему вы не можете изменить свой API Формулировка закона:
При достаточном количестве пользователей API не имеет значения, что вы обещаете в контракте — все наблюдаемое поведение вашей системы станет чьей-то зависимостью.
Вы создали API. Написали документацию. Явно указали, что гарантируете, а что нет. Но пользователи будут полагаться не только на задокументированное поведение, но и на: • Порядок элементов в ответе • Формат временных меток • Текст сообщений об ошибках • Время отклика • Недокументированные эндпоинты • Побочные эффекты • Баги И любое изменение этого может сломать чей-то прод. Excel и ошибка 1900 года В ранних версиях Excel был баг: 1900 год считался високосным, но таковым не являлся. Пользователи создали сложные таблицы, которые зависели от этого неправильного вычисления. Microsoft не мог просто исправить баг — это сломало бы тысячи таблиц. Ошибка сохранялась до Excel 2003. Даже сейчас есть опция «Enable iterative calculation» для совместимости. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

⭐️ SQL Server в одном файле LocalDB — это SQL Server в одном .mdf файле. Идеально для тестов, локальной разработки и инструментов. Создаётся одной командой, не требует установки сервера. LocalDB — это облегчённая версия SQL Server, которая: работает в режиме пользователя, то есть без сервиса, хранит базу в одном .mdf файле, ведёт себя как настоящий SQL Server и не требует установки полноценного SQL Server. Минимальный рабочий пример:
using Microsoft.Data.SqlClient;
using System.IO;

const string DatabaseName = "TestDatabase";
var databasePath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
    "MyApp", "Data"
);

// Создаём директорию если её нет
if (!Directory.Exists(databasePath))
{
    Directory.CreateDirectory(databasePath);
}

var dataFile = Path.Combine(databasePath, $"{DatabaseName}.mdf");
var logFile = Path.Combine(databasePath, $"{DatabaseName}_log.ldf");

// Безопасное экранирование для SQL
var escapedDbName = DatabaseName.Replace("]", "]]");
var escapedDataPath = dataFile.Replace("'", "''");
var escapedLogPath = logFile.Replace("'", "''");

var masterConnection = new SqlConnectionStringBuilder
{
    DataSource = @"(localdb)\MSSQLLocalDB",
    InitialCatalog = "master",
    IntegratedSecurity = true,
    TrustServerCertificate = true
}.ConnectionString;

var createDbQuery = $"""
    IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'{escapedDbName}')
    BEGIN
        CREATE DATABASE [{escapedDbName}]
        ON PRIMARY (
            NAME = N'{escapedDbName}',
            FILENAME = N'{escapedDataPath}'
        )
        LOG ON (
            NAME = N'{escapedDbName}_log',
            FILENAME = N'{escapedLogPath}'
        )
        COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    END
    """;

using var conn = new SqlConnection(masterConnection);
await conn.OpenAsync();

using var cmd = new SqlCommand(createDbQuery, conn);
await cmd.ExecuteNonQueryAsync();

Console.WriteLine($"База данных создана: {dataFile}");
Будут созданы необходимые файлы и база будет готова принимать подключения. Создание идемпотентное — повторный запуск безопасен. LocalDB работает под текущим пользователем Windows: • Папка должна быть доступна на запись • Не нужны права администратора • Файлы принадлежат пользователю Пакет: Microsoft.Data.SqlClient Требует: LocalDB. Он входит в Visual Studio или SQL Server Express. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

👀 Смотрим видео про URL Работайте с API каждый день, но часто ли задумываетесь, как правильно строить эндпоинты. В видео под
👀 Смотрим видео про URL Работайте с API каждый день, но часто ли задумываетесь, как правильно строить эндпоинты. В видео подробно про пагинацию, query-параметры, фильтры, сортировки, поддомены, порты и пути с версионированием. ➡️ Подтянуть базу про URL 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #il_люминатор

👍 Модификатор protected internal В C# модификатор доступа protected internal открывает доступ к полю, методу или свойству из двух зон. Любые классы внутри той же сборки могут обращаться к такому члену напрямую. Наследники базового класса получают доступ, даже если они в другой сборке. Пример:
public class BaseClass
{
    protected internal int SecretValue = 42;
}
Protected internal оказывается самым широким среди комбинированных, кроме public. 📍 Навигация: ВакансииЗадачиСобесы 🐸 Библиотека шарписта #sharp_view

🟥 Утечки данных в .NET-приложениях чаще происходят не из-за хакеров, а из-за неверной работы с ключами, конфигурациями и базовой криптографией. Ошибки на уровне кода быстро превращаются в инциденты. На открытом уроке разберём практическое применение System.Security.Cryptography: AES, RSA, хеширование и цифровые подписи. Поговорим о безопасном хранении и передаче секретов, управлении ключами и принципе наименьших привилегий. ❗️ Вы системно разберёте уязвимости OWASP Top-10 для .NET: инъекции, небезопасную десериализацию, XSS, CSRF — и способы их нейтрализации на уровне кода и архитектуры. Отдельно обсудим шифрование данных в БД, защиту строк подключения и безопасное логирование без утечек токенов. 🟥Встречаемся 10 февраля в 20:00 МСК в преддверии старта курса «C# Developer. Professional». Зарегистрируйтесь, чтобы не пропустить: https://clc.to/UzMt9g Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

📎 Один файл превращается в полноценное приложение В .NET 10 появилась фича, которая позволяет запускать C# код прямо из одно
📎 Один файл превращается в полноценное приложение В .NET 10 появилась фича, которая позволяет запускать C# код прямо из одного .cs файла без создания проекта. Помимо этого туда можно подключать NuGet пакеты. Директива :package в помощь:
#:package Newtonsoft.Json

using Newtonsoft.Json;

string json = "{\"name\": \"Иван\", \"age\": 30}";
var obj = JsonConvert.DeserializeObject<dynamic>(json);
Console.WriteLine($"{obj.name}, {obj.age} лет");
Первый запуск скачает пакет, дальше все мгновенно. Можно прописать необходимую версию:
#:package Newtonsoft.Json@13.0.3
Это меняет подход к прототипам, утилитам и devops скриптам. Пишем файл, запускаем, выбрасываем. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

📰 Дайджест недели Уже прошла неделя февраля, собрали лучшее за неделю. — Git v2.53 — Фриланс для разработчиков — Миграция с
📰 Дайджест недели Уже прошла неделя февраля, собрали лучшее за неделю. — Git v2.53Фриланс для разработчиковМиграция с GitHubРабота с LLM в .NETВеб-приложение для продуктивности 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #async_news

AI в экосистеме .NET: оставайтесь в тренде Microsoft глубоко интегрировала AI (Semantic Kernel, Copilot) в нашу среду, но при
AI в экосистеме .NET: оставайтесь в тренде Microsoft глубоко интегрировала AI (Semantic Kernel, Copilot) в нашу среду, но принципы работы агентов универсальны. Понимание того, как строятся цепочки ReAct или RAG, необходимо любому сеньору в 2026 году. На курсе мы даём фундаментальную базу и практику (на Python-стеке, стандарте AI-индустрии). Эти знания позволят вам эффективно использовать AI-возможности в C или создавать гибридные системы. Архитектурный фокус: — Оркестрация агентов (принципы применимы и к SK). — Работа с векторными данными в SQL/NoSQL. — Проектирование Stateful-систем с памятью. Погрузиться в архитектуру AI

🧑‍💻 Забытый await: от race condition до DoS-атаки В C# ключевое слово async — это инструкция компилятору превратить метод в
🧑‍💻 Забытый await: от race condition до DoS-атаки В C# ключевое слово async — это инструкция компилятору превратить метод в state machine. await отмечает точку логической приостановки. Всё просто: выполнение не должно продолжаться, пока результат не существует. При await весь код выполняется синхронно, пока не достигнет I/O или функции, возвращающей Task. Если Task не завершён, происходит раскрутка кадра стека, и поскольку обрамляющие методы приостановлены до самого верха, поток может быть освобождён в пул потоков. Позже задача завершается, продолжение планируется и выполнение возобновляется там, где остановилось. Это не параллельное выполнение, это приостановка и возобновление. Если забыли await:
var task = GetDataAsync();
// забыли await
Use(task);
Это режим «запустил и забыл» (fire-and-forget). Последствия: • выполнение продолжается немедленно • зависимость не обеспечивается • исключения выходят за пределы логического стека вызовов Что может произойти с приложением ⚠️ Забытый await может привести к классическому состоянию гонки: код продолжает выполнение до завершения критической операции, например, проверки прав доступа, открывая окно для эксплуатации. Атакующий может успеть получить доступ к данным между моментом начала проверки и её завершением. ⚠️ Когда исключения выходят за пределы логического стека вызовов, они могут быть проглочены без логирования. Это маскирует неудачные попытки аутентификации, SQL-инъекции или другие атаки. ⚠️ Истощение пула потоков как вектор DoS-атаки. При высокой нагрузке неправильное использование async/await приводит к истощению пула потоков. Злоумышленник может намеренно генерировать запросы, эксплуатирующие блокирующие операции. ➡️ Реальные атаки, уязвимости и практики безопасной разработки в Библиотеке хакера 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #il_люминатор

☕️ Веб-приложение для продуктивности Разработчик запустил в продакшн своё веб-приложение для управления временем — The Coffee
☕️ Веб-приложение для продуктивности Разработчик запустил в продакшн своё веб-приложение для управления временем — The Coffee Timer. Проект реализует технику Pomodoro с кофейной эстетикой. Приложение предлагает классический таймер Pomodoro с 25-минутными рабочими сессиями и визуализацией в виде анимированной кофейной чашки. Бэк построен на .NET, фронт —React + TypeScript + Tailwind CSS. В качестве базы данных используется Supabase. Хороший пример современного full-stack проекта с использованием .NET. ➡️ Попробовать приложение 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

Архитектура ИИ-агентов: учим матчасть Пока Microsoft развивает Semantic Kernel, индустрия стандартизирует паттерны на Python.
Архитектура ИИ-агентов: учим матчасть Пока Microsoft развивает Semantic Kernel, индустрия стандартизирует паттерны на Python. Курс «Разработка ИИ-агентов» поможет понять принципы построения таких систем, независимо от вашего основного языка. Что в программе: — графовая оркестрация (LangGraph); — работа с памятью и контекстом (RAG); — мультиагентные протоколы. Кодим на Python (нужны базовые знания), но полученные архитектурные скиллы универсальны. Первая лекция уже доступна. Смотреть лекцию Записаться на курс

❓ Вопрос с собеса Что такое абстракция в ООП? Звучит просто, но можно запутаться между абстракцией, интерфейсами и абстрактны
Вопрос с собеса
Что такое абстракция в ООП?
Звучит просто, но можно запутаться между абстракцией, интерфейсами и абстрактными классами. Ключевое слово здесь — упрощение. Абстракция — ответ в канале с вопросами с собесов Всё остальное — несущественные детали. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #dotnet_challenge

📎 Делимся заметками красиво Вы написали отличную заметку в Markdown в Obsidian, Notion или обычном редакторе, а теперь нужно
📎 Делимся заметками красиво Вы написали отличную заметку в Markdown в Obsidian, Notion или обычном редакторе, а теперь нужно отправить её коллеге или начальнику в Google Docs. Копируете текст и... все форматирование слетает. Заголовки превращаются в решётки ###, списки ломаются, код выглядит убого. Решение: md2cb Простая утилита, которая конвертирует ваш Markdown в богатый HTML и кладёт в буфер обмена. Просто:
cat заметка.md | md2cb
# Ctrl+V в любое приложение
Есть флаг -e для быстрого редактирования:
md2cb -e  # открывает $EDITOR, конвертирует после сохранения
➡️ Репозиторий 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🤩 Работа с LLM в .NET Microsoft выпустили разбор про то, как работать с AI в .NET. Если вы думали, что интеграция LLM — это
🤩 Работа с LLM в .NET Microsoft выпустили разбор про то, как работать с AI в .NET. Если вы думали, что интеграция LLM — это боль и каша из разных SDK, вот хорошие новости. Microsoft.Extensions.AI — один API для всех Работаете с OpenAI — один SDK. Решили попробовать Ollama — другой API. Захотели Azure OpenAI — третий подход. Microsoft решили эту проблему радикально: один интерфейс для всех провайдеров.
IChatClient client = ...; // любой провайдер
await foreach (var update in client.GetStreamingResponseAsync("How are you?"))
{
    Console.Write(update);
}
Раньше, чтобы получить структурированный JSON, нужно было плясать с бубном и JSON Schema. Теперь:
record Family(List<Person> Parents, List<Person>? Children);
record Person(string Name, int Age);

var family = await client.GetResponseAsync<Family>(
    [
        new ChatMessage(ChatRole.System, "You are an AI assistant..."),
        new ChatMessage(ChatRole.User, "Create a family with 2 parents...")
    ]);
Схему сгенерируют за вас, JSON распарсят, десериализуют. Хотите отправить фото для анализа? Обойдёмся без сотни строк:
var image = new DataContent(File.ReadAllBytes(@"photo.jpg"), "image/jpeg");
var messages = new List<ChatMessage>
{
    new(ChatRole.System, "You are a photo analyst..."),
    new(ChatRole.User, [prompt, image])
};

record ImageAnalysis(string Description, string[] Tags);
var analysis = await client.GetResponseAsync<ImageAnalysis>(messages);
Работает с изображениями, аудио и видео. Один API, middleware, типизация, телеметрия. Можно не изобретать велосипед при каждой смене провайдера. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

☝️ Не повторяйтесь Принцип DRY (Don't Repeat Yourself) — один из самых известных в программировании. Но, как и любой принцип, его можно применять неправильно. Давайте разберёмся, когда следовать DRY, а когда от него отступить. Признаки over-DRYing • Функция с 5+ параметрами:
// Универсальная функция-монстр
public async Task<object> FetchDataAsync(
    string entityType, int? id, string filter,
    int pageSize, bool includeDeleted, params string[] includes) { }

// Специализированные методы
public async Task<List<User>> GetActiveUsersAsync(int page, int pageSize)
    => await _context.Users.Where(u => u.IsActive)
        .Skip(page * pageSize).Take(pageSize).ToListAsync();
• Generic Repository:
// Кажется умным, но бесполезен
public interface IRepository<T> where T : class
{
    Task<T> GetByIdAsync(int id);
    Task<IEnumerable<T>> GetAllAsync();
}

// Специфичный и полезный
public interface IUserRepository
{
    Task<User> GetByEmailAsync(string email);
    Task<User> GetWithOrdersAsync(int id);
}
Когда дублирование правильно • Случайное совпадение:
// НЕ объединяйте! Разные бизнес-концепции
public string FormatUserName(User u) => $"{u.FirstName} {u.LastName}";
public string FormatProductName(Product p) => $"{p.Brand} {p.Model}";
• Разные контексты:
// UI: простая проверка
public bool ValidateEmail(string email) => email.Contains("@");

// API: строгая проверка
public bool ValidateEmail(string email) => 
    Regex.IsMatch(email, @"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$");
Повторите код три раза, прежде чем рефакторить: Первый раз — пишите Второй раз — терпите Третий раз — рефакторьте Дублирование в тестах — нормально:
[Fact]
public void CreateUser_ShouldSucceed()
{
    var user = new User { Name = "Alice", Age = 25 };
    Assert.Equal("Alice", _service.CreateUser(user).Name);
}

[Fact]
public void UpdateUser_ShouldSucceed()
{
    var user = new User { Name = "Alice", Age = 25 }; // OK
    // Читаемость важнее DRY
}
📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #sharp_view

🤖 Миграция с GitHub Если следите за IT-комьюнити, то наверняка замечали: всё больше программистов переезжают с GitHub. Недав
🤖 Миграция с GitHub Если следите за IT-комьюнити, то наверняка замечали: всё больше программистов переезжают с GitHub. Недавно оттуда мигрировали язык программирования Zig и инструмент Leiningen, а за ними — сотни индивидуальных разработчиков. В чём проблема • GitHub стал хуже технически После покупки Microsoft в 2018 платформа деградирует: интерфейс грузится дольше, GitHub Actions запускает джобы случайно и сам интерфейс раздут до безобразия. • Copilot — это плагиат GitHub Copilot буквально выдаёт куски кода дословно. Это нарушение лицензий и воровство чужого кода. Software Freedom Conservancy (те, кто поддерживают Wine, Git, QEMU) организовали кампанию «Give Up GitHub» именно из-за этого. • Закрытая платформа для открытого кода Парадокс: серверная часть GitHub — проприетарный софт. Вы размещаете open-source проекты на закрытой платформе, которую контролирует Microsoft. В отличие от Instagram или Twitter, GitHub не контролирует дистрибуцию контента. Уход с GitHub — это небольшая неудобство для контрибьюторов, но не исчезновение из поля зрения. Куда переезжать Бесплатно и с хостингом: • Codeberg (Forgejo) — некоммерческий проект, для FOSS • SourceHut — платно $4-12/мес, но есть финпомощь • GitLab — бесплатный тариф с ограничениями Самохостинг: • Gitea — простой и лёгкий • Gogs — ещё проще • Gerrit — если нужен продвинутый code review Децентрализация: • Radicle — p2p git • Или просто свой скрипт, заливающий в S3 💬 Где вы держите свои проекты? 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта #entry_point

🕶 Работа сама себя не найдёт Senior .NET Engineer — до 450 000₽ с удалёнкой. C# разработчик на удалёнку с ЗП до 250 000 ₽ C#/.NET-разработчик — удалёнка. 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта

💡 Фриланс для разработчиков Вы ищете заказы там, где их ищут все. А локальный бизнес даже не знает о существовании биржи. ИП
💡 Фриланс для разработчиков Вы ищете заказы там, где их ищут все. А локальный бизнес даже не знает о существовании биржи. ИП пишут в чатах «посоветуйте программиста» или листает Авито. Будьте там, где нет толпы. ➡️ В статье 9 способов найти первые проекты без бирж 📍 Навигация: ВакансииЗадачиСобесы 🐸Библиотека шарписта