Библиотека шарписта | 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
🤨 Когда использовать Parallel.For в C#: плюсы и минусы

Параллельная обработка данных стала ключевым аспектом современных приложений. Одним из простых способов реализации параллельности в C# является метод Parallel.For. Он позволяет запускать итерации цикла одновременно на нескольких ядрах процессора. Но всегда ли это лучший выбор? Давайте разберёмся.

Преимущества Parallel.For:
Ускорение выполнения: этот метод использует многопоточность, распределяя задачи между ядрами процессора.
Автоматическая оптимизация: вам не нужно вручную управлять потоками или их количеством. Среда выполнения адаптируется под ресурсы.
Простой синтаксис: с помощью Parallel.For легко заменить обычный цикл for, добавив всего несколько строк кода.

Когда Parallel.For не подходит:
🙅‍♂️ Малые задачи: если итерации выполняются быстро, накладные расходы на параллельность могут сделать метод менее эффективным.
🙅‍♂️ Зависимость итераций друг от друга: если каждая итерация зависит от результатов других, параллельность нарушает логику выполнения.
🙅‍♂️ Проблемы с потокобезопасностью: если внутри итераций используются общие ресурсы, их доступ должен быть синхронизирован, что может усложнить код.

💡 Если требуется больше контроля или распределение задач нерегулярное, обратите внимание на:
Task Parallel Library (TPL) для асинхронных операций.
PLINQ (Parallel LINQ) для работы с коллекциями.
BackgroundWorker для фоновых задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥱12
🎁 Лучше икры на Новый год только...

Сертификат на обучение от Proglib Academy! Это крутой подарок для тех, кто интересуется IT, хочет освоить новую профессию и жить в шоколаде.

Почему наши курсы — хороший презент:

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

Сертификат оформляется за пару минут, и даже не нужно ломать голову над упаковкой.

🚀 Подарите возможность начать год с полезных знаний и карьерного роста → подробнее о сертификатах
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🥱4
🛠 Продвинутый логинг в C# с использованием прокси

Если вам нужен мощный и элегантный способ добавления логирования в ваш проект на C#, то стоит обратить внимание на использование прокси. Такой подход описан в статье, и он открывает массу возможностей для гибкого логирования.

🤔 Что такое прокси?
Прокси — это объект, который находится между клиентом и целевым объектом. Они позволяют "перехватывать" вызовы методов, добавляя дополнительные действия. Например, логирование входных параметров, времени выполнения или результатов.

Использование прокси помогает:
💡 Отделить логику логирования от бизнес-логики.
💡 Минимизировать изменения в существующем коде.
💡 Упростить внедрение других кросс-функциональных задач, например, мониторинга.

Пример:
public void Intercept(IInvocation invocation)
{
Console.WriteLine($"[Log] Calling: {invocation.Method.Name}");
Console.WriteLine($"[Log] Arguments: {string.Join(", ", invocation.Arguments)}");

invocation.Proceed(); // Выполнение оригинального метода

Console.WriteLine($"[Log] Completed: {invocation.Method.Name}");
Console.WriteLine($"[Log] Result: {invocation.ReturnValue}");
}


📌 Почему это круто?
Масштабируемость: логика легко адаптируется для больших приложений.
Отсутствие повторений кода: вы описываете перехват только один раз, а все классы наследуют эту логику.
Гибкость и наглядность: логирование можно добавлять, отключать или менять без изменения основной логики.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🤔3🔥2🥱21
🦑👨💻 Программист в «Игре в кальмара»: каковы твои шансы выжить?

Думаешь, что легко переживаешь дедлайны и код-ревью? 😏 А готов ли ты к реальному испытанию?
Пройди тест и узнай, какие у тебя шансы выжить в «Игре в кальмара» — самом беспощадном шоу на выживание! 🦑


🎯 Пройти тест
👍5😁3👾1
🛠 Кастомный middleware в .NET Core: Расширяем функциональность приложения

Middleware — это ключевая часть обработки запросов в .NET Core. Создание своего middleware позволяет разработчикам адаптировать поведение приложения под конкретные задачи, такие как логирование, обработка ошибок или проверка безопасности.

🤔 Что такое middleware?

