C# (C Sharp) programming
18.7K subscribers
757 photos
38 videos
8 files
675 links
По всем вопросам- @haarrp

C# - обучающий канал Senior C# разработчика.

@ai_machinelearning_big_data - Machine learning

@itchannels_telegram - 🔥лучшие ит-каналы

@csharp_ci - C# академия

@pythonlbooks- книги📚

Реестр РКН: https://clck.ru/3Fk3kb
Download Telegram
🖥 Изучение расширенных концепций C#

Курс по изучений передовых концепций программирования на языке C#. Этот курс предназначен для повышения квалификации программистов, углубляясь в такие сложные аспекты, как делегаты, события, дженерики, задачи async/await, LINQ, а также .NET. С помощью подробных примеров кода и рекомендаций по применению лучших практик вы изучите шаблоны проектирования, действия пользователя, запросы, операторы, атрибуты C# и многое другое.

Видео
Code

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 EvilSln: Don't open .sln files

Использование различных вредоносных проектов с кодом для фишинговых атак - не новая концепция. В начале 2021 года APT-группа Lazarus использовала специфическую технику атаки в своей кампании, направленной на исследователей безопасности.

Они встраивали вредоносные команды событий в файлы проектов Visual Studio, что позволяло выполнять вредоносный код при компиляции проекта, о чем подробно рассказывается в статье: Новая кампания, направленная на исследователей безопасности.

Этот инцидент в очередной раз привлек внимание общественности к безопасности Visual Studio. Однако важно отметить, что Visual Studio - не единственный продукт, подверженный подобным рискам.

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

В этом репозитории представлена новая техника применения эксплойтов для проектов Visual Studio (по мнению Microsoft, она не является проблемой безопасности) и приведены примеры на C# ее применения.

Цель проекта - повысить осведомленность о потенциальных рисках и дать возможность программистам избежать взлома.

Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Почему в C# не следует возвращать коллекции null.

Существуют более эффективные решения.

К каким проблемам приводят нулевые коллекции
Обычно вы выполняете итерации по коллекции в цикле. Но если ваш метод возвращает нулевые коллекции, это может привести к потенциальным ошибкам.

Ваш код должен обрабатывать нулевой случай и проверять наличие null перед обращением к элементам коллекции.

Добавление проверки на null каждый раз может сделать код громоздким и более трудным для понимания.

Еще хуже, если вызывающий код не справляется с таким случаем.

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

Можно возразить, что нулевое значение выражает определенное намерение.

Но я все же предпочитаю по возможности избегать null в своем коде.

Я считаю, что лучше всего возвращать:

- List()
- Enumerable.Empty
- Array.Empty


Таким образом, ваш код может спокойно выполнять итерации по коллекции, не заботясь о проверке на null.
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🖥 SplatVFX

SplatVFX - это экспериментальная реализация трехмерного гауссова распыления для рендеринга в реальном времени с помощью Unity VFX Graph.

Github
Playground in Unity

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
📒 GigaChat нового поколения.

Разработчики @gigachat_bot изменили подход к обучению модели, а потому практически все умения модели были улучшены. В частности, речь идет о сокращении текстов, ответов на вопросы и генерации идей.

Появился и бот GigaChat в социальной сети «ВКонтакте» — после активации, его можно использовать для самых разных целей: от создания текстов до генерации изображений (за счет интеграции с Kandinsky).

Число уникальных пользователей GigaChat достигло 1 млн.

Попробовать

@data_analysis_ml
🖥 Whisker

Whisker - это инструмент на языке C# для захвата учетных записей пользователей и компьютеров Active Directory путем манипулирования их атрибутом msDS-KeyCredentialLink, эффективно добавляя "теневые учетные данные" к целевой учетной записи.

Для успешного проведения этой атаки в среде должен быть контроллер домена под управлением как минимум Windows Server 2016, а контроллер домена должен иметь сертификат аутентификации сервера, позволяющий проводить аутентификацию PKINIT Kerberos.

⚠️ Disclaimer: Все содержимое данного проекта предназначено только для целей исследования безопасности.

📌 Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Пятничный С# квиз
#ПятничныйКвиз

@csharp_ci
В каком блоке содержится ошибка преобразования типов
Anonymous Quiz
12%
#1
60%
#2
28%
#3
🖥 Как визуализировать архитектуру программного обеспечения?

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

Но вы можете использовать модель C4 для стандартизации своих диаграмм.

Это простой и эффективных подход к описанию архитектуры программного обеспечения.

