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

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

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

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

РКН: https://gosuslugi.ru/snet/67a5c81cdc130259d5b7fead
Download Telegram
🤖 Пишете AI-приложения? Microsoft идут на помощь!

Microsoft представила предварительную версию библиотеки Microsoft.Extensions.AI.Evaluation, которая поможет легко и эффективно оценивать качество ваших AI-приложений.

📊 Метрики оценки AI: релевантность, правдивость, полнота, когерентность и многое другое.
🚀 Бесшовная интеграция: легко встраивается в вашу текущую инфраструктуру .NET.
📁 Хранение и отчётность: инструменты для кэширования, сохранения результатов и генерации отчётов.
🔧 Расширяемость: возможность добавлять свои метрики и настройки под конкретные задачи.
Теперь вы сможете точно измерить, насколько ваши приложения соответствуют ожиданиям пользователей и бизнес-требованиям.

📎 Подробнее читайте в официальном блоге
3👍2🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Напоминаем: у нас можно (и нужно) купить рекламу

→ Более 60 телеграм-каналов по всем направлениям IT
→ Почти 1,2 миллиона аудитории
→ Собственное медиа и сайт с DAU 25 000 — можем усилить продвижение
→ Классные email-рассылки
→ И, конечно же, крутые контент-менеджеры, которые сделают нативную интеграцию/придумают виральный пост/реализуют любые контентные предпочтения

Для заказа пишите сюда: @proglib_adv
🌚5👍2🥱2🔥1
Что такое FileSystemWatcher и как подглядывать за файлами?

FileSystemWatcher — это встроенный класс в .NET, который позволяет приложениям в реальном времени отслеживать изменения в файловой системе. С его помощью вы можете «слушать» события, такие как — создание файла или папки, изменение содержимого файла, удаление файла или папки, переименование файла или папки.

🛠 Шаги для настройки FileSystemWatcher:
Создайте объект FileSystemWatcher.
var watcher = new FileSystemWatcher(@"C:\MyFolder");


Укажите, какие файлы отслеживать (например, только PDF):
watcher.Filter = "*.pdf";


Укажите, отслеживать ли подкаталоги:
watcher.IncludeSubdirectories = true;


Подпишитесь на события, такие как изменение файла:
watcher.Changed += (sender, e) =>
{
Console.WriteLine($"Файл изменён: {e.FullPath}");
};


Включите мониторинг:
watcher.EnableRaisingEvents = true;


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

❗️ FileSystemWatcher лучше работает с локальными дисками. Для сетевых хранилищ могут потребоваться дополнительные решения.
❗️ В больших проектах, где изменения происходят массово, может возникнуть нагрузка, поэтому стоит тестировать производительность.
👍304🔥2👏1
🎉 Розыгрыш от Proglib Academy и DigitalRazor!

С 27 ноября по 27 декабря у вас есть шанс не только прокачать свои навыки, но и выиграть ПК при покупке любого курса Академии!

🎁 Призы для участников акции:

Игровой ПК DigitalRazor ProGaming
VIP-пакет курса Proglib Academy

💡 Как принять участие?
Купите любой курс Proglib Academy с 27 ноября по 27 декабря и получите шанс выиграть мощный ПК.

Приобретите технику DigitalRazor — участвуйте в розыгрыше VIP курса.

📅 Вместе с DigitalRazor мы создали спецпредложение -50% на курсы до 30 ноября, чтобы вы могли начать обучение на более выгодных условиях.

Выбрать курс
👍2
⚙️ .NET 9 представляет новый алгоритм для NuGet, который значительно ускоряет процесс восстановления пакетов. В крупных проектах, где восстановление ранее могло занимать десятки минут, теперь это время сокращается в разы благодаря переработанному решателю зависимостей.

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

Эти изменения особенно полезны для разработчиков, работающих с масштабными проектами, так как сокращают время ожидания и повышают продуктивность. Быстрее восстановление пакетов = больше времени для написания кода!
🥰20🔥11👍21
🔄 Поллинг или вебхуки: что лучше подойдет для вашего приложения