Middleware — это программные компоненты, которые обрабатывают запросы и ответы на пути их прохождения через HTTP-пайплайн. Каждый компонент может:
Обрабатывать входящий запрос.
Модифицировать ответ перед отправкой клиенту.
Выполнять промежуточные задачи, например логирование или валидацию.

📌 Когда нужно создавать собственный middleware?
Обработка ошибок: например, возвращать структурированные JSON-ответы вместо стандартных сообщений.
Логирование: отслеживать запросы, ответы или время выполнения.
Кросс-функциональные задачи: например, добавление заголовков или проверки безопасности.
Оптимизация производительности: внедрение кэширования или минимизации нагрузки.

📎 Захотели сделать свой middleware? Статья вам поможет в этом!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🥱3
🔢 Проверка чисел Армстронга в C#: разные подходы и решения

Число Армстронга — это число, равное сумме своих цифр, возведенных в степень, равную количеству цифр. Например, 153 — это число Армстронга, потому что
(1 в степени 3) + (5 в степени 3) + (3 в степени 3) = 153.

💡 Числа Армстронга — отличный пример для изучения работы с алгоритмами, циклами и математическими операциями в C#. Это полезно для новичков, которые хотят углубиться в программирование, и для практического изучения таких технологий, как LINQ.

📌 Основные методы:

1️⃣Цикл while:
Базовый подход, который итерирует по каждой цифре числа и суммирует ее степень.
int number = 153; // Пример
int result = 0, temp = number, digits = number.ToString().Length;

while (temp > 0) {
int remainder = temp % 10;
result += (int)Math.Pow(remainder, digits);
temp /= 10;
}
Console.WriteLine(result == number ? "Число Армстронга" : "Не число Армстронга");


2️⃣Рекурсия:
Используется для разбиения задачи на более мелкие части.
static int SumOfPowers(int number, int digits) {
if (number == 0) return 0;
int digit = number % 10;
return (int)Math.Pow(digit, digits) + SumOfPowers(number / 10, digits);
}


3️⃣LINQ:
Компактный и читабельный способ проверки.
int number = 153;
int digits = number.ToString().Length;

bool isArmstrong = number.ToString()
.Select(c => (int)Math.Pow(char.GetNumericValue(c), digits))
.Sum() == number;

Console.WriteLine(isArmstrong ? "Число Армстронга" : "Не число Армстронга");
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🤩1🥱1
📎🎯 Создание современной документации API в ASP.NET Core с Scalar

Документация API — важная часть любого проекта. В статье рассказывается, как использовать Scalar для создания удобной и стильной документации для ASP.NET Core API.

Что такое Scalar?
Scalar — это альтернатива стандартному Swagger UI, предлагающая современный дизайн, улучшенную навигацию и поддержку аутентификации.

Как интегрировать Scalar?
⚙️ Установить пакет:
Через NuGet добавить Scalar.AspNetCore в проект.

⚙️ Настроить Scalar:
В Program.cs добавить маршрут для Scalar.
Настроить отображение документации с параметрами: заголовок, тема и т. д.

⚙️ Добавить безопасность:
Указать схему Bearer-токенов для аутентификации.
Настроить требования безопасности в AddSwaggerGen.

⚙️ Обновить стартовую страницу:
В LaunchSettings.json задать scalar/v1 в качестве стартового URL.

📎 За подробностями загляните в статью!
👍15
✈️ Локальный запуск LLMs в .NET с Ollama и Semantic Kernel

Большие языковые модели (LLMs) чаще всего ассоциируются с облачными решениями, такими как OpenAI или Azure. Но что, если вам нужно запустить модель локально? Это может быть полезно для обеспечения конфиденциальности данных, экономии средств или работы в офлайн-среде. Именно здесь на помощь приходят Ollama и Semantic Kernel. Давайте разберём, как это работает.

🦙 Что такое Ollama?
Ollama — это инструмент, позволяющий запускать большие языковые модели локально, на вашем компьютере. Он минимизирует зависимость от облачных сервисов, обеспечивает защиту данных и позволяет вам полностью контролировать вычислительные ресурсы.

Что такое Semantic Kernel?
Semantic Kernel — это SDK от Microsoft, созданное для интеграции возможностей ИИ в приложения на .NET. Оно поддерживает работу с различными провайдерами LLMs, включая локальные серверы, такие как Ollama.

