Курс по изучений передовых концепций программирования на языке
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
Это позволяет создать массив фиксированного размера в виде структуры.
Он обеспечивает производительность, аналогичные небезопасному буферу фиксированного размера.
Эта функция используется разработчиками выполнения для повышения производительности.
Please open Telegram to view this post
VIEW IN TELEGRAM
Нужно создать нтерфейс `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#.
- Семафор
- 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
Компания
Веб-серверы:
- Используется всего 9 локальных веб-серверов IIS.
- Каждый сервер имеет 64 ГБ оперативной памяти и работает на высокооптимизированном коде
- Обработка 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
Компания
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