23284
Все самое полезное для C#-разработчика в одном канале. По рекламе: @proglib_adv Учиться у нас: https://proglib.io/w/b60af5a4 Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
#мем
🐸Библиотека шарписта
⚡️ Если вы вдруг забыли: у нас можно купить рекламу
Библиотека программиста — медиа с миллионной аудиторией из IT-сферы. Что у нас есть:
• 60+ телеграм-каналов по разным IT-направлениям, от Python до DevOps
• 25 000 daily active users на сайте, который поможет усилить продвижение
• Возможность сделать нативную интеграцию, виральный пост и не только
За айтишной аудиторией — к нам 😏
По вопросам рекламы пишите сюда → @proglib_adv
⚙️ Wolverine вместо MediatR
MediatR давно стал стандартным решением для обработки команд и событий в .NET-приложениях. Однако его использование требует явной регистрации обработчиков и ведет к шаблонному коду.
Wolverine предлагает альтернативный подход, снижая количество повторяющихся конструкций и обеспечивая встроенную поддержку очередей сообщений.
Wolverine – это библиотека для работы с CQRS и асинхронными процессами, которая:
✅ Упрощает код – обработчики регистрируются автоматически.
✅ Включает встроенную поддержку очередей сообщений без внешних брокеров.
✅ Поддерживает middleware для дополнительной гибкости.
Пример миграции:
MediatR:
public class MyCommandHandler : IRequestHandler<MyCommand, Response>
{
public async Task<Response> Handle(MyCommand request, CancellationToken cancellationToken)
{
// Логика обработки
}
}
public static Response Handle(MyCommand command)
{
// Логика обработки
}
💡 Погружение в open-source .NET
.NET Foundation — некоммерческая организация, изначально созданная Microsoft для поддержки и развития открытого исходного кода в экосистеме .NET. Фонд помогает своим членам находить проекты с открытым исходным кодом для работы и содействует митапам в распространении знаний о .NET.
Почему стоит вносить вклад в проекты с открытым исходным кодом на .NET?
✅ Развитие навыков: работа над реальными проектами помогает расти как разработчику, знакомясь с новыми инструментами, техниками и практиками кодирования.
✅ Нетворкинг: сотрудничество с мейнтейнерами и участниками позволит устанавливать связи с другими разработчиками со всего мира.
✅ Карьера: вклады в открытый исходный код являются ценным дополнением к резюме и демонстрируют мотивацию и страсть потенциальным работодателям.
✅ Влияние на сообщество: разработки помогают улучшать инструменты и библиотеки, на которые полагаются другие разработчики, создавая эффект домино положительных изменений.
Как найти подходящий проект
1️⃣ Посетите каталог проектов .NET Foundation, чтобы увидеть список поддерживаемых проектов. Многие из них дружелюбны к новичкам и приветствуют новых участников.
2️⃣ На GitHub проекты часто помечают задачи, подходящие для новичков, такими метками, как good first issue, help wanted или documentation.
3️⃣ Многие проекты имеют серверы Discord, форумы или обсуждения на GitHub, где можно задавать вопросы и получать рекомендации.
🐸Библиотека шарписта
⚡️ 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 и получать ответы, обеспечивая непрерывный диалог.
📎 Статья с реализацией
🐸Библиотека шарписта
😂 Dev Memes: утренние дилеммы, правки и зарплаты
Третья неделя года позади, а мы всё ещё смеёмся над мемами. Ловите подборку лучших шуток из нашего канала «Библиотека IT-мемов».
🔗 Подборка самых топовых мемов
#мем
🐸Библиотека шарписта
🆚 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
🐸Библиотека шарписта
😊 Привет, шарписты!
Мы собираем данные о том, какие методы биохакинга действительно помогают разрабам улучшить качество жизни и повысить продуктивность. Поделитесь своим опытом — это поможет другим сделать осознанный выбор в мире биохакинга.
🐸Библиотека шарписта
🔄 Meadow v2: что изменилось
Команда Wilderness Labs выпустила долгожданную Meadow v2 — крупное обновление платформы для разработки IoT-устройств на базе .NET! 🚀 Если вы занимаетесь созданием умных устройств или встраиваемых систем, этот релиз точно заслуживает вашего внимания. Давайте разберем, что нового:
➡️ Meadow v2 получил серьезные улучшения в работе операционной системы, что повышает стабильность и производительность устройств.
➡️ Добавлены новые API для работы с периферией, сенсорами и другими компонентами, что упрощает разработку сложных IoT-решений.
➡️ Теперь Meadow лучше работает с различными аппаратными компонентами, что расширяет возможности для создания уникальных устройств.
➡️ Множество багов и проблем, обнаруженных в предыдущих версиях, были устранены, что делает платформу более надежной.
➡️ Wilderness Labs постарались улучшить документацию, чтобы разработчикам было проще начать работу с платформой.
📎 Полный список изменений доступен на официальной странице релиза
🐸Библиотека шарписта #новость
⚡️ Автоматическая регистрация зависимостей в C#
Scrutor — это библиотека для упрощения регистрации зависимостей в контейнере инверсии управления (IoC) Microsoft.Extensions.DependencyInjection. Она позволяет автоматически сканировать сборки и регистрировать классы по заданным правилам, избавляя от необходимости вручную прописывать каждую зависимость.
💻 Пример использования
С помощью Scrutor можно зарегистрировать все классы в сборке, реализующие интерфейсы, в несколько строк:
services.Scan(scan => scan
.FromAssemblyOf<Startup>() // Сканирование текущей сборки
.AddClasses() // Добавление всех классов
.AsImplementedInterfaces() // Регистрация их как интерфейсов
.WithScopedLifetime()); // Установка времени жизни
👀 Трансляция о .NET и работе с данными
Недавно прошла трансляция «.NET Data Community Standup» , на которой эксперты обсудили ключевые подходы и инструменты для оптимизации работы с данными в .NET.
🔉 Что обсудили?
➡️ Context Pooling:
• Рассказали, как эффективно управлять контекстами данных в .NET.
• Обсуждали оптимизацию ресурсов, улучшение производительности приложений и типичные случаи использования пуллинга.
➡️ Метод FromSql:
• Объяснили, как использовать необработанные SQL-запросы в Entity Framework.
• Разобрали, когда FromSql может быть полезен, а когда его лучше избегать.
➡️ Скомпилированные запросы:
• Показали, как предварительная компиляция запросов снижает накладные расходы.
• Поделились примерами, где скомпилированные запросы позволяют ускорить повторное выполнение запросов.
📎 Смотреть запись трансляции
🐸Библиотека шарписта
🌵🕵️♂️ Git-квест: 10 испытаний для повелителя репозиториев
Привет, шарписты! Вы пишете код, который собирается в проекты, покоряющие мир, но знаете ли вы, как не запушить .env в мастер? Этот тест — шанс доказать, что вы не только мастер LINQ, но и ветвлений в Git
✏️ Пройти тест
👨💻 Кроссплатформенная разработка с .NET MAUI и Blazor Hybrid
💡 .NET MAUI и Blazor Hybrid предоставляют возможность использовать единую кодовую базу для создания приложений, работающих на мобильных устройствах, настольных системах и в вебе. Это решение для тех, кто хочет оптимизировать процесс разработки.
🎯 Чем это удобно?
• Переиспользование Razor-компонентов между вебом, мобильными и настольными приложениями.
• Единый стиль работы для разработчиков, знакомых с экосистемой .NET
Если вы хотите понять, как это работает на практике, рекомендуем ознакомиться с одной из статей, где подробно описывается процесс создания кроссплатформенного приложения на основе .NET MAUI и Blazor Hybrid.
📎 Посмотреть как разработать мультиплатформенное приложение
🐸Библиотека шарписта
⚙️ Мини-гайд по реализации MFA в .NET
Многофакторная аутентификация (MFA) — это важный инструмент для повышения безопасности приложений. Она требует подтверждения личности пользователя через два или более независимых фактора, таких как пароль и одноразовый код из приложения-аутентификатора (например, Google Authenticator).
Как это работает:
➡️Для каждого пользователя создается уникальный секретный ключ. Этот ключ используется для генерации одноразовых паролей (TOTP).
➡️Секретный ключ кодируется в формате QR-кода. Пользователь сканирует этот код своим приложением-аутентификатором, чтобы настроить MFA.
➡️После настройки приложение генерирует коды, которые действуют в течение ограниченного времени.
➡️При входе в приложение пользователь вводит код из аутентификатора. Сервер проверяет его, сравнивая с тем, что должно быть сгенерировано для данного пользователя.
Основные этапы реализации в .NET:
1️⃣ Настройте библиотеку для работы с TOTP и генерации QR-кодов.
2️⃣ Реализуйте процесс генерации секретного ключа и сохранения в базе данных.
3️⃣ Организуйте валидацию кода на сервере при каждом входе.
📎 Пример реализации с кодом
🐸Библиотека шарписта
🧑💻 Почему код может «завидовать»
➡️ Функциональная зависть — это термин из области программирования, описывающий ситуацию, когда метод одного класса чрезмерно использует данные или методы другого класса, вместо того чтобы оперировать собственными данными.
Это считается признаком плохого дизайна, поскольку нарушает принцип инкапсуляции и указывает на необходимость перераспределения обязанностей между классами.
➖Пример:
Предположим, у нас есть класс Order и класс Customer. Если метод класса Order постоянно обращается к данным класса Customer для выполнения своих задач, это может свидетельствовать о функциональной зависти.
Для устранения функциональной зависти рекомендуется переместить соответствующие методы в тот класс, чьи данные они используют чаще всего. В нашем примере, если метод из Order активно использует данные Customer, возможно, этот метод следует переместить в класс Customer.
🐸Библиотека шарписта
👋 Привет, шарписты!
Как вы относитесь к комментариям в коде с объяснением изменений?
// здесь подредачил текст и удалил ненужное вчера
Считаете пережитком прошлого, боитесь забыть что было изменено или просто делаете как делают все у вас на проекте?
Пишите своё мнение в комментарии👇
🐸Библиотека шарписта #интерактив
#мем
🐸Библиотека шарписта
🧑💻 Статьи для IT: как объяснять и распространять значимые идеи
Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.
Что: семь модулей, посвященных написанию, редактированию, иллюстрированию и распространению публикаций.
Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.
👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
💡 Application Pipeline или Reuse Pipeline
В разработке ПО часто обсуждаются два подхода: Application Pipeline и Reuse Pipeline. Понимание различий между этими подходами помогает оптимизировать процессы разработки и повысить эффективность работы.
➡️ Конвейер приложений (Application Pipeline):
• Цель: предоставление конкретных функций для конечного пользователя.
• Пример: веб-приложение с аутентификацией, маршрутизацией и логированием.
➡️ Конвейер повторного использования (Reuse Pipeline):
• Цель: создание компонентов, которые можно использовать в разных системах.
• Пример: библиотека для аутентификации, применимая в нескольких приложениях.
📎 Подробнее о каждом подходе
Пишите в комментариях под какой конвейер подходит ваш текущий проект и почему 👇
🐸Библиотека шарписта
📔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
docker build . -f .devcontainer/Dockerfile -t documentdb
docker run -v $(pwd):/home/documentdb/code -it documentdb /bin/bash
cd code
make
sudo make install
./scripts/start_oss_server.sh -t documentdb
psql -p 9712 -h localhost -d postgres
🛑 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;
// Работа с буфером
}
// Плохо: блокировка потока
public string GetData() => FetchDataAsync().Result;
// Лучше: полная асинхронность
public async Task<string> GetDataAsync() => await FetchDataAsync();
// Плохо: 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();
😊 Спасибо за ваши ответы!
Читать полностью…
⚙️ Пайпы в F#: как писать чистый и читаемый код
Если вы работаете с F#, то наверняка слышали о пайпах (pipes). Это инструмент языка, который помогает писать код в стиле "конвейера", делая код читаемым и выразительным. Давайте разберем, как они работают и зачем их использовать.
❓Что такое пайпы?
Пайпы — это операторы, которые передают результат одной функции в качестве входного аргумента другой. В F# есть два оператора:
1️⃣ Прямой пайп (|>) — этот оператор передает значение слева в функцию справа b используется чаще всего. Он делает код более линейным и похожим на "конвейер".
Пример:
let add x y = x + y
let multiplyBy2 x = x * 2
// Без пайпа
let result1 = multiplyBy2 (add 3 4) // 3 + 4 = 7, затем 7 * 2 = 14
// С пайпом
let result2 = add 3 4 |> multiplyBy2 // То же самое, но более читаемо
let result = multiplyBy2 <| add 3 4 // То же, что и multiplyBy2 (add 3 4)
👋 Привет, шарписты!
Есть идеи для пет-проектов? А может уже что-то делаете? Поделитесь своими задумками с сообществом! 👇 Ведь это субботний #интерактив!
Не стесняйтесь делиться своими идеями и прогрессом в их реализации. Мы уверены, что среди вас много талантливых разработчиков, которые могут создать что-то уникальное и интересное.
🐸Библиотека шарписта
С Новым годом и Годом Змеи! 🐍 Пусть этот год принесет вам успех, рост и меньше усилий для достижения больших целей. Мы в Proglib Academy пришли с хорошими новостями в начале года.
🌟 Обновления курсов!
Мы работаем над тем, чтобы ваше обучение было проще и эффективнее. Вот что мы уже улучшили:
📈 Data Science: улучшили блок «Геометрическая прогрессия и векторная алгебра» — ключевой этап курса, который идет сразу после теории множеств.
Он закладывает фундамент для работы с данными: от анализа роста и убывания величин (геометрическая прогрессия) до понимания многомерных пространств и операций с векторами. Знания которых пригодятся в машинном обучения и аналитики.
🐍 Python: обновили курс с учетом последней версии Python 3.9.5, добавив актуальные материалы и улучшив структуру. Чтобы вы могли лучше закрепить пройденный материал, мы добавили новые интересные задачи и практические примеры.
Учебный процесс стал еще удобнее и эффективнее, а вы сможете быстрее освоить современные инструменты и техники программирования
Общие обновления:
- Перезаписали демо-курсы и презентации. Чтобы вы точно одурели с этой прикормки.
- Сократили время проверки домашних заданий, ответы теперь приходят быстрее.
- Видео теперь без перекрытий, презентации стали четче, а задания логичнее.
Но главное — мы растем для вас и с вами. Ваша обратная связь помогает нам становиться лучше. Делитесь идеями, и вместе мы создадим лучший образовательный продукт для вас!
💡 С 27.01.25 цены изменятся на 10%.
Пример: Математика для DS (Базовый): 20,990 → 23,090 ₽. Это позволяет нам делать курсы еще круче.
Давайте сделаем 2025 год годом вашего профессионального успеха! 🚀
Выбрать курс
#мем
🐸Библиотека шарписта
🎵 «Кодю под windows - да, это легко»
Предлагаем послушать авторский айти ремикс о нашем любимом C#! Без наездов на джавистов не обошлось.
🎧 Слушать
🐸Библиотека шарписта
#мем
🐸Библиотека шарписта
⚡️ Работа с gRPC API в .NET 8
❓Что такое gRPC?
gRPC — это фреймворк удаленных вызовов процедур, который использует HTTP/2 для передачи данных между приложениями. Он выделяется высокой производительностью благодаря бинарному формату Protocol Buffers.
🧑💻Реализация API
В статье из C#Corner пошагово описан процесс реализации API в .NET 8:
1️⃣ Всё начинается с создания нового проекта с использованием шаблона "gRPC Service".
2️⃣ Затем внимание уделяется определению Proto-файла, который задает структуру запросов и ответов, а также созданию методов API.
3️⃣ Далее рассматривается, как написать серверную логику, обрабатывающую CRUD-операции, и настроить маршруты для работы API.
4️⃣ Заключительный этап — тестирование с использованием Postman, который позволит отправить gRPC-запросы и проверить функциональность сервиса.
📎 Пошаговое руководство для gRPC API
🐸Библиотека шарписта