Как всё это работает?
Установка Ollama: вы начинаете с установки Ollama на свою систему. Он предоставляет простой способ загрузки и запуска LLMs.
Загрузка модели: после установки вы можете выбрать и загрузить модель, например llama2, с помощью команды в Ollama.
Настройка Semantic Kernel: semantic Kernel подключается к Ollama как к локальному серверу. Вы используете его для отправки запросов к модели и получения ответов.
Интеграция в .NET-приложение: cоздаёте проект в .NET 8 или 9, добавляете Semantic Kernel через NuGet и настраиваете взаимодействие с Ollama.

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

🤩 За подробностями в статью!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥4
Реализация службы на основе времени в .NET 8 с использованием IHostedService

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

Что делает IHostedService?
IHostedService используется для создания служб, которые запускаются при старте приложения и завершаются при его остановке. Он предоставляет два метода:
1️⃣ StartAsync: выполняется, когда приложение запускается. Здесь вы определяете, что должно делать ваша служба.
2️⃣ StopAsync: вызывается перед завершением работы приложения. Здесь можно остановить фоновые задачи и освободить ресурсы.

Как работает служба на основе времени?
Основная идея — это выполнение определённой задачи через регулярные промежутки времени, например:
Отправка данных на сервер.
Очистка временных файлов.
Обновление данных кэша.

Для реализации этого обычно используется таймер. Таймер запускается в методе StartAsync и выполняет задачу через указанные интервалы времени. Когда приложение останавливается, таймер отключается в методе StopAsync, чтобы избежать утечек памяти или нежелательной активности.

Где найти пример?
Для более подробной реализации с кодом и пошаговыми инструкциями рекомендуем ознакомиться со статьёй.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🥱3🔥2
💻 Эффективное проектирование программных систем

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

Наш интенсив «Архитектуры и шаблоны проектирования» научит вас строить программные системы без боли и стресса. Вы на практике освоите основные паттерны проектирования и прокачайте свои навыки архитектора программного обеспечения.

🎄Начните свой 2025 со скидкой 35% на все курсы. Это лучшее вложении уходящего года – https://proglib.io/w/cc21e069
👍2😁21🥰1
📘 SkunkHTML: Генератор статичных сайтов

SkunkHTML — это инструмент, который позволяет легко и быстро создавать статичные веб-сайты из файлов Markdown, автоматизируя процесс генерации и развертывания. Он разработан на F#, что делает его не только функциональным, но и интересным примером использования этого языка.

🛠️ Как это работает?
1. Форкните репозиторий: SkunkHTML на GitHub.
2. Добавьте контент: создайте свои файлы Markdown в соответствующей папке.
3. Настройте GitHub Pages: включите автоматическое развертывание через GitHub Actions.
4. Наслаждайтесь готовым сайтом!

📎 Попробуйте сами!

#новость
🤔3🎉2👍1
☁️ Размышления про абстракции

Недавняя статья поднимает важную тему — не каждая абстракция в программировании приносит пользу. Автор критикует «ложные абстракции» — те, что лишь добавляют уровни сложности, не скрывая внутреннюю сложность системы.

Основные мысли:
💭 Хорошая абстракция упрощает работу, скрывая сложные детали;
💭 Плохая абстракция лишь увеличивает количество слоев и усложняет понимание системы;
💭 Абстракции стоят дорого: они могут снижать производительность и усложнять сопровождение;
💭 Со временем даже хорошие абстракции могут начать «протекать», требуя знания внутренних механизмов.

Прежде чем добавлять новый уровень, задайте себе вопрос: действительно ли это абстракция или просто очередной слой косвенности? Хорошая абстракция должна приносить реальную ценность, а не просто усложнять код.
👍7🤔3
🔗 Что такое паттерн «Цепочка»?

В основе паттерна «цепочка» лежит идея последовательной обработки запроса через несколько микросервисов. Клиент делает запрос, который обрабатывается первым сервисом (A). Этот сервис передает результат следующему (B), затем — следующему (C) и так далее, пока не будет получен финальный результат, возвращаемый клиенту.

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

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

Недостатки паттерна
Высокие задержки: каждый вызов в цепочке требует времени, а синхронное взаимодействие увеличивает общее время отклика для клиента.
Уязвимость к сбоям: Если один из сервисов выйдет из строя, вся цепочка перестанет работать, что может нарушить работу приложения.
Сложности мониторинга: С ростом длины цепочки становится сложнее отслеживать метрики производительности и отладку.