Существует множество технологий обмена данными — WebSockets, SSE, gRPC, брокеры сообщений — однако специфика и ограничения некоторых проектов заставляют разработчика сделать выбор между поллингом и вебхуками. Разберем преимущества и недостатки этих методов.

👉 Статья
4👍2
🛠️ Использование Span в C# — это мощный способ повысить производительность приложений, особенно когда речь идёт о работе с большими объёмами данных или низкоуровневыми операциями с памятью. В отличие от стандартных массивов, Span предоставляет безопасный и эффективный доступ к данным без необходимости их копирования, что минимизирует затраты на память и ускоряет выполнение программ.

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

Кроме того, Span значительно упрощает работу с памятью, так как можно напрямую работать с участками данных в стеке или на куче, избегая лишних аллокаций. Использование этой структуры — один из лучших способов улучшить производительность ваших приложений, при этом сохраняя безопасность и удобство разработки.
🔥307😁2
📝⚖️ Увольнение по статье: что делать, особенности и нюансы

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

👉 Читать подробнее
👍6👏2🌚1
Фронтенд кажется чем-то далёким и не таким сложным, как серверная часть?
Попробуйте этот тест, чтобы понять, насколько хорошо вы разбираетесь в React, Webpack, CSS-Grid и других инструментах, которыми пользуются ваши коллеги.

👉 Попробовать свои силы!
😁9🥱4👍1
🛠️ Уроки от создателя Fiddler: Ошибки, которые стоит знать

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

1️⃣ Технические решения могут стать ловушкой
Поспешный выбор многопоточности и неправильное использование свойств усложнили поддержку кода. Даже небольшие архитектурные решения могут иметь долгосрочные последствия.

2️⃣ SSL/TLS — это сложнее, чем кажется
Разработка взаимодействия с безопасными соединениями привела к неожиданным сложностям. Ошибки в этой области были особенно болезненными.

3️⃣ Сила общения
Работа с опытными коллегами и обратная связь от пользователей оказались не менее важными, чем сам код. Пренебрежение этими аспектами тормозило развитие проекта.

👉 Подробнее в источнике
👍9😁1
🔥 Как ускорить алгоритм Флойда-Уоршелла в C# с помощью разбиения на блоки

Алгоритм Флойда-Уоршелла решает задачу всех пар кратчайших путей с помощью динамического программирования. Он работает за O(n³), где n — количество вершин в графе. Это делает его эффективным для небольших графов, но с ростом их размера алгоритм становится не таким быстрым.

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

Как это работает?
⚙️ Создаем матрицу смежности, где храним расстояния между вершинами графа.
⚙️ Делим матрицу на меньшие блоки и обновляем кратчайшие пути внутри блоков и между ними.
⚙️ Получаем итоговую матрицу кратчайших путей, где каждый элемент показывает кратчайший путь между парой вершин.

📎 Оригинал статьи
👍92
🔍 Паттерн Наблюдатель (Observer Pattern) в C#: Как и зачем использовать?

Observer — это поведенческий паттерн проектирования, который позволяет создать зависимость один ко многим между объектами. Суть в том, что один объект информирует несколько других объектов (наблюдателей) об изменении своего состояния без явной связи с ними.

Когда использовать Observer Pattern?
⚙️ Системы уведомлений и оповещений: Когда несколько компонентов должны реагировать на изменения в одном объекте (например, обновления статуса пользователя).
⚙️ Реактивные приложения: Когда вы строите систему, которая должна автоматически реагировать на изменения состояния без жёсткой связи между компонентами.
⚙️ GUI приложения: Когда UI должен быть обновлён при изменении данных (например, в паттерне MVVM).

