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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
😊 Спасибо за ваши ответы!
Please open Telegram to view this post
VIEW IN TELEGRAM
🆚 Microsoft vs JetBrains: Битва гигантов за сердца разработчиков

В мире разработки ПО разгорается война — на этот раз между Microsoft и JetBrains! Обе компании в один день представили обновления с искусственным интеллектом для своих инструментов:

➡️ Microsoft: GitHub Copilot теперь бесплатен в Visual Studio

Бесплатный доступ к GitHub Copilot для всех пользователей Visual Studio. Никаких подписок или кредитных карт — только аккаунт GitHub.

💡 Особенности:

• Продвинутые AI-модели для генерации кода

• Редактирование нескольких файлов за раз

• Умный чат, авто-коммиты и улучшенная отладка.

➡️ JetBrains: Junie — ваш личный AI-агент в IDE

Что умеет Junie?

• Делегируйте рутину: генерация кода, тесты, проверка стиля — всё на авторежиме.

• 53.6% задач решает с первого запуска (данные SWEBench).

• Адаптируется под ваш стиль: анализирует проект и учится у вас.

• Полный контроль: все изменения можно проверить и поправить вручную.

Пока Junie доступен только через лист ожидания для IntelliJ, PyCharm и других IDE.

📌 Подробности в блоге Microsoft и JetBrains

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🛑 10 антипаттернов в C#, которые тормозят ваше приложение (и как их исправить)

Производительность — это не только про оптимизацию сложных алгоритмов. Часто проблемы кроются в мелочах: лишние аллокации, блокировки потоков или неэффективные запросы к базе данных. Эти ошибки могут оставаться незамеченными, пока приложение не начнёт «тормозить» под нагрузкой.

1️⃣ Лишние аллокации объектов

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

Решение:

• Используйте пулы объектов (ArrayPool, MemoryPool) для переиспользования памяти.
• Для небольших данных применяйте struct вместо class.

// Плохо: аллокация на каждый вызов  
var buffer = new byte[1024];

// Лучше: переиспользуем память
var pool = MemoryPool<byte>.Shared;
using (var owner = pool.Rent(1024))
{
var buffer = owner.Memory;
// Работа с буфером
}


2️⃣ Блокировка асинхронного кода

Проблема: Использование .Result или .Wait() блокирует текущий поток, что может привести к дедлокам, особенно в UI-приложениях.

Решение:

• Цепочка async/await должна идти от начала до конца.
• В библиотечных методах используйте .ConfigureAwait(false).

Пример:
// Плохо: блокировка потока  
public string GetData() => FetchDataAsync().Result;

// Лучше: полная асинхронность
public async Task<string> GetDataAsync() => await FetchDataAsync();


3️⃣ Неэффективные запросы к БД

Проблема:

• N+1 запросы в ORM (например, Entity Framework).
• Отсутствие индексов или выборка лишних данных.

Решение:

• Используйте .Include() для жадной загрузки связанных данных.
• Применяйте пагинацию (Skip/Take) и индексы.

// Плохо: N+1 запросов  
var orders = context.Orders.ToList();
foreach (var order in orders)
{
var customer = context.Customers.Find(order.CustomerId);
}

// Лучше: один запрос с JOIN
var orders = context.Orders.Include(o => o.Customer).ToList();


➡️ Эти 3 антипаттерна — частые «узкие места». Проверьте их в своём коде, а остальные 7 примеров смотрите в статье
Please open Telegram to view this post
VIEW IN TELEGRAM
📔Microsoft открывает исходный код DocumentDB: новый стандарт для NoSQL баз данных на основе PostgreSQL

23 января 2025 года Microsoft объявила о выпуске DocumentDB — открытой платформы для документоориентированных баз данных, которая лежит в основе Azure Cosmos DB для MongoDB на базе vCore.

Этот шаг стал важным моментом в мире open source, предлагая разработчикам новый стандарт для NoSQL баз данных, построенный на мощном движке PostgreSQL.

Основные компоненты DocumentDB

pg_documentdb_core — кастомное расширение PostgreSQL, оптимизированное для работы с BSON (Binary JSON). Оно поддерживает:

• Индексацию полей (включая составные и геопространственные индексы).

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

• Аутентификацию SCRAM.

pg_documentdb_api — слой данных, реализующий CRUD-операции, запросы и управление индексами.

🐳 Как начать использовать DocumentDB

1. Установите Docker.

2. Клонируйте репозиторий DocumentDB:
git clone https://github.com/microsoft/documentdb.git  


3. Создайте Docker-образ и запустите контейнер:
docker build . -f .devcontainer/Dockerfile -t documentdb  
docker run -v $(pwd):/home/documentdb/code -it documentdb /bin/bash


4. Соберите и установите бинарные файлы:
cd code  
make
sudo make install


5. Запустите сервер DocumentDB:
./scripts/start_oss_server.sh -t documentdb  