https://www.milanjovanovic.tech/blog/visualize-your-software-architecture-with-the-c4-model

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Как применить 𝗖𝗤𝗥𝗦 𝗽𝗮𝘁𝘁𝗲𝗿𝗻 в своей системе?

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

Вот мой подход к его реализации.

Я предпочитаю использовать MediatR - но эта идея прекрасно работает и без него.

MediatR реализует паттерн посредника. Он отделяет внутрипроцессную отправку сообщений от их обработки.

Я расширяю интерфейс MediatR IRequest пользовательской абстракцией ICommand и IQuery.

Это позволяет мне явно определять команды и запросы в системе.

На стороне записи:

- Отправка команды из API с помощью MediatR.
- Богатая доменная модель инкапсулирует бизнес-логику
- EF Core загружает доменные сущности
- Выполнение бизнес-логики
- Сохранить изменения

На стороне чтения:

- Отправка запроса из API с помощью MediatR
- Как можно меньше непрямых связей
- Dapper с необработанными SQL-запросами
- SQL представления и запросы к ним
- EF Core запросы с проекциями

Такое логическое разделение решает специфические требования к чтению и записи.

При обновлении данных мы хотим реализовать сложную бизнес-логику и валидацию.

При чтении данных мы хотим получить результат как можно быстрее.

Это стандарт в моих проектах.

Но вы можете адаптировать этот паттерн по своему вкусу.

📌 Почитать подробнее: https://www.milanjovanovic.tech/blog/cqrs-pattern-with-mediatr

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🎓 Применение улучшенной библиотеки локализации в приложениях .NET

В этой статье подробно рассказывается о том, как использовать библиотеку Localize-ME для добавления локализации в приложение .NET.

https://www.thereformedprogrammer.net/applying-an-improved-multiple-languages-library-to-net-applications/

@csharp_ci
🖥 В C# 12 представлены встроенные массивы InlineArray.

Это позволяет создать массив фиксированного размера в виде структуры.

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

Эта функция используется разработчиками выполнения для повышения производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Мне нравится использовать паттерн фабрика к определению middleware ASP .NET.

Нужно создать нтерфейс `IMiddleware`, который предоставляет единственный метод.

Пример на картинке.

Существует еще 2 способа создания middleware в .NET.

- Делегаты запросов
- Основанные на соглашениях


Вот как их можно использовать:
https://www.milanjovanovic.tech/blog/3-ways-to-create-middleware-in-asp-net-core

@csharp_1001_notes
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 C# поддерживает блокировку с помощью оператора `lock`.

С его помощью можно определить блок кода, доступ к которому будет иметь только один поток.

Однако в асинхронном контексте он не работает.

Поэтому придется использовать какой-либо другой примитив параллелизма C#.

- Семафор
- SemaphoreSlim
- Монитор
- Мьютекс

Никогда не знаешь, когда понадобится использовать блокировку в C#.

Вот как инструкция с примерами: https://www.milanjovanovic.tech/blog/introduction-to-locking-and-concurrency-control-in-dotnet-6

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ Впечатляющая монолитная архитектура Stack Overflow

Компания Stack Overflow, поддерживает тенденцию развития микросервисов их сервис обрабатывает 1,3 млрд. просмотров страниц в месяц на своих 200 сайтах, используя удивительно эффективную монолитную архитектуру с минимальной инфраструктурой.

Веб-серверы:

- Используется всего 9 локальных веб-серверов IIS.
- Каждый сервер имеет 64 ГБ оперативной памяти и работает на высокооптимизированном коде .NET
- Обработка 450 пиковых запросов в секунду на каждом сервере при использовании всего 12% процессорной мощности
- Код минимизирует потребление памяти и настроен на ограничения сбора мусора

Серверы SQL:

- Организованы в 2 отказоустойчивых кластера по 2 сервера в каждом
- Первый кластер: 1,5 ТБ оперативной памяти на сервер
- Второй кластер: 768 ГБ оперативной памяти на сервер
- Около трети массива данных Q&A находится в памяти.
- Каждый кластер обрабатывает более 10 000 пиковых запросов в секунду при ~15% CPU

Redis:

- Один основной сервер с репликой на 256 ГБ.
- Обработка 60000 пиковых операций в секунду при 2% CPU

Stack Overflow эффективно масштабирует монолитное приложение.

📌 Архитектура наглядно
📌 Подкаст об архитектуре Stack Overflow

@csharp_ci