Альтернативы Observer Pattern: можно использовать централизованный механизм событий (например, EventHandler в C#), или подход Publisher-Subscriber, где посредник управляет подписками и рассылкой сообщений.

📎 Подробнее в статье
12
🔥 Конвертация XML в Word — проще, чем кажется!

Преобразование XML в Word больше не головная боль. Библиотека FileConversionLibrary упрощает этот процесс до нескольких строчек кода!

Библиотека предоставляет основные инструменты для конвертации файлов CSV и XML в форматы PDF, Word, YAML и JSON, упрощая обработку данных. Она доступна на платформах NuGet и GitHub, что облегчает ее интеграцию в проекты.

🎯 Подробности в статье
🥰9👍1🌚1
Почему Span и ref struct не подходят для асинхронных операций в C# ?

⚙️Стековая природа Span и ref struct:
Эти структуры выделяются на стеке, и их время жизни ограничено текущим контекстом выполнения функции.
Асинхронные операции могут охватывать несколько вызовов функций и даже переключаться между потоками, что приводит к несоответствию времён жизни. Если Span или ref struct используются после завершения исходной функции, это может вызвать неопределённое поведение.

⚙️Отсутствие размещения в куче и упаковки (boxing):
Span и ref struct спроектированы для избегания выделения памяти в куче, чтобы минимизировать накладные расходы. Это затрудняет их хранение в структурах данных, основанных на куче, которые часто используются в асинхронных операциях.

Процесс упаковки, то есть преобразования типа значения в ссылочный тип, не поддерживается для Span и ref struct, что ограничивает их использование в асинхронных контекстах.

Возможные обходные пути и альтернативы:

🛠️Использование Memory:
Memory — это эквивалент Span, выделяемый в куче, который можно использовать в асинхронных операциях. Он предоставляет методы для получения экземпляров Span при необходимости.

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

🛠️Асинхронные потоки:
Для асинхронной передачи данных рассмотрите использование асинхронных потоков. Они могут быть более эффективными и удобными в работе по сравнению с традиционными асинхронными операциями.
👍18
⚙️ Подпишись на нашу еженедельную email-рассылку, чтобы быть в курсе последних открытий и тенденций в мире бэкенда.

В еженедельных письмах ты найдешь:
● Языки программирования и фреймворки для бэкенда
● Архитектура и проектирование серверных приложений
● Базы данных и управление данными
● Безопасность и защита данных
● Облачные технологии и DevOps
● API и интеграции
● Тестирование и отладка
● Инструменты и утилиты для бэкенд-разработчиков
● Лучшие практики и паттерны проектирования

👉Подписаться👈
👍1
🛠️ Запуск .NET-приложений в облаке с помощью Heroku

Heroku анонсировали официальную поддержку .NET, позволяя разработчикам развертывать приложения на платформе с использованием .NET Core.
Это открывает новые возможности для упрощенного хостинга и масштабирования приложений в облаке.

Процесс деплоя описан буквально двумя строками:
heroku create --buildpack heroku/dotnetgit push heroku main


📎 Читайте анонс в блоге Heroku
👍10😁2👏1
🔧 Юнит-тестирование в .NET с xUnit и Moq

Если вы хотите научиться писать качественные юнит-тесты в .NET, но устали от скучных примеров, то эта статья — для вас! Автор делится полезными советами по использованию xUnit и Moq для создания тестов, которые легко поддерживать и которые реально помогают находить ошибки.

В статье вы найдёте множество полезных инсайтов:
🛠️ Мудрое использование xUnit — как грамотно применять фреймворк для написания тестов и организации их выполнения, чтобы тесты были не просто рабочими, но и удобными.
🛠️ Мок-объекты с Moq — создаём мок-объекты для изоляции компонентов и упрощения процесса тестирования, что позволит фокусироваться только на проверке нужных частей системы.
🛠️ Лучшие практики — секреты чистого, удобного и эффективного тестирования, которые сэкономят ваше время и помогут избежать типичных ошибок.
🛠️ Избегаем распространённых ошибок — советы, которые избавят вас от множества проблем и облегчат жизнь при работе с юнит-тестами.

📎 Полезный источник
👍10🥱1
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

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

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

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

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
2🥱1
💡 Работаем с фоновыми задачами в Windows

Хотите автоматизировать задачи с помощью .NET Core? Worker Service — это удобный способ создавать фоновые службы, которые легко интегрируются в экосистему Windows.

Как создать такой сервис, настроить его запуск как Windows-службы и управлять им через командную строку?
📎 Простое и понятное объяснение ждёт вас в статье
👏3