🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Microsoft предлагает БЕСПЛАТНЫЕ онлайн курсы с сертификацией
— Unity: 8 ошибок при использовании Async
— Работа с Gradient через jobs + burst
— Using Memory<T> and Unsafe Code for Memory Manipulation
— Using yield for Deferred Execution
— SIMD aggregate performance
— The Beauty of the Pull Request
— 🎬 Video - Hello World! tutorial on CodeBehind framework
— Plugin Architecture In Blazor – A How To Guide
— Dark Mode With Blazor and Tailwind Css
— Pocket Kotlin-C# Dictionary
— Game Dev Digest — Issue #205 - Back To Work
— Pocket Kotlin-C# Dictionary
Посмотреть:
🌐 Introduction to DateTime in C#: Master the Basics!(⏱ 23:39)
🌐 Do This at the end of Any C Sharp .NET Project! (⏱ 00:38)
🌐 Stop Using Automapper in .NET! (⏱ 09:57)
🌐 The New Way of Calling Your Code in .NET 8 Is INSANE (⏱ 12:34)
Хорошего дня!
@csharp_ci
Почитать:
— Microsoft предлагает БЕСПЛАТНЫЕ онлайн курсы с сертификацией
— Unity: 8 ошибок при использовании Async
— Работа с Gradient через jobs + burst
— Using Memory<T> and Unsafe Code for Memory Manipulation
— Using yield for Deferred Execution
— SIMD aggregate performance
— The Beauty of the Pull Request
— 🎬 Video - Hello World! tutorial on CodeBehind framework
— Plugin Architecture In Blazor – A How To Guide
— Dark Mode With Blazor and Tailwind Css
— Pocket Kotlin-C# Dictionary
— Game Dev Digest — Issue #205 - Back To Work
— Pocket Kotlin-C# Dictionary
Посмотреть:
🌐 Introduction to DateTime in C#: Master the Basics!(⏱ 23:39)
🌐 Do This at the end of Any C Sharp .NET Project! (⏱ 00:38)
🌐 Stop Using Automapper in .NET! (⏱ 09:57)
🌐 The New Way of Calling Your Code in .NET 8 Is INSANE (⏱ 12:34)
Хорошего дня!
@csharp_ci
Sqids - это библиотека, которая генерирует уникальные идентификаторы на основе чисел, похожих на те, что используются в YouTube.
Эти идентификаторы могут быть декодированы обратно в исходные числа.
Sqids предоставляет возможность объединять несколько чисел в одну строку, фильтровать ненормативную лексику, генерировать случайный вывод и обеспечивать высокую производительность. О
➕ совместима с несколькими языками .NET и поддерживает все типы целых чисел в .NET.
📌GitHub
📌Сайт
@csharp_ci
Эти идентификаторы могут быть декодированы обратно в исходные числа.
Sqids предоставляет возможность объединять несколько чисел в одну строку, фильтровать ненормативную лексику, генерировать случайный вывод и обеспечивать высокую производительность. О
📌GitHub
📌Сайт
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Основная идея
Каков общий рабочий процесс большинства программных приложений, особенно микросервисов?
Код → отправка в репозиторий → запуск конвейера непрерывной интеграции и непрерывного развертывания. Часть этого конвейера — этап сборки Docker, на котором из длинного Dockerfile обычно считываются данные и генерируются образы Docker для приложения. → И, наконец, развертывание образа в службе облачных вычислений.
Теперь не нужно сопровождать Dockerfile: образ генерируется самим фреймворком .NET и отправляется в выбранный репозиторий.
Далее мы узнаем, как собираются образы Docker при помощи инструментария интерфейса командной строки .NET, изучим предоставляемые им варианты, сравним с подходом Dockerfile и интегрируем в рабочий процесс Github Actions, продемонстрировав полезность этого для ваших проектов.
Сначала быстро рассмотрим контейнеризацию приложения .NET 6 с Dockerfile.
Создадим два простых приложения: dotnet6 и dotnet7. Поместим их код в папки одного репозитория. А в конце покажем, как это интегрировать с конвейером сборки и отправляемым, например, на DockerHub образом, и прямо в GitHub напишем простой рабочий процесс GitHub Actions.
Устанавливаем оба SDK-пакета и 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
Отличная статья на сайте MS learn, в которой рассматривается эволюция #csharp от версии к версии.
Очень понравилось читать.
Рекомендую
📌 Читать
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— Принципы ООП в примерах для начинающих
— Наиболее известные улучшения отладки в популярных библиотеках и API .NET:
— 15 лучших бесплатных курсов по Linux
— Передача и обработка IAsyncEnumerable в Typescript с ASP.NET Core Web
— Godot — это не новая Unity. Анатомия вызова API в Godot
— «Ушами Саунд-Дизайнера | Проект 01» — Unity 2D Game Kit + FMOD
— Encapsulamento: O básico que todo jr. precisa saber
— From Converters to Dependency Injection: Navigating Model Migrations
— Game Dev Digest — Issue #206 - Let's Make More Games
— How to upload an Email using the Microsoft Graph API into the Inbox
— How to Redact PDF Documents in .NET using the PDF Library
— 5 ASP.NET Mistakes I Wish I Knew Earlier 🚀
— Pocket Kotlin-C# Dictionary. G
— Pocket Kotlin-C# Dictionary. F
— Custom Event Accessors with Delegates
— Pocket Kotlin-C# Dictionary. E
Посмотреть:
🌐 The Best Feature That Is Not Coming to .NET Anymore (⏱ 07:50)
🌐 How C# 12 Changes Your .NET Classes Forever (⏱ 09:05)
🌐 "One Line of Code Means Clean Code!" - Code Cop #002 (⏱ 09:16)
Хорошего дня!
@csharp_ci
Почитать:
— Принципы ООП в примерах для начинающих
— Наиболее известные улучшения отладки в популярных библиотеках и API .NET:
— 15 лучших бесплатных курсов по Linux
— Передача и обработка IAsyncEnumerable в Typescript с ASP.NET Core Web
— Godot — это не новая Unity. Анатомия вызова API в Godot
— «Ушами Саунд-Дизайнера | Проект 01» — Unity 2D Game Kit + FMOD
— Encapsulamento: O básico que todo jr. precisa saber
— From Converters to Dependency Injection: Navigating Model Migrations
— Game Dev Digest — Issue #206 - Let's Make More Games
— How to upload an Email using the Microsoft Graph API into the Inbox
— How to Redact PDF Documents in .NET using the PDF Library
— 5 ASP.NET Mistakes I Wish I Knew Earlier 🚀
— Pocket Kotlin-C# Dictionary. G
— Pocket Kotlin-C# Dictionary. F
— Custom Event Accessors with Delegates
— Pocket Kotlin-C# Dictionary. E
Посмотреть:
🌐 The Best Feature That Is Not Coming to .NET Anymore (⏱ 07:50)
🌐 How C# 12 Changes Your .NET Classes Forever (⏱ 09:05)
🌐 "One Line of Code Means Clean Code!" - Code Cop #002 (⏱ 09:16)
Хорошего дня!
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— «Чистый» код, нет проблем с производительностью. (плюс анекдот)
— Модульные механики на Unity
— Contributing to More Open-Source Repos
— Game Dev Digest — Issue #207 - Improving Fun, Performance And More
— Building a Basic RESTful API with ASP.NET Core
— LiteDB: Um banco de dados NoSQL simples e poderoso para dotnet!
— Blazor RenderFragment – How To Use Plugins To Generate HTML
— Simplify Unit Tests by Storing Complex Data in Resource Files
— Converting Excel XLSX to PDF with C# .NET
— How I Keep My Animator Controllers Organized
— OPTIONS PATTERN IN .NET 6
— C# - Parallel Programming with async and await for Concurrent Execution
Посмотреть:
🌐 Why Do Older .NET Developers Hate Modern .NET? (⏱ 10:14)
🌐 The Common Entity Framework Mistake You MUST Fix (⏱ 10:03)
Хорошего дня!
Почитать:
— «Чистый» код, нет проблем с производительностью. (плюс анекдот)
— Модульные механики на Unity
— Contributing to More Open-Source Repos
— Game Dev Digest — Issue #207 - Improving Fun, Performance And More
— Building a Basic RESTful API with ASP.NET Core
— LiteDB: Um banco de dados NoSQL simples e poderoso para dotnet!
— Blazor RenderFragment – How To Use Plugins To Generate HTML
— Simplify Unit Tests by Storing Complex Data in Resource Files
— Converting Excel XLSX to PDF with C# .NET
— How I Keep My Animator Controllers Organized
— OPTIONS PATTERN IN .NET 6
— C# - Parallel Programming with async and await for Concurrent Execution
Посмотреть:
🌐 Why Do Older .NET Developers Hate Modern .NET? (⏱ 10:14)
🌐 The Common Entity Framework Mistake You MUST Fix (⏱ 10:03)
Хорошего дня!
В статье рассказывается о новых функциях отладки в .NET 8.
Обсуждаются улучшения для классов HttpContext, WebApplication, MVC и Razor Pages, а также для gRPC и других инструментов. Теперь можно легко получить доступ к важной информации, используя атрибуты настройки отладки и пользовательские сводки, чтобы отладку
📌Читать
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Курс по изучений передовых концепций программирования на языке
C#.
Этот курс предназначен для повышения квалификации программистов, углубляясь в такие сложные аспекты, как делегаты, события, дженерики, задачи async/await, LINQ
, а также .NET.
С помощью подробных примеров кода и рекомендаций по применению лучших практик вы изучите шаблоны проектирования, действия пользователя, запросы, операторы, атрибуты C# и многое другое.• Видео
• Code
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— ГЕОМЕТРИЯ ЗВУКА
— Обзор библиотек для Hangfire
— Нодовая архитектура на Unity
— Пять забавных странностей в коде Entity Framework Core
— Особенности национальной автоматизации
— Многопоточность в Photon Plugin
— Working With the Path Static Class in C#
— Unity game architecture Part 2
— Game Dev Digest — Issue #208 - Publishing Your Game, And More
— WPF App Modernisation: A Pragmatic Approach
— 5 amusing oddities in the code of Entity Framework Core
— How to Scan Barcode in C# (Developer Tutorial)
— Interface Proxy
— How to Make Sure Your Test Resources Are Always Available
— Lessons learned from building a static code analyzer for C#
— .NET Core Interview Question & Answers
Посмотреть:
🌐 Understand the .NET Support Lifecycle (⏱ 00:57)
🌐 "Don't Use Fields in C#! Use Properties Instead" | Code Cop #003 (⏱ 10:27)
🌐 The Testing Technique Everyone Should Use in .NET (⏱ 09:56)
🌐 Chatgpt, Bard , Claude, Theb - используй API лучших нейросетей бесплатно и без ВПН(⏱ 05:23)
Хорошего дня!
@csharp_ci
Почитать:
— ГЕОМЕТРИЯ ЗВУКА
— Обзор библиотек для Hangfire
— Нодовая архитектура на Unity
— Пять забавных странностей в коде Entity Framework Core
— Особенности национальной автоматизации
— Многопоточность в Photon Plugin
— Working With the Path Static Class in C#
— Unity game architecture Part 2
— Game Dev Digest — Issue #208 - Publishing Your Game, And More
— WPF App Modernisation: A Pragmatic Approach
— 5 amusing oddities in the code of Entity Framework Core
— How to Scan Barcode in C# (Developer Tutorial)
— Interface Proxy
— How to Make Sure Your Test Resources Are Always Available
— Lessons learned from building a static code analyzer for C#
— .NET Core Interview Question & Answers
Посмотреть:
🌐 Understand the .NET Support Lifecycle (⏱ 00:57)
🌐 "Don't Use Fields in C#! Use Properties Instead" | Code Cop #003 (⏱ 10:27)
🌐 The Testing Technique Everyone Should Use in .NET (⏱ 09:56)
🌐 Chatgpt, Bard , Claude, Theb - используй API лучших нейросетей бесплатно и без ВПН(⏱ 05:23)
Хорошего дня!
@csharp_ci
Использование различных вредоносных проектов с кодом для
фишинговых атак
- не новая концепция. В начале 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
Существуют более эффективные решения.
К каким проблемам приводят нулевые коллекции
Обычно вы выполняете итерации по коллекции в цикле. Но если ваш метод возвращает нулевые коллекции, это может привести к потенциальным ошибкам.
Ваш код должен обрабатывать нулевой случай и проверять наличие
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 - это экспериментальная реализация трехмерного гауссова распыления для рендеринга в реальном времени с помощью Unity VFX Graph.
• Github
• Playground in Unity
@csharp_ci
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Анализ данных (Data analysis)
📒 GigaChat нового поколения.
Разработчики @gigachat_bot изменили подход к обучению модели, а потому практически все умения модели были улучшены. В частности, речь идет о сокращении текстов, ответов на вопросы и генерации идей.
Появился и бот GigaChat в социальной сети «ВКонтакте» — после активации, его можно использовать для самых разных целей: от создания текстов до генерации изображений (за счет интеграции с Kandinsky).
Число уникальных пользователей GigaChat достигло 1 млн.
• Попробовать
@data_analysis_ml
Разработчики @gigachat_bot изменили подход к обучению модели, а потому практически все умения модели были улучшены. В частности, речь идет о сокращении текстов, ответов на вопросы и генерации идей.
Появился и бот GigaChat в социальной сети «ВКонтакте» — после активации, его можно использовать для самых разных целей: от создания текстов до генерации изображений (за счет интеграции с Kandinsky).
Число уникальных пользователей GigaChat достигло 1 млн.
• Попробовать
@data_analysis_ml
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
Большинство диаграмм архитектуры программного обеспечения, которые я видел, представляют собой полный беспорядок.
Но вы можете использовать модель
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
В этой статье подробно рассказывается о том, как использовать библиотеку Localize-ME для добавления локализации в приложение .NET.
https://www.thereformedprogrammer.net/applying-an-improved-multiple-languages-library-to-net-applications/
@csharp_ci
🔥 Дайджест полезных материалов из мира C# за неделю
Почитать:
— CRC — это просто (деление столбиком)
— C#: Как создавать модульные тесты для проверки моделей
— Уязвимость XXE в .NET 6 SDK: с чем боролись…
— Архитектура unity проектов
— Мал, да удал. ASCADA. Простейшая система диспетчеризации (SCADA) для Arduino и других микроконтроллеров
— Programming Patterns for Games: Observer
— How To Call JavaScript From Blazor Web Assembly – Breaking Boundaries With JavaScript Interop
— C# - Dependency Injection and Inversion of Control (IoC) Containers
— Game Dev Digest — Issue #210 - Atmospheric, Shader Effects, My Game, and more
— Building a .NET RESTful Service with Dynamsoft's Document, Barcode, and MRZ SDKs
— Magical C# Classes
— Binary Search in C#
— How to Encrypt and Decrypt a Word Document Using the .NET Word Library
— How To Build A Personal Website In Blazor: An ASP.NET Core Tutorial
— Encapsulamento: O Básico que todo jr. precisa saber!
Посмотреть:
🌐 "Stop Using if else if else In Your Code!" | Code Cop #005 (⏱ 07:56)
🌐 "Stop Using Structured Logging in .NET!" | Code Cop #006 (⏱ 08:24)
🌐 .NET 8 & C# 12 Release In a Nutshell (⏱ 00:21)
Хорошего дня!
@csharp_ci
Почитать:
— CRC — это просто (деление столбиком)
— C#: Как создавать модульные тесты для проверки моделей
— Уязвимость XXE в .NET 6 SDK: с чем боролись…
— Архитектура unity проектов
— Мал, да удал. ASCADA. Простейшая система диспетчеризации (SCADA) для Arduino и других микроконтроллеров
— Programming Patterns for Games: Observer
— How To Call JavaScript From Blazor Web Assembly – Breaking Boundaries With JavaScript Interop
— C# - Dependency Injection and Inversion of Control (IoC) Containers
— Game Dev Digest — Issue #210 - Atmospheric, Shader Effects, My Game, and more
— Building a .NET RESTful Service with Dynamsoft's Document, Barcode, and MRZ SDKs
— Magical C# Classes
— Binary Search in C#
— How to Encrypt and Decrypt a Word Document Using the .NET Word Library
— How To Build A Personal Website In Blazor: An ASP.NET Core Tutorial
— Encapsulamento: O Básico que todo jr. precisa saber!
Посмотреть:
🌐 "Stop Using if else if else In Your Code!" | Code Cop #005 (⏱ 07:56)
🌐 "Stop Using Structured Logging in .NET!" | Code Cop #006 (⏱ 08:24)
🌐 .NET 8 & C# 12 Release In a Nutshell (⏱ 00:21)
Хорошего дня!
@csharp_ci