6. Подключитесь к серверу через psql:
psql -p 9712 -h localhost -d postgres


📎 Официальный анонс

🐸Библиотека шарписта #новость
Please open Telegram to view this post
VIEW IN TELEGRAM
😂 Dev Memes: утренние дилеммы, правки и зарплаты

Третья неделя года позади, а мы всё ещё смеёмся над мемами. Ловите подборку лучших шуток из нашего канала «Библиотека IT-мемов».

🔗 Подборка самых топовых мемов
💡 Application Pipeline или Reuse Pipeline

В разработке ПО часто обсуждаются два подхода: Application Pipeline и Reuse Pipeline. Понимание различий между этими подходами помогает оптимизировать процессы разработки и повысить эффективность работы.

➡️ Конвейер приложений (Application Pipeline):

• Цель: предоставление конкретных функций для конечного пользователя.

• Пример: веб-приложение с аутентификацией, маршрутизацией и логированием.

➡️ Конвейер повторного использования (Reuse Pipeline):

• Цель: создание компонентов, которые можно использовать в разных системах.

• Пример: библиотека для аутентификации, применимая в нескольких приложениях.

📎 Подробнее о каждом подходе

Пишите в комментариях под какой конвейер подходит ваш текущий проект и почему 👇

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ DeepSeek + .NET

Уже работали с DeepSeek? Если нет, самое время познакомиться c этим убийцей ChatGPT, который стремительно набирает популярность.

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

В статье описан процесс создания консольного чат-бота с использованием .NET и API DeepSeek.

1️⃣ Создаём новое консольное приложение и устанавливаем необходимые пакеты: инициализируем проект и добавляем библиотеки для работы с HTTP-запросами и конфигурацией JSON.

2️⃣ Настраиваем файл appsettings.json: добавляем базовый URL и API-ключ DeepSeek для последующего взаимодействия с API.

3️⃣ Определяем модели данных: создаём классы для представления структуры запросов и ответов API.

4️⃣ Создаём сервис для взаимодействия с API: реализуем логику отправки сообщений и обработки ответов от DeepSeek.

5️⃣ Организуем взаимодействие с пользователем: настраиваем цикл, позволяющий пользователю вводить сообщения, отправлять их в API и получать ответы, обеспечивая непрерывный диалог.

📎 Статья с реализацией

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💡 Погружение в open-source .NET

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

Почему стоит вносить вклад в проекты с открытым исходным кодом на .NET?

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

Нетворкинг: сотрудничество с мейнтейнерами и участниками позволит устанавливать связи с другими разработчиками со всего мира.

Карьера: вклады в открытый исходный код являются ценным дополнением к резюме и демонстрируют мотивацию и страсть потенциальным работодателям.

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

Как найти подходящий проект

1️⃣ Посетите каталог проектов .NET Foundation, чтобы увидеть список поддерживаемых проектов. Многие из них дружелюбны к новичкам и приветствуют новых участников.

2️⃣ На GitHub проекты часто помечают задачи, подходящие для новичков, такими метками, как good first issue, help wanted или documentation.

3️⃣ Многие проекты имеют серверы Discord, форумы или обсуждения на GitHub, где можно задавать вопросы и получать рекомендации.

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Wolverine вместо MediatR

MediatR давно стал стандартным решением для обработки команд и событий в .NET-приложениях. Однако его использование требует явной регистрации обработчиков и ведет к шаблонному коду.

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

Wolverine – это библиотека для работы с CQRS и асинхронными процессами, которая:

Упрощает код – обработчики регистрируются автоматически.

Включает встроенную поддержку очередей сообщений без внешних брокеров.

Поддерживает middleware для дополнительной гибкости.

Пример миграции:

MediatR:
public class MyCommandHandler : IRequestHandler<MyCommand, Response>
{
public async Task<Response> Handle(MyCommand request, CancellationToken cancellationToken)
{
// Логика обработки
}
}


Wolverine:
public static Response Handle(MyCommand command)
{
// Логика обработки
}


📎 Полный разбор и примеры – в статье

🐸Библиотека шарписта
Please open Telegram to view this post
VIEW IN TELEGRAM
👋 Привет, шарписты!

Как вы относитесь к комментариям в коде с объяснением изменений?
// здесь подредачил текст и удалил ненужное вчера
Считаете пережитком прошлого, боитесь забыть что было изменено или просто делаете как делают все у вас на проекте?

Пишите своё мнение в комментарии👇

🐸Библиотека шарписта #интерактив
Please open Telegram to view this post
VIEW IN TELEGRAM
️ Если вы вдруг забыли: у нас можно купить рекламу

Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:

• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps

• 25 000 daily active users на сайте, который поможет усилить продвижение

• Возможность сделать нативную интеграцию, виральный пост и не только

За айтишной аудиторией — к нам 😏

По вопросам рекламы пишите сюда → @proglib_adv