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
Sqids - это библиотека, которая генерирует уникальные идентификаторы на основе чисел, похожих на те, что используются в YouTube.

Эти идентификаторы могут быть декодированы обратно в исходные числа.

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

совместима с несколькими языками .NET и поддерживает все типы целых чисел в .NET.

📌GitHub
📌Сайт

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
📌 Встроенная поддержка контейнеров для .NET 7 — контейнеризация приложений .NET без Dockerfile

Основная идея
Каков общий рабочий процесс большинства программных приложений, особенно микросервисов?

Код → отправка в репозиторий → запуск конвейера непрерывной интеграции и непрерывного развертывания. Часть этого конвейера — этап сборки Docker, на котором из длинного Dockerfile обычно считываются данные и генерируются образы Docker для приложения. → И, наконец, развертывание образа в службе облачных вычислений.

Теперь не нужно сопровождать Dockerfile: образ генерируется самим фреймворком .NET и отправляется в выбранный репозиторий.

Далее мы узнаем, как собираются образы Docker при помощи инструментария интерфейса командной строки .NET, изучим предоставляемые им варианты, сравним с подходом Dockerfile и интегрируем в рабочий процесс Github Actions, продемонстрировав полезность этого для ваших проектов.

Сначала быстро рассмотрим контейнеризацию приложения .NET 6 с Dockerfile.

Создадим два простых приложения: dotnet6 и dotnet7. Поместим их код в папки одного репозитория. А в конце покажем, как это интегрировать с конвейером сборки и отправляемым, например, на DockerHub образом, и прямо в GitHub напишем простой рабочий процесс GitHub Actions.

Устанавливаем оба SDK-пакета и Docker Desktop:

Первый.
Второй.
Docker Desktop.

Создаем на GitHub репозиторий, клонируем его на компьютер для локальной разработки, при помощи Visual Code открываем папку репозитория и добавляем здесь папку dotnet6.

Вот исходный код этой реализации.

Контейнеризация приложений .NET 6 — вкратце
В папке dotnet6 создаем простой веб-API проект HelloDocker на .NET 6, запуская команду dotnet интерфейса командной строки:
dotnet new webapi --name HelloDocker --framework net6.0

Здесь указывается на TargetFramework, то есть целевой фреймворк net6.0.

ПРОПУСТИТЕ ЭТУ ЧАСТЬ, ЕСЛИ УЖЕ ХОРОШО ЗНАЕТЕ КОНТЕЙНЕРИЗАЦИЮ ПРИЛОЖЕНИЙ ДО ВЕРСИИ .NET 6 ВКЛЮЧИТЕЛЬНО.

Это очень простой веб-API, которым возвращаются стандартные данные о погоде, подобный любому другому новому веб-API проекту по умолчанию на ASP.NET Core. Чтобы его контейнеризировать, до версии .NET 7 в корневой каталог проекта добавляли Dockerfile.

Совет: создав любое приложение dotnet, сразу очистить файл «launchSettings.json» и удалить все конфигурации, связанные со службами информационного сервера интернета IIS.
{
"$schema": "https://json.schemastore.org/launchsettings.json",
"profiles": {
"HelloDocker": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": false,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:7290;https://localhost:5033",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}

Так API всегда запустится на безопасном порте 7290 и HTTP-порте 5033. Внимание: только для запуска приложения на компьютере разработчика, а не в контейнере Docker.

По умолчанию, когда контейнер Docker развертывается с образом .NET, приложение запускается в https://+:80.

Чтобы переопределить его на другой номер порта в контейнере Docker, устанавливаем эту переменную окружения:

📌 Читать

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 История C#

Отличная статья на сайте MS learn, в которой рассматривается эволюция #csharp от версии к версии.

Очень понравилось читать.

Рекомендую

📌 Читать

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 TriviaR

Многопользовательская игра с использованием SignalR и .NET 7

Github

@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🖥 Debugging Enhancements in .NET 8.

В статье рассказывается о новых функциях отладки в .NET 8.

Обсуждаются улучшения для классов HttpContext, WebApplication, MVC и Razor Pages, а также для gRPC и других инструментов. Теперь можно легко получить доступ к важной информации, используя атрибуты настройки отладки и пользовательские сводки, чтобы отладку

📌Читать

@csharp_ci
Please open Telegram to view this post
VIEW IN 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