Когда использовать паттерн «Цепочка»?
Необходимо последовательное выполнение задач (например, обработка платежей или подготовка данных для аналитики).
Задачи строго зависят друг от друга.
Длина цепочки невелика, а задержки допустимы.
Если же время отклика критично или система должна быть устойчива к сбоям, стоит рассмотреть альтернативы, такие как асинхронное взаимодействие или паттерн оркестрации.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6😁51
🎨 Новый канал для вдохновения — UX in GIF

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

📌 Чем полезен канал?

→ Идеи для дизайна интерфейсов.
→ Анимации, которые можно повторить или адаптировать.
→ Лёгкий способ искать вдохновение перед новым проектом.

👉 Подписывайтесь и вдохновляйтесь: UX in GIF
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 Testcontainers в .NET с PostgreSQL и pgvector

💡 Мы нашли статью о том, как использовать Testcontainers в .NET для работы с PostgreSQL и расширением pgvector. Если вы хотите сделать тестирование интеграции удобнее и мощнее, то это именно то, что вам нужно!

📌 Что такое Testcontainers?
Это библиотека, которая позволяет запускать Docker-контейнеры прямо из тестов, создавая временные окружения для тестирования. Это упрощает интеграционное тестирование, минимизируя необходимость ручной настройки баз данных, брокеров сообщений и других сервисов.

📌 Что такое pgvector?
pgvector — это расширение PostgreSQL, добавляющее поддержку работы с векторными данными. Это крайне полезно для приложений, которые используют эмбеддинги (например, из OpenAI или Hugging Face) для поиска, машинного обучения или рекомендательных систем.

📌 О чём статья?
Как настроить Testcontainers для работы с PostgreSQL в .NET.
Как подключить расширение pgvector в тестовой базе данных.
Пошаговое руководство по созданию контейнера с PostgreSQL, выполнению миграций и настройке данных для тестов.
Примеры использования pgvector для хранения и поиска векторных данных.

Автор показывает, как использовать Testcontainers для запуска PostgreSQL с уже установленным pgvector. Это позволяет тестировать функции работы с векторами (например, поиск ближайших соседей) без необходимости настраивать базу данных вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍52
💻📈 Итоги года Proglib: 2024 год в цифрах и достижениях

Как оставаться в курсе самых актуальных тенденций, не теряя времени на поиск информации? Итоги года Proglib покажут, как платформа объединила разработчиков, помогая им оставаться впереди.

Загляните в цифры, достижения и материалы, которые сделали этот год ярким!
6👍5🥰1
🌍✈️ 6 идей, как ускорить поиск работы за рубежом

Статья для тех, кто устал от отказов и безрезультатных поисков. Узнайте секреты, которые помогут вам найти работу за рубежом в разы быстрее!

👉 Читать статью
👍1🌚1
👋 Привет, мир: несколько креативных способов написать классический код на C#

Иногда самые простые вещи могут быть невероятно увлекательными. В этой статье автор собрал разнообразные способы написать легендарное 'Hello, World!' на C#. Это не просто базовые примеры, а настоящая коллекция техник и подходов, которая понравится как новичкам, так и опытным разработчикам.

📎 Узнайте, как добавить немного креатива даже в такие тривиальные задачи!
😁13👏3🥱3👍2🌚1
Бесплатный курс по фулстек-разработке — реальность 🔥

Под Новый год Дед Мороз приносит подарки, а наши подписчики — собственные курсы! Сергей Дмитриев, который занимается коммерческой разработкой уже 15 лет, поделился с нами своим обучением по созданию веб-сервиса с нуля. В курс входит 141 урок, 28 часов видео, исходный код и чат поддержки для участников.

Подробнее о курсе читайте на Хабре или в телеграм-канале Сергея
С наступающим, С# сообщество! Или уже наступившим!🎆🎆

Уже придумали чем заняться в новом году? 😉
Если нет, то предлагаем вам подборку фильмов и сериалов к просмотру:

🔠 Остановись и гори (2014)
🅰️ The IT Crowd (2006-2013)
🔠 Revolution OS (2001)
©️ Разрабы (2020)
🔠 Игра в имитацию (2014)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👏3